一、编程说明
在上一篇博客中,笔者通过Scanner实现了由键盘对银行账户的控制,虽说直观性更强一些,但是复杂度也增加了不少,甚至造成最后编出的代码有点离题的意思。因此在借鉴了网上的代码并加以自己的理解、修改和补充,重新书写博客以圆满完成本次编程练习。
借鉴说明:
作者:河工大某某
原文:https://blog.csdn.net/diOSyu/article/details/80215705
二、设计梗概
做一个简单的银行、账户演示程序。
(1)定义一个账户类,包含用户名、密码、余额等属性、存钱、取钱等方法。
(2)定义一个银行类,包含银行名、账户列表等属性,开账户、查账户的功能。账户列表可以使用集合相关的类,如ArrayList,最好同时使用泛型。
(3)定义一个测试类及main函数,在其中创建一个银行,开设一些账号,模拟存钱、取钱、显示余额等。
三、设计代码
代码内容作出了详细注解,并且添加了closeAccount方法,完善和修改了部分方法,使得代码可读性更强。
/*
* @项目名称:银行账户演示程序
* @作者:IMUHERO
* @创作时间:2019/2/20
* @实现功能:做一个简单的银行、账户演示程序。
(1)定义一个账户类,包含用户名、密码、余额等属性、存钱、取钱等方法。
(2)定义一个银行类,包含银行名、账户列表等属性,开账户、查账户的功能。账户列表可以使用集合相关的类,如ArrayList,最好同时使用泛型。
(3)定义一个测试类及main函数,在其中创建一个银行,开设一些账号,模拟存钱、取钱、显示余额等。
* */
package NewBank;
import java.util.ArrayList;
public class test {
public static void main(String[]arg){
Bank bank = new Bank("HDBank");
bank.openAccount("xiaoming","666",0);
bank.openAccount("xiaoli","777",0);
bank.openAccount("xiaohong","888",0);
bank.saveMoney("xiaoli",100);
//向特定账户存钱
bank.drawMoney("xiaoli",50,"777");
//从特定账户取钱,需验证密码
bank.showAccount("xiaoli");
//显示xiaoli账户信息
bank.drawMoney("xiaoli",100,"a wrong password");
//密码错误,取钱失败的情况
bank.drawMoney("xiaoli",100,"777");
//余额不足的情况
bank.closeAccount("xiaoming");
bank.showAccount("xioming");
//关闭账户,以及通过账户信息显示来判断是否关闭成功
}
}
/*
* @类名:账户类
* @作者:IMUHERO
*功能:实现账户的底层功能,包括获取账户名,密码,余额,验证账号密码是否正确等功能
* */
class Account{
String name;
String password;
double banlance;
//构造方法,获得账户名,密码,和余额
Account(String name,String password,double banlance){
this.name=name;
this.password=password;
this.banlance=banlance;
}
//返回账户名的方法
public String getName(){
return name;
}
//返回密码的方法
public String getPassword(){
return password;
}
//放回账户信息:账户名+余额的方法
public void show(){
System.out.printf("userName:%s\n",name);
System.out.printf("balance:%.2f\n",banlance);
}
//测试用户登录的账户名和密码是否正确
public void accountTest(String name,String password){
if(name.equals(this.name)){
if(password.equals(this.password))System.out.println("账号密码输入正确,欢迎您的使用");
}else System.out.println("本行无此账号,请重新输入");
}
//存钱方法
public void save(double money){
banlance+=money;
System.out.println("已存入:,"+money+"目前账户余额为:"+banlance);
}
//取钱方法
public void draw(double money){
if(money>banlance){
System.out.println("欲取出金额:"+money+"元,大于当前存款:"+banlance+"元;取款失败!");
}else {
banlance-=money;
System.out.println("已取出:"+money+"元,账户余额:"+banlance+"元");
}
}
}
/*
* @类名:银行类
* @作者:IMUHERO
* @功能:用于银行后台操作:开账户、关账户、查账户等功能
* */
class Bank{
String bankName;
private ArrayList<Account>accounts;
//银行类构造方法:获取银行名,并且创建一个ArrayList
Bank(String bankName){
this.bankName=bankName;
accounts =new ArrayList<Account>();
}
//开账户方法:用于新开银行账户
public void openAccount(String name,String password,double banlance){
accounts.add(new Account(name,password,banlance));
}
//寻找账户方法:用于寻找该账户,并返回账户
public Account seekAccount(String userName){
for (Account account:accounts) {
if (userName.equals(account.getName())){
return account;
}
}
return null;
}
//关账户方法:用于关闭银行账户
public void closeAccount(String name) {
int number=accounts.indexOf(seekAccount(name));
accounts.remove(number);
}
//存钱方法
public void saveMoney(String name,double money){
Account account = seekAccount(name); //查找
if(account==null)
System.out.println("该账户不存在。");
else
account.save(money);
}
//取钱方法
public void drawMoney(String name,double money,String password){
Account account = seekAccount(name); //查找
if(account==null)
System.out.println("该账户不存在。");
else {
if(password.equals(account.getPassword())) {
account.draw(money);
}else {
System.out.println("密码不正确,取钱失败。");
}
}
}
//显示账户信息
public void showAccount(String userName){
Account account=seekAccount(userName);
if(account==null)
System.out.println("该账户不存在。");
else
account.show();
}
}
四、结果演示
注:
1.鉴于作者水平有限,文中疏漏在所难免,希望各位同行予以批评指正。
2.本文为作者原创文章,若欲转发请事先获得作者同意,谢谢合作。