您的位置:首页 > 编程语言 > Java开发

JavaSE 模拟银行ATM取款机功能

2009-12-16 17:06 211 查看
对于一个银行自动取款机来说,其实只有两个类:分别是银行卡类-BankCard;取款机类-ATM。

1 银行卡类

/**
* @王永涛--2009-8-6,模拟银行自动取款机功能!(最原始版本,以后可扩展!)
* 对于一张银行卡来说,它就有四个属性:卡号,用户名,密码,剩余存款。
* 对于ATM机来说,它的属性就是单次取款额,银行卡对象,密码校验次数等。

* 方法:校验卡号密码,取款,存款,转账,查询余额,显示界面,退出。
*/
package wyt.com.cn;

public class BankCard
{
private String CardNum;
private String UserName;
private String PassWord;
private int LeftMoney;
public BankCard()
{
this.CardNum=null;
this.UserName=null;
this.PassWord=null;
this.LeftMoney=0;

}
public String getCardNum()
{
return CardNum;
}
public void setCardNum(String cardNum)
{
this.CardNum = cardNum;
}
public String getUserName()
{
return UserName;
}
public void setUserName(String userName)
{
this.UserName = userName;
}
public String getPassWord()
{
return PassWord;
}
public void setPassWord(String passWord)
{
this.PassWord = passWord;
}
public int getLeftMoney()
{
return LeftMoney;
}
public void setLeftMoney(int leftMoney)
{
this.LeftMoney = leftMoney;
}

}


2 ATM类

package wyt.com.cn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Date;
import java.sql.Date;

/**
* @王永涛--2009-8-6,模拟银行自动取款机功能!
*/
public class ATM implements MethodInterface
{
private int OnceMoney;//单次最大取款数目
private int TakeMoney;
private BankCard bc=null;
private BankCard bd=null;
private int times=0;

public int getOnceMoney()
{
return OnceMoney;
}
public void setOnceMoney(int onceMoney)
{
OnceMoney = onceMoney;
}
public int getTakeMoney()
{
return TakeMoney;
}
public void setTakeMoney(int takeMoney)
{
TakeMoney = takeMoney;
}
public static void main(String[] args)
{
BankCard bc=new BankCard();
bc.setCardNum("111");
bc.setUserName("王永涛");
bc.setPassWord("***");
bc.setLeftMoney(10000);

BankCard bd=new BankCard();
bd.setCardNum("222");
bd.setUserName("王永涛");
bd.setPassWord("***");
bd.setLeftMoney(10000);

ATM atm=new ATM();
atm.OnceMoney=5000;
atm.Verify(bc,bd);
}
//	验证卡号密码
public void Verify(BankCard bc,BankCard bd)
{
this.bc=bc;
this.bd=bd;
String cardnum=null;
String password = null;

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try
{
System.out.println("请输入卡号:");
cardnum=br.readLine();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
System.out.println("请输入密码:");
password=br.readLine();
} catch (IOException e)
{
e.printStackTrace();
}

if(bc.getCardNum().equals(cardnum)&& bc.getPassWord().equals(password))

{
ShowView();
}
else
{
if(times<3)
{
if(times==2)
{
System.out.println("密码错误3次,系统自动退出,请重新插卡!");
System.exit(0);
}
System.out.println("用户名或密码错误,请重新输入...");
times=times+1;
Verify(bc,bd);
}

}

}

public void takemoney()
{
int money=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入取款金额: ");
try
{
money=Integer.valueOf(br.readLine());
if(money<0)
{
System.out.println("取款金额不能小于0,请重新输入:");
takemoney();
}

if(money>bc.getLeftMoney())
{
System.out.println("对不起,余额不足!");
takemoney();
}
if(money>OnceMoney)
{
System.out.println("单次取款超过最大限制"+OnceMoney+"元");
takemoney();
}
TakeMoney=money;
bc.setLeftMoney(bc.getLeftMoney()-TakeMoney);
System.out.println("取款成功!你的余额为:"+bc.getLeftMoney());
} catch (IOException e)
{
e.printStackTrace();
}catch (NumberFormatException e)//用来捕获非int类型的异常。
{
System.out.println("请按要求输入正确的数字,谢谢合作!");
takemoney();
}
wheathertakemoney();
}

public void wheathertakemoney()//表示是否继续取款的操作
{
int j=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("是否继续操作!,0表示继续取款,1表示返回主界面");
try
{
j=Integer.valueOf(br.readLine());
switch(j)
{
case 0:
takemoney();

case 1:
ShowView();
default:
System.out.println("请按要求输入0或1,谢谢合作!");
wheathertakemoney();
}
} catch (NumberFormatException e)
{
System.out.println("请按要求输入0或1,谢谢合作!");
wheathertakemoney();
} catch (IOException e)
{
e.printStackTrace();
}

}

public void savemoney()
{
int money=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入存款金额: ");
try
{
money=Integer.valueOf(br.readLine());
if(money<0)
{
System.out.println("存款金额不能小于0,请重新输入:");
savemoney();
}
bc.setLeftMoney(bc.getLeftMoney()+money);
System.out.println("存款成功!你的余额为:"+bc.getLeftMoney());
} catch (IOException e)
{
e.printStackTrace();
}catch (NumberFormatException e)//用来捕获非int类型的异常。
{
System.out.println("请按要求输入正确的数字,谢谢合作!");
savemoney();
}
wheathersavemoney();
}

public void wheathersavemoney()//表示是否继续存款
{
int j=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("是否继续操作!,0表示继续存款,1表示返回主界面");
try
{
j=Integer.valueOf(br.readLine());
switch(j)
{
case 0:
savemoney();

case 1:
ShowView();

default:
System.out.println("请按要求输入0或1,谢谢合作!");
wheathersavemoney();

}
} catch (NumberFormatException e)//用来捕获非int类型的异常。
{
System.out.println("请按要求输入0或1,谢谢合作!");
wheathersavemoney();
} catch (IOException e)
{
e.printStackTrace();
}

}

public void transfermoney()
{
String cardnum=null;
int money=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入你要转账的卡号:");
try
{
cardnum=br.readLine();
if(cardnum.equals(""))
{
System.out.println("卡号不能为空,请重新输入:");
transfermoney();
}
if(cardnum.equals("222")==false)
{
System.out.println("卡号不正确,请重新输入: ");
transfermoney();

}
System.out.println("请输入转账金额: ");
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
money=Integer.valueOf(br.readLine());
if(money<0)
{
System.out.println("金额不能小于0,请重新输入:");
transfermoney();
}

if(money>bc.getLeftMoney())
{
System.out.println("对不起,余额不足!");
transfermoney();
}

bd.setLeftMoney(bd.getLeftMoney()+money);
bc.setLeftMoney(bc.getLeftMoney()-money);
System.out.println("转账成功,账户"+bd.getCardNum()+"的余额为: "+bd.getLeftMoney()+"元");
System.out.println("账户"+bc.getCardNum()+"的余额为: "+bc.getLeftMoney()+"元");
}
catch (IOException e)
{
e.printStackTrace();
}catch (NumberFormatException e)//用来捕获非int类型的异常。
{
System.out.println("请按要求输入正确的数字,谢谢合作!");
transfermoney();
}
wheathertransfermoney();

}

public void wheathertransfermoney()//是否继续转账
{
int j=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("是否继续操作!,0表示继续转账,1表示返回主界面");
try
{
j=Integer.valueOf(br.readLine());
switch(j)
{
case 0:
transfermoney();

case 1:
ShowView();
default:
System.out.println("请按要求输入0或1,谢谢合作!");
wheathertransfermoney();
}
} catch (NumberFormatException e)
{
System.out.println("请按要求输入0或1,谢谢合作!");
wheathertransfermoney();
} catch (IOException e)
{
e.printStackTrace();
}
}

public void ViewMoney()
{
System.out.println("   您的账户清单如下:");
System.out.println("*********************");
System.out.println("   您的用户名:"+bc.getUserName());
System.out.println("   您的卡号:"+bc.getCardNum());
System.out.println("   您的存款额为:"+bc.getLeftMoney()+"元");
System.out.println("   当前时间:"+new Date(System.currentTimeMillis()));
System.out.println("*********************");
ShowView();
}

public void ChangePassword()
{
String OldPassWord=null;
String NewPassWord=null;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try
{
System.out.println("请输入老密码:");
OldPassWord=br.readLine();
if(bc.getPassWord().equals(OldPassWord))
{
System.out.println("请输入新密码:");
NewPassWord=br.readLine();
bc.setPassWord(NewPassWord);
System.out.println("密码修改成功!");
}else
{
System.out.println("老密码不正确,请重新输入!");
ChangePassword();
}
} catch (IOException e)
{
e.printStackTrace();
}

ShowView();
}

public void ShowView()
{
int i=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("清输入相应的操作序号进行操作!");
System.out.println("(1)修改密码");
System.out.println("(2)取款");
System.out.println("(3)存款");
System.out.println("(4)查询余额");
System.out.println("(5)转账");
System.out.println("(6)退出系统");
try
{
i=Integer.valueOf(br.readLine());
switch(i)
{
case 1:

ChangePassword();

case 2:

takemoney();

case 3:

savemoney();

case 4:

ViewMoney();

case 5:

transfermoney();

case 6:
System.out.println("欢迎使用ATM,再见!");
System.exit(0);
default:
System.out.println("请按要求输入正确的数字,谢谢合作");
ShowView();
}
} catch (NumberFormatException e)
{
System.out.println("请按要求输入正确的数字,谢谢合作");
ShowView();
} catch (IOException e)
{
e.printStackTrace();
}
}

}


3 ATM的接口方法类

package wyt.com.cn;

public interface MethodInterface
{

//	以下是ATM类的方法
public abstract void takemoney();

public abstract void wheathertakemoney();

public abstract void savemoney();

public abstract void wheathersavemoney();

public abstract void transfermoney();

public abstract void wheathertransfermoney();

public abstract void ViewMoney();

public abstract void ChangePassword();

public abstract void ShowView();

}


运行结果如下:

请输入卡号:
111
请输入密码:
***
清输入相应的操作序号进行操作!
(1)修改密码
(2)取款
(3)存款
(4)查询余额
(5)转账
(6)退出系统
2
请输入取款金额:
5001
单次取款超过最大限制5000元
请输入取款金额:
2000
取款成功!你的余额为:8000
是否继续操作!,0表示继续取款,1表示返回主界面
1
清输入相应的操作序号进行操作!
(1)修改密码
(2)取款
(3)存款
(4)查询余额
(5)转账
(6)退出系统
4
您的账户清单如下:
*********************
您的用户名:王永涛
您的卡号:111
您的存款额为:8000元
当前时间:2009-12-16
*********************
清输入相应的操作序号进行操作!
(1)修改密码
(2)取款
(3)存款
(4)查询余额
(5)转账
(6)退出系统
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: