今天呢我就和大家分享一下怎样用对象数组的形式来实现一个简单的银行系统, 首先呢,跟大家介绍一下这个简单的银行操作系统要实现的一些主要的功能:
主要功能有 :
1.开户功能 2.存款 3.取款 4.转账 5.查询余额 6.修改密码 7.展示客户信息 8.初始化数据
首先,我们拿到这个项目要做的第一件事就是去分析,看能够提取出哪些类,我们用图解的形式来简单演示一遍吧~
我们可以看到,Bank系统我们总共提取出了三个类,分别是银行卡类,银行类,用户类 , 其中大家可以看到银行类是关键,大部分的方法和代码都在银行类里面呢。
接下来就正式给大家讲解一下整个系统的代码部分,第一步呢,我们已经分析过了,该系统分为三个类,所以我们分别创建Bank类Card类和Customer类(Customer类也就是我们讲的测试类)
我们先来创建一个Card类,里面内容如下:
1 namespace Bank 2 { 3 class Card 4 { 5 private int cardNum; //卡号 6 private string cardName; //持卡人 7 private int password; //密码 8 private double money; //余额 9 //pirvate为私有的,也就是说将信息给加密了,不是任何人都能够随意访问到 10 //的,要访问就必须通过属性访问。(该信息已设为字段) 11 12 public double Money //这就是字段的属性 13 { 14 get { return money; } 15 set { money = value; } 16 } 17 public int Password 18 { 19 get { return password; } 20 set { password = value; } 21 } 22 23 public string CardName 24 { 25 get { return cardName; } 26 set { cardName = value; } 27 } 28 29 public int CardNum 30 { 31 get { return cardNum; } 32 set { cardNum = value; } 33 } 34 35 } 36 }
好的,我们已经完成了一个Card类的创建,接下来进入我们的重点中的重点,也是整个系统的核心部分!!!!!
Bank类的创建,下面我还是用代码来给大家演示一下。
1 class Bank 2 { 3 Card[] card=new Card[100]; //定义卡的对象数组 4 5 //给前三张卡初始化 6 public void InitialData() 7 { 8 Card card1 = new Card(); //创建卡的第一个对象 9 card1.CardName = "张三"; 10 card1.CardNum = 1234; 11 card1.Password = 1234; 12 card1.Money = 1000; 13 card[0] = card1; //将第一个卡的对象中的元素存储到数组中去. 14 15 16 Card card2 = new Card(); //创建卡的第二个对象 17 card2.CardName = "李四"; 18 card2.CardNum = 12345; 19 card2.Password = 12345; 20 card2.Money = 9850; 21 card[1] = card2; //将第二个卡的对象中的元素存储到数组中去. 22 23 24 Card card3 = new Card(); //创建卡的第三个对象 25 card3.CardName = "王五"; 26 card3.CardNum = 123456; 27 card3.Password = 123456; 28 card3.Money = 10000; 29 card[2] = card3; //将第三个卡的对象中的元素存储到数组中去. 30 31 } 32 }
我们可以看到上面这段代码,第一步便是创建了一个对象数组,紧接着我们定义了一个初始化数据的方法
我们每初始化一张Card对象前都先创建了一个空的对象,然后用这个创建的对象名点上Card类中的属性,具体请参考代码8~13行,其中第十三行代码是个关键!!关键!!关键!!意思是说将我初始化好的第一个Card的数据作为一个对象存储到第一个Card的对象的数组中去,作为对象数组中的第一项,注意!!这里我们传入的不是单单的一个数据,而是一个对象!!!对象!!理解第一个后,后面的跟它是一样的,这里可能要各位多花一些时间去理解理解。
初始化的方法我们讲完了,接下来我们讲接下来的一个方法,制作一个欢迎界面,相对而言,这部分代码就比较简单了。我们来看看具体的代码。
1 //欢迎界面 2 public void Welcome() 3 { 4 Console.WriteLine("欢迎进入自主ATM系统"); 5 Console.WriteLine("功能:1.开户 2.存款 3.取款 4.查询余额 5.转账 6.修改密码 7.展示用户信息 8.退出"); 8 Console.WriteLine("请选择您要操作的功能:"); 9 string select = Console.ReadLine(); 10 switch (select) 11 { 12 case "1": 13 //开户 14 GetCard(); 15 break; 16 case "2": 17 //存款 18 SaveMoney(); 19 break; 20 case "3": 21 //取款 22 GetMoney(); 23 break; 24 case "4": 25 //查询余额 26 InquiryMoney(); 27 break; 28 case "5": 29 //转账 30 ChangeMoney(); 31 break; 32 case "6": 33 //修改密码 34 RevisePassword(); 35 break; 36 case "7": 37 //展示客户信息 38 show(); 39 break; 40 case "8": 41 Console.WriteLine("成功退卡!"); 42 break; 43 44 } 45 }
这里就只是运用到了一个简单的switch选择结构,这部分比较简单所以我就不做详细的讲解了。接下来我们来看看开户功能的方法,代码如下
1 //开户功能 2 public void GetCard() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 Console.WriteLine("请输入用户名"); 9 string cardOwner = Console.ReadLine(); 10 Console.WriteLine("请输入开户金额"); 11 double balance = double.Parse(Console.ReadLine()); 12 13 //将新增的用户存储到对象数组当中 14 Card cards = new Card(); 15 cards.CardName = cardOwner; 16 cards.CardNum = cardNo; 17 cards.Money = balance; 18 cards.Password = cardPwd; 19 for (int i = 0; i < card.Length; i++)//遍历数组,找到为空值的位置 20 { 21 if (card[i] == null) 22 { 23 card[i] = cards; //将新增的对象存储到数组为空值的位置 24 Console.WriteLine("开户成功!!!"); 25 break;//千万不能忘记跳出循环!!!!! 26 } 27 } 28 Welcome(); 29 }
大家如果有不懂的地方可以看看代码中的注释,接下来的方法我都将以注释的形式为大家解释,这样更能帮助同学们进行一个理解。
下面跟大家分享下其他的方法
1 //存款功能 2 public void SaveMoney() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 9 //遍历数组,判断是否有该用户 10 for (int i = 0; i < card.Length; i++) 11 { 12 if (card[i] == null) //判断当前项是否为空值,如果为空值则表示没有该卡信息 13 { 14 Console.WriteLine("输入相关卡的信息错误!"); 15 break; 16 } 17 //如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合 18 else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) 19 { 20 Console.WriteLine("请输入要存款的金额:"); 21 double savemoney = double.Parse(Console.ReadLine()); 22 if (savemoney > 0)//判断存款是否合法 23 { 24 card[i].Money += savemoney;//在数组中的当前项更新数据 25 Console.WriteLine("存款成功!!\n当前余额:{0}", card[i].Money); 26 break; 27 } 28 else//输入存款不合法 29 { 30 Console.WriteLine("输入的存款金额不正确!!!"); 31 break; 32 } 33 } 34 } 35 Welcome();//引用欢迎界面 36 }
1 //取款功能 2 public void GetMoney() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 //遍历数组,判断是否有该用户 9 for (int i = 0; i < card.Length; i++) 10 { 11 if (card[i] == null) //判断当前项是否为空值,如果为空值则表示没有该卡信息 12 { 13 Console.WriteLine("输入相关卡的信息错误!"); 14 break; 15 } 16 //如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合 17 else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) 18 { 19 Console.WriteLine("请输入取款金额:"); 20 int getmoney = int.Parse(Console.ReadLine()); 21 if (getmoney < card[i].Money)//判断取款金额是否小于余额 22 { 23 card[i].Money -= getmoney;//更新数据 24 Console.WriteLine("取款成功!!当前余额:{0}", card[i].Money); 25 break; 26 } 27 else 28 { 29 Console.WriteLine("操作失败,您的余额不足!!!"); 30 break; 31 } 32 } 33 34 } 35 Welcome(); 36 }
1 //查询余额功能 2 public void InquiryMoney() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 //遍历数组,判断是否有该用户 9 for (int i = 0; i < card.Length; i++) 10 { 11 if (card[i] == null)//判断当前项是否为空值,如果为空值则表示没有该卡信息 12 { 13 Console.WriteLine("输入相关卡的信息错误!"); 14 break; 15 } 16 //如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合 17 else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) 18 { 19 //输出相关卡的信息 20 Console.WriteLine("当前卡的信息为:"); 21 Console.WriteLine("持卡人:{0}\n卡号:{1}\n当前余额:{2}",card 22 [i].CardName,card[i].CardNum,card[i].Money); 23 break; 24 } 25 26 } 27 Welcome(); 28 }
1 //修改密码功能 2 public void RevisePassword() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 for (int i = 0; i < card.Length; i++) 9 { 10 if (card[i] == null) 11 { 12 Console.WriteLine("输入相关卡的信息错误!"); 13 break; 14 } 15 else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) 16 { 17 Console.WriteLine("请输入修改密码:"); 18 int newPassword = int.Parse(Console.ReadLine()); 19 card[i].Password = newPassword;//更新数据 20 Console.WriteLine("修改密码成功!!!"); 21 break; 22 } 23 24 } 25 Welcome(); 26 }
1 //展示用户信息功能 2 public void show() 3 { 4 foreach (Card item in card) //foreach循环输出对象数组中的对象值 5 { 6 if (item!= null) 7 { 8 Console.WriteLine("用户名:{0}\t账号:{1}",item.CardName,item.CardNum); 9 } 10 } 11 Welcome(); 12 }
接下来就到了比较麻烦的转账功能了,请大家仔细理解代码,理清逻辑关系。
1 //转账功能 2 public void ChangeMoney() 3 { 4 Console.WriteLine("请输入卡号"); 5 int cardNo = int.Parse(Console.ReadLine()); 6 Console.WriteLine("请输入密码"); 7 int cardPwd = int.Parse(Console.ReadLine()); 8 for (int i = 0; i < card.Length; i++) 9 { 10 if (card[i] == null) 11 { 12 Console.WriteLine("输入相关卡的信息错误!"); 13 break; 14 } 15 else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) //判 16 17 断账户和密码是否正确 18 { 19 Console.WriteLine("请输入对方卡号:"); 20 int cardNb = int.Parse(Console.ReadLine()); 21 for (int j = 0; j < card.Length; j++) 22 { 23 if (card[j] == null) 24 { 25 Console.WriteLine("输入信息错误!!"); 26 break; 27 } 28 else if (cardNb == card[j].CardNum) //判断是否存在该转账人信息 29 { 30 Console.WriteLine("请输入转账金额:"); 31 double changeMoney = double.Parse(Console.ReadLine()); 32 if (changeMoney > card[i].Money) //判读余额是否足够转账 33 { 34 Console.WriteLine("操作失败!!您的余额不足!"); 35 break; 36 } 37 else 38 { 39 card[i].Money -= changeMoney; //转账人扣除相应的金额 40 card[j].Money += changeMoney; //接收人增加相应金额 41 Console.WriteLine("转账成功!!!"); 42 break; 43 } 44 } 45 } 46 break; 47 } 48 } 49 Welcome(); 50 }
转账功能有比较多的层次嵌套的关系,建议大家多看几遍,理清思路,如果以上代码大家都理解了,那么久进入我们最简单的用户部分了。
1 namespace Bank 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Bank bank = new Bank(); //创建Bank对象 8 bank.InitialData(); //引用方法 9 bank.show(); 10 Console.ReadLine(); //屏幕停留 11 } 12 } 13 }
好了,到这里整个Bank系统就完成了,如有做得不好的地方希望各位大神多多包涵,毕竟是第一次写博客大家谅解哈....不过还是希望能够对大家有一定的帮助作用,哪怕是一点点儿,这样我的时间也没有白费,哈哈,下次再约咯~~~~