论那些年我们讨论过的Bank系统!

今天呢我就和大家分享一下怎样用对象数组的形式来实现一个简单的银行系统, 首先呢,跟大家介绍一下这个简单的银行操作系统要实现的一些主要的功能:

主要功能有 

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系统就完成了,如有做得不好的地方希望各位大神多多包涵,毕竟是第一次写博客大家谅解哈....不过还是希望能够对大家有一定的帮助作用,哪怕是一点点儿,这样我的时间也没有白费,哈哈,下次再约咯~~~~

  

时间: 2024-10-12 15:15:29

论那些年我们讨论过的Bank系统!的相关文章

搞死人不偿命的 Bank系统

每一个成功者都有一个开始.勇于开始,才能够找到通往成功的路. 最近C#进行到第三章:升级Mybank,发现这是一个我个人觉得比较难搞的一个东西,一下是我对Bank系统难点的叙述,请大神笔下留情~ 1.使用Main方法调用: 2.创建一个卡类,卡类里存储为卡的信息: 3.创建一个Bank类,new出一个新的数组: 4.给每一项数组赋值,并记录卡上用户信息: 其余简单代码我就不一一介绍,以下为Bank系统主要代码(这一段代码可是废了我不少脑细胞呢),所以相对于是整个Bank系统的核心代码: 6.使用

Bank系统

    奋斗不能等待,我们不能等到垂暮之年再去“全力以赴”.让我们从现在开始,为理想而努力,为人生而拼搏.精诚所至,金石为开,相信奋斗会让我们的青春之花绽放得更加绚烂,让我们的人生之路走下来不留遗憾. 一.我带大家看看我的神奇Bank系统思路. 1.我们都知道去银行办理业务都是要有一张属于你自己的卡    所以这里就需要一个卡的类 class Card { private string cardNo;//卡号 private string cardOwner;//持卡人 private stri

亲们! 首次见面! 带来不适!多多见谅!---------&gt;&gt;Bank系统

亲们!您们好! 讲一下Bank系统的做法: 01.首先创建一个Card类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace VS1 { //账号类 public class Card { //姓名 public string name; //账号 public string account; //

KTV点歌系统

巴黎的雨季 博客园 首页 新随笔 联系 订阅 管理 随笔 - 57  文章 - 0  评论 - 37 KTV点歌系统 经过十多天的艰苦奋战,MyKTV点歌系统终于成型,从刚开始接到项目的茫然,到完成项目时的喜悦,整个过程的艰辛和付出只有自己知道.虽然这个项目还有许多需要完善的地方,譬如添加歌词信息,实现窗体的美化等,这些在后续时间里我再一一进行一个完善吧! 首先呢,我先将整个项目所能实现的功能做一个简单的介绍,KTV点歌系统包括了前台和后台两大部分,前台的功能就是能够根据客户的需求来实现点歌操作

适应多场景应用的web系统架构探讨

背景: 虽然身处互联网时代,但还有很多信息系统仍运行在内部网络中,例如,企事业内部的OA系统,医院的HIS系统,银行的管理系统等.软件公司会针对系统应用环境,对信息系统进行逻辑业务上的修改.因此,本文主要介绍一种适应于多场景应用的web系统架构,供相关人员讨论研究. 1 系统框架图 2 分层的优势 (1)解耦:降低代码耦合度,允许前后端的分离,显示与业务的分离,前端开发与后台开发的分离. (2)复用:面向接口编程,面向接口实现,面向接口形成文档,提高接口函数的复用. (3)固化通用业务逻辑. (

Delphi获取当前系统时间(使用API函数GetSystemTime)

在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书”)第89页专门介绍了两种获取当前系统时间的方法,但这两种方法都存在不足或错误,以下就此进行讨论. 该书第一种方法是利用Time()函数获得当前系统时间,返回结果是TDateTime结构类型的变量.例如: procedure TForm1.Button2Click(Sender: TObject); var D

Windows系统版本判定那些事儿

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colb

《深入理解Android 卷III》第五章 深入理解Android输入系统

<深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分.在一个特别讲究颜值的时代,本书分析了Android 4.2中WindowManagerService.ViewRoot.Input系统.StatusBar.Wallpaper等重要"颜值绘制/处理"模块 第5章 深入理解Android输入系统(节选) 本章主要内容: ·  研究输入事件从设

继承与混合,略谈系统的构建方式

http://blog.csdn.net/aimingoo/article/details/6062997 这两天在读kissy的源代码,从一开始我就对它的mix()函数充满了敌意.因为无论从哪个角度来看,那都是一个极其低效的实现.不过深入了解这个框架之后,我对kissy中的新的系统构建的模型产生了兴趣,而这种系统构建的方式,也正是由mix()所带来的. 一.对象系统 我们先了解一下对象系统.在<JavaScript语言精髓与编程实践>中谈到过,面向对象系统有三种对象的继承方式,即原型.类和元