Bank,我只是来完成作业的
写这个Bank我需要有:开户,取款,存款,转账,查询余额,退出功能。
这样我需要有两个类:Bank,User。一个Main入口。
先看这个User,他定义了各个需要的属性(字段)和字段的属性(虽然在这里并没什么卵用,不过这样也显示我也是知道有这个的嘛)
class User { //初始化账户姓名,密码,身份证号,存款余额,账号 private string _name; private int _passWord; private string _idName; private double _balance; private string _account; public string Name { get { return _name; } set { _name = value; } } public int PassWord { get { return _passWord; } set { _passWord = value; } } public string IdName { get { return _idName; } set { _idName = value; } } public double Balance { get { return _balance; } set { _balance = value; } } public string Account { get { return _account; } set { _account = value; } } }
好了,下面看一下关键的Bank类,他里面包含了各个方法,我最喜欢方法了,方法能让很多不可能变成可能,你值得拥有。
①Bank类中首先我们new出一个User的对象数组,然后定义一个方法存储三个客户信息:
User users=new User(); User[] userGroup = new User[10];
②然后开始写欢迎菜单和选项(开户,存款,取款,转账,查询余额,退出),你懂得,switch结构:
//初始化三个用户信息 public void Initial() { userGroup[0] = new User(); userGroup[0].Name = "王丽丽"; userGroup[0].Account = "21005061989080818"; userGroup[0].IdName = "210050619890808185"; userGroup[0].Balance = 200000; userGroup[0].PassWord = 123456; userGroup[1] = new User(); userGroup[1].Name = "张莹莹"; userGroup[1].Account = "51001061989123112"; userGroup[1].IdName = "510010619891231127"; userGroup[1].Balance = 400000000; userGroup[1].PassWord = 283868; userGroup[2] = new User(); userGroup[2].Name = "刘华"; userGroup[2].Account = "41020719890405127"; userGroup[2].IdName = "410207198904051271"; userGroup[2].Balance = 5600000; userGroup[2].PassWord = 000000; } //菜单 public void showMenu() { int temp = 0; do { Console.WriteLine("====================欢迎使用自动银行服务========================"); Console.WriteLine("1:开户\t2:存款\t3:取款\t4:转账\t5:查询余额\t6:退出"); Console.WriteLine("================================================================"); string result = Console.ReadLine(); switch (result) { case "1": newUser(); break; case "2": saveMoney(); break; case "3": getMoney(); break; case "4": transferAccount(); break; case "5": getBalance(); break; case "6": temp = -1; break; default: Console.WriteLine("输入错误,请检查重输."); break; } } while (temp==0); }
③好了准备工作做完了,我分析了一下开户,存款,取款,转账,查询。发现很多都需要遍历User对象数组查找账号(和对应的下标),然后判定密码。好了,这里需要两个方法:judgeAccount(判定账号);judgePWD(判定密码);如下:
//输入账号判定,返回-1或-2则为没有该账号,返回i值(0或正整数)则为有该账号,并且账号的下标为i public int judgeAccount(string account) { int i = -1; bool result = false; foreach (User item in userGroup) { if (item==null&&result==false) { i = -1; break; } else if (item==null&&result==true) { break; } else { i += 1; if (account.Equals(item.Account)) { result = true; //判定有相等值则赋给result为true break; } } } return i; } //密码判定,返回-1为密码错误,返回0位密码正确 public int judgePWD(int passWord,int num) { if (passWord == userGroup[num].PassWord) { return 0; } else { return -1; } }
到这里就要开始真正的关键的主要的必须的:开户(newUser();),存款(saveMoney()),取款(getMoney()),转账(transferAccount()),查询余额(getBalance())方法了:
④ 开户::::::::::::::::::::::::::::::::::::::
//开户 public void newUser() { int i = 0; foreach (User item in userGroup) { if (item!=null) { i += 1; } else { break; } } userGroup[i] = new User(); Console.Write("请输入姓名:"); userGroup[i].Name = Console.ReadLine(); Console.Write("请输入身份证号:"); userGroup[i].IdName = Console.ReadLine(); userGroup[i].Account = userGroup[i].IdName; Console.WriteLine("您的卡号已随机生成,请记好:{0}", userGroup[i].Account); do { Console.Write("请输入密码:"); int result = int.Parse(Console.ReadLine()); Console.Write("请再次输入密码:"); userGroup[i].PassWord = int.Parse(Console.ReadLine()); if (result.Equals(userGroup[i].PassWord) == false) { Console.WriteLine("两次输入密码不一致"); continue; } break; } while (true); Console.Write("请输入存入的金额:"); userGroup[i].Balance = double.Parse(Console.ReadLine()); Console.WriteLine("用户名:{0} 账户:{1} 身份证号:{2} 存款余额:{3}", userGroup[i].Name, user Group[i].Account, userGroup[i].IdName, userGroup[i].Balance); }
完美的代码啊!越看越喜欢。先用foreach找到User对象数组中空的一组元素下标(i),然后从控制台录入信息。存入数组,完成,完美。
⑤开始存款了,最喜欢的还是这个过程,想存多少就存多少,都是我的(钱嘛,就是个数)
//存款 public void saveMoney() { Console.WriteLine("请输入存入账号:"); int xiabiao=judgeAccount(Console.ReadLine()); if (xiabiao < 0) { Console.WriteLine("没有该账号,请重新输入"); saveMoney(); } do { Console.WriteLine("请输入密码:"); int result=judgePWD(int.Parse(Console.ReadLine()), xiabiao); if (result == 0) { Console.WriteLine("请输入存入金额:"); double save= double.Parse(Console.ReadLine()); userGroup[xiabiao].Balance += save; Console.WriteLine("用户名:{0} 账户:{1} 存入金额{2} 存款余额:{3}", userGroup[xiabiao] .Name, userGroup[xiabiao].Account,save, userGroup[xiabiao].Balance); break; } else { Console.WriteLine("密码错误,请检查重输!"); continue; } } while (true); }
这里引用了密码判定(judgeAcount();),密码判定(judgePWD();),然后在数组中找到对应下标的元素(余额),加上存款项金额。完成,不完美的地方就是这里不应该有密码判定的,我认为存钱其实不用输密码,不过不想改了。
⑥取款了
//取款 public void getMoney() { Console.Write("请输入账号:"); int xiabiao=judgeAccount(Console.ReadLine()); if (xiabiao<0) { Console.WriteLine("没有该账号,请检查重输"); getMoney(); } do { Console.Write("请输入密码:"); int passWord = int.Parse(Console.ReadLine()); int result = judgePWD(passWord, xiabiao); if (result<0) { Console.WriteLine("密码错误,请检查重输"); continue; } break; } while (true); double getmoney; do { Console.WriteLine("账户余额:" + userGroup[xiabiao].Balance); Console.Write("请输入取款金额(本机只允许取整百人民币:"); getmoney = double.Parse(Console.ReadLine()); if (getmoney%100!=0) { Console.WriteLine("取款金额不是整百,请重新取款"); continue; } if (getmoney>userGroup[xiabiao].Balance) { Console.WriteLine("取款金额大于余额,请重新输入"); continue; } break; } while (true); userGroup[xiabiao].Balance = userGroup[xiabiao].Balance - getmoney; Console.WriteLine("账号:{0}\t本次成功取款:{1}\t当前余额:{2}", userGroup[xiabiao].Account, getmoney, userGroup[xiabiao].Balance); }
取款同存款大概的方式是一样的,只是一个加一个减。完美!
⑦开始转账了:
//转账 public void transferAccount() { //转出 int zhuanchuxiabiao; double getmoney; do { Console.Write("请输入转出账号:"); zhuanchuxiabiao = judgeAccount(Console.ReadLine()); if (zhuanchuxiabiao < 0) { Console.WriteLine("没有该账号,请检查重输"); continue; } Console.Write("请输入密码:"); int passWord = int.Parse(Console.ReadLine()); int result = judgePWD(passWord, zhuanchuxiabiao); if (result < 0) { Console.WriteLine("密码错误,请检查重输"); continue; } break; } while (true); do { Console.WriteLine("账户余额:" + userGroup[zhuanchuxiabiao].Balance); Console.Write("请输入转出金额:"); getmoney = double.Parse(Console.ReadLine()); if (getmoney > userGroup[zhuanchuxiabiao].Balance) { Console.WriteLine("转出金额大于余额,请重新输入"); continue; } break; } while (true); //转入 int zhuanruxiabiao; do { Console.WriteLine("请输入转入账号:"); zhuanruxiabiao = judgeAccount(Console.ReadLine()); if (zhuanruxiabiao < 0) { Console.WriteLine("没有该账号,请重新输入"); continue; } userGroup[zhuanchuxiabiao].Balance = userGroup[zhuanchuxiabiao].Balance - getmoney; userGroup[zhuanruxiabiao].Balance += getmoney; Console.WriteLine("账号:{0}\t本次成功转出:{1}\t当前余额:{2}", userGroup[zhuanchuxiabiao]. Account, getmoney, userGroup[zhuanchuxiabiao].Balance); Console.WriteLine("转入用户名:{0}\t转入账户:{1}\t转入金额{2}", userGroup[zhuanruxiabiao]. Name, userGroup[zhuanruxiabiao].Account,getmoney); break; } while (true); }
转账就是把取款和存款合到一块,很简单。Perfect!
⑧查询余额开始了
//查询余额 public void getBalance() { int xiabiao; Console.Write("请输入查询的账户;"); do { xiabiao = judgeAccount(Console.ReadLine()); if (xiabiao < 0) { Console.WriteLine("没有该账号,请重新输入"); continue; } break; } while (true); do { Console.Write("请输入密码:"); int passWord = int.Parse(Console.ReadLine()); int result = judgePWD(passWord, xiabiao); if (result < 0) { Console.WriteLine("密码错误,请检查重输"); continue; } break; } while (true); Console.WriteLine("用户名:{0} 存款余额:{3} 账户:{1} 身份证号:{2}", userGroup[xiabiao].Name , userGroup[xiabiao].Account, userGroup[xiabiao].IdName, userGroup[xiabiao].Balance); }
一个跟取款很相似的方法。你值得拥有!
下面就是无关大雅的方法了:
⑨遍历数组:
//遍历用户信息 public void showUsers() { foreach (User item in userGroup) { if (item==null) { return; } Console.WriteLine("用户名:{0} 账户:{1} 身份证号:{2} 存款余额:{3}",item.Name,item.Accou nt,item.IdName,item.Balance); } }
到这里Bank类中方法就完了。该Main入口了上场了。
static void Main(string[] args) { Bank bank = new Bank(); bank.Initial(); //初始化三个用户 bank.showUsers(); //遍历对象数组(展示三个用户) bank.showMenu(); //菜单项,选项菜单 bank.showUsers(); //再次遍历数组(查看操作完成后数据的变化) Console.ReadLine(); }
完美,遇见了谁!