从0到1,实现Java控制台版本的ATM管理系统

打印 上一主题 下一主题

主题 692|帖子 692|积分 2076

从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方法
  1. public class Account {
  2.   //成员属性
  3.   //卡号
  4.   private String cardID;
  5.   //用户名
  6.   private String userName;
  7.   //密码
  8.   private String passWord;
  9.   //余额
  10.   private double money;
  11.   //取现额度
  12.   private double quotaMoney;
  13.   //提供空参/满参的构造方法
  14.   public Account() {
  15.   }
  16.   public Account(String cardID, String username, String password, double money, double quotaMoney) {
  17.     this.cardID = cardID;
  18.     this.userName = username;
  19.     this.passWord = password;
  20.     this.money = money;
  21.     this.quotaMoney = quotaMoney;
  22.   }
  23.   //提供get/和set方法
  24.   public String getCardID() {
  25.     return cardID;
  26.   }
  27.   public void setCardID(String cardID) {
  28.     this.cardID = cardID;
  29.   }
  30.   public String getUsername() {
  31.     return userName;
  32.   }
  33.   public void setUsername(String username) {
  34.     this.userName = username;
  35.   }
  36.   public String getPassword() {
  37.     return passWord;
  38.   }
  39.   public void setPassword(String password) {
  40.     this.passWord = password;
  41.   }
  42.   public double getMoney() {
  43.     return money;
  44.   }
  45.   public void setMoney(double money) {
  46.     this.money = money;
  47.   }
  48.   public double getQuotaMoney() {
  49.     return quotaMoney;
  50.   }
  51.   public void setQuotaMoney(double quotaMoney) {
  52.     this.quotaMoney = quotaMoney;
  53.   }
  54. }
复制代码
②系统采用什么来存储账户对象?

  • 需要定义一个ArrayList的集合用于存储账户对象。
  1. //定义集合对象,存储所有账户信息
  2. ArrayList<Account> accountList = new ArrayList<>();
复制代码
③需要展示欢迎页包含2个功能:注册开户、登录账户。
  1. ==========欢迎您进入黑马银行ATM系统==========
  2. 1. 登录账户.
  3. 2. 注册账户.
  4. 3. 退出.
  5. ===========================================
复制代码
3.2 用户开户功能实现

开户功能的实现需要哪几步操作,需要注意什么问题?

  • 开户功能 应该独立定义成方法,并传入当前集合对象给该方法。
  • 卡号 是通过设计的方法随机返回8个数字代表卡号,注意:卡号不能重复
  • 把开户的信 息封装成Account对象,存入到集合中。
分析
①开户功能应该独立定义成方法,并传入当前集合对象给该方法。
  1. private static boolean registerAccount(ArrayList<Account> accountList, Scanner scanner)
复制代码
②需要提示用户输入个人信息,开户的卡号是系统自动生成的8位数。
  1. private static String createCardID(ArrayList<Account> accountList)
复制代码
③注意:自动生成的卡号不能与其他用户的卡号重复。
  1. private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID)
复制代码
④最终把用户开户的信息封装成Account对象,存入到集合中。
  1. Account account = new Account(cardID, userName, passWord, 0.0, quotaMoney);//满参构造,初始化数据
  2. accountList.add(account);
复制代码
运行效果
  1. ==========欢迎您进入黑马银行ATM系统==========
  2. 1. 登录账户.
  3. 2. 注册账户.
  4. 3. 退出.
  5. ===========================================请输入命令1、2、3. 选择对应的操作: 2==========欢迎您进入黑马银行用户办卡界面==========请输入您的姓名: 常州陪彭于晏请输入您的密码: 9527请再次输入您的密码: 9527请设置当次取现额度: 15000尊敬的常州陪彭于晏贵宾先生/女士,您的账户已经开卡成功,您的卡号是: 65301297.注册成功~~~
复制代码
3.3 用户登录功能实现

1、登录功能如何实现的?

  • 根据卡号去集合中查询对应的账户对象。
  • 如果找到了账户对象, 说明卡号存在,继续输入密码。
  • 如果密码也正确, 则登录成功。
分析
①需要根据卡号去集合中查询对应的账户对象。
  1. private static Account isCardIDExisting(ArrayList<Account> accountList, String cardID)
复制代码
②如果找到了账户对象,说明卡号存在,继续输入密码。
③如果密码也正确,则登录成功。
运行效果
  1. ==========欢迎您进入黑马银行ATM系统==========
  2. 1. 登录账户.
  3. 2. 注册账户.
  4. 3. 退出.
  5. =========================================
  6. 请输入命令1、2、3. 选择对应的操作: 1
  7. ==========黑马银行ATM系统登录界面==========
  8. 请输入您的卡号: 77711112
  9. 请输入您的密码: 9527
  10. 登录成功~~~
复制代码
3.4 用户操作页设计、查询账户、退出账户功能

分析
①用户登录成功后,需要进入用户操作页。
  1. private static void showCommand(Account account, ArrayList<Account> accountList, Scanner scanner)
复制代码
②查询就是直接展示当前登录成功的账户对象的信息。
  1. private static void showAccountInfo(Account account)
复制代码
③退出账户是需要回到首页的。
运行效果
  1. ==========黑马银行ATM系统登录界面==========
  2. 请输入您的卡号: 37682957
  3. 请输入您的密码: 9527
  4. 登录成功~~~
  5. 尊敬的常州彭于晏贵宾先生/女士,您可以办理如下业务,您的卡号是37682957~~~
  6. ==========欢迎您进入黑马银行用户操作界面==========
  7. 1.查询.
  8. 2.存款.
  9. 3.取款.
  10. 4.转账.
  11. 5.修改密码.
  12. 6.退出.
  13. 7.注销当前账户.
  14. ============================================
  15. 请选择相关操作数:6
  16. 成功退出黑马银行用户操作界面~~~
  17. ==========欢迎您进入黑马银行ATM系统==========
  18. 1. 登录账户.
  19. 2. 注册账户.
  20. 3. 退出.
  21. =========================================
  22. 请输入命令1、2、3. 选择对应的操作:
复制代码
3.5 用户存款、取款功能设计

分析
①存款和取款都是拿到当前用户的账户对象。
②通过调用账户对象的set方法修改其余额。
运行效果
  1. 尊敬的常州彭于晏贵宾先生/女士,您可以办理如下业务,您的卡号是18209986~~~
  2. ==========欢迎您进入黑马银行用户操作界面==========
  3. 1.查询.
  4. 2.存款.
  5. 3.取款.
  6. 4.转账.
  7. 5.修改密码.
  8. 6.退出.
  9. 7.注销当前账户.
  10. ============================================
  11. 请选择相关操作数:2
  12. ==========欢迎您进入黑马银行用户存款界面==========
  13. 请输入存款的金额:15000
  14. ==========欢迎您进入黑马银行用户详情界面==========
  15. 您的账户信息如下:
  16. 卡号: 18209986
  17. 姓名: 常州彭于晏
  18. 余额: 15000.0元
  19. 当次取现额度: 15000.0元
  20. ===========================================
  21. 您已经存款成功~~~
  22.    
  23. ==========欢迎您进入黑马银行用户取款界面==========
  24. 请输入取款的金额:26000
  25. 此次取款金额超出了当次取现额度~~~
  26. 请输入取款的金额:1000
  27. ==========欢迎您进入黑马银行用户详情界面==========
  28. 您的账户信息如下:
  29. 卡号: 18209986
  30. 姓名: 常州彭于晏
  31. 余额: 14000.0元
  32. 当次取现额度: 15000.0元
  33. ===========================================
  34. 您已经取款成功~~~
复制代码
3.6 用户转账功能设计

分析
①转账功能要分析对方账户是否存在的问题。
②还要分析自己的余额是否足够的问题。
3.7 用户密码修改功能、销户功能

分析
①修改密码就是把当前对象的密码属性使用set方法进行更新。
②销户是从集合对象中删除当前对象,并回到首页。
至此,ATM管理系统就在这里,是不是很简单呢?
4.部分源码展示
  1. public class ATMSystem {
  2.   public static void main(String[] args) {
  3.     //定义集合对象,存储所有账户信息
  4.     ArrayList<Account> accountList = new ArrayList<>();
  5.     //键盘录入的对象
  6.     Scanner scanner = new Scanner(System.in);
  7.     //操作数
  8.     int keyWord = 0;
  9.     //循环标志
  10.     boolean runningFlag = true;
  11.     //登录/注册操作的返回值 成功/失败
  12.     boolean status = true;
  13.     while (runningFlag) {
  14.       System.out.println("==========欢迎您进入黑马银行ATM系统==========\n");
  15.       System.out.println("1. 登录账户.\n");
  16.       System.out.println("2. 注册账户.\n");
  17.       System.out.println("3. 退出.\n");
  18.       System.out.println("=========================================\n");
  19.       System.out.print("请输入命令1、2、3. 选择对应的操作: ");
  20.       keyWord = scanner.nextInt();
  21.       System.out.println();
  22.       switch (keyWord) {
  23.         case 1:
  24.           //1. 登录 待实现
  25.           //System.out.println("登录 待实现\n");
  26.           status = loginAccount(accountList, scanner);
  27.           if (status) {
  28.             //System.out.println("登陆成功~~~\n");
  29.           } else
  30.             System.out.println("登录失败~~~\n");
  31.           break;
  32.         case 2:
  33.           //2. 注册 待实现
  34.           //System.out.println("注册 待实现\n");
  35.           status = registerAccount(accountList, scanner);
  36.           if (status)
  37.             System.out.println("注册成功~~~\n");
  38.           else
  39.             System.out.println("注册失败~~~\n");
  40.           break;
  41.         case 3:
  42.           runningFlag = false;
  43.           System.out.println("成功退出黑马银行ATM系统,欢迎您下次使用~~~\n");
  44.           break;
  45.         default:
  46.           System.out.println("\n您当前输入的命令不合法,请重新输入~~~\n");
  47.           break;
  48.       }
  49.     }
  50.   }
复制代码
注册
  1.   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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表