锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C#面向对象练习ATM模拟练习
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究

C#面向对象练习ATM模拟练习

 

面向对象的锻炼非常重要,初学者一般不太好找练习,找到练习又不太好认真动手练习,锐英源软件有C#在线教育,欢迎考虑加入,指导思路和动手,耐心认真把关教学。

这个ATM模拟程序主要包含四个类:Bank,ATM,Account和Program。我们在学习他人的代码时,要从程序入口Main函数开始。
在这个程序里,Program为主类。
Bank bank = new Bank(“XYZ银行”);       
ATM atm = new ATM(bank);
atm.Start();
ATM机属于银行,所以在开始时需要初始化银行,我们再新建一个ATM机,在ATM机存在以后才能使程序正常开始。
存款、取款、查询余额和修改密码为用户可选择的操作项,选择后再进入对应的功能。在每一级操作完成后,都可以选择退出返回上一级操作,直至第一次用户选择处。在这个程序中,开户和登录为两个同一级的循环,成功操作则向下进行,失败则返回循环开始处重新进入循环。
while (true)
{
// 主界面
PrintLogo();
Console.WriteLine("       1. 开户                                ");
Console.WriteLine("       2. 登录                                ");
Console.WriteLine("----------------------------------------------");
Console.WriteLine("");
Console.Write("你的选择(回车结束):");
string code = Console.ReadLine();

                // quit system
if (code == quitCode)
return;

 

                if (code == "1")            // 开户
OpenAccount();
else if (code == "2")       // 登陆
LoginAccount();
}
首先来看这个程序的整体逻辑。用户首先需要选择开户或者登录的操作,如果是新用户,则需要通过输入账户名和密码来开户;如果已有账户,则可以直接登录账户进入到下一步管理账户。
while (true)
{
// 管理帐号界面
PrintLogo();
Console.WriteLine("       1. 存款                                ");
Console.WriteLine("       2. 取款                                ");
Console.WriteLine("       3. 查询余额                            ");
Console.WriteLine("       4. 修改密码                            ");
Console.WriteLine("       5. 退出                                ");
Console.WriteLine("----------------------------------------------");
Console.WriteLine("");
Console.Write("你的选择(回车结束):");
string code = Console.ReadLine();

                decimal amount;
bool succeed;
switch (code)
{
case "1":
amount = InputNumber("\n输入存款数目:");
succeed = account.Deposit(amount);
if (succeed)
{
Print("存入", amount, account);
}
else
{
Console.WriteLine("存款失败!");
}
Pause();
break;
case "2":
amount = InputNumber("\n输入取款数目:");
succeed = account.Withdraw(amount);
if (succeed)
{
Print("取出", amount, account);
}
else
{
Console.WriteLine("取款失败!");
}
Pause();
break;
case "3":
Print(account);
Pause();
break;
case "4":
string oldPassword = Input("当前密码(回车结束):");
string newPassword = Input("新密码(回车结束):");
succeed = account.ChangePassword(oldPassword, newPassword);
if (succeed)
Console.WriteLine("密码修改成功!");
else
Console.WriteLine("密码修改失败!");
Pause();
break;
case "5":
return;
default:
break;
}

            }
在取款这一部分有一点需要注意的是,用户输入取款数目之后Account类会首先用一个if条件语句进行判断,若输入值大于余额或者为负值时,取款操作不能正常进行。
public bool Withdraw(decimal amount)
{
if (amount > balance || amount <= 0)
return false;
balance -= amount;
return true;
}
public bool Withdraw(double amount)
{
return Withdraw((decimal)amount);
}
public bool Withdraw(int amount)
{
return Withdraw((decimal)amount);
}
public bool Withdraw(decimal amount, out decimal balance)
{
bool succeed = Withdraw(amount);
balance = this.balance;
return succeed;
}
在取款方法中,我们可以注意到,有三个参数类型不同、但都名为Withdraw的方法,这里体现了Withdraw方法的重载,形式为参数个数相同,但参数类型不同的重载。存款部分也是类似的,存在三种重载,decimal型、double型、int型,最终都会返回为decimal型。
在这存款、取款、查询余额或者修改密码操作完成后,会重新返回这一层循环的入口,可以选择进入下一层循环。若选择退出,则这一层循环结束,跳出循环,返回程序开始ATM.Start()处。

友情链接
版权所有 Copyright(c)2004-2015 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:A、郑州市芯互联大厦北楼1803A(文化路优胜北路西北角),B、郑州大学北校区院内