模拟银行自助终端系统
一. 项目功能要求:
项目开始运行显示主菜单为:
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
此时,用户可以通过键盘输入选择自己要实现的功能,如果输入不是0,1,2,3,4,则系统提示:
你选择的菜单不存在!
请重新选择:
要求用户重新输入数据进行菜单选择!
当用户输入0时,则进入开户功能:系统提示:
****************************
你选择的为开户功能
请输入你的姓名:
此时用户需要输入姓名,输入完毕后系统提示:
请输入你的身份证号:
此时用户需要输入18位身份证号,输入完毕如果验证未通过要求继续输入,直到验证通过后系统提示:
请输入你的密码:
此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入,验证通过后系统提示:
开户成功,谢谢使用!
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
当用户输入1时,则进入查询功能:系统提示:
****************************
你选择的为查询功能
请输入你要查询的卡号:
此时用户需要输入查询的卡号,系统对卡号进行检测,如果卡号不存在,则提示: 你输入的卡号不存在,请重新输入:
请输入你要查询的卡号:
要求重新输入卡号,当用户输入正确卡号后,则提示:
请输入你的密码:
此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单:
你查询的账号信息为:
******************************
姓名 身份证号 卡号 金额
张三丰 420106198410112062 111111 12800.0
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
当用户输入2时,则进入存款功能:系统提示:
****************************
你选择的为存款功能
请输入你要存款的卡号:
此时用户需要输入存款的卡号,系统对卡号进行检测,如果卡号不存在,则提示:
你输入的卡号不存在,请重新输入:
请输入你要存款的卡号:
要求重新输入卡号,当用户输入正确卡号后,则提示:
请输入你的密码:
此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单:
你要存款的账号信息为:
******************************
姓名 身份证号 卡号 金额
张三丰 420106198410112062 111111 12800.0
请输入你要存入的金额:
此时要求用户输入存款金额,系统对金额进行判断,如果输入的数据小于等于0,则提示:
你输入的数据无效,系统将自动退出!谢谢使用
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
如果用户输入数据合法,系统提示存款成功,并回到主菜单:
存款成功,谢谢使用!
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
数据将存入用户账号,如果用户再次进行数据查询,则能看到已经改变后的账户金额。 (说明:本系统使用文件进行数据存储,因此如果用户重新启动程序,数据将从文件中读取重新初始化到内存!此功能选做,可参考对象的序列化和反序列化或JSON)
当用户输入3时,则进入取款功能:系统提示:
****************************
你选择的为取款功能 请输入你要取款的卡号:
此时用户需要输入取款的卡号,系统对卡号进行检测,如果卡号不存在,则提示:
你输入的卡号不存在,请重新输入:
请输入你要取款的卡号:
要求重新输入卡号,当用户输入正确卡号后,则提示:
请输入你的密码:
此时用户需要输入6位纯数字密码,输入完毕如果验证未通过要求继续输入(最多3次),验证通过后系统将显示当前用户账号信息并进入主菜单:
你要取款的账号信息为:
******************************
姓名 身份证号 卡号 金额
张三丰 420106198410112062 111111 12800.0
请输入你要取款的金额:
此时要求用户输入取款金额,系统对金额进行判断,如果输入的数据小于0或大于账号总金额,则提示:
你输入的数据无效,系统将自动退出!谢谢使用
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
如果用户输入数据合法,系统提示取款成功,并回到主菜单:
取款成功,谢谢使用!
银行自助终端系统
****************************
0.------开户
1.------查询
2.------存款
3.------取款
4.------退出
****************************
请选择你要执行的功能:
数据将从用户账号扣出,如果用户再次进行数据查询,则能看到已经改变后的账户金额。
当用户输入4时,系统将退出。
二.设计要求
(一)包一:com.bank.unionpay 表示银联,在该包下添加:
- 表示银行卡的接口,包含查询余额,存款,取款等抽象方法。
- 表示ATM机的抽象类,使用银行卡类型的对象作为参数,实现查询余额,存款,取款等实例方法,添加开户为抽象方法。
- 表示四大银行的枚举类型:包含ABC,ICBC,CCB,BOC;分别代表农行,工行,建行,中行。
(二)包二:com.bank.abc 表示农行,在该包下添加:
- 以单例模式定义银行类,包含属性:银行类型(枚举类型,常量=ABC),银行名称(String),银行卡列表(集合)等。
- 定义银行卡的实现类-储蓄卡,包含属性:银行类型(枚举类型=ABC),姓名,身份证号,卡号,密码,余额;实现查询余额,存款,取款等方法。
- 定义ATM机的子类,包含属性:银行类型(枚举类型,常量=ABC),实现开户方法,其中:只能开办储蓄卡,卡号为6位随机数字,自动产生。新开户的银行卡添加到银行的银行卡列表中。
- 定义储蓄卡的子类-信用卡,增加属性:透支额度,重写取款方法,控制最大取款金额不能大于余额+透支额度的和。
(三)包三:com.bank.test 表示测试,在该包下添加带main方法的测试类,实现项目要求的模拟ATM机的功能。
程序代码:包一com.bank.unionpay
1 package com.bank.unionpay; 2 /** 3 * 4 * @author Administrator 5 *银联接口 6 */ 7 public interface Yinlian { 8 void Chaxun(Yinlian yinl); //查询余额 9 void Cunkuan(Yinlian yinl); //存款 10 void Qukuan(Yinlian yinl); //取款 11 }
1 package com.bank.unionpay; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * @author Administrator 8 *ATM机抽象类 9 */ 10 public abstract class ATM { 11 private int yue; //变量余额 12 public abstract void Kaihu(); //抽象方法——开户 13 public int getYue() { //get余额方法 14 return yue; 15 } 16 public void setYue(int yue) { //set余额方法 17 this.yue = yue; 18 } 19 public void Chaxun(Yinlian yinl) { //查询余额 20 System.out.println("您的账户余额为:"+yue); 21 } 22 public void Cunkuan(Yinlian yinl) { //存款 23 while(true){ 24 System.out.println("请输入存款金额:"); 25 Scanner sc=new Scanner(System.in); 26 int jine=sc.nextInt(); //输入存款金额 27 if(jine<0){ 28 System.out.println("输入有误!"); //负数提示 29 continue; 30 }else{ 31 yue+=jine; //重新计算余额 32 break; 33 } 34 } 35 } 36 public void Qukuan(Yinlian yinl) { //取款 37 while(true){ 38 System.out.println("请输入取款金额:"); 39 Scanner sc=new Scanner(System.in); 40 int jine=sc.nextInt(); //输入取款金额 41 if(jine<=yue){ 42 yue-=jine; //重新计算余额 43 break; 44 }else if(jine>yue){ 45 System.out.println("余额不足,无法取款!"); //余额不足提示 46 continue; 47 }else{ 48 System.out.println("输入有误!"); //负数提示 49 continue; 50 } 51 } 52 } 53 }
package com.bank.unionpay; /** * * @author Administrator *四大银行——枚举 */ public enum Bank { ABC("农行"),ICBC("工行"),CCB("建行"),BOC("中行"); //枚举类型 枚举列表 private final String name; //常量银行名 public String getName(){ //getter方法返回银行名 return this.name; } private Bank(String name){ //私有构造方法 this.name=name; } }
包二com.bank.abc
1 package com.bank.abc; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import com.bank.unionpay.Bank; 8 /** 9 * 10 * @author Administrator 11 *银行类——单例模式 12 */ 13 public class Bankclass { 14 private Bankclass(){ //禁止外部访问构造方法 15 16 } 17 private static Bankclass bank=new Bankclass(); //内部产生唯一实例 18 public static Bankclass getBankclass() //开放一个方法给调用者返回这个实例 19 { 20 return bank; 21 } 22 private final Bank ABC=Bank.ABC; //银行类型(枚举类型=ABC) 23 private String bankname; //银行名称 24 public List<Long> card=new ArrayList(); //银行卡列表——集合 25 public Map<Long,Bankchuxu> Account=new HashMap<>(); //账号储蓄卡集合 26 }
package com.bank.abc; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import java.util.Scanner; import com.bank.unionpay.ATM; import com.bank.unionpay.Bank; /** * * @author Administrator *ATM机的子类 */ public class ATMzi extends ATM{ private final Bank ABC=Bank.ABC; //银行类型(枚举类型=ABC) @Override public void Kaihu() { //开户功能 Bankchuxu bk=new Bankchuxu(); System.out.println("请输入您的姓名:"); while(true){ //输入姓名 try{ //异常处理 Scanner sc=new Scanner(System.in); bk.setName(sc.nextLine()); break; }catch(Exception e){ System.out.println("输入有误!"); System.out.println("请重新输入:"); continue; } } while(true){ //输入身份证号 try{ System.out.println("请输入您的身份证号:"); Scanner sc=new Scanner(System.in); String a=sc.nextLine(); String regex="\\d{15}|\\d{17}[\\dxX]"; //正则表达式控制身份证号 if(a.matches(regex)){ bk.setIDcard(a); break; }else{ System.out.println("身份证号格式输入有误!"); continue; } }catch(Exception e){ System.out.println("输入有误!"); System.out.println("请重新输入:"); continue; } } while(true){ //输入密码 try{ System.out.println("请输入6位纯数字密码:"); Scanner sc=new Scanner(System.in); String a=sc.nextLine(); String regex="\\d{6}"; //正则表达式控制密码 if(a.matches(regex)){ bk.setPassword(a); break; } else{ System.out.println("输入密码格式有误!"); continue; } }catch(Exception e){ System.out.println("输入有误!"); System.out.println("请重新输入:"); continue; } } while(true){ Random a=new Random(); Long c=a.nextLong(); //生成储蓄卡号 String regex="\\d{19}"; if(c>0&&c.toString().matches(regex)){ bk.setCard(c); //将生成的储蓄卡号赋给储蓄卡卡号属性 Bankclass.getBankclass().card.add(bk.getCard()); //将生成的储蓄卡号存到银行的银行卡列表中 Bankclass.getBankclass().Account.put(bk.getCard(), bk); //卡号+储蓄卡对象 System.out.println("您的账号为:"+bk.getCard()); break; }else{ continue; } } try { FileOutputStream out =new FileOutputStream("d:/账号.txt",true); //打印卡号到文本中 StringBuilder shuju=new StringBuilder(); shuju.append(bk.toString()+"\r\n"); byte[] by=shuju.toString().getBytes(); out.write(by); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
1 package com.bank.abc; 2 3 import java.io.BufferedReader; 4 import java.io.FileOutputStream; 5 import java.io.FileReader; 6 import java.util.Scanner; 7 8 import com.bank.test.Jiemian; 9 import com.bank.unionpay.Bank; 10 import com.bank.unionpay.Yinlian; 11 12 /** 13 * 14 * @author Administrator 15 *储蓄卡类 16 */ 17 public class Bankchuxu implements Yinlian{ 18 protected final Bank ABC=Bank.ABC; //银行类型(枚举类型=ABC) 19 private String name; //姓名 20 private String IDcard; //身份证号 21 protected long card; //银行卡号 22 private String password; //密码 23 protected int yue; //余额 24 //储蓄卡号get、set方法 25 public long getCard() { 26 return card; 27 } 28 public void setCard(long card) { 29 this.card = card; 30 } 31 //姓名get、set方法 32 public String getName() { 33 return name; 34 } 35 public void setName(String name) { 36 this.name = name; 37 } 38 //身份证号get、set方法 39 public String getIDcard() { 40 return IDcard; 41 } 42 public void setIDcard(String iDcard) { 43 IDcard = iDcard; 44 } 45 //密码get、set方法 46 public String getPassword() { 47 return password; 48 } 49 public void setPassword(String password) { 50 this.password = password; 51 } 52 //余额get、set方法 53 public int getYue() { 54 return yue; 55 } 56 public void setYue(int yue) { 57 this.yue = yue; 58 } 59 60 @Override 61 public void Chaxun(Yinlian yinl) { //查询功能 62 try { 63 FileReader fr = new FileReader("d:/账号.txt"); //读取文件中的账号 64 BufferedReader br=new BufferedReader(fr); 65 String str=null; 66 while((str=br.readLine())!= null){ 67 Bankchuxu bk=new Bankchuxu(); 68 String[] newstr=str.split(" "); //字符串分割放到字符串数组中 69 for(int i=0;i<newstr.length;i++){ //遍历数组将信息传给对象 70 if(i==0)bk.setName(newstr[0]); 71 if(i==1)bk.setIDcard(newstr[1]); 72 if(i==2)bk.setCard(Long.parseLong(newstr[2])); 73 if(i==3)bk.setPassword(newstr[3]); 74 if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 75 } 76 Bankclass.getBankclass().Account.put(bk.getCard(), bk); //将卡号+储蓄卡对象放到集合中 77 } 78 } catch (Exception e1) { 79 // TODO 自动生成的 catch 块 80 e1.printStackTrace(); 81 } 82 System.out.println("请输入您要查的账号:"); //输入账号 83 while(true){ 84 try{ 85 Scanner sc=new Scanner(System.in); 86 long a=sc.nextLong(); 87 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 88 if(a==temp){ 89 card=a; //取卡号 90 } 91 } 92 if(a==card){ //验证卡号 93 System.out.println("请输入您的密码:"); //输入密码 94 int i=0; 95 while(true){ 96 Scanner s=new Scanner(System.in); 97 String pw=s.nextLine(); 98 if(pw.equals(Bankclass.getBankclass().Account.get(a).getPassword())){ //验证密码 99 System.out.println("你查询的账号信息为:"); 100 System.out.println("******************************"); 101 System.out.println("姓名 身份证号 卡号 金额"); 102 System.out.println(Bankclass.getBankclass().Account.get(a).out()); 103 break; 104 }else{ 105 i++; 106 if(i==3){ //控制输入次数最多3次 107 System.out.println("密码输错超过3次,无法继续输入!"); 108 break; 109 }else{ 110 System.out.println("密码输入错误!请重新输入:"); 111 continue; 112 } 113 } 114 } 115 break; 116 }else{ 117 System.out.println("您输入的卡号不存在,请重新输入:"); 118 continue; 119 } 120 }catch(Exception e){ 121 System.out.println("您输入的账号格式有误!"); 122 System.out.println("请重新输入:"); 123 continue; 124 } 125 } 126 } 127 128 @Override 129 public void Cunkuan(Yinlian yinl) { //存款 130 try { 131 FileReader fr = new FileReader("d:/账号.txt"); 132 BufferedReader br=new BufferedReader(fr); 133 String str=null; 134 while((str=br.readLine())!= null){ 135 Bankchuxu bk=new Bankchuxu(); 136 String[] newstr=str.split(" "); 137 for(int i=0;i<newstr.length;i++){ 138 if(i==0)bk.setName(newstr[0]); 139 if(i==1)bk.setIDcard(newstr[1]); 140 if(i==2)bk.setCard(Long.parseLong(newstr[2])); 141 if(i==3)bk.setPassword(newstr[3]); 142 if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 143 } 144 Bankclass.getBankclass().Account.put(bk.getCard(), bk); //id+储蓄卡对象 145 } 146 } catch (Exception e1) { 147 // TODO 自动生成的 catch 块 148 e1.printStackTrace(); 149 } 150 System.out.println("请输入您要存款的账号:"); 151 while(true){ 152 try{ 153 Scanner sc=new Scanner(System.in); 154 long a=sc.nextLong(); 155 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 156 if(a==temp){ 157 card=a; //取卡号 158 } 159 } 160 if(a==card){ //验证卡号 161 System.out.println("请输入您的密码:"); //输入密码 162 int i=0; 163 while(true){ 164 Scanner s=new Scanner(System.in); 165 String pw=s.nextLine(); 166 if(pw.equals(Bankclass.getBankclass().Account.get(card).getPassword())){ //验证密码 167 System.out.println("您要存款的账号信息为:"); 168 System.out.println("******************************"); 169 System.out.println("姓名 身份证号 卡号 金额"); 170 System.out.println(Bankclass.getBankclass().Account.get(card).out()); 171 while(true){ 172 try{ 173 System.out.println("请输入存款金额:"); 174 Scanner cun=new Scanner(System.in); 175 int jine=cun.nextInt(); //输入存款金额 176 if(jine<0){ 177 System.out.println("您输入的数据无效,系统将自动退出!谢谢使用"); //负数提示 178 break; 179 }else{ 180 yue=Bankclass.getBankclass().Account.get(card).getYue(); 181 yue+=jine; //重新计算余额 182 try { 183 FileOutputStream out =new FileOutputStream("d:/账号.txt"); 184 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 185 if(a==temp){ 186 Bankclass.getBankclass().Account.get(a).setYue(yue);//存储取款后余额 187 } 188 String shuju=new String(); 189 shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n"); 190 byte[] by=shuju.toString().getBytes(); 191 out.write(by); 192 } 193 out.close(); 194 } catch (Exception e) { 195 e.printStackTrace(); 196 } 197 System.out.println("存款成功,谢谢使用!"); 198 break; 199 } 200 }catch(Exception e){ 201 System.out.println("您输入的存款金额格式有误!"); 202 System.out.println("请重新输入:"); 203 continue; 204 } 205 } 206 break; 207 }else{ 208 i++; 209 if(i==3){ //控制输入次数最多3次 210 System.out.println("密码输错超过3次,无法继续输入!"); 211 break; 212 }else{ 213 System.out.println("密码输入错误!请重新输入:"); 214 continue; 215 } 216 } 217 } 218 break; 219 }else{ 220 System.out.println("您输入的卡号不存在,请重新输入:"); 221 continue; 222 } 223 }catch(Exception e){ 224 System.out.println("您输入的账号格式有误!"); 225 System.out.println("请重新输入:"); 226 continue; 227 } 228 } 229 } 230 231 @Override 232 public void Qukuan(Yinlian yinl) { // 取款 233 try { 234 FileReader fr = new FileReader("d:/账号.txt"); 235 BufferedReader br=new BufferedReader(fr); 236 String str=null; 237 while((str=br.readLine())!= null){ 238 String[] newstr=str.split(" "); 239 Bankchuxu bk=new Bankchuxu(); 240 for(int i=0;i<newstr.length;i++){ 241 if(i==0)bk.setName(newstr[0]); 242 if(i==1)bk.setIDcard(newstr[1]); 243 if(i==2)bk.setCard(Long.parseLong(newstr[2])); 244 if(i==3)bk.setPassword(newstr[3]); 245 if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 246 } 247 Bankclass.getBankclass().Account.put(bk.getCard(), bk); //id+储蓄卡对象 248 } 249 250 } catch (Exception e1) { 251 // TODO 自动生成的 catch 块 252 e1.printStackTrace(); 253 } 254 System.out.println("请输入您要取款的账号:"); 255 while(true){ 256 try{ 257 Scanner qushu=new Scanner(System.in); 258 long b=qushu.nextLong(); 259 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 260 if(b==temp){ 261 card=b; //取卡号 262 } 263 } 264 if(b==card){ //验证卡号 265 System.out.println("请输入您的密码:"); //输入密码 266 int i=0; 267 while(true){ 268 Scanner qumi=new Scanner(System.in); 269 String pw=qumi.nextLine(); 270 if(pw.equals(Bankclass.getBankclass().Account.get(b).getPassword())){ //验证密码 271 System.out.println("您要取款的账号信息为:"); 272 System.out.println("******************************"); 273 System.out.println("姓名 身份证号 卡号 金额"); 274 System.out.println(Bankclass.getBankclass().Account.get(card).out()); 275 while(true){ 276 try{ 277 System.out.println("请输入取款金额:"); 278 Scanner quj=new Scanner(System.in); 279 int jine=quj.nextInt(); //输入存款金额 280 if(jine>Bankclass.getBankclass().Account.get(b).getYue()||jine<0){ 281 System.out.println("您输入的数据无效,系统将自动退出!谢谢使用"); //负数提示 282 break; 283 }else{ 284 yue=Bankclass.getBankclass().Account.get(b).getYue(); 285 yue-=jine; //重新计算余额 286 try { 287 FileOutputStream out =new FileOutputStream("d:/账号.txt"); 288 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 289 if(b==temp){ 290 Bankclass.getBankclass().Account.get(b).setYue(yue); 291 //存储取款后余额 292 } 293 String shuju=new String(); 294 shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n"); 295 byte[] by=shuju.toString().getBytes(); 296 out.write(by); 297 } 298 out.close(); 299 } catch (Exception e) { 300 e.printStackTrace(); 301 } 302 System.out.println("取款成功,谢谢使用!"); 303 break; 304 } 305 }catch(Exception e){ 306 System.out.println("您输入的存款金额格式有误!"); 307 System.out.println("请重新输入:"); 308 continue; 309 } 310 } 311 break; 312 }else{ 313 i++; 314 if(i==3){ //控制输入次数最多3次 315 System.out.println("密码输错超过3次,无法继续输入!"); 316 break; 317 }else{ 318 System.out.println("密码输入错误,请重新输入:"); 319 continue; 320 } 321 } 322 } 323 break; 324 }else{ 325 System.out.println("您输入的卡号不存在,请重新输入:"); 326 continue; 327 } 328 }catch(Exception e){ 329 System.out.println("您输入的账号格式有误!"); 330 System.out.println("请重新输入:"); 331 continue; 332 } 333 } 334 } 335 @Override 336 public String toString() { 337 return getName()+ " " +getIDcard()+ " " +getCard()+ " " +getPassword()+" "+getYue()+" "+ABC; 338 } 339 public String out(){ 340 return getName()+" "+getIDcard()+" "+getCard()+ " "+getYue(); 341 } 342 }
1 package com.bank.abc; 2 /** 3 * 信用卡类 4 */ 5 import java.io.BufferedReader; 6 import java.io.FileOutputStream; 7 import java.io.FileReader; 8 import java.util.Scanner; 9 10 import com.bank.test.Jiemian; 11 import com.bank.unionpay.Yinlian; 12 13 /** 14 * 15 * @author Administrator 16 *信用卡——储蓄卡子类 17 */ 18 public class Xincard extends Bankchuxu{ 19 private int touzhi=2000; 20 public void Qukuan(Yinlian yinl) { //取款 21 try { 22 FileReader fr = new FileReader("d:/信用账号.txt"); 23 BufferedReader br=new BufferedReader(fr); 24 String str=null; 25 while((str=br.readLine())!= null){ 26 String[] newstr=str.split(" "); 27 Bankchuxu bk=new Bankchuxu(); 28 for(int i=0;i<newstr.length;i++){ 29 if(i==0)bk.setName(newstr[0]); 30 if(i==1)bk.setIDcard(newstr[1]); 31 if(i==2)bk.setCard(Long.parseLong(newstr[2])); 32 if(i==3)bk.setPassword(newstr[3]); 33 if(i==4)bk.setYue(Integer.parseInt(newstr[4])); 34 } 35 Bankclass.getBankclass().Account.put(bk.getCard(), bk); //id+储蓄卡对象 36 } 37 } catch (Exception e1) { 38 // TODO 自动生成的 catch 块 39 e1.printStackTrace(); 40 } 41 System.out.println("请输入您要取款的账号:"); 42 while(true){ 43 try{ 44 Scanner qushu=new Scanner(System.in); 45 long b=qushu.nextLong(); 46 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 47 if(b==temp){ 48 card=b; //取卡号 49 } 50 } 51 if(b==card){ //验证卡号 52 System.out.println("请输入您的密码:"); //输入密码 53 int i=0; 54 while(true){ 55 Scanner qumi=new Scanner(System.in); 56 String pw=qumi.nextLine(); 57 if(pw.equals(Bankclass.getBankclass().Account.get(b).getPassword())){ //验证密码 58 System.out.println("您要取款的账号信息为:"); 59 System.out.println("******************************"); 60 System.out.println("姓名 身份证号 卡号 可透支金额"); 61 System.out.println(Bankclass.getBankclass().Account.get(card).out()); 62 while(true){ 63 try{ 64 System.out.println("请输入取款金额:"); 65 Scanner quj=new Scanner(System.in); 66 int jine=quj.nextInt(); //输入取款金额 67 if(jine<0){ 68 System.out.println("您输入的数据无效,系统将自动退出!谢谢使用"); //负数提示 69 Jiemian.jiemian(); 70 break; 71 }else{ 72 yue=Bankclass.getBankclass().Account.get(b).getYue(); 73 if(jine>(yue+touzhi)){ 74 System.out.println("取款超出透支额度,请按期还款"); 75 }else{ 76 yue=yue-jine; //重新计算余额 77 } 78 try { 79 FileOutputStream out =new FileOutputStream("d:/信用账号.txt"); 80 for(Long temp:Bankclass.getBankclass().Account.keySet()){ 81 if(b==temp){ 82 Bankclass.getBankclass().Account.get(b).setYue(yue); 83 //存储取款后余额 84 } 85 String shuju=new String(); 86 shuju=(Bankclass.getBankclass().Account.get(temp).toString()+"\r\n"); 87 byte[] by=shuju.toString().getBytes(); 88 out.write(by); 89 } 90 out.close(); 91 } catch (Exception e) { 92 e.printStackTrace(); 93 } 94 System.out.println("取款成功,谢谢使用!"); 95 break; 96 } 97 }catch(Exception e){ 98 System.out.println("您输入的存款金额格式有误!"); 99 System.out.println("请重新输入:"); 100 continue; 101 } 102 } 103 break; 104 }else{ 105 i++; 106 if(i==3){ //控制输入次数最多3次 107 System.out.println("密码输错超过3次,无法继续输入!"); 108 break; 109 }else{ 110 System.out.println("密码输入错误,请重新输入:"); 111 continue; 112 } 113 } 114 } 115 break; 116 }else{ 117 System.out.println("您输入的卡号不存在,请重新输入:"); 118 continue; 119 } 120 }catch(Exception e){ 121 System.out.println("您输入的账号格式有误!"); 122 System.out.println("请重新输入:"); 123 continue; 124 } 125 } 126 } 127 }
包三:com.bank.test
1 package com.bank.test; 2 /** 3 * 4 * @author Administrator 5 *界面类 6 */ 7 public class Jiemian { 8 public static void jiemian() { 9 System.out.println("银行自助终端系统"); 10 System.out.println("****************************"); 11 System.out.println("0.------开户"); 12 System.out.println("1.------查询"); 13 System.out.println("2.------存款"); 14 System.out.println("3.------取款"); 15 System.out.println("4.------退出"); 16 System.out.println("5.------信用卡取款"); 17 System.out.println("****************************"); 18 System.out.println("请选择你要执行的功能:"); 19 } 20 }
package com.bank.test; import java.util.Scanner; import com.bank.abc.ATMzi; import com.bank.abc.Bankchuxu; import com.bank.abc.Bankclass; import com.bank.abc.Xincard; import com.bank.unionpay.Yinlian; /** * * @author Administrator *测试类 */ public class Test { public static void main(String[] args) { Jiemian.jiemian(); //调界面 Yinlian yinl=new Bankchuxu(); while(true){ //死循环实现输入错误返回 Scanner sc=new Scanner(System.in); try{ //输入异常 int shuru=sc.nextInt(); switch(shuru){ case 0: System.out.println("****************************"); System.out.println("您选择的为开户功能"); ATMzi a=new ATMzi(); a.Kaihu(); //调用开户 System.out.println("开户成功!"); Jiemian.jiemian(); break; case 1: System.out.println("****************************"); System.out.println("您选择的为查询功能"); yinl.Chaxun(yinl); Jiemian.jiemian(); break; case 2: System.out.println("****************************"); System.out.println("您选择的为存款功能"); yinl.Cunkuan(yinl); Jiemian.jiemian(); break; case 3: System.out.println("****************************"); System.out.println("您选择的为取款功能"); yinl.Qukuan(yinl); Jiemian.jiemian(); break; case 4: System.out.println("谢谢使用!"); break; case 5: System.out.println("****************************"); System.out.println("您选择的为信用卡取款功能"); Xincard x=new Xincard(); x.Qukuan(x); Jiemian.jiemian(); break; default: System.out.println("您选择的菜单不存在!"); System.out.println("请重新选择:"); continue; } if(shuru==4)break; }catch(Exception e){ System.out.println("输入有误!"); System.out.println("请重新选择:"); } } } }
运行结果: