C# 您所在的位置:网站首页 多态编程应用实验报告 C#

C#

2024-07-15 18:25| 来源: 网络整理| 查看: 265

一、实验目的 掌握C#中各种成员的写法;掌握C#继承和多态概念;掌握常用接口的使用方法。 二、实验内容 在银行ATM示例的基础上,利用面向对象的思想及语法,进行改进。要求如下:

1)使用面向对象的思想,模拟现实世界中的银行、账号、ATM等对象,其中类中有字段、方法;

2)在程序中适当的地方,使用属性、索引,注意使用修饰符;

3)使用继承,继承账号(Account类)得到一个子类(如信用账号),增加字段(如信用额度)、属性、方法,覆盖(overrid)一些方法(如WithdrawMoney)。

4)根据程序的需要(可选做),使用C#的其他语法成分,诸如:接口、结构、枚举等。

程序中加上适当的注释,并加一个说明文件,简要描述在什么地方使用了一些特殊的语法要素。

源代码 using System; namespace 银行ATM程序 { class Account { //Constructor Account() { } Account(long bank_cardID, string password) { this.bank_cardID = bank_cardID; this.account_password = password; } //fields private static long initial_ID = 1000000001; //the 1st one to create an account get this ID number private static string bank_name = "ICBC"; private long bank_cardID; public string account_password; private long total_amount = 100000; //initial account private string[] data = new string[5]; private string[] keys = { "card ID","holder's name", "total sum", "latest withdraw","latest deposit" }; //property public long latest_withdraw { set; get; } public long latest_deposit { set; get; } public string date_withdraw { set; get; } public string date_deposit { set; get; } public string date_create { set; get; } //indexer public string this[int i] { set { data[i] = value; } get { if (i >= 0 && i < data.Length) return data[i]; return null; } } public string this[string key] { get { return this[FindIndex(key)]; } } private int FindIndex(string key) { for (int i = 0; i < keys.Length; i++) if (keys[i] == key) return i; return -1; } //methods //withdraw from the account, record the current time public void withdrawMoney() { Console.Write("amount(withdraw): "); latest_withdraw = Convert.ToInt32(Console.ReadLine()); if (latest_withdraw 0) { total_amount += latest_deposit; this[2] = Convert.ToString(total_amount); date_deposit = DateTime.Now.ToString(); this[4] = Convert.ToString(latest_deposit); } else Console.WriteLine("Invalid operation\n"); } //get information about the account void get_card_info() //try 4 choices below { Console.WriteLine("( card ID / holder's name / total sum / latest withdraw / latest deposit )?"); string instr = Console.ReadLine(); if (instr == "card ID" || instr == "holder's name" || instr == "total sum" || instr == "latest withdraw" || instr == "latest deposit") { this[3] = Convert.ToString(latest_withdraw); this[2] = Convert.ToString(total_amount); Console.Write(instr + " is " + this[instr]); if (instr == "latest withdraw") Console.WriteLine(" " + date_withdraw); else if (instr == "latest deposit") Console.WriteLine(" " + date_deposit); else if (instr == "card ID") Console.WriteLine(" " + date_create); else if (instr == "card ID" || instr == "total sum") Console.WriteLine("\n"); } else Console.WriteLine("Invalid input!!"); } //Inheritance, subclass CreditAccount protected class CreditAccount : Account { //Constructor CreditAccount(long bank_cardID, string password) { this.bank_cardID = bank_cardID; this.account_password = password; } //new field private long line_of_credit; //line of credit //new property public string credit_rating { set; get; } //new method public long get_line_of_credit() //line of credit according to the credit rating { if (credit_rating == "3" || credit_rating == "2") line_of_credit = 50000; else if (credit_rating == "1" || credit_rating == "0") line_of_credit = 10000; else line_of_credit = 0; return line_of_credit; } //override method withdrawMoney() new public void withdrawMoney() { Console.Write("amount(withdraw): "); latest_withdraw = Convert.ToInt32(Console.ReadLine()); if (latest_withdraw = total_amount) { Console.WriteLine("warning: you're using your credit!! Withdraw successfully"); int temp = Convert.ToInt32(credit_rating); credit_rating = Convert.ToString(--temp); get_line_of_credit(); } } else { Console.WriteLine("Lack of balance. Operation is refused\n"); } } public static void Main(String[] args) { Account a; CreditAccount ca; string card_category; //create a new account, set password, get an ID number void create_account() { Console.WriteLine("######### " + bank_name + " #########"); //which bank Console.Write("create an account ( normal / credit )?"); card_category = Console.ReadLine(); if (card_category != "credit" && card_category != "normal") { Console.WriteLine("Invalid input"); create_account(); } Console.Write("set password: "); string password = Console.ReadLine(); //set password Account a_create = new CreditAccount(initial_ID, password); a = a_create; ca = (CreditAccount)a; a[0] = Convert.ToString(initial_ID); //save ID Console.Write("Your name: "); a[1] = Console.ReadLine(); //save owner's name a[2] = Convert.ToString(a.total_amount); a.date_create = DateTime.Now.ToString(); //save the time that this account was created Console.WriteLine("create successfully!!\nYour ID: " + initial_ID + " " + "Remember your password:" + password + " You have $100000 initially."); initial_ID++; a.latest_deposit = 0; a.latest_withdraw = 0; if (card_category == "credit") { ca.credit_rating = "3"; ca.get_line_of_credit(); } } create_account(); while (true) { if (card_category == "normal") { //ask for the next instruction from the user Console.WriteLine("( create again / get information / withdraw / deposit )?"); switch (Console.ReadLine()) { case "create again": create_account(); break; case "get information": a.get_card_info(); break; case "withdraw": a.withdrawMoney(); a[2] = Convert.ToString(a.latest_withdraw); break; case "deposit": a.depositMoney(); a[3] = Convert.ToString(a.latest_deposit); break; default: Console.WriteLine("invalid input\n"); break; } } else if (card_category == "credit") { //ask for the next instruction from the user Console.WriteLine("( create again / get information / withdraw / deposit / line of credit )?"); switch (Console.ReadLine()) { case "create again": create_account(); break; case "get information": ca.get_card_info(); break; case "withdraw": ca.withdrawMoney(); ca[2] = Convert.ToString(ca.latest_withdraw); break; case "deposit": ca.depositMoney(); ca[3] = Convert.ToString(ca.latest_deposit); break; case "line of credit": Console.WriteLine("LIne of credit: " + ca.get_line_of_credit()); break; default: Console.WriteLine("invalid input\n"); break; } } } } } } } 运行结果

 

三、实验目的 掌握C#中各种成员的写法;掌握C#继承和多态概念;掌握常用接口的使用方法。 参考文章

https://shentuzhigang.blog.csdn.net/article/details/105025108

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有