可視化程序設計|| 實驗三:C#面向對象編程(二)

一、實驗目的

1.加深理解面向對象編程的概念,如類、對象、實例化等。

2.熟練掌握類的封裝、繼承和多態機制。

3.掌握編程常用的幾種排序算法。

4.理解異常的產生過程和異常處理的概念,掌握C#異常處理的方法。

5.能夠將面向對象思想應用與編程實踐,開發出規模稍大的應用,如圖書管理、銀行卡存取款業務等。

二、實驗內容

【實驗3-2】銀行卡存取款業務。

實驗A:

假設某銀行共發出M張儲蓄卡,每張儲蓄卡擁有唯一的卡號,每天每張儲蓄卡至多支持持有者的N筆“存款”或“取款”業務。根據實際發生的業務,實時處理數據,以反映最新情況。

設儲蓄卡包含的數據域有:卡號,當前余額,允許當日發生的業務次數(定義成靜態變量,為所有Card類所共享),當日實際發生的業務數,以及一個數組記錄發生的具體業務。它提供的主要方法有store(),處理判斷是否超過當日允許發生的最大筆數,當前余額是否足以取款,以及實時修改當前數據等。

當持卡者輸入正確的卡號、存款或取款金額后,程序進行相應的處理;若輸入了不正確的數據,程序會提示持卡者重新輸入;若輸入的卡號為負數,銀行終止當日業務。

實驗B:

修改Card類,增加每日使用金額額度不超過5000的限制功能。

?再次修改Card類,要求對銀行卡進行操作前必須驗證用戶密碼,并且在輸入密碼時屏幕上用“*”顯示。為簡單起見,初始密碼設為123456。

三、實驗步驟

實驗A:

1.類:Card,屬性:cardNo: long,balance: decimal,currentNum: int, number: static int,currentMoney: decimal[]

2.方法: Card(): 構造函數,初始化currentMoney數組;Card(long No, decimal Balance): 構造函數,初始化cardNo、balance和currentMoney數組;store(decimal Money, out int status): 存款或取款方法,更新balance和currentMoney數組,設置status狀態;show(): 顯示卡號、余額和存款/取款情況

3.靜態屬性:Number: 設置number值

4.屬性: CardNo: 獲取卡號

在EXP3步驟:

Main方法:

  1. 輸入當日存款或取款總次數和儲蓄卡總數
  2. 創建Card對象數組person
  3. 循環輸入每張卡的卡號和余額
  4. 創建Card對象并添加到person數組中

5.進入業務處理循環

????1)輸入卡號

????2)如果卡號小于0,結束循環

????3)根據卡號定位到對應的Card對象

????4)輸入金額

????5)調用Card對象的store方法進行存款或取款,并獲取狀態status

????6)根據status打印相應的提示信息

????7)調用Card對象的show方法顯示卡號、余額和存款/取款情況

?Locate(Card[] person, long cardNo)方法: 根據卡號定位到對應的Card對象,返回索引值或-1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EXP3
{class Card{long cardNo;decimal balance;int currentNum;static int number;decimal[] currentMoney;public Card(){currentMoney = new decimal[number];}public Card(long No, decimal Balance){cardNo = No;balance = Balance;currentMoney = new decimal[number];}public void store(decimal Money, out int status){if (currentNum == number){status = 0;return;}if (balance + Money < 0){status = -1;return;}currentMoney[currentNum] = Money;balance += Money;currentNum++;status = 1;}public void show(){Console.WriteLine("卡號:{0},當前余額:{1},當日發生業務的次數:{2}", cardNo, balance, currentNum);for (int i = 0; i < currentNum; i++){Console.WriteLine("當前存款/取款的情況:{0}", currentMoney[i]);}}static public int Number{set{number = value;}}public long CardNo{get{return cardNo;}}}class EXP3{static void Main(string[] args){EXP3 E = new EXP3();Card[] person;int Num, status, k;long CardNo;decimal Balance, Money;Console.Write("請輸入允許當日存款或取款的總次數:");string sline = Console.ReadLine();Card.Number = int.Parse(sline);Console.Write("請輸入某銀行發出的儲蓄卡總數:");sline = Console.ReadLine();Num = int.Parse(sline);person = new Card[Num];for(int i = 0; i < Num; i++){Console.Write("請輸入卡號:");sline = Console.ReadLine();CardNo = long.Parse(sline);Console.Write("請輸入{0} 賬戶余額:", CardNo);sline = Console.ReadLine();Balance = decimal.Parse(sline);person[i] = new Card(CardNo, Balance);}while (true){Console.WriteLine("現在正在進行存款取款的業務處理,如果輸入的卡號<0,則結束業務處理");Console.Write("請輸入卡號:");sline = Console.ReadLine();CardNo = long.Parse(sline);if (CardNo < 0)break;k = E.Locate(person, CardNo);if (k == -1){Console.WriteLine("對不起,不存在{0}號的儲蓄卡", CardNo);continue;}Console.WriteLine("請輸入卡金額(正值代表存款,負值代表取款):");sline = Console.ReadLine();Money = decimal.Parse(sline);person[k].store(Money, out status);switch (status){case -1:Console.WriteLine("存款余額不足,不能完成本次的取款業務");break;case 0:Console.WriteLine("本卡已達到當日允許的業務次數");break;case 1:Console.WriteLine("成功處理完當前業務");person[k].show();break;}}}int Locate(Card[] person,long cardNo){for (int i = 0; i < person.Length; i++){if (person[i].CardNo == cardNo)return i;}return -1;}}
}

?實驗B:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EXP3
{class Card{long cardNo;decimal balance;int currentNum;static int number;decimal[] currentMoney;string password;public Card(){currentMoney = new decimal[number];password = "123456";}public Card(long No, decimal Balance){cardNo = No;balance = Balance;currentMoney = new decimal[number];password = "123456";}public void store(decimal Money, out int status){if (currentNum == number){status = 0;return;}if (balance + Money < 0){status = -1;return;}if (Money > 5000 || Money < -5000){status = -2;return;}currentMoney[currentNum] = Money;balance += Money;currentNum++;status = 1;}public void show(){Console.WriteLine("卡號:{0},當前余額:{1},當日發生業務的次數:{2}", cardNo, balance, currentNum);for (int i = 0; i < currentNum; i++){Console.WriteLine("當前存款/取款的情況:{0}", currentMoney[i]);}}static public int Number{set{number = value;}}public long CardNo{get{return cardNo;}}public bool VerifyPassword(string input){return password == input;}}class EXP3{static void Main(string[] args){EXP3 E = new EXP3();Card[] person;int Num, status, k;long CardNo;decimal Balance, Money;Console.Write("請輸入允許當日存款或取款的總次數:");string sline = Console.ReadLine();Card.Number = int.Parse(sline);Console.Write("請輸入某銀行發出的儲蓄卡總數:");sline = Console.ReadLine();Num = int.Parse(sline);person = new Card[Num];for (int i = 0; i < Num; i++){Console.Write("請輸入卡號:");sline = Console.ReadLine();CardNo = long.Parse(sline);Console.Write("請輸入{0} 賬戶余額:", CardNo);sline = Console.ReadLine();Balance = decimal.Parse(sline);person[i] = new Card(CardNo, Balance);}while (true){Console.WriteLine("現在正在進行存款取款的業務處理,如果輸入的卡號<0,則結束業務處理");Console.Write("請輸入卡號:");sline = Console.ReadLine();CardNo = long.Parse(sline);if (CardNo < 0)break;k = E.Locate(person, CardNo);if (k == -1){Console.WriteLine("對不起,不存在{0}號的儲蓄卡", CardNo);continue;}Console.WriteLine("請輸入密碼:");string password = ReadPassword();if (!person[k].VerifyPassword(password)){Console.WriteLine("密碼錯誤");continue;}Console.WriteLine("請輸入卡金額(正值代表存款,負值代表取款):");sline = Console.ReadLine();Money = decimal.Parse(sline);person[k].store(Money, out status);switch (status){case -1:Console.WriteLine("存款余額不足,不能完成本次的取款業務");break;case -2:Console.WriteLine("每日使用金額超過限制(5000),不能完成本次的存款或取款業務");break;case 0:Console.WriteLine("本卡已達到當日允許的業務次數");break;case 1:Console.WriteLine("成功處理完當前業務");person[k].show();break;}}}int Locate(Card[] person, long cardNo){for (int i = 0; i < person.Length; i++){if (person[i].CardNo == cardNo)return i;}return -1;}private static string ReadPassword(){string password = "";ConsoleKeyInfo keyInfo;do{keyInfo = Console.ReadKey(true);if (keyInfo.Key != ConsoleKey.Backspace && keyInfo.Key != ConsoleKey.Enter){password += keyInfo.KeyChar;Console.Write("*");}else{if (keyInfo.Key == ConsoleKey.Backspace && password.Length > 0){password = password.Substring(0, (password.Length - 1));Console.Write("\b \b");}}} while (keyInfo.Key != ConsoleKey.Enter);Console.WriteLine();return password;}}
}

四、實驗結果展示

實驗A:

實驗B:

?五、實驗小結

該實驗在程序開始時,用戶需要輸入允許當日存款或取款的總次數和某銀行發出的儲蓄卡總數然后,根據輸入的卡號和賬戶余額創建相應的儲蓄卡對象用戶可以進行存款或取款的業務處理。用戶輸入要操作的卡號,如果輸入的卡號小于0,則結束業務處理。程序會檢查輸入的卡號是否存在,并要求輸入密碼進行驗證。然后用戶輸入要存取的金額,程序會對金額進行合法性檢查,如余額是否充足、每日使用金額是否超過限制等。根據檢查結果,程序會輸出相應的提示信息,并更新儲蓄卡的余額和操作次數程序中還包括一個Locate方法,用于根據卡號在儲蓄卡數組中查找對應的儲蓄卡對象。從時間復雜度的角度來看,該程序的主要操作是在存取款業務處理循環中進行的。在每次循環中,需要進行卡號的查找、密碼驗證和金額合法性檢查等操作,操作的時間復雜度都是O(n),其中n為儲蓄卡數組的長度。因此,整個程序的時間復雜度為O(N*M),其中N為儲蓄卡總數,M為當日存款或取款的總次數。

通過實驗,將面向對象的思想應用于銀行卡存取款業務中。這種思想的應用可以使代碼更加模塊化、可擴展和易維護。在實際開發中,我可以學習將面向對象思想應用于開發規模稍大的應用,如圖書管理系統、銀行系統等。這樣的實際開發中,根據需求設計不同的類和對象,并通過封裝、繼承和多態來實現復雜的業務邏輯,提高開發效率和代碼質量。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80453.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32MPU開發之旅:從零開始構建嵌入式Linux鏡像

前言 在工業4.0與邊緣計算深度融合的今天&#xff0c;STM32MP257F作為意法半導體第二代工業級64位微處理器的旗艦產品&#xff0c;憑借異構計算架構、1.35 TOPS邊緣AI算力和軍工級安全特性&#xff0c;已成為工業自動化、機器視覺和新能源控制等領域的標桿方案。 性能躍遷的異…

大模型應用開發(PAFR)

Prompt問答 特征:利用大模型推理能力完成應用的核心功能 應用場景&#xff1a; 文本摘要分析 輿情分析 坐席檢查 AI對話 AgentFunction Calling 特征&#xff1a;將應用端業務能力與AI大模型推理能力結合&#xff0c;簡化復雜業務功能開發 應用場景: 旅行指南 數據…

SpringClound 微服務分布式Nacos學習筆記

一、基本概述 在實際項目中&#xff0c;選擇哪種架構需要根據具體的需求、團隊能力和技術棧等因素綜合考慮。 單體架構&#xff08;Monolithic Architecture&#xff09; 單體架構是一種傳統的軟件架構風格&#xff0c;將整個應用程序構建為一個單一的、不可分割的單元。在這…

WebRTC服務器Coturn服務器用戶管理和安全性

1、概述 Coturn服務器對用戶管理和安全方面也做了很多的措施&#xff0c;以下會介紹到用戶方面的設置 1.1、相關術語 1.1.1 realm 在 coturn 服務器中&#xff0c;域&#xff08;realm&#xff09;是一種邏輯上的分組概念&#xff0c;用于對不同的用戶群體、應用或者服務進行區…

基于opencv和PaddleOCR識別身份證信息

1、安裝組件 pip install --upgrade paddlepaddle paddleocr 2、完整code import cv2 import numpy as np from paddleocr import PaddleOCR# 初始化 PaddleOCR use_angle_clsTrue, lang"ch", det_db_thresh0.1, det_db_box_thresh0.5)def preprocess_image(image…

【6】GD32 高級通信外設 CAN、USBD

高級通信外設&#xff1a;CAN、USBD CAN CAN簡介、主要功能與相關API回環模式收發發送特定ID的數據幀實驗CAN數據幀的接收實驗使用過濾器接收特定的數據幀 USBD USB通信簡介USBD設備固件庫架構、分層文件與庫函數說明USBD模擬鍵盤應用USBD虛擬串口應用USBD模擬U盤應用

【LLM+Code】Windsurf Agent 模式PromptTools詳細解讀

一、前言 https://windsurf.com/ https://windsurf.com/blog/why-we-built-windsurf https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/tree/main/Windsurf 二、System Prompt 相比于cursor和claude code&#xff0c; windsurf的system prompt非常長&am…

安全性測試常規測試點全解析:從基礎到高級的實戰指南

引言 安全性測試是保障軟件系統免受惡意攻擊的核心環節,其目標是識別系統在設計、開發、部署過程中存在的安全漏洞。本文將圍繞12大常規安全測試點展開,結合具體測試方法、示例代碼及防范建議,幫助讀者構建完整的安全測試體系。 一、認證與授權測試 1. 認證機制測試 測試…

OpenCV 圖形API(55)顏色空間轉換-----將圖像從 RGB 色彩空間轉換為 I420 格式函數RGB2I420()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 將圖像從 RGB 色彩空間轉換為 I420 色彩空間。 該函數將輸入圖像從 RGB 色彩空間轉換為 I420。R、G 和 B 通道值的常規范圍是 0 到 255。 輸出圖…

Pycharm(十六)面向對象進階

一、繼承 概述&#xff1a; 實際開發中&#xff0c;我們發現很多類中的步分內容是相似的&#xff0c;或者相同的&#xff0c;每次寫很麻煩&#xff0c;針對這種情況&#xff0c; 我們可以把這些相似&#xff08;相同的&#xff09;部分抽取出來&#xff0c;單獨地放到1個類中&…

Codeforces Round 1020 (Div. 3)(題解ABCDEF)

A. Dr. TC 有n次翻轉&#xff0c;從1到n&#xff0c;0->1,1->0&#xff0c;每次統計1的數量&#xff0c;設cnt1是字符串1的數量&#xff0c;n次就是n*cnt1&#xff0c; 但每個1都會被翻轉一次減去一個cnt1,再統計cnt0&#xff0c;每個被翻轉一次,答案就是(n-1)*cnt1cnt0…

HTML字符實體和轉義字符串

HTML字符實體和轉義字符串用于處理特殊字符&#xff0c;確保它們在不同上下文中正確顯示或解析。以下是詳細總結&#xff1a; HTML字符實體&#xff08;Character Entities&#xff09; ?定義?&#xff1a;用于在HTML中表示保留字符或不可見字符&#xff0c;避免與HTML語法…

FreeRTOS菜鳥入門(六)·移植FreeRTOS到STM32

目錄 1. 獲取裸機工程模版 2. 下載 FreeRTOS V9.0.0 源碼 3. FreeRTOS文件夾內容簡介 3.1 FreeRTOS文件夾 3.1.1 Demo文件夾 3.1.2 License 文件夾 3.1.3 Source 文件夾 3.2 FreeRTOS-Plus 文件夾 4. 往裸機工程添加 FreeRTOS 源碼 5. 拷貝 FreeRTOSConfig…

通過 Tailwind CSS 自定義樣式 實現深色模式切換

創建vite項目或者vue-cli配置大同小異 1、當前環境 Vue.js 3.5nuxtjs/tailwindcss 6.13.1nuxt3.15.4node18 這里主要依賴是tailwindcss 因為當前項目是使用nuxt開發。 2、配置顏色模式 在assets/css下創建main.css * {padding: 0;margin: 0;box-sizing: border-box; }[dat…

PWNOS:2.0(vulnhub靶機)

文章目錄 靶機地址主機發現、端口掃描web滲透目錄探測漏洞利用權限提升 解密工具地址總結 靶機地址 https://download.vulnhub.com/pwnos/pWnOS_v2.0.7z 這里如果是windows系統直接使用vmware或者virtubox打開可以使用,如果是mac系統需再去做一個配置&#xff0c;比較麻煩 這里…

Gartner魔力象限(Gartner Magic Quadrant)

Gartner魔力象限&#xff08;Gartner Magic Quadrant&#xff09;是由全球領先的研究和咨詢公司Gartner發布的市場研究報告&#xff0c;廣泛應用于IT行業&#xff0c;尤其是在技術供應商評估中。它以圖形化的方式展示了不同技術領域中各個供應商的市場表現&#xff0c;幫助企業…

信創時代開發工具選擇指南:國產替代背景下的技術生態與實踐路徑

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

人口老齡化丨AI健康小屋如何實現防病于未然?

隨著全球老齡化加劇&#xff0c;“銀發浪潮” 對醫療資源、養老護理和健康管理提出了嚴峻挑戰。 由此智紳科技應運而生&#xff0c;七彩喜智慧養老系統構筑居家養老安全網。 AI 健康小屋作為銀發科技的創新載體&#xff0c;通過智能化健康監測、精準化風險預警、便捷化醫療銜…

【金倉數據庫征文】金倉數據庫:開啟未來技術腦洞,探索數據庫無限可能

我的個人主頁 我的專欄&#xff1a; 人工智能領域、java-數據結構、Javase、C語言&#xff0c;希望能幫助到大家&#xff01;&#xff01;&#xff01; 點贊&#x1f44d;收藏? 目錄 引言&#xff1a;數據庫進化的下一站 —— 未來科技的無限可能金倉數據庫簡介&#xff1a;國…

#什么是爬蟲?——從技術原理到現實應用的全面解析 VI

什么是爬蟲?——從技術原理到現實應用的全面解析 V 二十六、異構數據采集技術突破 26.1 PDF文本與表格提取 import pdfplumber import pandas as pddef extract_pdf_data(pdf_path):"""從PDF中提取文本和表格數據:param pdf_path: PDF文件路徑:return: 包含…