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

主要功能有 

1.开户功能  2.存款  3.取款  4.转账  5.查询余额  6.修改密码  7.展示客户信息  8.初始化数据

首先,我们拿到这个项目要做的第一件事就是去分析,看能够提取出哪些类,我们用图解的形式来简单演示一遍吧~

我们可以看到,Bank系统我们总共提取出了三个类,分别是银行卡类,银行类,用户类 , 其中大家可以看到银行类是关键,大部分的方法和代码都在银行类里面呢。

接下来就正式给大家讲解一下整个系统的代码部分,第一步呢,我们已经分析过了,该系统分为三个类,所以我们分别创建Bank类Card类和Customer类(Customer类也就是我们讲的测试类)

我们先来创建一个Card类,里面内容如下:

 namespace Bank
{
class Card
{
private int cardNum; //卡号
private string cardName; //持卡人
private int password; //密码
private double money; //余额
//pirvate为私有的,也就是说将信息给加密了,不是任何人都能够随意访问到
//的,要访问就必须通过属性访问。(该信息已设为字段) public double Money //这就是字段的属性
{
get { return money; }
set { money = value; }
}
public int Password
{
get { return password; }
set { password = value; }
} public string CardName
{
get { return cardName; }
set { cardName = value; }
} public int CardNum
{
get { return cardNum; }
set { cardNum = value; }
} }
}

好的,我们已经完成了一个Card类的创建,接下来进入我们的重点中的重点,也是整个系统的核心部分!!!!!

Bank类的创建,下面我还是用代码来给大家演示一下。

 class Bank
{
Card[] card=new Card[]; //定义卡的对象数组 //给前三张卡初始化
public void InitialData()
{
Card card1 = new Card(); //创建卡的第一个对象
card1.CardName = "张三";
card1.CardNum = ;
card1.Password = ;
card1.Money = ;
card[] = card1; //将第一个卡的对象中的元素存储到数组中去. Card card2 = new Card(); //创建卡的第二个对象
card2.CardName = "李四";
card2.CardNum = ;
card2.Password = ;
card2.Money = ;
card[] = card2; //将第二个卡的对象中的元素存储到数组中去. Card card3 = new Card(); //创建卡的第三个对象
card3.CardName = "王五";
card3.CardNum = ;
card3.Password = ;
card3.Money = ;
card[] = card3; //将第三个卡的对象中的元素存储到数组中去. }
}

我们可以看到上面这段代码,第一步便是创建了一个对象数组,紧接着我们定义了一个初始化数据的方法
我们每初始化一张Card对象前都先创建了一个空的对象,然后用这个创建的对象名点上Card类中的属性,具体请参考代码8~13行,其中第十三行代码是个关键!!关键!!关键!!意思是说将我初始化好的第一个Card的数据作为一个对象存储到第一个Card的对象的数组中去,作为对象数组中的第一项,注意!!这里我们传入的不是单单的一个数据,而是一个对象!!!对象!!理解第一个后,后面的跟它是一样的,这里可能要各位多花一些时间去理解理解。

初始化的方法我们讲完了,接下来我们讲接下来的一个方法,制作一个欢迎界面,相对而言,这部分代码就比较简单了。我们来看看具体的代码。

  //欢迎界面
public void Welcome()
{
Console.WriteLine("欢迎进入自主ATM系统");
Console.WriteLine("功能:1.开户 2.存款 3.取款 4.查询余额 5.转账 6.修改密码 .展示用户信息 .退出");
Console.WriteLine("请选择您要操作的功能:");
string select = Console.ReadLine();
switch (select)
{
case "":
//开户
GetCard();
break;
case "":
//存款
SaveMoney();
break;
case "":
//取款
GetMoney();
break;
case "":
//查询余额
InquiryMoney();
break;
case "":
//转账
ChangeMoney();
break;
case "":
//修改密码
RevisePassword();
break;
case "":
//展示客户信息
show();
break;
case "":
Console.WriteLine("成功退卡!");
break; }
}

这里就只是运用到了一个简单的switch选择结构,这部分比较简单所以我就不做详细的讲解了。接下来我们来看看开户功能的方法,代码如下

       //开户功能
public void GetCard()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine());
Console.WriteLine("请输入用户名");
string cardOwner = Console.ReadLine();
Console.WriteLine("请输入开户金额");
double balance = double.Parse(Console.ReadLine()); //将新增的用户存储到对象数组当中
Card cards = new Card();
cards.CardName = cardOwner;
cards.CardNum = cardNo;
cards.Money = balance;
cards.Password = cardPwd;
for (int i = ; i < card.Length; i++)//遍历数组,找到为空值的位置
{
if (card[i] == null)
{
card[i] = cards; //将新增的对象存储到数组为空值的位置
Console.WriteLine("开户成功!!!");
break;//千万不能忘记跳出循环!!!!!
}
}
Welcome();
}

大家如果有不懂的地方可以看看代码中的注释,接下来的方法我都将以注释的形式为大家解释,这样更能帮助同学们进行一个理解。

下面跟大家分享下其他的方法

    //存款功能
public void SaveMoney()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine()); //遍历数组,判断是否有该用户
for (int i = ; i < card.Length; i++)
{
if (card[i] == null) //判断当前项是否为空值,如果为空值则表示没有该卡信息
{
Console.WriteLine("输入相关卡的信息错误!");
break;
}
//如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合
else if (cardNo == card[i].CardNum && cardPwd == card[i].Password)
{
Console.WriteLine("请输入要存款的金额:");
double savemoney = double.Parse(Console.ReadLine());
if (savemoney > )//判断存款是否合法
{
card[i].Money += savemoney;//在数组中的当前项更新数据
Console.WriteLine("存款成功!!\n当前余额:{0}", card[i].Money);
break;
}
else//输入存款不合法
{
Console.WriteLine("输入的存款金额不正确!!!");
break;
}
}
}
Welcome();//引用欢迎界面
}
   //取款功能
public void GetMoney()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine());
//遍历数组,判断是否有该用户
for (int i = ; i < card.Length; i++)
{
if (card[i] == null) //判断当前项是否为空值,如果为空值则表示没有该卡信息
{
Console.WriteLine("输入相关卡的信息错误!");
break;
}
//如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合
else if (cardNo == card[i].CardNum && cardPwd == card[i].Password)
{
Console.WriteLine("请输入取款金额:");
int getmoney = int.Parse(Console.ReadLine());
if (getmoney < card[i].Money)//判断取款金额是否小于余额
{
card[i].Money -= getmoney;//更新数据
Console.WriteLine("取款成功!!当前余额:{0}", card[i].Money);
break;
}
else
{
Console.WriteLine("操作失败,您的余额不足!!!");
break;
}
} }
Welcome();
}
        //查询余额功能
public void InquiryMoney()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine());
//遍历数组,判断是否有该用户
for (int i = ; i < card.Length; i++)
{
if (card[i] == null)//判断当前项是否为空值,如果为空值则表示没有该卡信息
{
Console.WriteLine("输入相关卡的信息错误!");
break;
}
//如果不是空值判断输入的用户名和密码是否与数组中存储的数据相符合
else if (cardNo == card[i].CardNum && cardPwd == card[i].Password)
{
//输出相关卡的信息
Console.WriteLine("当前卡的信息为:");
Console.WriteLine("持卡人:{0}\n卡号:{1}\n当前余额:{2}",card
[i].CardName,card[i].CardNum,card[i].Money);
break;
} }
Welcome();
}
 //修改密码功能
public void RevisePassword()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine());
for (int i = ; i < card.Length; i++)
{
if (card[i] == null)
{
Console.WriteLine("输入相关卡的信息错误!");
break;
}
else if (cardNo == card[i].CardNum && cardPwd == card[i].Password)
{
Console.WriteLine("请输入修改密码:");
int newPassword = int.Parse(Console.ReadLine());
card[i].Password = newPassword;//更新数据
Console.WriteLine("修改密码成功!!!");
break;
} }
Welcome();
}
 //展示用户信息功能
public void show()
{
foreach (Card item in card) //foreach循环输出对象数组中的对象值
{
if (item!= null)
{
Console.WriteLine("用户名:{0}\t账号:{1}",item.CardName,item.CardNum);
}
}
Welcome();
}

接下来就到了比较麻烦的转账功能了,请大家仔细理解代码,理清逻辑关系

  //转账功能
public void ChangeMoney()
{
Console.WriteLine("请输入卡号");
int cardNo = int.Parse(Console.ReadLine());
Console.WriteLine("请输入密码");
int cardPwd = int.Parse(Console.ReadLine());
for (int i = ; i < card.Length; i++)
{
if (card[i] == null)
{
Console.WriteLine("输入相关卡的信息错误!");
break;
}
else if (cardNo == card[i].CardNum && cardPwd == card[i].Password) //判 断账户和密码是否正确
{
Console.WriteLine("请输入对方卡号:");
int cardNb = int.Parse(Console.ReadLine());
for (int j = ; j < card.Length; j++)
{
if (card[j] == null)
{
Console.WriteLine("输入信息错误!!");
break;
}
else if (cardNb == card[j].CardNum) //判断是否存在该转账人信息
{
Console.WriteLine("请输入转账金额:");
double changeMoney = double.Parse(Console.ReadLine());
if (changeMoney > card[i].Money) //判读余额是否足够转账
{
Console.WriteLine("操作失败!!您的余额不足!");
break;
}
else
{
card[i].Money -= changeMoney; //转账人扣除相应的金额
card[j].Money += changeMoney; //接收人增加相应金额
Console.WriteLine("转账成功!!!");
break;
}
}
}
break;
}
}
Welcome();
}

转账功能有比较多的层次嵌套的关系,建议大家多看几遍,理清思路,如果以上代码大家都理解了,那么久进入我们最简单的用户部分了。

 namespace Bank
{
class Program
{
static void Main(string[] args)
{
Bank bank = new Bank(); //创建Bank对象
bank.InitialData(); //引用方法
bank.show();
Console.ReadLine(); //屏幕停留
}
}
}

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

  

 

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

  1. 神奇的Bank系统之旅哦

        奋斗不能等待,我们不能等到垂暮之年再去“全力以赴”.让我们从现在开始,为理想而努力,为人生而拼搏.精诚所至,金石为开,相信奋斗会让我们的青春之花绽放得更加绚烂,让我们的人生之路走下来不留遗憾. ...

  2. 亲们! 首次见面! 带来不适!多多见谅!--------->>Bank系统

    亲们!您们好! 讲一下Bank系统的做法: 01.首先创建一个Card类 using System; using System.Collections.Generic; using System.Li ...

  3. 我们为之奋斗过的C#-----Bank系统

    首先感谢大家抽出宝贵的时间来看这个Bank系统,这是我最近学的Bank系统,你们看我刚一学完就给你们分享了我的所学以及学习的一些经验,所以大家一定要耐心看下去,真的你会有所收获的,不信你看看.下面话不 ...

  4. 搞死人不偿命的 Bank系统

    每一个成功者都有一个开始.勇于开始,才能够找到通往成功的路. 最近C#进行到第三章:升级Mybank,发现这是一个我个人觉得比较难搞的一个东西,一下是我对Bank系统难点的叙述,请大神笔下留情~ 1. ...

  5. 银行bank系统项目实践

    想看项目的注意了!完整版银行管理系统就在这里看不看你看着办! 按照惯例咱们还是先来看一下项目需求: 某银行为了提高业务率希望开发一个银行管理系统功能如下: 1.能够完成用户开户操作 2.能够完成用户取 ...

  6. Issue 6: 装机系列1,PC下windows系统安装指南

    0.前言 接触电脑将近7年时间,多次说要写下这篇文章,一直未曾提笔,始终怕给人以误导.到如今,来来回回装系统的次数得超过百次了.本着不误导人的想法,本文试着总结一下装系统的基本方法和思路,但不会过多涉 ...

  7. linux基础-第十一单元 系统监控

    第十一单元 系统监控 系统监视和进程控制工具-top和free top命令的功能 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序 ...

  8. 用Delphi获取当前系统时间

    在开发应用程序时往往需要获取当前系统时间.尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题. 在<融会贯通--Delphi4.0实战技巧>(以下简称“该书” ...

  9. C语言嵌入式系统编程修炼之一:背景篇

    不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...

随机推荐

  1. iis7下iis安全狗不能用怎么办(安装iis6兼容性)

    is7下iis安全狗不能用怎么办 | 浏览:126 | 更新:2015-05-14 17:11 1 2 3 4 5 6 分步阅读 windows系统iis安全狗是常用的一款软件,针对网站使用很方便.在 ...

  2. [AX 2012] Woker user request

    在HR模块和System administrator模块下都能找到Woker user request这个功能,它的作用是为员工创建一个AX账号.比如我们创建一个这样的user request: 注意 ...

  3. [转]mac 10.9.4下配置apache

    出处:http://yjmyzz.cnblogs.com mac 10.9.x已经自带了apache,可按如下步骤开启: 1.启动 sudo apachectl start 启动后,访问 http:/ ...

  4. sql server 2008安装过程中服务器配置出错

    请选择:对所有 SQL Server 服务使用相同的账号: 但这里不能给他设置自己定义的账号和密码 ( 例如下面设置它的账号为 sa ,密码为 654321) 就会发生错误:

  5. ASP.NET 如何发现问题的方法

    1.打开IntelliTrace,查看遇到的问题: 2.打开IE8以上,按F12,启动js调试,查看遇到的错误:

  6. (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)

      异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...

  7. 当您尝试从 64 位 SQL Server 客户端上运行分布式的查询到链接的 32 位 SQL Server 时,您可能会收到一条错误消息

    如何处理64位SQL访问32位SQL执行脚本语句问题 链接服务器"SERVER_YBJK"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 &qu ...

  8. js map

    // js通用方法 // map对象定义 function Map() { var struct = function(key, value) { this.key = key; this.value ...

  9. datagrid 动态列

    var options={}; $(function(){ var myNj = 9; //初始化 $("#disgrid").datagrid({ type: 'POST', n ...

  10. 二叉树系列 - 二叉搜索树 - 线性时间内把有序链表转化为BST

    引言 本文来自于Google的一道题目: how to merge two binary search tree into balanced binary search tree. how to me ...