从0到1,实现Java控制台版本的ATM管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,管理系统一直都是一个非常好的例子,初学者主要是用数组、List等等来写出一个简易的管理系统.牛逼一点的大神则用数据库+swing来做一个有界面的管理系统,其实都并不会太难。
今天我就先写一个简单的管理系统:用List来实现银行的ATM管理系统
1.ATM系统技术选型分析
技术点分析
1.1 面向对象编程
每个用户对象要对应一个账户对象,所以需要设计账户类Account
1.2 程序流程控制
需要结合分支、循环、跳转等相关操作控制程序的业务逻辑
1.3 使用集合容器
系统需要提供一一个容器用于存储这些账户对象的信息,我们选ArrayList集合,因为ArrayList底层是可变的数组,操作起来相比于数组较为方便一些
1.4 使用常见API
内容比较,分析,数据处理等需要用到String等常用API
2.学习收获
2.1 优秀的面向对象编程能力,清晰、缜密的业务、数据分析能力
2.2 形成良好的编码习惯,获得一定的编码经验
2.3 熟练使用程序流程技术来控制计算机完成自己的想法
2.4 形成Java编程的业务思维,和解决问题的能力,让基础知识形成体系,为后续学习Java高级技术做有
力支撑
3.功能分析
3.1 账户类、首页设计
分析:
①每个用户一个账户对象,需要设计账户类,账户类至少包含(卡号、用户名、余额、取现额度、密码)
1、用户的账户信息,系统如何表示的?
- 定义账户类Account, 定义系统关心的属性信息。
一个标准类的书写应当包括如下细节:
- 成员属性私有化
- 提供空参/满参的构造方法
- 提供get/set方法
- public class Account {
- //成员属性
- //卡号
- private String cardID;
- //用户名
- private String userName;
- //密码
- private String passWord;
- //余额
- private double money;
- //取现额度
- private double quotaMoney;
- //提供空参/满参的构造方法
- public Account() {
- }
- public Account(String cardID, String username, String password, double money, double quotaMoney) {
- this.cardID = cardID;
- this.userName = username;
- this.passWord = password;
- this.money = money;
- this.quotaMoney = quotaMoney;
- }
- //提供get/和set方法
- 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 getQuotaMoney() {
- return quotaMoney;
- }
- public void setQuotaMoney(double quotaMoney) {
- this.quotaMoney = quotaMoney;
- }
- }
复制代码 ②系统采用什么来存储账户对象?
- 需要定义一个ArrayList的集合用于存储账户对象。
- //定义集合对象,存储所有账户信息
- ArrayList<Account> accountList = new ArrayList<>();
复制代码 ③需要展示欢迎页包含2个功能:注册开户、登录账户。- ==========欢迎您进入黑马银行ATM系统==========
- 1. 登录账户.
- 2. 注册账户.
- 3. 退出.
- ===========================================
复制代码 3.2 用户开户功能实现
开户功能的实现需要哪几步操作,需要注意什么问题?
- 开户功能 应该独立定义成方法,并传入当前集合对象给该方法。
- 卡号 是通过设计的方法随机返回8个数字代表卡号,注意:卡号不能重复
- 把开户的信 息封装成Account对象,存入到集合中。
分析
①开户功能应该独立定义成方法,并传入当前集合对象给该方法。- private static boolean registerAccount(ArrayList<Account> accountList, Scanner scanner)
复制代码 ②需要提示用户输入个人信息,开户的卡号是系统自动生成的8位数。- private static String createCardID(ArrayList<Account> accountList)
复制代码 ③注意:自动生成的卡号不能与其他用户的卡号重复。- private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID)
复制代码 ④最终把用户开户的信息封装成Account对象,存入到集合中。- Account account = new Account(cardID, userName, passWord, 0.0, quotaMoney);//满参构造,初始化数据
- accountList.add(account);
复制代码 运行效果- ==========欢迎您进入黑马银行ATM系统==========
- 1. 登录账户.
- 2. 注册账户.
- 3. 退出.
- ===========================================请输入命令1、2、3. 选择对应的操作: 2==========欢迎您进入黑马银行用户办卡界面==========请输入您的姓名: 常州陪彭于晏请输入您的密码: 9527请再次输入您的密码: 9527请设置当次取现额度: 15000尊敬的常州陪彭于晏贵宾先生/女士,您的账户已经开卡成功,您的卡号是: 65301297.注册成功~~~
复制代码 3.3 用户登录功能实现
1、登录功能如何实现的?
- 根据卡号去集合中查询对应的账户对象。
- 如果找到了账户对象, 说明卡号存在,继续输入密码。
- 如果密码也正确, 则登录成功。
分析
①需要根据卡号去集合中查询对应的账户对象。- private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID)
复制代码 ②如果找到了账户对象,说明卡号存在,继续输入密码。
③如果密码也正确,则登录成功。
运行效果- ==========欢迎您进入黑马银行ATM系统==========
- 1. 登录账户.
- 2. 注册账户.
- 3. 退出.
- =========================================
- 请输入命令1、2、3. 选择对应的操作: 1
- ==========黑马银行ATM系统登录界面==========
- 请输入您的卡号: 77711112
- 请输入您的密码: 9527
- 登录成功~~~
复制代码 3.4 用户操作页设计、查询账户、退出账户功能
分析
①用户登录成功后,需要进入用户操作页。- private static void showCommand(Account account, ArrayList<Account> accountList, Scanner scanner)
复制代码 ②查询就是直接展示当前登录成功的账户对象的信息。- private static void showAccountInfo(Account account)
复制代码 ③退出账户是需要回到首页的。
运行效果- ==========黑马银行ATM系统登录界面==========
- 请输入您的卡号: 37682957
- 请输入您的密码: 9527
- 登录成功~~~
- 尊敬的常州彭于晏贵宾先生/女士,您可以办理如下业务,您的卡号是37682957~~~
- ==========欢迎您进入黑马银行用户操作界面==========
- 1.查询.
- 2.存款.
- 3.取款.
- 4.转账.
- 5.修改密码.
- 6.退出.
- 7.注销当前账户.
- ============================================
- 请选择相关操作数:6
- 成功退出黑马银行用户操作界面~~~
- ==========欢迎您进入黑马银行ATM系统==========
- 1. 登录账户.
- 2. 注册账户.
- 3. 退出.
- =========================================
- 请输入命令1、2、3. 选择对应的操作:
复制代码 3.5 用户存款、取款功能设计
分析
①存款和取款都是拿到当前用户的账户对象。
②通过调用账户对象的set方法修改其余额。
运行效果- 尊敬的常州彭于晏贵宾先生/女士,您可以办理如下业务,您的卡号是18209986~~~
- ==========欢迎您进入黑马银行用户操作界面==========
- 1.查询.
- 2.存款.
- 3.取款.
- 4.转账.
- 5.修改密码.
- 6.退出.
- 7.注销当前账户.
- ============================================
- 请选择相关操作数:2
- ==========欢迎您进入黑马银行用户存款界面==========
- 请输入存款的金额:15000
- ==========欢迎您进入黑马银行用户详情界面==========
- 您的账户信息如下:
- 卡号: 18209986
- 姓名: 常州彭于晏
- 余额: 15000.0元
- 当次取现额度: 15000.0元
- ===========================================
- 您已经存款成功~~~
-
- ==========欢迎您进入黑马银行用户取款界面==========
- 请输入取款的金额:26000
- 此次取款金额超出了当次取现额度~~~
- 请输入取款的金额:1000
- ==========欢迎您进入黑马银行用户详情界面==========
- 您的账户信息如下:
- 卡号: 18209986
- 姓名: 常州彭于晏
- 余额: 14000.0元
- 当次取现额度: 15000.0元
- ===========================================
- 您已经取款成功~~~
复制代码 3.6 用户转账功能设计
分析
①转账功能要分析对方账户是否存在的问题。
②还要分析自己的余额是否足够的问题。
3.7 用户密码修改功能、销户功能
分析
①修改密码就是把当前对象的密码属性使用set方法进行更新。
②销户是从集合对象中删除当前对象,并回到首页。
至此,ATM管理系统就在这里,是不是很简单呢?
4.部分源码展示
- public class ATMSystem {
- public static void main(String[] args) {
- //定义集合对象,存储所有账户信息
- ArrayList<Account> accountList = new ArrayList<>();
- //键盘录入的对象
- Scanner scanner = new Scanner(System.in);
- //操作数
- int keyWord = 0;
- //循环标志
- boolean runningFlag = true;
- //登录/注册操作的返回值 成功/失败
- boolean status = true;
- while (runningFlag) {
- System.out.println("==========欢迎您进入黑马银行ATM系统==========\n");
- System.out.println("1. 登录账户.\n");
- System.out.println("2. 注册账户.\n");
- System.out.println("3. 退出.\n");
- System.out.println("=========================================\n");
- System.out.print("请输入命令1、2、3. 选择对应的操作: ");
- keyWord = scanner.nextInt();
- System.out.println();
- switch (keyWord) {
- case 1:
- //1. 登录 待实现
- //System.out.println("登录 待实现\n");
- status = loginAccount(accountList, scanner);
- if (status) {
- //System.out.println("登陆成功~~~\n");
- } else
- System.out.println("登录失败~~~\n");
- break;
- case 2:
- //2. 注册 待实现
- //System.out.println("注册 待实现\n");
- status = registerAccount(accountList, scanner);
- if (status)
- System.out.println("注册成功~~~\n");
- else
- System.out.println("注册失败~~~\n");
- break;
- case 3:
- runningFlag = false;
- System.out.println("成功退出黑马银行ATM系统,欢迎您下次使用~~~\n");
- break;
- default:
- System.out.println("\n您当前输入的命令不合法,请重新输入~~~\n");
- break;
- }
- }
- }
复制代码 注册- private static boolean registerAccount(ArrayList<Account> accountList, Scanner scanner) { System.out.println("==========欢迎您进入黑马银行用户办卡界面==========\n"); System.out.print("请输入您的姓名: "); scanner.nextLine(); String userName = scanner.nextLine(); System.out.println(); String passWord = "", rePassWord = ""; while (true) { System.out.print("请输入您的密码: "); passWord = scanner.nextLine(); // 读取用户输入的密码 System.out.println(); System.out.print("请再次输入您的密码: "); // 再次确认密码 rePassWord = scanner.nextLine(); // 读取用户再次输入的密码 System.out.println(); //检验用户两次输入的密码是否相同 if (passWord.equals(rePassWord)) { break; } else { System.out.println("您2次输入的密码不一致,请核对后重新输入~~~\n"); } } //银行系统生成银行卡号,开户的卡号是系统自动生成的8位数 String cardID = createCardID(accountList); //现阶段还未学到日期类,没法统计每天取多少钱,本次只作当次取现额度,等日后学习至日期类,再作变更 System.out.print("请设置当次取现额度: ");//一次最多取多少钱 double quotaMoney = scanner.nextDouble(); System.out.println(); Account account = new Account(cardID, userName, passWord, 0.0, quotaMoney);//满参构造,初始化数据 accountList.add(account); System.out.println("尊敬的" + account.getUsername() + "贵宾先生/女士,您的账户已经开卡成功,您的卡号是: " + account.getCardID() + ".\n"); return true; }
复制代码 完整代码详见:https://gitee.com/AIITCherry/to-do-list
程序运行演示视频详见:https://www.bilibili.com/video/BV1J84y1D75i/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=2b0d1f971a9cdc1466c16aeece19350d
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |