Java入门第69课——ATM机系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houjunkang363/article/details/90736383

希望大家多评论和点赞,这样我写的更有动力

ATM机系统

问题

        在案例"银行卡系统(实现银联接口)"基础上实现本案例,本案例要求实现中国农业银行的ATM系统,详细要求如下:

        1.中国农业银行的ATM机对所有银联卡提供检查密码功能、取款功能以及查询余额功能。

        2.如果为农行的卡,可以实现支付电话费功能。界面交互效果如下:

        如果为农行的银行卡界面交互效果如图-1所示。

图111.jpg

        观察图-1可以发现,农业银行的卡可以实现缴费功能。如果为其它银行的银行卡,界面交互效果如图-2所示。

image.png

        观察图-2可以发现,工商银行的卡不能实现缴费功能。

方案

        要实现农行的ATM机系统,解决方案如下:

        1.定义名为ABCATM的类,表示农行的ATM机系统。

        2.在ABCATM类中,定义属性card,该属性的类型为UnionPay,表示不同银行的银联卡。

        3.在ABCATM类中,定义方法insertCard,实现向ATM机插入银联卡的操作。

        4.在ABCATM类中,定义方法outCard,实现从ATM机取出银联卡的操作。

        5.在ABCATM类中,定义方法showBalance,实现查询余额功能,在该方法中调用银联接口UnionPay的getBalance方法即可。

        6.在ABCATM类中,定义takeMoney方法,实现取款功能,在该方法中调用银联接口UnionPay的drawMoney方法接口。

        7.在ABCATM类中,定义payTelBill方法,实现支付电话费功能,在该方法中,首先判断插入的银联卡是否为农行的卡,如果是农行的卡,则调用农行接口ABC的payTelBill方法;否则,提示信息"您的卡不是农业银行卡,无法完成缴费"。

        8.在ABCATM类中,定义allMenu方法,实现农行ATM机的菜单。

        9.构建测试类,测试农行ATM机所实现的功能。

步骤    

        实现此案例需要按照如下步骤进行。

步骤一:定义类ABCATM

        定义名为ABCATM的类,表示农行的ATM机系统,代码如下所示:

    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
     }

步骤二:定义属性card表示银联卡

        在ABCATM类中,定义属性card,该属性的类型为UnionPay,表示银联卡。代码如下所示:

    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
     }

步骤三:实现ATM机插口操作

        在ABCATM类中,定义方法insertCard,实现向ATM机插入银联卡的操作。在该方法中,将card进行初始化,即表示插卡操作,代码如下所示:

    import java.util.Scanner;
    
    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
     }

步骤四:实现取卡操作

        在ABCATM类中,定义方法outCard,实现从ATM机取出银联卡的操作。在该方法中,将card的值设置为null,即表示取卡操作,代码如下所示: 

    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
         
         private void outCard(){
             card=null;
         }
     }

步骤五:实现查询余额功能

        在ABCATM类中,定义showBalance方法实现查询余额功能,在该方法中调用银联接口UnionPay的getBalance方法即可,代码如下所示:

    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
         
         private void outCard(){
             card=null;
         }
         
         private void showBalance(){
             System.out.println("当前余额是:"+card.getBalance());
         }
     }

步骤六:实现取款功能

        在ABCATM类中,定义takeMoney方法实现取款功能,在该方法中调用银联接口UnionPay的drawMoney方法即可,代码如下所示:

    import java.util.Scanner;
    
    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
         
         private void outCard(){
             card=null;
         }
         
         private void showBalance(){
             System.out.println("当前余额是:"+card.getBalance());
         }
         
         private void takeMoney(){
             Scanner input=new Scanner(System.in);
             System.out.println("请输入取款数目:");
             double number=Double.parseDouble(input.next());
             if(card.drawMoney(number)){
                 System.out.println("取款成功");
             }else{
                 System.out.println("取款失败");
             }
         }
     }

步骤七:实现支付电话费功能

        在ABCATM类中,定义payTelBill方法实现支付电话费功能,在该方法中,首先判断插入的银联卡是否为农行的卡,如果是农行的卡,则调用农行接口ABC的payTelBill方法;否则,提示信息"您的卡不是农业银行卡,无法完成缴费",代码如下所示:

    import java.util.Scanner;
    
    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
         
         private void outCard(){
             card=null;
         }
         
         private void showBalance(){
             System.out.println("当前余额是:"+card.getBalance());
         }
         
         private void takeMoney(){
             Scanner input=new Scanner(System.in);
             System.out.println("请输入取款数目:");
             double number=Double.parseDouble(input.next());
             if(card.drawMoney(number)){
                 System.out.println("取款成功");
             }else{
                 System.out.println("取款失败");
             }
         }
         
         private void payTelBill(){
             Scanner input=new Scanner(System.in);
             if(card instanceof ABC){
                 ABC abcCard=(ABC)card;
                 System.out.println("请输入电话号码:");
                 String telNum=input.next();
                 System.out.println("请输入缴费额:");
                 double sum=Double.parseDouble(input.next());
                 if(abcCard.payTelBill(telNum,sum)){
                     System.out.println("缴费功能");
                 }else{
                     System.out.println("缴费失败");
                 }
             }else{
                 System.out.println("您的卡不是农业银行卡,无法完成缴费");
             }
         }
     }

步骤八:实现ATM机的菜单功能

        在ABCATM类中,定义allMenu方法实现农行ATM机的菜单功能,代码如下所示:

    import java.util.Scanner;
    
    /**
     *ABCATM机类,用于描述模拟插入银行卡后的操作
     */
     public class ABCATM{
         private UnionPay card;
         
         public void insertCard(UnionPay userCard){
             if(card==null){
                 card=userCard;
             }
         }
         
         private void outCard(){
             card=null;
         }
         
         private void showBalance(){
             System.out.println("当前余额是:"+card.getBalance());
         }
         
         private void takeMoney(){
             Scanner input=new Scanner(System.in);
             System.out.println("请输入取款数目:");
             double number=Double.parseDouble(input.next());
             if(card.drawMoney(number)){
                 System.out.println("取款成功");
             }else{
                 System.out.println("取款失败");
             }
         }
         
         private void payTelBill(){
             Scanner input=new Scanner(System.in);
             if(card instanceof ABC){
                 ABC abcCard=(ABC)card;
                 System.out.println("请输入电话号码:");
                 String telNum=input.next();
                 System.out.println("请输入缴费额:");
                 double sum=Double.parseDouble(input.next());
                 if(abcCard.payTelBill(telNum,sum)){
                     System.out.println("缴费功能");
                 }else{
                     System.out.println("缴费失败");
                 }
             }else{
                 System.out.println("您的卡不是农业银行卡,无法完成缴费");
             }
         }
         
         public void allMenu(){
             Scanner input=new Scanner(System.in);
             System.out.println("请输入密码:");
             String pwd=input.next();
             if(card.checkPwd(pwd)){
                 System.out.println("请选择功能:\n 1.查看余额 2.取款 3.缴电话费");
                 int choice=Integer.parseInt(input.next());
                 switch(choice){
                     case 1:
                         showBalance();
                         break;
                     case 2:
                         takeMoney();
                         break;
                     case 3:
                         payTelBill();
                         break;
                     default:
                         System.out.println("非法输入");            
                 }
             }else{
                 System.out.print("密码错误");
             }
             this.outCard();
         }
     }

步骤九:测试

        构造测试类TestATM,测试农行ATM机所实现的功能,代码如下所示:

    /**
     *测试接口多态
     */
     public class TestATM{
         public static void main(String[] args){
             ABCATM atm=new ABCATM();
             //ICBCImpl icbc=new ICBCImpl(3000,"123456);//工商银行的卡
             ABCImpl abc=new ABCImpl(1000,"123456");//农业银行的卡
             //atm.insertCard(icbc);
             atm.insertCard(abc);
             atm.allMenu();
         }
     }

        运行上述代码后,会发现农行的卡可以实现支付电话费功能,而工商银行的卡则不能实现支付电话费功能。

扫描关注我吧:

猜你喜欢

转载自blog.csdn.net/houjunkang363/article/details/90736383
今日推荐