首页 > 代码库 > 模拟银行自助终端系统

模拟银行自助终端系统

 

模拟银行自助终端系统

一. 本系统模拟银行用户使用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("请选择您要执行的功能:");            }        }                    }}

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

 

模拟银行自助终端系统