一. 项目功能要求:

项目开始运行显示主菜单为:

银行自助终端系统

****************************

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 表示银联,在该包下添加:

  1. 表示银行卡的接口,包含查询余额,存款,取款等抽象方法。
  2. 表示ATM机的抽象类,使用银行卡类型的对象作为参数,实现查询余额,存款,取款等实例方法,添加开户为抽象方法。
  3. 表示四大银行的枚举类型:包含ABC,ICBC,CCB,BOC;分别代表农行,工行,建行,中行。

(二)包二:com.bank.abc 表示农行,在该包下添加:

  1. 以单例模式定义银行类,包含属性:银行类型(枚举类型,常量=ABC),银行名称(String),银行卡列表(集合)等。
  2. 定义银行卡的实现类-储蓄卡,包含属性:银行类型(枚举类型=ABC),姓名,身份证号,卡号,密码,余额;实现查询余额,存款,取款等方法。
  3. 定义ATM机的子类,包含属性:银行类型(枚举类型,常量=ABC),实现开户方法,其中:只能开办储蓄卡,卡号为6位随机数字,自动产生。新开户的银行卡添加到银行的银行卡列表中。
  4. 定义储蓄卡的子类-信用卡,增加属性:透支额度,重写取款方法,控制最大取款金额不能大于余额+透支额度的和。

(三)包三: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)
    @Overridepublic 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("请重新选择:");}}}}

运行结果:

转载于:https://www.cnblogs.com/jingzhenhua/p/5937340.html

模拟银行自助终端系统相关推荐

  1. 模拟银行自助终端系统(序列化和反序列化)

    模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1.   对于数据输入异常,可使用java异常处理机制进行处理. 2.   ...

  2. (转载)模拟银行自助终端系统

    一. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 **************************** 0.------开户 1.------查询 2.------存款 3.-- ...

  3. 模拟银行自动终端系统

    本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 二. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 ********************* ...

  4. 基于RMI的分布式银行自助终端监控系统的研究及实现

    基于RMI的分布式银行自助终端监控系统的研究及实现 张永福1,张娟2 (1.陕西师范大学计算机科学学院 陕西 西安 710062:2.西安财经学院 陕西 西安 710061) 近年来随着我国金融体制改 ...

  5. 2022-2028全球及中国自助终端系统(SSTS)行业研究及十四五规划分析报告

    辰宇信息咨询市场调研公司最近发布-<2022-2028全球与中国自助终端系统(SSTS)市场调研报告> 内容摘要 本文同时着重分析自助终端系统(SSTS)行业竞争格局,包括全球市场主要厂商 ...

  6. Java图形界面编程模拟ATM自助取款系统

    本人学习Java时一直想做一个图形界面的程序,所以利用闲暇时间,做了一个Java图形界面编程模拟ATM自助取款系统,界面简洁漂亮,基本功能ATM功能实现. 程序初始时 考号:123456 密码:123 ...

  7. 模拟银行账户转账系统(简单模拟)

    本人刚刚接触java,此篇博客仅供初学者浏览,不喜勿喷,若有写的不好的地方欢迎大家指教: *模拟银行账户转账系统: 有A,B两个银行账户,初始金额都为1000元,A,B随机向对方转账,转账金额不得大于 ...

  8. Java模拟银行存取款系统

    设计性实验报告 课程名称 面向对象程序设计(Java)     项目名称 模拟银行存取款业务 实验类型 设计性 二.实验内容 模拟网上银行业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密 ...

  9. c语言模拟银行ATM的程序,简单模拟银行ATM取款系统 | C/C++程序员之家

    学习C#,第一次C#实验课,模拟ATM取款系统,锻炼基本的C#语法以及选择控制语句! 实现功能: 1.取款 2.余额查询 3.修改密码 4.退出 [cpp] using System; using S ...

最新文章

  1. 网络模型mAP计算实现代码
  2. 第二十二课.XGBoost
  3. 3dmax2014:打开3dmax2014软件时,出现许可证检出失败 错误20
  4. 自制浮动静态路由实验(简单)
  5. ExtJs之Ext.view.View
  6. 微信开发系列之六 - 使用微信OAuth2 API读取微信用户信息,显示在SAP UI5里
  7. 解决 web.xml is missing and failOnMissingWebXml is set to true 报错
  8. mysql的中文乱码url,MySQL 中文显示乱码
  9. MongoDB高级——复制(副本集)
  10. 用python求期望_用Python计算明日方舟2021龙门幸运墙期望
  11. 《图像分析基础》的专有名词解析
  12. 咏南中间件D7客户端演示
  13. Vert.x Web
  14. 字符串怎样实例化成对象
  15. ZYNQ7020 FPGA如何从Flash启动的详细步骤
  16. 找东西背后的概率问题——From《思考的乐趣 Martix67数学笔记》
  17. Python+MySQL+云服务器 定时爬取B站日榜与微博热搜榜信息并保存至数据库
  18. 合肥工业大学计算机与信息学院导师介绍,合肥工业大学计算机与信息学院硕士生导师:方静副教授...
  19. 鸡腿の游戏_纪中1737
  20. html蓝色粒子,HTML5 粒子编辑器

热门文章

  1. deepin终端编译c程序_Deepin Linux安装使用Visual Studio Code(VSCode)调试C++
  2. Mysql价格降低20%应该怎么写_mysql优化20条原则
  3. java文件读写 outputstream_java IO文件读写例子(OutputStream,InputStream,Writer,Reader)...
  4. python terminator_Python turtle.Terminator方法代碼示例
  5. sv编程语言_SV及UVM高级话题篇之一:SystemVerilog开源公共库(上)
  6. BootStrap之前奏响应式布局
  7. linux中一条命令将文件转换为UTF-8格式-解决乱码
  8. 2017腾讯编程题----素数对
  9. java中对于异常的处理,代码简单描述
  10. C#怎么给新建的winform程序添加资源文件夹Resources