写这个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[];

②然后开始写欢迎菜单和选项(开户,存款,取款,转账,查询余额,退出),你懂得,switch结构:

  //初始化三个用户信息
public void Initial()
{
userGroup[] = new User();
userGroup[].Name = "王丽丽";
userGroup[].Account = "";
userGroup[].IdName = "";
userGroup[].Balance = ;
userGroup[].PassWord = ;
userGroup[] = new User();
userGroup[].Name = "张莹莹";
userGroup[].Account = "";
userGroup[].IdName = "";
userGroup[].Balance = ;
userGroup[].PassWord = ;
userGroup[] = new User();
userGroup[].Name = "刘华";
userGroup[].Account = "";
userGroup[].IdName = "";
userGroup[].Balance = ;
userGroup[].PassWord = ; }
//菜单
public void showMenu()
{
int temp = ;
do
{
Console.WriteLine("====================欢迎使用自动银行服务========================");
Console.WriteLine("1:开户\t2:存款\t3:取款\t4:转账\t5:查询余额\t6:退出");
Console.WriteLine("================================================================");
string result = Console.ReadLine();
switch (result)
{
case "":
newUser();
break;
case "":
saveMoney();
break;
case "":
getMoney();
break;
case "":
transferAccount();
break;
case "":
getBalance();
break;
case "":
temp = -;
break;
default:
Console.WriteLine("输入错误,请检查重输.");
break;
}
} while (temp==);
}

③好了准备工作做完了,我分析了一下开户,存款,取款,转账,查询。发现很多都需要遍历User对象数组查找账号(和对应的下标),然后判定密码。好了,这里需要两个方法:judgeAccount(判定账号);judgePWD(判定密码);如下:

//输入账号判定,返回-1或-2则为没有该账号,返回i值(0或正整数)则为有该账号,并且账号的下标为i
public int judgeAccount(string account)
{
int i = -;
bool result = false;
foreach (User item in userGroup)
{
if (item==null&&result==false)
{
i = -;
break;
}
else if (item==null&&result==true)
{
break;
}
else
{
i += ;
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 ;
}
else
{
return -;
}
}

到这里就要开始真正的关键的主要的必须的:开户(newUser();),存款(saveMoney()),取款(getMoney()),转账(transferAccount()),查询余额(getBalance())方法了:

④ 开户::::::::::::::::::::::::::::::::::::::

//开户
public void newUser()
{
int i = ;
foreach (User item in userGroup)
{
if (item!=null)
{
i += ;
}
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 < )
{
Console.WriteLine("没有该账号,请重新输入");
saveMoney();
}
do
{
Console.WriteLine("请输入密码:");
int result=judgePWD(int.Parse(Console.ReadLine()), xiabiao);
if (result == )
{
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<)
{
Console.WriteLine("没有该账号,请检查重输");
getMoney();
} do
{
Console.Write("请输入密码:");
int passWord = int.Parse(Console.ReadLine());
int result = judgePWD(passWord, xiabiao);
if (result<)
{
Console.WriteLine("密码错误,请检查重输");
continue;
}
break;
} while (true);
double getmoney;
do
{
Console.WriteLine("账户余额:" + userGroup[xiabiao].Balance);
Console.Write("请输入取款金额(本机只允许取整百人民币:");
getmoney = double.Parse(Console.ReadLine());
if (getmoney%!=)
{
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 < )
{
Console.WriteLine("没有该账号,请检查重输");
continue;
}
Console.Write("请输入密码:");
int passWord = int.Parse(Console.ReadLine());
int result = judgePWD(passWord, zhuanchuxiabiao);
if (result < )
{
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 < )
{
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 < )
{
Console.WriteLine("没有该账号,请重新输入");
continue;
}
break;
} while (true);
do
{
Console.Write("请输入密码:");
int passWord = int.Parse(Console.ReadLine());
int result = judgePWD(passWord, xiabiao);
if (result < )
{
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();
}

完美,遇见了谁!

Bank,我只是来完成作业的的更多相关文章

  1. JAVA作业三

    (一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...

  2. JAVA第十次作业

    JAVA第十次作业 (一)学习总结 1.用思维导图对java多线程的学习内容进行总结. 参考资料: XMind. 2.下面是一个单线程实现的龟兔赛跑游戏. public class TortoiseH ...

  3. C#基础第九天-作业答案-储蓄账户(SavingAccount)和信用账户(CreditAccount)

    class Bank { //Dictionary<long,Account> dictionary=new Dictionary<long,Account>(); DataT ...

  4. C#基础第八天-作业答案-设计类-面向对象方式实现两个帐户之间转账

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账

    要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...

  6. Python学习day5作业

    目录 Python学习day5作业 ATM和购物商城 1. 程序说明 2. 基本流程图 3. 程序测试帐号 4. 程序结构: 5. 程序测试 title: Python学习day5作业 tags: p ...

  7. CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写

    互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...

  8. 以bank account 数据为例,认识elasticsearch query 和 filter

    Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...

  9. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

随机推荐

  1. 深入浅出设计模式——装饰模式(Decorator Pattern)

    模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静 ...

  2. 程序设计入门——C语言 第2周编程练习 1时间换算(5分)

    1 时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

  3. LCT专题练习

    [bzoj2049]洞穴勘测 http://www.cnblogs.com/Sdchr/p/6188628.html 小结 (1)LCT可以方便维护树的连通性,但是图的连通性的维护貌似很麻烦. [bz ...

  4. python之map、filter、reduce、lambda函数 转

    python之map.filter.reduce.lambda函数  转  http://www.cnblogs.com/kaituorensheng/p/5300340.html 阅读目录 map ...

  5. zoj 2833 friendship

    zoj 2833这次真的很顺利了..居然是因为数组的大小没有符合要求,瞎折腾了很久..没有注意到要求范围,真是该死! 想法很简单,就是定义一个父结点数组,下标 i 表示这个元素,初始化为 -1表示 这 ...

  6. 关于OPencv版本不符合,相关库变化问题

    由于OPencv发展迅速,已经省略了很多原来的库文件,奈何自己才疏学浅,所以只能把OPencv 1.0中的相关版本中的库文件一直过去. 链接: http://pan.baidu.com/s/1qY1Z ...

  7. dedecms最新版本修改任意管理员漏洞+getshell+exp

    此漏洞无视gpc转义,过80sec注入防御. 补充下,不用担心后台找不到.这只是一个demo,都能修改任意数据库了,还怕拿不到SHELL? 起因是全局变量$GLOBALS可以被任意修改,随便看了下,漏 ...

  8. 3d加速的一些问题

    笔记本一般有双显卡,默认可以切换,但是使用浏览器打开的要合适的浏览器 打开WEBGL程序,包括驱动,浏览器,有时候需要手工设置独立显卡 一般来说价钱四五千以上的笔记本电脑都是支持WEBGL的,而且可以 ...

  9. bat脚本 -- 初步接触

    服务器上的Tomcat 经常过一段时间就会死掉,为了防治Tomcat突然当掉影响业务,设置一个定时重启计划. bat脚本如下: @echo restart tomcat6 service, log t ...

  10. Windows Server 2003从入门到精通之Windows Media Server流媒体服务器架建[转]

    今天我们来做一个windows media server流媒体格式文件的流媒体服务器. 现在市面上能够买到的一些电影文件有 rm格式和wmv格式.还有一些是DivX技术的avi格式,要想让你的服务器对 ...