文章目录

  • 前言
  • 一、项目需求是什么?
  • 二、技术选型
    • 技术点分析:
      • 1. 面型对象分析:
      • 2. 使用集合容器:
      • 3. 程序流程控制:
      • 4. 使用常见API:
  • 三、实现步骤
    • 1.账户类、首页设计
    • 2.用户开户功能实现
    • 3.用户登录功能实现
    • 4.用户操作页设计、查询账户、退出账户功能
    • 5.用户存款、取款功能
    • 6.用户转账功能
    • 7.用户密码修改功能、销户功能
  • 四、代码实现
    • ATMSystem类(ATM系统入口类):
    • Account类(账户类):
  • 总结
  • 投票

 ****转载请注明出处哦~ ~ ~****

前言

前言:
自动取款机又称ATM(Automated Teller Machine的缩写),意思是自动柜员机,因大部分用于取款,又称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜面人员的工作。可提取现金、查询存款余额、进行账户之间资金划拨、余额查询等工作;此项目是实现了模拟ATM系统。

一、项目需求是什么?

模拟实现银行ATM机系统,可以实现开户,登录账户,查询账户,存款,取款,转账,修改账户密码,注销账户。

二、技术选型

技术点分析:

面向对象分析,使用集合容器,程序流程控制,使用常见API。

1. 面型对象分析:

每个用户对象要对应一个账户对象:所以需要设计账户类Account。

2. 使用集合容器:

系统需要提供一个容器用于存储这些账户对象的信息,我们选ArrayList集合。

3. 程序流程控制:

需要结合分支、循环、跳转等相关操作控制程序的业务逻辑。

4. 使用常见API:

内容比较,分析,数据处理等需要用到String等常用API。

三、实现步骤

1.账户类、首页设计



分析:
① 每个用户一个账户对象,需要设计账户类,账户类至少包含(卡号、用户名、余额、取现额度、密码)。
② 需要定义一个ArrayList的集合用于存储账户对象。
③ 需要展示欢迎页包含2个功能:注册开户、登录账户。

2.用户开户功能实现

分析:
① 开户功能应该独立定义成方法,并传入当前集合对象给该方法。
private static void register(ArrayList accounts, Scanner sc) {

② 需要提示用户输入个人信息,开户的卡号是系统自动生成的8位数。
public static String createCardId()

③ 注意:自动生成的卡号不能与其他用户的卡号重复。

④ 最终把用户开户的信息封装成Account对象,存入到集合中。


3.用户登录功能实现


分析:
① 需要根据卡号去集合中查询对应的账户对象。

② 如果找到了账户对象,说明卡号存在,继续输入密码。

③ 如果密码也正确,则登录成功

4.用户操作页设计、查询账户、退出账户功能


分析
① 用户登录成功后,需要进入用户操作页。

② 查询就是直接展示当前登录成功的账户对象的信息。

③ 退出账户是需要回到首页的。

5.用户存款、取款功能



分析
① 存款和取款都是拿到当前用户的账户对象。

② 通过调用账户对象的set方法修改其余额

6.用户转账功能


分析
① 转账功能要分析对方账户是否存在的问题。

② 还要分析自己的余额是否足够的问题。

7.用户密码修改功能、销户功能



如果账户还有余额,则不可销户

分析
① 修改密码就是把当前对象的密码属性使用set方法进行更新。

② 销户是从集合对象中删除当前对象,并回到首页。

四、代码实现

ATMSystem类(ATM系统入口类):

package atmdemo;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;/*** ATM系统的入口类*/
public class ATMSystem {public static void main(String[] args) {//1.定义账户类//2.定义一个集合容器,负责存储全部账户对象,进行相应操作ArrayList<Account> accounts = new ArrayList<>();Scanner sc = new Scanner(System.in);//3.展示系统的首页while (true) {System.out.println("=======================欢迎使用ATM系统==================");System.out.println("1.登录账户");System.out.println("2.注册账户");System.out.println("请输入您的操作:");int common = sc.nextInt();switch (common) {case 1://登录操作login(accounts, sc);break;case 2://注册操作register(accounts, sc);break;default:System.out.println("您的输入操作有误,请重新输入!!!");}}}/*** 定义一个方法,实现登录功能** @param accounts* @param sc*/private static void login(ArrayList<Account> accounts, Scanner sc) {System.out.println("==================系统登录操作=================");//1.判断当时系统是否有账户if (accounts.size() == 0) {System.out.println("当前系统无任何账户,请先开户!!!");return;}//2.让用户输入卡号,根据卡号查询用户是否存在while (true) {System.out.println("请输入您的卡号:");String cardId = sc.next();//判断卡号是否存在:根据卡号去账户集合中查询账户对象Account acc = judgeCardId(accounts, cardId);if (acc != null) {while (true) {System.out.println("请您输入密码:");String password = sc.next();if (acc.getPassword().equals(password)) {System.out.println(acc.getUsername() + "先生/女生密码正确,登陆成功!!!");//需要显示登录后的操作页showUserCommand(sc, acc, accounts);return;//结束登录后的操作页,回到首页} else {System.out.println("密码不正确,请您重新输入!!!");}}} else {System.out.println("您输入的卡号不存在,请重新输入!!!");}}}/*** 登录成功后展示的页面*/private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {while (true) {System.out.println("===================用户登录操作页====================");System.out.println("1.查询账户");System.out.println("2.存款");System.out.println("3.取款");System.out.println("4.转账");System.out.println("5.修改密码");System.out.println("6.退出");System.out.println("7.注销账户");System.out.println("请输入您的操作:");int command = sc.nextInt();switch (command) {case 1://查询账户showAccount(acc);break;case 2://存款deposit(acc, sc);break;case 3://取款withdrawMoney(acc, sc);break;case 4://转账transfer(acc, sc,accounts);break;case 5://修改密码changePassword(acc, sc);return;case 6://退出System.out.println("退出成功!!!");return;//退出操作页case 7://注销账户if (logout(acc, sc, accounts)) {return;} else {break;}default:System.out.println("您输入的操作命令不正确!!!");}}}/*** 注销账户** @param acc* @param sc* @param accounts*/private static boolean logout(Account acc, Scanner sc, ArrayList<Account> accounts) {System.out.println("====================注销账户===================");System.out.println("您确定要销户吗?y/n");String s = sc.next();switch (s) {case "y":if (acc.getMoney() > 0) {System.out.println("账户还有余额,不可销户!!!");} else {accounts.remove(acc);//注销账户System.out.println("销户成功!!!");return true;}break;default:System.out.println("很好,当前用户继续保留!!!");}return false;}/*** 定义一个方法,实现用户修改功能** @param acc* @param sc*/private static void changePassword(Account acc, Scanner sc) {System.out.println("=====================修改密码==================");while (true) {System.out.println("请" + acc.getUsername() + "先生/女生输入要修改的密码:");String password = sc.next();System.out.println("请" + acc.getUsername() + "先生/女生确认要修改的密码:");String okpassword = sc.next();if (okpassword.equals(password)) {acc.setPassword(password);System.out.println("修改密码成功!!!");System.out.println("请重新登录账户!!!");return;} else {System.out.println("您输入的两次密码不一致,请重新输入!!!");}}}/*** 定义一个方法,实现转账用户功能** @param acc* @param sc*/private static void transfer(Account acc, Scanner sc,ArrayList<Account> accounts) {System.out.println("======================转账=====================");String cardid= null;//判断输入的卡号是否存在while (true) {System.out.println("请输入您要转账的卡号:");cardid = sc.next();if(judgeCardId(accounts,cardid)==null){System.out.println("您输入的卡号不存在,请重新输入!!!");}else if(acc.getCardId().equals(cardid)){System.out.println("不可给自己转账,请重新输入!!!");}else {break;}}//遍历找到要转账的卡号for (int i = 0; i < accounts.size(); i++) {Account acc1=accounts.get(i);if (acc1.getCardId().equals(cardid)) {//输入姓名,判断是否正确while (true) {System.out.println("请您补全姓名:");String s1=acc1.getUsername().substring(0,1);String s2=acc1.getUsername().substring(2);System.out.println(s1+"*"+s2);String name=sc.next();if (acc1.getUsername().equals(name)) {break;}else {System.out.println("您输入的姓名有误,请重新输入!!!");}}//判断金额if (acc.getMoney() == 0) {System.out.println("您现在余额为0,请先存款后,才可以转账!!!");return;}while (true) {System.out.println("请输入您的转账金额:");double money = sc.nextDouble();if (money <= acc.getAmount() && money <= acc.getMoney()) {acc.setMoney(acc.getMoney() - money);acc1.setMoney(acc1.getMoney()+money);System.out.println("转账成功!!!");break;} else if (money > acc.getMoney()) {System.out.println("您的存款金额不足,请重新输入!!!");}else if (money > acc.getAmount()) {System.out.println("您的转账金额超出限额,请重新输入!!!");}}}}}/*** 定义一个方法,实现取款功能,并输出查询账户** @param acc* @param sc*/private static void withdrawMoney(Account acc, Scanner sc) {System.out.println("======================取款======================");if (acc.getMoney() == 0) {System.out.println("您现在余额为0,请先存款后,才可以取款!!!");return;}while (true) {System.out.println("请输入您的取款金额:");double money = sc.nextDouble();if (money <= acc.getAmount() && money <= acc.getMoney()) {acc.setMoney(acc.getMoney() - money);System.out.println("取款成功!!!");break;} else if (money > acc.getAmount()) {System.out.println("您的取款金额超出限额,请重新输入!!!");} else if (money > acc.getMoney()) {System.out.println("您的存款金额不足,请重新输入!!!");}}showAccount(acc);}/*** 定义一个方法,实现存款功能,并输出查询账户** @param acc*/private static void deposit(Account acc, Scanner sc) {System.out.println("======================存款======================");System.out.println("请输入您要存款的金额:");double money = sc.nextDouble();acc.setMoney(acc.getMoney() + money);System.out.println("存款成功!!!");showAccount(acc);}/*** 定义一个方法,实现登录后查询账户的功能** @param acc*/private static void showAccount(Account acc) {System.out.println("==================查询账户================");System.out.println("卡号:" + acc.getCardId());System.out.println("户主:" + acc.getUsername());System.out.println("余额:" + acc.getMoney());System.out.println("限额:" + acc.getAmount());}/*** 定义一个方法,实现用户开户功能** @param accounts* @param sc*/private static void register(ArrayList<Account> accounts, Scanner sc) {System.out.println("=================系统开户操作===================");//1.创建一个Account账户类,用于封装账户信息(用户名,密码,卡号)Account account = new Account();//2.录入当前账户信息,注入到账户对象中去//2.1 用户名System.out.println("请输入您的用户名:");String username = sc.next();account.setUsername(username);//2.2 密码while (true) {System.out.println("请输入您的账户密码:");String password = sc.next();System.out.println("请您确认密码:");String okpassword = sc.next();if (okpassword.equals(password)) {account.setPassword(okpassword);break;//要记得跳出循环!!!} else {System.out.println("您两次输入的密码不同,请重新输入!!!");}}//2.3 限额while (true) {System.out.println("请输入您最大支付额度:");double amount = sc.nextDouble();if (amount > 0) {account.setAmount(amount);break;} else {System.out.println("您输入的不可为负数,请重新输入!!!");}}//2.3 卡号(运用一个方法,使得其随机生成一个8位的卡号,且不可重复的卡号)String cardId = getRandomCardId(accounts);System.out.println("恭喜" + username + "先生/女生,开户成功!!!\n您的卡号为:" + cardId);account.setCardId(cardId);//3.把账户对象添加到集合中去accounts.add(account);}/*** 定义一个方法,随机生成一个8位数的卡号** @param accounts*/private static String getRandomCardId(ArrayList<Account> accounts) {Random r = new Random();while (true) {String cardId = "";for (int i = 0; i < 8; i++) {cardId += r.nextInt(10);}//定义方法,判断是否有重复的(只需看这个卡号,是否有账户即可)Account acc = judgeCardId(accounts, cardId);if (acc == null) {return cardId;}}}/*** 查询该卡号是否有账户** @param accounts* @param carId*/private static Account judgeCardId(ArrayList<Account> accounts, String carId) {for (int i = 0; i < accounts.size(); i++) {Account acc = accounts.get(i);if (acc.getCardId().equals(carId)) {return acc;}}return null;//查无此账户}
}

Account类(账户类):

package atmdemo;/*** 定义一个账户类*/
public class Account {/*** 成员变量*/private String cardId;//卡号private String username;//用户名private String password;//密码private double money;//余额private double amount;//限额public String getCardId() {return cardId;}public void setCardId(String cardId) {this.cardId = cardId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public double getAmount() {return amount;}public void setAmount(double amount) {this.amount = amount;}
}

总结

总结:
以上就是全部的内容,本文简单地分析介绍了ATM系统的实现,实现了开户,登录账户,查询账户,存款,取款,转账,修改密码,退出,销户的功能。以上功能均定义成独立的方法。

(如有不正确之处,请在评论区指正哦~ ~ ~)

投票

Java模拟实现ATM系统相关推荐

  1. java 模拟 电话本系统 (基础版)

    java 模拟 电话本系统 (基础版) 需求:注意的是,联系人的id是自增长的 实现的功能: java综合编程练习:基本的增删改查,对于逻辑数据的过滤,这块做了简单的处理,暂不优化 ContactPe ...

  2. java 模拟评委打分系统

    package day519; //去掉一个最高分一个最低分 public class Array {public static void main(String[] args) {//模拟评委打分系 ...

  3. java 模拟登陆web系统_关于java模拟登陆WEB的问题。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  4. java 模拟火车站售票系统_模拟售票系统java编程

    模拟售票系统java编程 /* 项目:用多线程设计一个模拟火车站售票大厅的工作情形. 问题描述:火车站有许多售票窗口,有些开放,有些不开放.顾客进入火车站售票厅后,到某个售票窗口排队等候,排到了就办理 ...

  5. java模拟KTV点歌系统

    上面的案例启示是对集合类的一个巩固,代码如下: package cn.csdn.ktv;import java.util.LinkedList; import java.util.Scanner;pu ...

  6. Java模拟电影院购票系统

    目录 项目目录结构 项目功能: 首页功能 用户功能 商家功能 源码即各功能实现原理简述: 1.项目结构 2.准备工作 3.主要功能介绍 1.展示主页面 2.登录功能 3.展示客户功能页面 4.客户功能 ...

  7. java 模拟登录出现系统异常_很奇怪!Java web问题,模拟登陆教务系统刷新两次后就没反应了!...

    我用HttpClient 4.5模拟登陆自己学校的教务系统,我们学校登陆成功先返回一个302跳转(勿喷,正方教务...): 先获取隐藏值: /** * 获取隐藏值 * @throws ClientPr ...

  8. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  9. Java如何模拟双色球彩票系统?

    Java模拟双色球彩票系统 1. 功能介绍 2. 代码展示 总结 1. 功能介绍 投注号码由6个红球号码和1个蓝球号码组成,红球号码从1-33中选择,蓝球号码从1-16中选择 2. 代码展示 代码如下 ...

最新文章

  1. 20年IT老兵分享:账务系统设计及应用--转
  2. python中引用上层路径
  3. Form表单标签的Enctype属性的编码格类型
  4. mybatis 使用in 查询时报错_MyBatis(四):mybatis中使用in查询时的注意事项
  5. 计算机重应用,装了一大堆应用,iPhone6会变重吗?
  6. ConcurrentHashMap源码解读,java大厂面试攻略
  7. unixlinux大学教程学习 第七章
  8. 函数适配器:bind2nd
  9. WCF揭秘——可靠性会话功能
  10. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表
  11. 现代通信技术之分组交换技术
  12. 微信公众号网页链接失效解决方案
  13. qemu安卓版免root_用qemu运行一个小小Linux系统
  14. Moo Slidebox
  15. note4-WEB源码拓展
  16. html怎么使两张照片重叠,怎样把两张图片叠加在一起?
  17. R语言技巧:读取excel文件
  18. 高级软件工程第三次作业:数独游戏界面功能
  19. HE网站系统架设过程思路
  20. pyqt win32发送QQ消息

热门文章

  1. synchronized对象锁的同步和异步问题
  2. 如何用Deep Learning为股票定价
  3. APISIX-Datadog 插件发布,助力用户提高系统的可观测性
  4. 用计算机解决问题听课笔记,《用计算机解决问题的一般步骤》说课稿
  5. Zynq术语详解,不懂啥是PL,PS,APU,SCU?那就进来看看吧
  6. 科技赋能拉萨之“肺”,华为助力拉鲁湿地智慧管理守护绿水青山
  7. js图片转base64
  8. IT从业者的职业规划
  9. 拒绝“累丑”,走进RPA的世界
  10. Oracle 11g win32位 window7下安装教程 (其实64位类同)