欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-27 18:17:27
...

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

ATM机系统

问题

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

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

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

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

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

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

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

        观察图-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();
         }
     }

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

扫描关注我吧:

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