对于一个银行自动取款机来说,其实只有两个类:分别是银行卡类-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)退出系统