模拟ATM系统 —— 用户注册登录和操用户作页设计 查询账号退出账号功能

Posted hardhardevery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟ATM系统 —— 用户注册登录和操用户作页设计 查询账号退出账号功能相关的知识,希望对你有一定的参考价值。

开发工具:idea

一、项目步骤:
1.系统准备、首页设计
2.用户开户功能
3.用户登录功能
4.用户操作页设计 、查询账号、退出账号功能
5.用户存款功能
6.用户取款功能
7.用户转账功能
8.用户修改密码、注销账号功能

二、各部分内容和代码
1.系统准备、首页设计
分析:

  • 每个用户的账户信息都是一个对象,需要提供账户类
  • 要准备一个容器,用于存储系统全部账户对象的信息
  • 首页包含:登录和注册两个功能

实现步骤:

  • 定义账户类,用于后期创建账户对象封装用户的账户信息
  • 账户类中的信息至少包含:卡号、姓名、密码、余额、每次取现额度
  • 准备一个ArrayList的集合,用于存储系统用户的账户对象
//定义账户类
public class Account 
    private String carId;  //卡号
    private String userName; //用户名
    private String passWord;   //密码
    private double money; //余额
    private double quotaMoney;//每次取现额度

    public String getCarId() 
        return carId;
    

    public void setCarId(String carId) 
        this.carId = carId;
    

    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;
    

import java.util.ArrayList;
import java.util.Scanner;
/**
 * ATM系统入口
 */
public class ATMSystem 
    public static void main(String[] args) 
//    1、定义账户类
//    2、定义一个集合容器,负责以后存储全部账号对象,进行相关业务操作
        ArrayList<Account> accounts = new ArrayList<>();
//    3、展示系统的首页
        while (true) 
            System.out.println("===================ATM系统=============================");
            System.out.println("1、账户登录");
            System.out.println("2、账户开户");

            Scanner sc = new Scanner(System.in);
            System.out.println("请您选择操作:");
            int command = sc.nextInt();

            switch (command)
                case 1:
    //                用户登录
                    break;
                case 2:
    //                用户开户
                    break;
                default:
                    System.out.println("您选择的操作不存在!!");
            
        
    

2.用户开户功能
分析:
开户功能就是在系统的集合容器中存入一个新的账户对象的信息

实现步骤:
*开户应定义成一个方法,并且传入账户集合:public static void register(ArrayList accounts)...
*创建一个Account账户类的对象用于封装账户信息(卡号、姓名、密码...)
*键盘输入姓名、密码、确认密码(两次密码保持一致)
*生成账户卡号、卡号必须是系统自动生成的8位数字(卡号唯一)(难点
*把Account账户对象存入到集合accounts中

把实现开户功能定义成一个独立的方法:register(accounts,sc);

/**
   * 用户开户功能
   * @param accounts 接收的账户集合
   */
  private static void register(ArrayList<Account> accounts,Scanner sc) 
      System.out.println("================系统开户操作=======================");
//        1、创建一个账户对象,用于封装账户信息
      Account account = new Account();

//        2、录入当前账户的信息,注入账户对象中
      System.out.println("请输入账户的用户名");
      String userName = sc.next();
      account.setUserName(userName);

      while (true) 
          System.out.println("请输入账户的密码");
          String passWord = sc.next();
          System.out.println("请输入账户的确认密码");
          String okPassword = sc.next();
          if (passWord.equals(okPassword))
              account.setPassWord(okPassword); //密码认证通过,可注入账户对象
              break;// 密码录入成功,结束循环
          else 
              System.out.println("对不起,您输入的密码不一致,请重新输入!");
          
      

      System.out.println("请您输入账户当此限额:");
      double quotaMoney = sc.nextDouble();
      account.setQuotaMoney(quotaMoney);

//        为账户随机生成8位且与其他账户不一样的卡号(独立功能,独立方法)
     String cardId = getRandomCardId(accounts);
      account.setCarId(cardId);

//        3、把账户对象添加到账户集合中
      accounts.add(account);
      System.out.println("恭喜您"+userName+"先生/女士,您开户成功!您的卡号是"+cardId+"请您妥善保管!");
  


  /**
   * 为账户随机生成8位且与其他账户不一样的卡号
   * @return
   */
  private static String getRandomCardId(ArrayList<Account> accounts) 
      Random r = new Random();
      while (true) 
      //1、生成8位数字
          String cardId = "";
          for (int i = 0; i < 8; i++) 
              cardId += r.nextInt(10); //0~9
          

      //  2、判断8位数字是否与其他账户重复
          Account acc = getAccountByCardId(cardId, accounts);
          if (acc == null)
  //            说明cardId 现在没有重复,可以作为新卡号使用
              return cardId;
          
      
  

  /**
   * 根据卡号查询一个账户对象
   * @param cardId 卡号
   * @param accounts 全部账户的集合
   * @return 账户对象 | null
   */
  private static Account getAccountByCardId(String cardId,ArrayList<Account> accounts)
      for (int i = 0; i < accounts.size(); i++) 
          Account acc = accounts.get(i); //当前账户
          if (acc.getCarId().equals(cardId))
              return acc; //卡号重复
          
      
      return null; //查无此人
  

3.用户登录功能
分析:
*登录功能定义成一个方法,并且传入账户集合:public static void login(ArrayList accounts)...
*让用户输入卡号,根据卡号去账户集合查询账户对象
*如果没有找到账户对象,说明登录卡号不存在,提示继续输入卡号
*如果找打账户对象,说明卡号存在,继续输入密码
*如果密码不正确,提示继续输入密码
*如果密码正确,登陆成功

把实现用户登录功能定义成一个独立的方法:login(accounts,sc);

  /**
    * 登录功能
    * @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();
           //3、判断卡号是否存在,根据卡号去账户集合查询账户对象
           Account acc = getAccountByCardId(cardId, accounts);
           if (acc != null)
               //卡号存在
               //4、让用户输入密码,认证密码
               while (true) 
                   System.out.println("请您输入登录密码:");
                   String passWord = sc.next();
                   //判断当前账户对象的密码是否与用户输入的密码一致
                   if (acc.getPassWord().equals(passWord))
                       //登录成功
                       System.out.println("恭喜您,"+acc.getUserName()+"先生/女士进入系统,您的卡号是:"+acc.getCarId());
                        //展示登录成功后的操作页
                       showUserCommand(sc,acc);
                       return; //跳出登录方法
                   else 
                       System.out.println("对不起,您输入的密码有误!");
                   
               
           else 
               System.out.println("对不起,您的卡号不存在!");
           
       
   

4.用户操作页设计 、查询账号、退出账号功能
分析:
*用户登陆成功后,需要进入用户操作页
*查询——直接展示当前登录成功的账户对象的信息
*退出账户是需要回到首页的


 /**
     * 展示用户登录后的操作页
     */
    private static void showUserCommand(Scanner sc,Account acc) 
        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:
                    //存款
                    break;
                case 3:
                    //取款
                    break;
                case 4:
                    //转账
                    break;
                case 5:
                    //修改密码
                    break;
                case 6:
                    //退出
                    System.out.println("退出成功,欢迎下次光临!");
                    return; //让当前方法停止执行,跳出去
                case 7:
                    //注销账户
                    break;
            
        
    

    /**
     * 展示用户信息
     * @param acc
     */
    private static void showAccount(Account acc) 
        System.out.println("================当前账户信息如下=======================");
        System.out.println("卡号:"+acc.getCarId());
        System.out.println("户主:"+acc.getUserName());
        System.out.println("余额:"+acc.getMoney());
        System.out.println("限额:"+acc.getQuotaMoney());
    

实现效果:

以上是关于模拟ATM系统 —— 用户注册登录和操用户作页设计 查询账号退出账号功能的主要内容,如果未能解决你的问题,请参考以下文章

RPC模式开发一个银行atm模拟系统

RPC模式开发一个银行atm模拟系统

Java ATM模拟系统报告

ATM机小程序

模拟ATM机系统

Python__模拟实现一个ATM+购物商城程序