模拟银行账户系统一、功能描述:1、创建账户a)两次密码确认b)重名账户检查c)创建成功直接进入第二菜单2、可创建VIP账户,VIP账户可透资取款3、用户登录a)三次密码输入失败,退出系统b)登录成功进入下一菜单4、存款、取款、转账、查询余额、修改密码功能a)取款、转账需要判断余额,余额不足给出提示重新输入b)转账需要判断账户是否存在,账户错误给出提示,重新输入c)存、取、转操作完成后需显示当前余额效果如图所示:二、程序要求:1、采用面向对象思想编程2、建立相应类、对象3、使用继承和接口创建普通账户类和VIP账户类4、将账户信息保存到TXT文本5、使用泛型集合处理账户验证6、添加注释,使用异常处理using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.IO;namespace pass{class Program{static account acc; //系统登录账户对象static Dictionary<string, account> ls = new Dictionary<string, account>();//存储账户的集合static public string filePath = "Account.txt";static void Main(string[] args){fileRead();menu1();fileWrite();}public static void menu1(){string choice;do{Console.WriteLine("--------------------------------------------------------------------------------");Console.WriteLine(" 欢迎使用国信银行账户系统");Console.WriteLine(" 版本:BetaV1.0");Console.WriteLine("--------------------------------------------------------------------------------");Console.WriteLine(" 请选择服务功能");Console.WriteLine(" 1.创建账户");Console.WriteLine(" 2.用户登录");Console.WriteLine(" 3.退出系统");Console.WriteLine("--------------------------------------------------------------------------------");choice = Console.ReadLine();switch (choice){case"1":CJ();break;case"2":DL();break;case"3":Console.WriteLine("账户记录已保存,系统退出......");break;default:Console.WriteLine("菜单选择错误");break;}} while (choice != "3");}public static void menu2(){string choice;do{Console.WriteLine("--------------------------------------------------------------------------------");Console.WriteLine(" 请选择服务功能");Console.WriteLine(" 1.取款服务");Console.WriteLine(" 2.存款服务");Console.WriteLine(" 3.查询余额");Console.WriteLine(" 4.转账服务");Console.WriteLine(" 5.修改密码");Console.WriteLine(" 6.返回上级菜单");Console.WriteLine("--------------------------------------------------------------------------------");choice = Console.ReadLine();switch (choice){case"1":acc.QK();//取款break;case"2":acc.CK();//存款break;case"3":acc.CX();//查询break;case"4":ZZ();//转账break;case"5":acc.GM();//改密break;case"6":break;default:Console.WriteLine("菜单选择错误");break;}} while (choice != "6");}public static void CJ()//创建账户{Console.WriteLine("请输入账户名:");string name = Console.ReadLine();if (ls.ContainsKey(name)){Console.WriteLine("用户名已存在");return;}Console.WriteLine("请输入密码:");string pwd1 = Console.ReadLine();Console.WriteLine("请确认密码:");string pwd2 = Console.ReadLine();if (pwd1 != pwd2){Console.WriteLine("前后密码不一致");return;}string type;Console.WriteLine("请选择开户类型:1.普通账户 2.金卡账户(可透资5000元) 3.银卡账户(可透资3000元)");Console.WriteLine("其它键退出");type = Console.ReadLine();if (type == "1")acc = new account(name, pwd1, 0);else if (type == "2")acc = new vip(name, pwd1, 0, 5000);else if (type == "3")acc = new vip(name, pwd1, 0, 3000);elsereturn;ls.Add(name, acc);Console.WriteLine("创建账户成功,请选择<用户登录>进入该账户,或选择<创建账户>继续添加账户");}static void DL()//登录{for (int i = 2; i >= 0; i--){Console.WriteLine("请输入用户名:");string name = Console.ReadLine();Console.WriteLine("请输入密码:");string pwd = Console.ReadLine();if (ls.ContainsKey(name) && ls[name].pwd == pwd){acc = ls[name];menu2();break;}else{Console.WriteLine("你还有{0}次机会", i);}}}public static void ZZ()//转账{Console.WriteLine("请输入转入账户名称:");string str = Console.ReadLine();if (!ls.ContainsKey(str)){Console.WriteLine("转入账户不存在");return;}Console.WriteLine("请输入转账金额:");string str1 = Console.ReadLine();if (!Program.TestSD(str1))return;decimal amt = decimal.Parse(str1);if (!acc.YE(amt))return;acc.balance -= amt;ls[str].balance += amt;acc.CX();}///<summary>///测试string能否成功转为decimal///</summary>public static bool TestSD(string str){try{decimal amt = decimal.Parse(str);return true;}catch (FormatException e){Console.WriteLine("操作失败," + e.Message);return false;}catch (OverflowException ex){Console.WriteLine("操作失败," + ex.Message);return false;}finally{}}public static void fileRead(){FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None);StreamReader sr = new StreamReader(fs);string data = sr.ReadLine();string[] str;while (data != null){str = data.Split('\t');if (str.Length < 4){account ac = new account(str[0], str[1], decimal.Parse(str[2]));ls.Add(er, ac);}else{vip vac = new vip(str[0], str[1], decimal.Parse(str[2]),decimal.Parse(str[3]));ls.Add(er, vac);}data = sr.ReadLine();}sr.Close();fs.Close();}public static void fileWrite(){FileStream fs = new FileStream(filePath, FileMode.Truncate, FileAccess.Write, FileShare.None);StreamWriter sw = new StreamWriter(fs);foreach (account p in ls.Values)sw.WriteLine(p);sw.Close();fs.Close();}}}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace pass{///<summary>///普通账户类///</summary>class account{public string user; //账户名public string pwd; //密码public decimal balance = 0; //余额public account(string _user, string _pwd, decimal _balance) {er = _user;this.pwd = _pwd;this.balance = _balance;}public virtual void QK()//取款{Console.WriteLine("请输入取款金额:");string str = Console.ReadLine();if (!Program.TestSD(str))return;decimal amt = decimal.Parse(str);if (!YE(amt))return;balance -= amt;CX();}public void CK()//存款{Console.WriteLine("请输入存款金额:");string str = Console.ReadLine();if (!Program.TestSD(str))return;decimal amt = decimal.Parse(str);balance += amt;CX();}public virtual void CX()//查询{Console.WriteLine("操作成功,您的当前余额为{0}元", balance); }public void GM()//改密{Console.WriteLine("请输入新密码:");string pwd1 = Console.ReadLine();Console.WriteLine("请确认新密码:");string pwd2 = Console.ReadLine();if (pwd1 != pwd2){Console.WriteLine("前后密码不一致,修改密码失败");}else{pwd = pwd1;}}public virtual bool YE(decimal ye)//余额校验{if (ye >= balance){Console.WriteLine("余额不足,操作失败");return false;}elsereturn true;}public override string ToString(){return user + "\t" + pwd + "\t" + balance;}}}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace pass{///<summary>/// VIP账户类///</summary>class vip : account{public decimal debt; //透支额度public vip(string _user, string _pwd, decimal _balance, decimal _debt): base(_user, _pwd, _balance){this.debt = _debt;}public override void QK()//取款{Console.WriteLine("请输入取款金额:");string str = Console.ReadLine();if (!Program.TestSD(str))//字符串转金额校验return;decimal amt = decimal.Parse(str);if (!YE(amt))//余额校验return;balance -= amt;CX();}public override void CX()//查询{Console.WriteLine("操作成功,您的当前余额为{0}元,可透支金额为{1}元", balance, balance >= 0 ? debt : debt + balance);}public override bool YE(decimal ye)//余额校验{if (ye > balance + debt){Console.WriteLine("余额不足,操作失败");return false;}elsereturn true;}public override string ToString(){return user + "\t" + pwd + "\t" + balance + "\t"+debt; }}}。