银行管理系统项目

1、ATM_Machine

package Bnk;import javax.naming.Name;
import javax.smartcardio.Card;
import java.io.BufferedReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.function.BinaryOperator;public class ATM_Machine {private boolean isFirstShow = true;public boolean loginCheck(BankCard card,int password){int truePassword = card.getPassword();if (truePassword == password){return true;}return false;}public void showTitle(){System.out.println("------------ATM系统------------");}//登录成功后,系统开始工作public void showOperation(BankCard card){//登录,查询余额,存款,取款,转账,销户,开户,退出Scanner input = new Scanner(System.in);if(isFirstShow) {this.showTitle();isFirstShow = false;}System.out.println("1.查询余额\t\t\t2.存款");System.out.println("3.转账    \t\t\t4.取款");System.out.println("5.销户    \t\t\t6.退出");System.out.println("请输入您要进行的操作:");int option = input.nextInt();input.nextLine();switch (option){case 6:exit();BankSystem.start();break;case 1:showBalance(card);break;case 2:showDeposit(card);break;case 3:showTransfer(card);break;case 4:showWithdrawal(card);break;case 5:closeAccount(card);break;default:System.out.println("您输入了不合法字符,建议您重新输入!");showOperation(card);}}//退出系统,密码输入错误3次,或者交易完成后,应该退出系统public void exit(){System.out.println("ATM系统关闭");}public static void main(String[] args) {ATM_Machine a = new ATM_Machine();}public BigDecimal queryBalance(BankCard card){return card.getBalance();}public void showBalance(BankCard card){this.showTitle();System.out.println("您的余额为:"+queryBalance(card));this.showOperation(card);}//deposit存款public void deposit(BankCard card,int amount){card.setBalance(card.getBalance().add(new BigDecimal(amount)));}public void showDeposit(BankCard card){this.showTitle();int amount = checkAmountInput("存款",20000);//一次最多存2万deposit(card,amount);//执行存款操作System.out.println("存款成功,您当前卡内余额为:"+card.getBalance());showOperation(card);}//取款:withdrawalpublic void withdrawal(BankCard card,int amount){card.setBalance(card.getBalance().subtract(new BigDecimal(amount)));}public void showWithdrawal(BankCard card){this.showTitle();int amount = checkAmountInput("取款",3000);//一次最多取3千withdrawal(card,amount);//执行存款操作System.out.println("取款成功,您当前卡内余额为:"+card.getBalance());showOperation(card);}//销户public void closeAccount(BankCard card ){Scanner input = new Scanner(System.in);System.err.println("销户是一个危险操作,你的所有余额将被清空,卡号将会回收,您确定要继续吗?");System.out.println("1.是的,继续\t\t2.取消该操作");String s = input.nextLine();if (s.equals("1")){BankSystem.getAllBanCard().remove(card);card = null;System.out.println("您已经成功销户");exit();BankSystem.start();}else if (s.equals("2")){showOperation(card);}else{System.err.println("您输入了不合法字符!!!\n麻烦您重复确认您的操作:");closeAccount(card);}}//转账:transferpublic void transfer(BankCard myCard,BankCard anotherCard,int amount){myCard.setBalance(myCard.getBalance().subtract(new BigDecimal(amount)));anotherCard.setBalance(anotherCard.getBalance().add(new BigDecimal(amount)));}public void showTransfer(BankCard myCard){Scanner input = new Scanner(System.in);System.out.println("请输入对方的银行卡号:");String cardNum = input.nextLine();ArrayList<BankCard> allBankCard = new ArrayList<>(BankSystem.getAllBanCard());BankCard anotherCard = null;boolean isExist = false;for (int i = 0;i<allBankCard.size();i++){if(allBankCard.get(i).getCARDNUM().equals(cardNum)){anotherCard = allBankCard.get(i);//卡号存在,实例化该银行卡isExist = false;break;}}if (isExist == true){System.err.println("您输入的银行卡号不存在,请重新输入");showTransfer(myCard);}int amount = checkAmountInput("转账",5000);//转账每次只能转5000if (myCard.getBalance().compareTo(new BigDecimal(amount)) == -1){System.err.println("对不起,您的余额不足");System.out.println();showOperation(myCard);}transfer(myCard,anotherCard,amount);System.out.println("转账成功!请继续您的操作");showOperation(myCard);}private int checkAmountInput(String operation,int maxAmount){Scanner input = new Scanner(System.in);int amount;System.out.println("请输入您要"+operation+"的金额(一次不得超过"+maxAmount+"):");while (true) {try {amount = input.nextInt();input.nextLine();if (amount % 100 != 0) {System.err.println(operation+"数目必须是100的整数倍,请重新输入:");continue;}if (amount > maxAmount) {System.err.println(operation+"数目一次不得超过"+maxAmount+",请重新输入:");continue;}break;} catch (InputMismatchException e) {input.nextLine();System.err.println(operation+"数额必须是整数,请重新输入:");}}return amount;}
}

2、bank_card

package Bnk;import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Random;
public class BankCard {private BigDecimal balance = new BigDecimal("0");//余额private String CARDNUM;//卡号,一般是19位的,纯数字的private Customer holder;//持有者private int password;//密码public static boolean checkIsExistThisBankCardNum(String bankCardNum){boolean flag = false;ArrayList<BankCard> allBanCard = new ArrayList<>(BankSystem.getAllBanCard());for (int i = 1;i<allBanCard.size();i++){while (allBanCard.get(i).getCARDNUM().equals(bankCardNum)){flag = true;//存在这个银行卡号了,需要重新生成,虽然概率很低。}}return flag;}public BankCard(String IDNum,String phoneNum,int password){//需要一个身份证号,和一个手机号码this.holder = IdentityManageSystem.getIdentifyMsg().get(IDNum);String cardNum = new GenerateRandomString().generateIntString(19);//19位随机数字while (checkIsExistThisBankCardNum(cardNum)){//存在这个银行卡号了,需要重新生成,虽然概率很低。cardNum = new GenerateRandomString().generateIntString(19);//19位随机数字}this.CARDNUM = cardNum;this.password = password;//设置开户随机金额(模拟一下)Double money = new Random().nextDouble()*100+1;DecimalFormat df = new DecimalFormat("#.00");String bd = df.format(money);this.balance = new BigDecimal(bd);}public boolean equals(Object obj){if (this==obj){return true;}if (obj instanceof BankCard){BankCard newCard = (BankCard)obj;if (newCard.getCARDNUM().equals(this.CARDNUM))//只要卡号相同,就认为是同一张银行卡return true;}return false;}public int hashCode(){return this.CARDNUM.hashCode();}public BigDecimal getBalance() {return balance;}public String getCARDNUM() {return CARDNUM;}public Customer getHolder() {return holder;}public void setBalance(BigDecimal balance) {this.balance = balance;}public void setPassword(int password) {this.password = password;}public int getPassword() {return password;}
}

3、BankSystem

package Bnk;import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class BankSystem {private static ATM_Machine atm = new ATM_Machine();private static Set<BankCard> allBankCard = new HashSet<>();public static void addBanCard(BankCard card){allBankCard.add(card);}public static Set getAllBanCard(){return allBankCard;}public static boolean loginATM(ATM_Machine atm){Scanner input = new Scanner(System.in);String cardNum;System.out.println("请输入您的银行卡号:(误操作,按#号键敲回车可再次回到系统主页面)");cardNum = input.nextLine();if (cardNum.equals("#")){start();}ArrayList<BankCard> allBankCard = new ArrayList<>(BankSystem.getAllBanCard());BankCard card = null;boolean isExist = false;for (int i = 0;i<allBankCard.size();i++){if(allBankCard.get(i).getCARDNUM().equals(cardNum)){card = allBankCard.get(i);//卡号存在,实例化该银行卡isExist = true;}}if (isExist == false){System.err.println("您输入的银行卡号不存在,请重新输入");loginATM(atm);}String name = card.getHolder().getName();System.out.println("欢迎"+name+"使用本公司智能提示ATM系统\n请输入您的银行卡密码:");int password = input.nextInt();int n = 3;//3次输入密码的机会while (n>0) {if (!atm.loginCheck(card,password)) {n--;System.err.println("您输入的密码错入,请重新输入,您还有" + n + "次输入机会!");if(n==0){atm.exit();return false;}password = input.nextInt();}else{System.out.println("密码正确,正在启动系统···");try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}atm.showOperation(card);return true;}}atm.exit();return false;}public static void start(){System.out.println("\t=============欢迎进入我们的银行系统=============\t");System.out.println("1.没有银行卡,我要办理\t\t\t2.已有银行卡,我要通过ATM办理一些业务");System.out.println("3.退出整个银行系统");System.out.println("请选择您的操作:");Scanner input = new Scanner(System.in);//只需要输入名字,即可办理银行卡。身份证号,手机号,银行卡号,自动随机生成(只是为了最大限度模拟现实情景的同时,又不让测试时输入太多繁琐的东西)String option = input.nextLine();if (option.equals("1")){Customer customer = new Customer();customer.registerIdentify();BankCard card = customer.applyBankCard(customer.getIdentityCard(), customer.getPhoneNum());//allBankCard.add(card);//将新办理的银行卡存入系统中//办理完银行卡会在applyBankCard方法内自动存入系统中System.out.println("您的银行卡已经办理完毕,即将再次进入系统···");try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}start();}else if(option.equals("2")){loginATM(atm);}else if (option.equals("3")){System.err.println("您慢走,感谢你的到来,欢迎下次再来办理业务");}else {System.err.println("您输入了不合法的字符");start();}}
}

4、Customer

package Bnk;import java.util.InputMismatchException;
import java.util.Scanner;public class Customer {private IdentityCard identityCard;//身份证private String phoneNum;//手机号private String name;//客户的姓名private int age;//年龄private double Balance;{GenerateRandomString g = new GenerateRandomString();phoneNum = "1"+ g.generateIntString(10);//第一个数是1,后面10位随机的电话号码}public double getBalance() {return Balance;}public void setBalance(double balance) {Balance = balance;}public Customer(){Scanner input = new Scanner(System.in);System.out.println("您好,请问您叫什么名字?:");String name = input.nextLine();this.name = name;}public Customer(String IDNum){//判断身份证号对不对,不是在这里判断!}//注册身份证public IdentityCard registerIdentify(){if (this.getName()!=null){IdentityCard card = new IdentityCard(this);this.identityCard = card;IdentityManageSystem.getIdentifyMsg().put(card.getIDNum(),this);//注册完身份证,把键值对身份证号-姓名放入身份管理系统return this.identityCard;}System.err.println("您还没有名字呢");return null;}public BankCard applyBankCard(IdentityCard card,String phoneNum){Scanner input = new Scanner(System.in);System.out.print("顾客"+this.getName()+"身份证号:"+this.getIdentityCard().getIDNum()+"电话号码:"+this.getPhoneNum()+"\n正在申请银行卡···\n请设置您的银行卡密码(规则:密码必须是6位纯数字):");int password;while (true) {try {password = input.nextInt();break;} catch (InputMismatchException e) {                    //InputMismatchExceptioninput.nextLine();//把多余的回车读取走System.err.println("您输入的密码不合法,请重新输入:");}}String pswStr = String.valueOf(password);while (pswStr.length()!=6) {System.err.println("您输入的密码长度不是6位,请重新输入:");password = input.nextInt();pswStr = String.valueOf(password);}//需要一个身份证(而不是号码),和一个手机号码BankCard bankCard = new BankCard(card.getIDNum(), phoneNum,password);//BankSystem.getAllBanCard().add(bankCard);//办理完后自动添加到系统库中BankSystem.addBanCard(bankCard);System.out.println("银行卡办理完毕,您的卡号是:"+bankCard.getCARDNUM()+"\n请妥善保管您的银行卡,牢记密码!!!");return bankCard;}public IdentityCard getIdentityCard() {if(this.identityCard==null){System.err.println("您还没有注册身份证,赶快申领一个吧!");}return identityCard;}public String getPhoneNum() {return phoneNum;}public String getName() {return name;}
}

5、GenerateRandomString

package Bnk;import java.util.Random;public class GenerateRandomString {private char[] str = "qwertyuiopasdfghjklzxcvbnm147258369".toCharArray();private String[] head = new String []{"140829","142732"};//两种常见的身份证号头部public String generateIntString(int length){StringBuilder  intString = new StringBuilder();for (int i = 0;i<length;i++){intString.append(new Random().nextInt(10));}return intString.toString();}public String generateIDNum(){String idHead = head[new Random().nextInt(2)];//身份证号头部String year = String.valueOf((int)(Math.random()*121)+1900);//1900--2020,1900到2021但不包括2021String month = String.valueOf((int)(Math.random()*12)+1);//1到13但不包括13month = this.complement(month);String day = String.valueOf((int)(Math.random()*30)+1);//1到31但不包括31day = this.complement(day);String randomstr = generateIntString(3);//身份证的后4位的前3位随机数字String last = String.valueOf(str[new Random().nextInt(str.length)]);//身份证的最后一位,随机字母或数字StringBuilder builder = new StringBuilder();builder.append(idHead).append(year).append(month).append(day).append(randomstr).append(last);return builder.toString();}private String complement(String monthOrDay){//补全月份或日期,如果字符串长度小于2,就往前面加个0补全if (monthOrDay.length()==1){String result = "0".concat(monthOrDay);return result;}return monthOrDay;}
}

6、IdentityCard

package Bnk;public class IdentityCard {private String IDNum;//身份证号,一般是18位的private Customer holder;//持有者public IdentityCard(Customer holder) {GenerateRandomString g = new GenerateRandomString();this.IDNum = g.generateIDNum();this.holder = holder;}public  String getIDNum() {return IDNum;}public  Customer getHolder() {return holder;}
}

7、IdentityMangeSystem

package Bnk;import java.util.HashMap;
import java.util.Map;public class IdentityManageSystem {private static Map<String,Customer> identityMsg = new HashMap<>();public static Map<String,Customer> getIdentifyMsg(){return identityMsg;}
}

8、Test

package Bnk;public class Test {public static void main(String[] args) {BankSystem.start();}
}

javaOOP项目实战——银行ATM机相关推荐

  1. python项目实战——银行取款机系统(七)

    项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) python项目实战--银行取款机系统(三) python项目实战--银行取款机系统(四) p ...

  2. python项目实战——银行取款机系统(六)

    项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) python项目实战--银行取款机系统(三) python项目实战--银行取款机系统(四) p ...

  3. java程序模拟atm机_Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...

  4. java web atm机_Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...

  5. python实现模仿银行ATM机

    python实现模仿银行ATM机 学习了一个星期,分享一下自己的学习成果.本星期实现的是银行ATM机的功能. 实现效果如下: 开始界面,输入用户名密码之后到达主界面. 选择账户信息效果: 打印了个人的 ...

  6. python项目实战——银行取款机系统(一)

    项目实战目录 python项目实战--银行取款机系统(一) 前言 今天我们将通过python完成简易银行提款机系统的实战,我们一步步实现我们的要求.话不多说,看操作. 环境使用 python 3.9 ...

  7. 面向对象程序设计——银行ATM机系统

    文章目录 针对于面向对象设计--做一个简单的银行ATM机系统 ATM机需求分析 用户类 ATM机类 银行类 注册操作的大概流程 登录操作的大概流程 用户类代码 ATM机类代码 bank类代码(主类) ...

  8. 用Java程序模拟银行ATM机,实现包括存款、取款、查询、转账功能的简单应用

    (1)想象现实世界中的相关操作沙及哪些实体呢?一个是储户,一个是ATM机.因 此根据面向对象中的抽象原则,可将其抽象为两个类:代表储户的账户信息类,代表银行 ATM机的ATM类.外加一个主类(负责实例 ...

  9. java模拟atm_Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...

最新文章

  1. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  2. 生活的花环:看雷加对文学的回顾
  3. python 装饰器 继承_Python设计模式之装饰器模式
  4. 自然语言处理 —— 困惑度
  5. JavaScript 删除Cookie
  6. 浪潮云海OS C位出道,融合开放基础设施呼之欲出
  7. CefSharp 知道这些就完事了
  8. 最小二乘法曲线拟合原理
  9. 关于恢复synaptics触摸板手势
  10. 华为ensp——企业网络的设计与实现【方案测试验证】
  11. 联想凌拓“开业大吉” 是试水还是全面变革的前兆?
  12. .c文件如何一步步变成.exe文件
  13. 专升本管理学知识点总结——目标管理
  14. 1267 'Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_gener
  15. 谷歌浏览器adobe flash过期解决办法
  16. 技术分享 | MySQL 巡检
  17. 什么是2.5D 点云?
  18. Android Weekly - 42 : 打铁还需自身硬
  19. C语言88案例,经典案例带你绝对入门C编程!
  20. poi操作excel,复制sheet,复制行,复制单元格

热门文章

  1. AI一分钟|腾讯与三星结盟,以对抗苹果和谷歌;亚马逊回应“AI误将国会议员标记为罪犯”...
  2. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
  3. SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
  4. 新技能 MyBatis 千万数据表,快速分页!
  5. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)
  6. 源码解析Spring Cloud Zuul
  7. 论机器学习领域的内卷
  8. 3D建模复原汤加火山爆发!1000颗原子弹当量,人在英国刚被「震」到
  9. 程序员加班崩溃,过路外卖小哥主动帮忙改代码,网友直呼太暖了!
  10. AI 博士生获201万最高档年薪,华科学子连续三年入选华为“天才少年”!