zoukankan      html  css  js  c++  java
  • Java 模拟ATM(修正)

      ATM机的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0)。 模拟ATM的功能设计,用户插卡后显示选择语言界面,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款、取款、转账汇款、修改密码、查询余额。 选择“取款”,则显示100元、500元、1000元、1500元、2000元、5000元、其他金额、退卡、返回操作供用户选择; 选择“存款”,则提示用户输入存款金额,修改余额; 选择“转账”,则提示用户输入转账行号、转账金额,并提示转账成功。 

      要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。 自定义如下异常类,并在程序中验证: 取款时输入非整数时,抛出 “数字格式异常”,提示信息为“请输入正确的数字”; 如果输入数字非100的整倍数时,抛出“数字录入异常”,提示信息为“录入错误,请输出100的整数倍”; 三次密码输入错误,抛出“锁卡异常”,提示信息自定义。

      1 import java.util.*;
      2 public class ShowATM {
      3     @SuppressWarnings({ "resource", "unused" })
      4     public static void main(String[] args) throws NumberErrorException {
      5         Scanner in=new Scanner(System.in);
      6         PATM atm=new ATM();
      7         NumberErrorException nee=new NumberErrorException("输入非法!");
      8         NotHundredTimesException nhte=new NotHundredTimesException("不是一百的整数倍!");
      9         PasswordErrorException pee=new PasswordErrorException("输入错误的密码超过三次!");
     10         int passwordErrorTimes=0;
     11         int choose=-1,number=0,x=0;
     12         String num="";
     13         String pw="";
     14         next:while(true){
     15             System.out.println("是否进入账户(0否1是):");
     16             int kk=-1;
     17             String c=in.next();
     18             if(whetherNum(c))
     19                 kk=Integer.parseInt(c);
     20             if(kk==0) break;
     21             else if(kk!=1){
     22                 System.out.println("输入错误!");
     23                 continue;
     24             }
     25             System.out.println("输入账户密码:");
     26             pw=in.next();
     27             if(atm.ifPass(pw)){
     28                 while(true){
     29                     showFace();
     30                     String cc=in.next();
     31                     if(whetherNum(cc))
     32                         choose=Integer.parseInt(cc);
     33                     switch(choose){
     34                     case 1:
     35                         System.out.println("输入存款金额:");
     36                         while(true){
     37                             try{
     38                                 num=in.next();
     39                                 if(!whetherNum(num))
     40                                     throw nee;
     41                                 else if((x=Integer.parseInt(num)%100)!=0)
     42                                     throw nhte;
     43                                 else
     44                                     break;
     45                             }
     46                             catch(NumberErrorException e){
     47                                 System.out.println("输入正确的数字!");
     48                             }
     49                             catch(NotHundredTimesException e){
     50                                 System.out.println("录入错误,请输入合法的整数(100的整数倍)!");
     51                             }
     52                         }
     53                         number=Integer.parseInt(num);
     54                         atm.save(number);
     55                         System.out.println("存款成功!");
     56                         System.out.println("当前余额:"+atm.getRest()+"元");
     57                         break;
     58                     case 2:
     59                         System.out.println("请选择:");
     60                         int a[]={100,500,1000,1500,2000,5000};
     61                         for(int i=0;i<a.length;i++)
     62                             System.out.println((i+1)+"."+a[i]+"元");
     63                         System.out.println("7.其他");
     64                         String bb="";
     65                         int ch=-1;
     66                         bb=in.next();
     67                         if(whetherNum(bb)){
     68                             ch=Integer.parseInt(bb);
     69                         }
     70                         if(ch>=1&&ch<=6){
     71                             if(atm.withdraw(a[ch-1]))
     72                                 System.out.println("取款成功!");
     73                             else
     74                                 System.out.println("余额不足!");
     75                         }
     76                         else if(ch==7){
     77                             System.out.println("请输入取款金额:");
     78                             while(true){
     79                                 try{
     80                                     num=in.next();
     81                                     if(!whetherNum(num))
     82                                         throw nee;
     83                                     else if((x=Integer.parseInt(num)%100)!=0)
     84                                         throw nhte;
     85                                     else
     86                                         break;
     87                                 }
     88                                 catch(NumberErrorException e){
     89                                     System.out.println("输入正确的数字!");
     90                                 }
     91                                 catch(NotHundredTimesException e){
     92                                     System.out.println("录入错误,请输入合法的整数(100的整数倍)!");
     93                                 }
     94                             }
     95                             number=Integer.parseInt(num);
     96                             if(atm.withdraw(number))
     97                                 System.out.println("取款成功!");
     98                             else 
     99                                 System.out.println("余额不足!");
    100                         }
    101                         else 
    102                             System.out.println("输入有误!");
    103                         System.out.println("当前余额:"+atm.getRest()+"元");
    104                         break;
    105                     case 3:
    106                         System.out.println("账户号:");
    107                         String s=in.next();
    108                         System.out.println("转账金额:");
    109                         while(true){
    110                             try{
    111                                 num=in.next();
    112                                 if(!whetherNum(num))
    113                                     throw nee;
    114                                 else if((x=Integer.parseInt(num)%100)!=0)
    115                                     throw nhte;
    116                                 else
    117                                     break;
    118                             }
    119                             catch(NumberErrorException e){
    120                                 System.out.println("输入正确的数字!");
    121                             }
    122                             catch(NotHundredTimesException e){
    123                                 System.out.println("录入错误,请输入合法的整数(100的整数倍)!");
    124                             }
    125                         }
    126                         number=Integer.parseInt(num);
    127                         if(atm.transfer(s, number))
    128                             System.out.println("转账成功!");
    129                         else
    130                             System.out.println("转账失败!");
    131                         System.out.println("当前余额:"+atm.getRest()+"元");
    132                         break;
    133                     case 4:
    134                         System.out.println("输入新的六位数密码:");
    135                         String p=in.next();
    136                         if(p.length()==6&&whetherNum(p))
    137                             atm.setPassword(p);
    138                         else{
    139                             System.out.println("不是六位或者不是数字!");
    140                         }
    141                         break;
    142                     case 5:
    143                         System.out.println("当前余额:"+atm.getRest()+"元");
    144                         break;
    145                     default:
    146                         continue next;
    147                     }
    148                 }
    149             }
    150             else{
    151                 System.out.println("密码错误!");
    152                 try{
    153                     passwordErrorTimes++;
    154                     if(passwordErrorTimes>3)
    155                         throw pee;
    156                 }
    157                 catch(PasswordErrorException e){
    158                     System.out.println(e.getMessage()+"账户暂时冻结!");
    159                     return ;
    160                 }
    161             }
    162 
    163         }
    164     }
    165     //显示菜单方法
    166     public static void showFace(){
    167         System.out.println("********************");
    168         System.out.println("    1.存款:");
    169         System.out.println("    2.取款:");
    170         System.out.println("    3.转账汇款:");
    171         System.out.println("    4.修改密码:");
    172         System.out.println("    5.查询余额:");
    173         System.out.println("    6.退卡:");
    174         System.out.println("********************");
    175         System.out.println("请选择:");
    176     }
    177     //判断字符串是否为整数(0-999999)
    178     public static boolean whetherNum(String s){
    179         boolean flag=true;
    180         if(s.length()>=7)
    181             return false;
    182         char arr[]=s.toCharArray();
    183         for(int i=0;i<s.length();i++){    
    184             if(arr[i]<'0'||arr[i]>'9')
    185                 flag=false;
    186         }
    187         return flag;
    188     }
    189 }
    190 
    191 class PersonalAccount{
    192     private String passWord="123456";//密码
    193     @SuppressWarnings("unused")
    194     private String number;//银行卡号
    195     private int money=0;
    196     public int getMoney(){return money;}//余额
    197     public void setPw(String s){passWord=s;}//设置密码
    198     public void addMoney(int x){money+=x;}//加钱
    199     public void minusMoney(int x){money-=x;}//减钱
    200     public boolean whetherPwTrue(String s){//密码是否正确
    201         if(s.equals(passWord))
    202             return true;
    203         else return false;
    204     }
    205 }
    206 abstract class PATM{
    207     public abstract boolean withdraw(int x);//取款
    208     public abstract void save(int x);//存款
    209     public abstract boolean transfer(String s,int x);//转账
    210     public abstract boolean ifPass(String s);//判断输入的密码是否正确
    211     public abstract int getRest();//查询余额
    212     public abstract void setPassword(String s);//设置密码
    213 }
    214 class ATM extends PATM{
    215     private String numbers[]={"6227000000000000071","6227000000000000072",
    216             "6227000000000000073","6227000000000000074"};//数据库中已有的账户卡号
    217     private PersonalAccount account=new PersonalAccount();
    218     public boolean withdraw(int x) {
    219         if(x>account.getMoney())
    220             return false;
    221         else{
    222             account.minusMoney(x);
    223             return true;
    224         }
    225     }
    226     public void save(int x) {
    227         account.addMoney(x);
    228     }
    229     public boolean transfer(String s, int x) {
    230         //转账
    231         //先判断转到账户号是否存在
    232         //再判断余额是否足够
    233         boolean flag=false;
    234         for(int i=0;i<numbers.length;i++)
    235             if(s.equals(numbers[i])) flag=true;
    236         if(x>account.getMoney()) flag=false;
    237         if(x<=account.getMoney()&&flag) account.minusMoney(x);;
    238         return flag;
    239     }
    240     public boolean ifPass(String s) {
    241         return account.whetherPwTrue(s);
    242     }
    243     public int getRest() {
    244         return account.getMoney();
    245     }
    246     public void setPassword(String s) {
    247         account.setPw(s);        
    248     }
    249 }
    250 @SuppressWarnings("serial")
    251 class NumberErrorException extends Exception{
    252     public NumberErrorException(String msg){
    253         super(msg);
    254     }
    255 }
    256 @SuppressWarnings("serial")
    257 class PasswordErrorException extends Exception{
    258     public PasswordErrorException(String msg){
    259         super(msg);
    260     }
    261 }
    262 @SuppressWarnings("serial")
    263 class NotHundredTimesException extends Exception{
    264     public NotHundredTimesException(String msg){
    265         super(msg);
    266     }
    267 }

  • 相关阅读:
    docker知识集锦
    kubernetes知识集锦
    redis知识集锦
    Java多线程知识集锦
    vscode离线安装插件
    jsoncpp的简易教程
    为什么要自动化测试?
    如何选择正确的自动化测试工具
    如何选择测试自动化工具?
    测试自动化的五大挑战
  • 原文地址:https://www.cnblogs.com/yifengyifeng/p/6094279.html
Copyright © 2011-2022 走看看