模拟银行自助终端系统

 

模拟银行自助终端系统

一. 本系统模拟银行用户使用ATM机开户、查询、存款、取款功能,要求使用java语言编程实现。 

说明: 

1. 对于数据输入异常,可使用java异常处理机制进行处理。 

2. 评分将以功能实现与代码规范性相结合的方式进行考核。

3. 如果对项目需求有疑问,可以随时以QQ留言方式联系我进行咨询。

4. 国庆放假期间,每天都有老师在公司值班,10月4日是我在公司值班,10月7日正常上班,欢迎大家到公司来做项目。

二. 项目功能要求: 

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

 

银行自助终端系统 

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

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机的功能。

 

以下功能选做:

以单态模式实现工商银行,在测试类中默认添加多张银行卡,在农行的ATM机上实现跨行查询和存取款功能。

package com.bank.unionpay;

public interface Card
{
    //抽象方法
        public double Balance() ;
        public void Cunkuan() ;
        public void Qukuan() ;
}
package com.bank.unionpay;

public abstract class ATM 
{
    //成员属性
        public Card account ;

        // 抽象方法
        public abstract void getAccount() ;
        
}
package com.bank.unionpay;

public enum FourYH 
{
        //    首行放置
        ABC("农行") , ICBC("工行") ,    CCB("建行") , BOC("中行");
        
        private String name ;
        
        public String getName()
        {
            return name;
        }

        FourYH(String name)
        {
            this.name = name ;
        }
        


}
package com.bank.abc;

import java.util.ArrayList;
import java.util.List;

import com.bank.unionpay.Card;
import com.bank.unionpay.FourYH;

//单例模式
public class ABCBank
{
    //属性
    final FourYH bank = FourYH.ABC ;
    private String yhName ;
    public List<CXcard> card= new ArrayList<>( ) ; 
    
    //私有构造方法,防止该类被实例化
    private  ABCBank()
    {
        
    }
    
    //创建Bank的一个对象
    private static ABCBank bk = new ABCBank() ;
    
    //获取唯一可用对象
    public static ABCBank getBk()
    {
        return bk ;
    }

    public FourYH getBank() {
        return bank;
    }

    public String getYhName() {
        return yhName;
    }

    public List<CXcard> getCard() {
        return card;
    }
    
    //private Map<String ,CXcard> =new HashMap<>() ;
    
    
    
    
}
package com.bank.abc;

import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.bank.unionpay.ATM;
import com.bank.unionpay.FourYH;

public class ATM1 extends ATM {
    // 属性
    final FourYH bank = FourYH.ABC;
    Random  shu = new Random() ;
    String sg = "" ;
    CXcard cd = new CXcard() ;
    
    // 获取唯一可用对象
    ABCBank bk = ABCBank.getBk();
    Random a = new Random();
    String str = "";

    @Override
        public void getAccount()
        {
            for(int i =0; i>-1 ;i++)
            {
                //分支语句,判断用户输入,提供相关功能
                System.out.println("************************************");
                System.out.println("您选择的为开户功能!");
                System.out.println("请输入您的姓名:");
                    
                //提供输入,供用户注册名字
                for(int j1 =1 ; j1>0 ;j1++)
                {
                    Scanner can = new Scanner(System.in);
                    String ss = can.nextLine();
                       
                    String regEx = "[\u4e00-\u9fa5]";
                    Pattern p = Pattern.compile(regEx);
                    int num = 0;
                    //汉字长度
                    for(int s=0;s<ss.length();s++)
                    {
                         if(p.matches(regEx, ss.substring(s, s + 1)))
                         {
                               num++;
                         }
                     }
                    //判断名字是否合法
                    if(num<2)
                    {
                        System.out.println("您输入的名字不合法!");
                    }
                    else
                    {
                        System.out.println("您输入的名字是:"+ss);
                      //判断身份证号码是否合法
                        for(int j2=1;j2>0;j2++)
                        {
                            System.out.println("请输入您的身份证号:");
                            
                            Scanner sf = new Scanner(System.in) ;
                            String sfNum = sf.nextLine();
                        
                             //定义判别用户身份证号的正则表达式(18位,最后一位可以为字母)  
                            Pattern idNumPattern = Pattern.compile("(\\d{17}[0-9a-zA-Z])");  
                            //通过Pattern获得Matcher  
                            Matcher idNumMatcher = idNumPattern.matcher(sfNum);  
                            //判断用户输入是否为身份证号  
                            if(idNumMatcher.matches())
                            {  
                                System.out.println("您的身份证号是:"+sfNum);  
                              //判断密码是否合法
                                for(int j=1;j>0;j++)
                                {
                                    System.out.println("请输入您的密码:");
                                    
                                    Scanner mm = new Scanner(System.in) ;
                                    String  mmNum = mm.nextLine();
                                    
                                     //定义判别用户密码的正则表达式(6位纯数字)  
                                    Pattern idNumPattern1 = Pattern.compile("(\\d{5}[0-9])");  
                                    //通过Pattern获得Matcher  
                                    Matcher idNumMatcher1 = idNumPattern.matcher(mmNum);  
                                    //判断用户输入的密码格式是否正确
                                    if(idNumMatcher.matches())
                                    {  
                                        while(true)
                                        {
                                            System.out.println("您的密码是:"+mmNum);  
                                            System.out.println("请再次输入您的密码,进行确认:");
                                            Scanner mm1 = new Scanner(System.in) ;
                                            String  mmNum1 = mm.nextLine();
                                            if(mmNum1.equals(mmNum)==true)
                                            {
                                                System.out.println("开户成功,谢谢使用!");
                                                System.out.println("银行自助终端系统");
                                                
                                                for(int j3 = 0 ;j3<6;j3++)
                                                {
                                                    int b = a.nextInt(9) ;
                                                    str =str+""+b ;
                                                }
                                                System.out.print("您的卡号为:");
                                                System.out.println(str);
                                                
                                                
                                                cd.setName(ss);
                                                cd.setMima(mmNum);
                                                cd.setKahao(str);
                                                cd.setShenfen(sfNum); 
                                                ABCBank.getBk().card.add(cd) ;
                                                System.out.println("银行自助终端系统");
                                                
                                                System.out.println("************************************");
                                                System.out.println();
                                                System.out.println("0——————开户");
                                                System.out.println("1——————查询");
                                                System.out.println("2——————存款");
                                                System.out.println("3——————取款");
                                                System.out.println("4——————退出");
                                                System.out.println();
                                                System.out.println("************************************");
                                                
                                                System.out.println();
                                                
                                                System.out.println("请选择您要执行的功能:");
                                                
                                                break ;
                                            }
                                            else
                                            {
                                                System.out.println("您两次输入密码不一样,请重新设置密码!");
                                            }
                                        }
                                        break ;
                                    }
                                    else
                                    {  
                                        //如果不是,输出信息提示用户  
                                        System.out.println("您输入的密码必须为六位数字!");  
                                    }  
                            }
                                break ;
                            }
                            
                            else
                            {  
                                //如果不是,输出信息提示用户  
                                System.out.println("请输入合法的身份证号!");  
                            }  
                            break ;
                        }
                        break ;
                    }
                }
                break ;
            }
        //    }
        }

    public String getStr() {
        return str;
    }

}
package com.bank.abc;

import java.util.Scanner;

import com.bank.unionpay.Card;

public class CXcard implements Card
{
    private double balance ;
    private double cunkuan ;
    private double qukuan ;
    private String name ;
    private String shenfen ;
    private String kahao ;
    private String mima;
    
    public String getMima() {
        return mima;
    }

    public void setMima(String mima) {
        this.mima = mima;
    }

    public CXcard(String name, String shenfen , String kahao ,String mima) 
    {
        this.name = name;
        this.kahao =kahao ;
        this.shenfen =shenfen;
        this.mima = mima ;
    }
    
    public CXcard() {
        super();
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getCunkuan() {
        return cunkuan;
    }

    public void setCunkuan(double cunkuan) {
        this.cunkuan = cunkuan;
    }

    public double getQukuan() {
        return qukuan;
    }

    public void setQukuan(double qukuan) {
        this.qukuan = qukuan;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getShenfen() {
        return shenfen;
    }

    public void setShenfen(String shenfen) {
        this.shenfen = shenfen;
    }

    public String getKahao() {
        return kahao;
    }

    public void setKahao(String kahao) {
        this.kahao = kahao;
    }

    public double Balance() 
    {
        // TODO 自动生成的方法存根
        return balance;
    }

    public void Cunkuan() 
    {
        System.out.println("************************************");
        System.out.println("您选择的为存款功能!");
        
        while(true)
        {
            System.out.println("请输入您的卡号:");
            Scanner id = new Scanner(System.in) ;
            String idNum = id.nextLine();
        
            
            //判断用户输入卡号是否存在
            for(CXcard s :ABCBank.getBk().card)
            {
                if(idNum.equals(s.getKahao())) 
                {
                    for(int j =0 ;j<3;j++)
                    {
                        //提供用户输入渠道
                        System.out.println("请输入您的密码:");
                        Scanner password = new Scanner(System.in) ;
                        String pd = password.nextLine();
                        if(pd.equals(s.getMima()))
                        {
                            System.out.println("您查询的账号信息为:");
                            System.out.println("卡号:"+s.kahao);
                            System.out.println("姓名:"+s.name);
                            System.out.println("身份证号:"+s.shenfen);
                            System.out.println("余额:"+s.balance);
                            System.out.println("请输入您的存款金额:");
                            
                            Scanner cunqian = new Scanner(System.in) ;
                            double cq =cunqian.nextDouble( )  ;
                            if(cq>0)
                            {
                                balance += cq ;
                                System.out.println("您的存款金额为:"+cq);
                                ABCBank.getBk().card.get(0).setBalance(balance);
                                System.out.println("卡号:"+s.kahao);
                                System.out.println("姓名:"+s.name);
                                System.out.println("身份证号:"+s.shenfen);
                                System.out.println("余额:"+s.balance);
                                System.out.println("银行自助终端系统");
                                
                                System.out.println("************************************");
                                System.out.println();
                                System.out.println("0——————开户");
                                System.out.println("1——————查询");
                                System.out.println("2——————存款");
                                System.out.println("3——————取款");
                                System.out.println("4——————退出");
                                System.out.println();
                                System.out.println("************************************");
                                
                                System.out.println();
                                
                                System.out.println("请选择您要执行的功能:");
                                break ;
                            }
                            else
                            {
                                System.out.println("您输入的存款金额有误,系统即将退出,谢谢使用!");
                            }
                            break ;
                        }
                        else
                        {
                            System.out.println("密码不对!");
                        }
                        
                    }
                    break ;
                }
                else
                {
                    System.out.println("卡号不存在,请重新输入:");
                }
            }
                
                
            
        
            break ;
        }

    }

    public void Qukuan() 
    {
        System.out.println("************************************");
        System.out.println("您选择的为取款功能!");
        
        while(true)
        {
            System.out.println("请输入您的卡号:");
            Scanner id = new Scanner(System.in) ;
            String idNum = id.nextLine();
        
            
            //判断用户输入卡号是否存在
            for(CXcard s :ABCBank.getBk().card)
            {
                if(idNum.equals(s.getKahao())) 
                {
                    for(int j =0 ;j<3;j++)
                    {
                        //提供用户输入渠道
                        System.out.println("请输入您的密码:");
                        Scanner password = new Scanner(System.in) ;
                        String pd = password.nextLine();
                        if(pd.equals(s.getMima()))
                        {
                            System.out.println("您查询的账号信息为:");
                            System.out.println("卡号:"+s.kahao);
                            System.out.println("姓名:"+s.name);
                            System.out.println("身份证号:"+s.shenfen);
                            System.out.println("余额:"+s.balance);
                            System.out.println("请输入您的取款金额:");
                            
                            Scanner cunqian = new Scanner(System.in) ;
                            double cq =cunqian.nextDouble( )  ;
                            if(cq>0&&cq<=s.balance)
                            {
                                s.balance -= cq ;
                                System.out.println("您的取款金额为:"+cq);
                                ABCBank.getBk().card.get(0).setBalance(s.balance);
                                System.out.println("卡号:"+s.kahao);
                                System.out.println("姓名:"+s.name);
                                System.out.println("身份证号:"+s.shenfen);
                                System.out.println("余额:"+s.balance);
                                System.out.println("银行自助终端系统");
                                
                                System.out.println("************************************");
                                System.out.println();
                                System.out.println("0——————开户");
                                System.out.println("1——————查询");
                                System.out.println("2——————存款");
                                System.out.println("3——————取款");
                                System.out.println("4——————退出");
                                System.out.println();
                                System.out.println("************************************");
                                
                                System.out.println();
                                
                                System.out.println("请选择您要执行的功能:");
                                break ;
                            }
                            else
                            {
                                System.out.println("您输入的取款金额有误,系统即将退出,谢谢使用!");
                            }
                            break ;
                        }
                        else
                        {
                            System.out.println("密码不对!");
                        }
                        
                    }
                    break ;
                }
                else
                {
                    System.out.println("卡号不存在,请重新输入:");
                }
            }
                
                
            
        
            break ;
        }

    }
    
    public void chaxun()
    {
        
        System.out.println("************************************");
        System.out.println("您选择的为查询功能!");
        
        
        //提供用户输入渠道
        while(true)
        {
            System.out.println("请输入您的卡号:");
            Scanner id = new Scanner(System.in) ;
            String idNum = id.nextLine();
        
            
            //判断用户输入卡号是否存在
            for(CXcard s :ABCBank.getBk().card)
            {
                if(idNum.equals(s.getKahao())) 
                {
                    for(int j =0 ;j<3;j++)
                    {
                        //提供用户输入渠道
                        System.out.println("请输入您的密码:");
                        Scanner password = new Scanner(System.in) ;
                        String pd = password.nextLine();
                        if(pd.equals(s.getMima()))
                        {
                            System.out.println("您查询的账号信息为:");
                            System.out.println("卡号:"+s.kahao);
                            System.out.println("姓名:"+s.name);
                            System.out.println("身份证号:"+s.shenfen);
                            System.out.println("余额:"+s.balance);
                            System.out.println("银行自助终端系统");
                            
                            System.out.println("************************************");
                            System.out.println();
                            System.out.println("0——————开户");
                            System.out.println("1——————查询");
                            System.out.println("2——————存款");
                            System.out.println("3——————取款");
                            System.out.println("4——————退出");
                            System.out.println();
                            System.out.println("************************************");
                            
                            System.out.println();
                            
                            System.out.println("请选择您要执行的功能:");
                            break ;
                        }
                        else
                        {
                            System.out.println("密码不对!");
                        }
                        
                    }
                    break ;
                }
                else
                {
                    System.out.println("卡号不存在,请重新输入:");
                }
            }
                
                
            
        
            break ;
        }

    }
    
    
    @Override
    public String toString() {
        return "CXcard [name=" + name + ", shenfen=" + shenfen + ", kahao=" + kahao + ", mima=" + mima + "]";
    }

    

    
    
}
package com.bank.abc;

public class XY extends CXcard
{
    //成员属性
    private double touzhi ;
    
    public double Qukuan(double qukuan) 
    {
        // TODO 自动生成的方法存根
        if( qukuan>=0 )
        {                                            //还要修改
            return qukuan ;
        }
        else
        {
            return -1 ;//测试类判断
        }
    }
    
}
package com.bank.test;

import java.util.Scanner;

import com.bank.abc.ATM1;
import com.bank.abc.CXcard;

public class SSSS {

    public static void main(String[] args) throws Exception 
    {
        System.out.println("银行自助终端系统");
        
        System.out.println("************************************");
        System.out.println();
        System.out.println("0——————开户");
        System.out.println("1——————查询");
        System.out.println("2——————存款");
        System.out.println("3——————取款");
        System.out.println("4——————退出");
        System.out.println();
        System.out.println("************************************");
        
        System.out.println();
        
        System.out.println("请选择您要执行的功能:");
        while(true)
        {
            //提供输入
            Scanner sc = new Scanner(System.in) ;
            int it = sc.nextInt( ) ;
            try
            {
                if(it==0)
                {
                    ATM1  a = new ATM1() ;
                    a.getAccount();
                }
                if(it==1)
                {
                    CXcard cd= new CXcard();
                    cd.chaxun();
                }
                if(it==2)
                {
                    CXcard cd= new CXcard();
                    cd.Cunkuan();
                }
                if(it==3)
                {
                    CXcard cd= new CXcard();
                    cd.Qukuan();
                }
                if(it==4)
                {
                    System.out.println("系统即将退出!");
                    break ;
                }
            }
            catch(Exception e)
            {
                System.out.println("输入有误!");
                System.out.println("银行自助终端系统");
                
                System.out.println("************************************");
                System.out.println();
                System.out.println("0——————开户");
                System.out.println("1——————查询");
                System.out.println("2——————存款");
                System.out.println("3——————取款");
                System.out.println("4——————退出");
                System.out.println();
                System.out.println("************************************");
                
                System.out.println();
                
                System.out.println("请选择您要执行的功能:");
            }
        }
        
        
    }

}

 

posted @ 2016-10-07 09:23  丶疏影横斜  阅读(898)  评论(7编辑  收藏  举报