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

二. 项目功能要求:

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

银行自助终端系统

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

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 abstract class Atm {//成员变量private Card card;//成员方法public abstract String kaihu();}package com.bank.unionpay;//定义接口类型的card
public interface Card {//抽象方法void cunkuan(double cun);void qukuan(double qu);void chaxunyue();}package com.bank.unionpay;public enum Fourbank {ABC("中国农业银行"),ICBC("中国工商银行"),CCB("中国建设银行"),COB("中国银行");private final String name;public String getName() {return name;}//构造方法不能加修饰符
     Fourbank(String name){this.name = name;}}

package com.bank.abc;import java.util.Random;import com.bank.unionpay.Atm;
import com.bank.unionpay.Fourbank;public class AbcAtm extends Atm {//定义农行属性的ATM机private final static Fourbank bank1 = Fourbank.ABC;//定义开户方法,随机生成六位数账户
    @Overridepublic String kaihu() {// 随机生成六位数的账户String zh = "";Random ran = new Random();for (int i = 0; i < 6; i++) {zh += ran.nextInt(10);}return zh;}}package com.bank.abc;
//单例模式定义银行类
import java.util.ArrayList;
import java.util.List;import com.bank.unionpay.Fourbank;public class Bank {// 定义银行类型以及银行卡的list集合private Fourbank type;private String abcname;private List<Chuxuka> card;// 构造方法private Bank() {abcname = "中国农业银行";type = Fourbank.ABC;card = new ArrayList<>();card.add(new Chuxuka("张潇", "370321199411301111", "111111", "666666", 2000));card.add(new Xinyongka("张三", "370321199999999999", "222222", "666666", 2000));}// 构造唯一的Bank实例private static Bank abc = new Bank();// 构造获取唯一Bank实例的方法public static Bank getBack() {return abc;}// getter和setter方法public Fourbank getType() {return type;}public void setType(Fourbank type) {this.type = type;}public String getAbcname() {return abcname;}public void setAbcname(String abcname) {this.abcname = abcname;}public List<Chuxuka> getCard() {return card;}public void setCard(List<Chuxuka> card) {this.card = card;}}package com.bank.abc;import java.io.Serializable;import com.bank.unionpay.Card;
import com.bank.unionpay.Fourbank;public class Chuxuka implements Card, Serializable {// 定义储蓄卡类的成员变量private Fourbank type1 = Fourbank.ABC;// 定义储蓄卡的类型为农行private String name; // 定义持卡者姓名private String personid; // 定义持卡者身份证号码private String cardid; // 定义储蓄卡卡号private String mima; // 定义储蓄卡的密码private double yue; // 定义储蓄卡的余额private double touzhi = 0; // 定义储蓄卡无法透支(透支额度为0)// 重写存款和取款的方法
    @Overridepublic void cunkuan(double cun) {yue += cun;}@Overridepublic void qukuan(double qu) {if (qu <= yue) {yue -= qu;System.out.println("取款成功,谢谢使用!");} elseSystem.out.println("您输入的取款金额有误,无法完成本次取款,系统将自动退出,谢谢使用!");}// 构造方法public Chuxuka(String name, String personid, String cardid, String mima, double yue) {super();this.name = name;this.personid = personid;this.cardid = cardid;this.mima = mima;this.yue = yue;}// 以下是getter和setter方法区public double getTouzhi() {return touzhi;}public void setTouzhi(double touzhi) {this.touzhi = touzhi;}@Overridepublic void chaxunyue() {System.out.println(yue);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPersonid() {return personid;}public void setPersonid(String personid) {this.personid = personid;}public String getCardid() {return cardid;}public void setCardid(String cardid) {this.cardid = cardid;}public String getMima() {return mima;}public void setMima(String mima) {this.mima = mima;}public double getYue() {return yue;}public void setYue(double yue) {this.yue = yue;}@Overridepublic String toString() {return name + "," + personid + "," + cardid + "," + mima + "," + yue;}}package com.bank.abc;public class Xinyongka extends Chuxuka {//定义信用卡继承储蓄卡//重写成员变量,定义信用卡的透支额度为10000元private double touzhi = 10000;//重写取款方法public void qukuan(double qu) {if(qu<=getYue()+touzhi){setYue(getYue() - qu);System.out.println("取款成功,谢谢使用!");}elseSystem.out.println("您输入的取款金额有误,无法完成本次取款,系统将自动退出,谢谢使用!");}public double getTouzhi() {return touzhi;}public void setTouzhi(double touzhi) {this.touzhi = touzhi;}//构造方法public Xinyongka(String name, String personid, String cardid, String mima, double yue) {super(name,  personid,cardid, mima,  yue);}}

package com.bank.text;
/*** @author 张伟* 2016.10.07* 模拟银行自动终端系统*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;
import java.util.Scanner;import com.bank.abc.AbcAtm;
import com.bank.abc.Bank;
import com.bank.abc.Chuxuka;public class BankText {public static void main(String[] args) throws Exception {// 实例化abcATMAbcAtm abcatm = new AbcAtm();// 获取Bank实例并初始化银行卡的LIST集合Bank bank = Bank.getBack();List<Chuxuka> cards = bank.getCard();//应用对象的序列化获取存储的cardstry {ObjectInputStream in = new ObjectInputStream(new FileInputStream("e:/Bank/bank.obj"));List<Chuxuka> card = (List<Chuxuka>) in.readObject();cards = card;in.close();} catch (Exception e1) {e1.printStackTrace();}for (int s = 1; s > 0; s++) {// 菜单提示
System.out.println("银行自助终端系统\n**********************");System.out.println("0------开户\n1------查询\n2------存款\n3------取款\n4------退出");System.out.print("**********************\n请选择您要执行的功能:");Scanner sc = new Scanner(System.in);while (true) {// 等待选择int resoult = sc.nextInt();// 选择判断if (resoult == 0) {System.out.println("\n**********************\n您选择的为开户功能");System.out.print("请输入您的姓名:");Scanner sc1 = new Scanner(System.in);while (true) {// 等待输入String name = sc1.nextLine();// 定义汉字的正则表达式String regex = "[\\u4E00-\\u9FA5]+";// 判断输入的name是否合法if (name.matches(regex) && name.length() >= 2 && name.length() <= 4) {System.out.print("请输入您的身份证号:");Scanner sc2 = new Scanner(System.in);while (true) {String shenfenzheng = sc2.nextLine();// 定义身份证的正则表达式
String regex1 = "\\d{17}[0-9a-zA-Z]";// 判断身份证是否合法if (shenfenzheng.matches(regex1)) {System.out.print("请输入六位数字密码:");Scanner sc3 = new Scanner(System.in);while (true) {String regex2 = "[0-9]{6}";String mima = sc3.nextLine();if (mima.matches(regex2)) {String sss = abcatm.kaihu();cards.add(new Chuxuka(name, shenfenzheng, sss, mima, 0));System.out.println("您的账户为:" + sss);System.out.println("开户成功,谢谢使用!");// System.out.println(bank.getCard());break;} else {System.out.print("密码输入不合法,请重新输入:");}}break;} else {System.out.print("您输入的身份证号不合法,请重新输入:");}}break;} else {System.out.print("您输入的姓名不合法,请重新输入:");}}break;}else if (resoult == 1) {System.out.println("\n**********************\n您选择的为查询功能");System.out.print("请输入您要查询的卡号:");Scanner sc1 = new Scanner(System.in);for (int i = 1; i > 0; i++)// 如果输入的卡号存在,则使i<0,执行完全部操作后退出循环完成当前查询,否则,无限循环,直至卡号输入正确为止
                    {// 等待输入需要查询的卡号String cardID = sc1.nextLine();for (int ii = 0; ii < cards.size(); ii++) {if (cards.get(ii).getCardid().equals(cardID)) {System.out.print("请输入您的密码:");Scanner sc2 = new Scanner(System.in);for (int j = 0; j < 3; j++)// 设置输入密码的最高次数
                                {String mima = sc2.nextLine();if (mima.equals(cards.get(ii).getMima())) {// 密码输入正确后显示所有银行卡信息并终止当前查询System.out.println("您要查询的账号信息为:\n**********************");System.out.println("姓名:" + cards.get(ii).getName());System.out.println("身份证号:" + cards.get(ii).getPersonid());System.out.println("卡号:" + cards.get(ii).getCardid());System.out.println("余额:" + cards.get(ii).getYue() + "\n");i = -1;break;} else {if (j < 2)System.out.print("密码输入错误,请重新输入:");else {// 密码连续输入错误,终止当前查询System.out.println("对不起,您已经没有了输入机会");i = -1;break;}}}} else if (ii < cards.size()) {}else {System.out.print("您输入的卡号不存在,请重新输入:");}}}break;}else if (resoult == 2) {System.out.print("\n**********************\n您选择的为存款功能\n请输入您要存款的卡号:");Scanner sc1 = new Scanner(System.in);for (int i = 1; i > 0; i++)// 如果输入的卡号存在,则使i<0,执行完全部操作后退出循环完成当前存款,否则,无限循环,直至卡号输入正确为止
                    {// 等待输入需要存款的卡号String cardID = sc1.nextLine();for (int ii = 0; ii < cards.size(); ii++) {if (cards.get(ii).getCardid().equals(cardID)) {i = -1;System.out.print("请输入您的密码:");Scanner sc2 = new Scanner(System.in);for (int j = 0; j < 3; j++)// 设置输入密码的最高次数
                                {String mima = sc2.nextLine();if (mima.equals(cards.get(ii).getMima())) {// 密码输入正确后显示银行卡的当前信息System.out.println("您要存款的账号信息为:\n**********************");System.out.println("姓名:" + cards.get(ii).getName());System.out.println("身份证号:" + cards.get(ii).getPersonid());System.out.println("卡号:" + cards.get(ii).getCardid());System.out.println("余额:" + cards.get(ii).getYue() + "\n");// 提醒输入存款金额完成存款功能System.out.print("请输入您的存款金额:");Scanner sc3 = new Scanner(System.in);double cun = sc3.nextDouble();                                        ii=cards.size()+1;if (cun > 0) {cards.get(ii).setYue(cards.get(ii).getYue() + cun);System.out.println("存款成功,谢谢使用!");                                            } elseSystem.out.println("您输入的金额无效,无法完成本次存款,系统将自动退出,谢谢使用");break;} else {if (j < 2)System.out.print("密码输入错误,请重新输入:");else// 密码连续输入错误,终止当前功能System.out.println("对不起,您已经没有了输入机会");}}} else if (ii < cards.size()) {} else {System.out.print("您输入的卡号不存在,请重新输入:");}}}break;}else if (resoult == 3) {System.out.print("\n**********************\n您选择的为取款功能\n请输入您要取款的银行卡号:");Scanner sc1 = new Scanner(System.in);for (int i = 1; i > 0; i++)// 如果输入的卡号存在,则使i<0,执行完全部操作后退出循环完成当前取款,否则,无限循环,直至卡号输入正确为止
                    {// 等待输入需要取款的卡号String cardID = sc1.nextLine();for (int ii = 0; ii < cards.size(); ii++) {if (cards.get(ii).getCardid().equals(cardID)) {i = -1;System.out.print("请输入您的密码:");Scanner sc2 = new Scanner(System.in);for (int j = 0; j < 3; j++)// 设置输入密码的最高次数
                                {String mima = sc2.nextLine();if (mima.equals(cards.get(ii).getMima())) {// 密码输入正确后显示银行卡的当前信息System.out.println("您要取款的账号信息为:\n**********************");System.out.println("姓名:" + cards.get(ii).getName());System.out.println("身份证号:" + cards.get(ii).getPersonid());System.out.println("卡号:" + cards.get(ii).getCardid());System.out.println("余额:" + cards.get(ii).getYue());System.out.println("透支额度:" + cards.get(ii).getTouzhi());// 提醒输入取款金额完成取款功能System.out.print("请输入您的取金额:");Scanner sc3 = new Scanner(System.in);double qu = sc3.nextDouble();cards.get(ii).qukuan(qu);                                        ii=cards.size()+1;break;} else {if (j < 2)System.out.print("密码输入错误,请重新输入:");else// 密码连续输入错误,终止当前功能System.out.println("对不起,您已经没有了输入机会");}}} else if (ii < cards.size()) {} else {System.out.print("您输入的卡号不存在,请重新输入:");}}}break;}else if (resoult == 4) {System.out.println("\n**********************\n感谢您的使用,请取好您的卡片,再见");s = -1;// 保存所有数据并退出File file = new File("e:/Bank");if (!file.exists()) {file.mkdirs();}try {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("e:/Bank/bank.obj"));out.writeObject(cards);out.close();System.out.println("数据保存完成...");} catch (Exception e) {e.printStackTrace();}break;}elseSystem.out.print("\n您选择的菜单不存在,请重新选择:");}}}}

转载于:https://www.cnblogs.com/HRZJ/p/5936776.html

模拟银行自动终端系统相关推荐

  1. 模拟银行自助终端系统(序列化和反序列化)

    模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1.   对于数据输入异常,可使用java异常处理机制进行处理. 2.   ...

  2. 模拟银行自助终端系统

    一. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 **************************** 0.------开户 1.------查询 2.------存款 3.-- ...

  3. (转载)模拟银行自助终端系统

    一. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 **************************** 0.------开户 1.------查询 2.------存款 3.-- ...

  4. 模拟银行自动提款系统python

    列出对象及属性名称行为...py ''' 人 类名:Person 属性:姓名 身份证号 电话 卡 行为:卡 类名:Card 属性:卡号 密码 余额 行为:银行 类名:Bank 属性:用户列表 提款机提 ...

  5. python——银行自动提款机系统ATM

    目录 管理员类Admin() 管理员Admin类最终代码 人类Person Person类最终代码 信用卡类Card Card类最终代码 ATM类 ATM类最终代码 main()方法 main()方法 ...

  6. 模拟atm取款机 php,C语言模拟ATM自动取款机系统

    C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 一:问题描述: C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输 ...

  7. 模拟银行账户转账系统(简单模拟)

    本人刚刚接触java,此篇博客仅供初学者浏览,不喜勿喷,若有写的不好的地方欢迎大家指教: *模拟银行账户转账系统: 有A,B两个银行账户,初始金额都为1000元,A,B随机向对方转账,转账金额不得大于 ...

  8. Java模拟银行存取款系统

    设计性实验报告 课程名称 面向对象程序设计(Java)     项目名称 模拟银行存取款业务 实验类型 设计性 二.实验内容 模拟网上银行业务,当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密 ...

  9. 项目实战:银行自动提款机系统

    银行自动提款机项目 第一步:分析项目需要的类. 用户 类名:User 属性:姓名.身份证号码.电话号码.卡 行为: 卡 类名:Card 属性:卡号 密码 余额 行为: 提款机 类名:ATM 属性:用户 ...

最新文章

  1. 网站排名好却没流量到底是什么环节出了问题?
  2. Erlang(起个中文名:易浪)不能错过的盛宴
  3. spark里的hbase的ImmutableBytesWritable的打印问题scala
  4. 【媒体服务质量监控与QoE】
  5. Oracle入门(五F)之11g show spparameter 命令的使用
  6. linux 定时器 代码,linux C++ 定时器代码
  7. sscli 2.0 简介
  8. arch终端添加中文支持_arch/manjaro - 添加archlinuxcn的软件源
  9. FreeSWITCH折腾笔记3——数据库修改为postgresql
  10. c语言用循环转换单词首字母,用c++实现将文本每个单词首字母转换为大写
  11. 麦子学院C++学习笔记
  12. 可與言而不與之言,失人。不可與言而與之言,失言。知者不失人,亦不失言。
  13. Linux命令 ln
  14. python读书心得体会范文_读书心得体会范文五篇-读书心得体会
  15. 【Python】批量爬取OSM建筑瓦片数据并整合为shp格式数据
  16. 陀螺仪推荐-Murata村田 6DoF惯性传感器SCHA634-D03
  17. python+selenium爬虫,使用selenium爬取热门微博数据
  18. AI 硬件加速的重大飞跃!可训练机器学习硬件的光学芯片
  19. 采用双重差分需要注意的问题——双重差分项与随机误差项无关
  20. 得胜20周年重拳出击,全省狂销1.5亿

热门文章

  1. 芯片介绍-RK3399微处理器
  2. [经验教程]一个爱奇艺VIP会员帐号怎么共享给多个朋友家人使用同一个爱奇艺会员账号?
  3. 传微软计划收购诺基亚:真相还是造势?
  4. jQuery与DOM的区别
  5. 千元左右哪款蓝牙耳机好?音质超好的四款蓝牙耳机推荐
  6. 2010年6月刊:微博
  7. SAP部分付款与剩余付款
  8. 相亲app哪个更靠谱?盘点当下最热门的五大相亲软件
  9. 图片质量估计-如何判定一个人脸是否为阴阳脸(第一弹:python版本)
  10. 色情演员识别?绝对是人脸识别最糟糕的应用……