简单银行系统实现登陆…
博客内容 使用类和方法,编写一个银行客户端系统,实现:用户登录,注册,存钱,取钱,转账,退卡等功能。主要代码如下。
注 里面涉及到的数组扩容,请参考我上片博客。
逻辑上是输入银行卡号和密码然后验证登录,我这里设置成l用户名和密码,所以请理解下(懒哈,但实现原理都是一样的);
class BankCard {
private String clientName;//用户名
private String password;//密码
private int accountNum;//账号
private int leftMoney;//余额
public BankCard(String clientName, String password, int accountNum, int leftMoney) {
this.clientName = clientName;
this.password = password;
this.accountNum = accountNum;
this.leftMoney = leftMoney;
}//有参构造方法
public BankCard() { }//无参
public String getClientName() { }
public void setClientName(String clientName) {}
//其余的一些get和set方法就不一一罗列了
}
class Bank{
public static void main(String[] args) {
//初始化一些值
BankCard [] bankcards = new BankCard[4];
BankCard bk0 = new BankCard("reba","reba123",1,10000);
BankCard bk1 = new BankCard("jzya","jzyal123",2,1);
BankCard bk2 = new BankCard("jack","jack123",3,129);
BankCard bk3 = new BankCard("tom","tom123",4,12312);
bankcards[0]=bk0;
bankcards[1]=bk1;
bankcards[2]=bk2;
bankcards[3]=bk3;
Scanner scanner = new Scanner(System.in);
String name = "";
String password = "";
//功能实现部分
while (true){
System.out.println("请选择:");
System.out.println("1.登录 2.注册 3.退出");
int select = scanner.nextInt();
if(select == 3)
return;
switch (select){
case 1:{
System.out.println("登录:");
name = scanner.next();
password = scanner.next();
if(login(bankcards,name,password)){
System.out.println("登录成功!!!");
}else {
System.out.println("登录失败,请核对你的账户和密码");
}
System.out.println("请输入选择");
while (true){
System.out.println("1.存钱 2.取钱 3.转账 4.退卡");//写一个ShowCount 显示操作后用户还有多少钱
int choice = scanner.nextInt();
if(choice==4){//跳出存钱子菜单
break;
}
switch (choice){
case 1:{
System.out.println("请输入要存的钱数");
int saveMoney=scanner.nextInt();
SaveMoney(bankcards,saveMoney,name);//都能登录进来,账户存在,存钱肯定成功
System.out.println("存钱成功");
showAccount(bankcards,name);
break;
}
case 2:{
System.out.println("请输入提取的金额:");
int takeMoney=scanner.nextInt();
if(takeMoney(bankcards,takeMoney,name)) {
System.out.println("取款成功,你提取了"+takeMoney+"¥");
showAccount(bankcards,name);
}else{
System.out.println("金额不足!");
}
break;
}
case 3:{
System.out.println("请输入接收方账户名和转账金额");
String aimName= scanner.next();
int transMoney = scanner.nextInt();
if(transfer(bankcards,name,aimName,transMoney)) {
System.out.println("转账成功");
showAccount(bankcards,name);
}
else {
System.out.println("转账失败");
break;
}
}
default:System.out.println("输入无效");
}
}
break;//跳出case1
}
case 2:{
System.out.println("请设置用户名和密码");
/*注册时,默认扩展内存为原来数组长度加1*/
BankCard bankCard[]= new BankCard[bankcards.length+1];
for(int i=0;i
public static boolean login(BankCard bankcards[],String name,String password){
if(bankcards==null)
return false;
for(int i=0;i
就从这块开始,我写的是“用户名和密码匹配”而不是真正银行里的“卡号和密码匹配”,有的不想改,懒(笑哭ing)。就是从键盘输入用户名和密码,和已经初始化的那些匹配,匹配到了返回true,main函数里调用结果为true,输出输出登录成功,进入下一级菜单(存钱 取钱 转账 退卡)
2.注册账号
public static boolean register(BankCard bankcards[],String name,String password){
Scanner scanner = new Scanner(System.in);
name = scanner.next();
password = scanner.next();
for(int i=0;i
这块涉及到了数组的扩容,main方法里数组长度定义为4,通过扩容,使得有空间存放新注册的用户。逻辑上就是输入想要注册的用户名和密码,要是已存在的此名字的用户,那就注册失败,没有设置主键,就把名字当做主键,虽然实际上有重名的,但要是账号为主键就没事。
3.存款
public static void SaveMoney(BankCard bankcards[],int saveMoney,String name){
//登录进来 所以账户肯定存在 不再做判断
for(int i=0;i
存款(取款)在登录成功后的子菜单下,所以登录成功后说明账户存在,把从main方法里传进的参数,加到用户的余额上就行。说到这,刚测试时随便存了个100000000000结果报错,溢出。所以还是把余额设置为String类型为好。
4.取款
public static boolean takeMoney(BankCard bankcards[],int takeMoney,String name){
for(int i=0;i=0){
bankcards[i].setLeftMoney(bankcards[i].getLeftMoney()-takeMoney);
return true;
}
}
}
return false;
}
取款和存款基本一样,逻辑上,判断账户余额>=取款金额,那就能取,然后把余额把取款金额减掉就行。限额,加个if语句判断一下就行,这块没写。要是分析代码和功能,那应该这个方法返回值定义为int或其类型,布尔类型只能用来判断“取款成功”和“取款失败”,无法把因为限额等存款原因返回。当然可以把输出语句写到成员方法里,那连返回值都不用了,但不建议把输出打印这些写在成员方法里。
5.显示账户状态
public static void showAccount(BankCard bankcards[],String name){
for(int i=0;i
显示用户状态,这个是内嵌在存款,取款,转账成功的页面内显示的,意思就是当完成交易可以提醒用户当前账户状态(用户名 账号 余额)。可以把这个嵌到登录成功后的菜单,用户登录后就可以查看账户当前状态。
6.转账
public static boolean transfer(BankCard bankcards[],String name,String aimName,int transMoney){
if(name.equals(aimName))
return false;//自己不能给自己转账
for(int i=0;i=0){
for(int j=0;j
转账这块,我用的双重循环和双重if判定,当登录用户账户余额>=要转账金额&&收款人账户存在才可以进行转账操作。总觉得有点啰嗦这样写,但没有找到好方法。大神有好方法麻烦指点一下。