卖不甜枣 发表于 2023-10-2 07:55:46

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

从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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 从0到1,实现Java控制台版本的ATM管理系统