C#銀行ATM程式--練習
阿新 • • 發佈:2018-12-10
題目:
我的答案:(可能有錯,請幫忙指出^~^ 謝謝~~)
using System; namespace Bank_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 <= total_amount) { total_amount -= latest_withdraw; this[2] = Convert.ToString(total_amount); date_withdraw = DateTime.Now.ToString(); this[3] = Convert.ToString(latest_withdraw); } else Console.WriteLine("Lack of balance. Operation is refused\n"); } //deposit from the account, record the current time public void depositMoney() { Console.Write("amount(deposit): "); latest_deposit = Convert.ToInt32(Console.ReadLine()); if (latest_deposit > 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[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 + line_of_credit) { total_amount -= latest_withdraw; this[2] = Convert.ToString(total_amount); date_withdraw = DateTime.Now.ToString(); this[3] = Convert.ToString(latest_withdraw); 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; } } } } } } }