模拟ATM系统(简易版)

package com.ctgu.ATMModele;

public class Account {//实体类。
    private String cardID;//用户卡号。
    private String userName;//用户名。
    private char gender;//性别。
    private String password;//密码。
    private double balance;//余额。
    private double limit;//限额。

    public Account() {
    }

    public Account(String cardID, String userName, char gender, String password, double balance, double limit) {
        this.cardID = cardID;
        this.userName = userName;
        this.gender = gender;
        this.password = password;
        this.balance = balance;
        this.limit = limit;
    }

    public String getCardID() {
        return cardID;
    }

    public void setCardID(String cardID) {
        this.cardID = cardID;
    }

    public String getUserName() {
        return userName+(gender == '男' ? "先生" : "女士");
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}
package com.ctgu.ATMModele;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;


public class ATM {//操作类operator
    private ArrayList<Account> accounts = new ArrayList<Account>();
    private Scanner scanner = new Scanner(System.in);
    private Random random = new Random();
    private Account loginAcc;//记住登录后的用户对象。
    public void start(){//启动ATM系统,展示欢迎界面。
        while (true) {
            System.out.println("======欢迎进入ATM系统======");
            System.out.println("1、用户登录。");
            System.out.println("2、用户开户。");
            System.out.println("======请选择您的业务======");
            int command = scanner.nextInt();
            switch (command){
                case 1 :
                    login();
                    break;
                case 2 :
                    createAccount();
                    break;
                default :
                    System.out.println("======请重新输入您的业务======");
                    break;
            }
        }

    }
    private void login(){//用户登录功能。
        System.out.println("======用户登录操作======");
        if(accounts.size() == 0){
            System.out.println("======系统中无账户存在======");
            return;
        }
        while (true) {
            System.out.println("======请输入卡号======");
            String inputCardID = scanner.next();
            Account acc = getAccountByID(inputCardID);
            if(acc == null){
                System.out.println("======您输入的卡号不存在,请重新输入======");
                continue;
            }
            else{
                while (true) {
                    System.out.println("======请输入密码======");
                    String password = scanner.next();
                    if(acc.getPassword().equals(password)){
                        //密码正确,可以进行登录。
                        loginAcc = acc;
                        System.out.println("======欢迎您,"+loginAcc.getUserName()+"卡号:"+loginAcc.getCardID());
                        showLoginUserCommand();
                        return;
                    }
                    else{
                        //密码错误。
                        System.out.println("======密码错误======");
                        continue;
                    }
                }
            }
        }

    }
    private void showLoginUserCommand(){//展示登录后的用户操作界面。
        System.out.println("======"+loginAcc.getUserName()+"您可以选择以下功能进行账户处理======");
        while (true) {
            System.out.println("1、查询账户。2、存款。3、取款。4、转账。5、修改密码。6、注销账户。7、退出。");
            int userCommand = scanner.nextInt();
            switch (userCommand){
                case 1 :
                    showLoginAccount();
                    break;
                case 2 :
                    deposit();
                    break;
                case 3 :
                    withdrawMoney();
                    break;
                case 4 :
                    transferAccounts();
                    break;
                case 5 :
                    changePassword();
                    return;
                case 6 :
                    if (accountCancellation()){
                        return;
                    }
                    break;
                case 7 :
                    System.out.println("======用户"+loginAcc.getUserName()+"退出成功======");
                    return;
                default :
                    System.out.println("======指令输入有误,请重新输入======");
                    break;
            }
        }
    }
    private void showLoginAccount(){//展示当前登录用户的账户信息。
        System.out.println("======您的当前账户信息如下======");
        System.out.println("卡主:"+loginAcc.getUserName());
        System.out.println("卡号:"+loginAcc.getCardID());
        System.out.println("性别:"+loginAcc.getGender());
        System.out.println("余额:"+loginAcc.getBalance());
        System.out.println("限额:"+loginAcc.getLimit());

    }
    private void deposit(){//用户存款操作。
        System.out.println("======存款操作======");
        while (true) {
            System.out.println("======请输入您的存款金额======");
            double money = scanner.nextDouble();
            if(money < 0 || money%100 != 0){
                System.out.println("======存款金额输入错误======");
                continue;
            }
            else{
                loginAcc.setBalance(loginAcc.getBalance() + money);
                System.out.println("======用户"+loginAcc.getUserName()+"存入"+money+"元,账户余额为"+loginAcc.getBalance());
                System.out.println("======是否继续存款======");
                System.out.println("======1、继续。2、返回上一步操作。");
                int command = scanner.nextInt();
                switch (command){
                    case 1 : break;
                    case 2 : return;
                }
            }
        }
    }

    private void withdrawMoney(){//用户取款操作。
        System.out.println("======用户取款操作======");
        while (true) {
            if(loginAcc.getBalance() < 100){
                System.out.println("======您的账户余额不足100元======");
                return;//余额不足直接跳出方法。
            }
            System.out.println("======请输入您的取款金额======");
            double money = scanner.nextDouble();
             if (money > loginAcc.getBalance()) {
                System.out.println("======您的账户余额不足,请重新输入======");
                continue;
            }
            if(money <= 0 || money % 100 != 0){
                System.out.println("======您输入的金额有误,请重新输入======");
                continue;
            }

            if (money > loginAcc.getLimit()) {
                System.out.println("======您的限额为"+loginAcc.getLimit()+",请重新输入======");
                continue;
            } else {
                loginAcc.setBalance(loginAcc.getBalance()-money);
                System.out.println("======用户"+loginAcc.getUserName()+",本次交易额为"+money+",账户余额为"+loginAcc.getBalance()+"======");
                System.out.println("======是否继续取款======");
                System.out.println("======1、继续。2、返回上一步操作。");
                int command = scanner.nextInt();
                switch (command){
                    case 1 : break;
                    case 2 : return;
                }
            }
        }
    }

    private void transferAccounts(){//转账功能。
        System.out.println("======用户转账======");
        if(accounts.size() < 2){
            System.out.println("======当前系统用户个数不足,无法转账======");
            return;
        }
        if(loginAcc.getBalance() == 0){
            System.out.println("======您的账户余额不足,无法转账======");
            return;
        }

        while (true) {
            System.out.println("======请输入对方卡号======");
            String cardID = scanner.next();
            Account acc = getAccountByID(cardID);
            if(acc == null){
                System.out.println("======您输入的账户用户不存在,请重新输入======");
                continue;
            }
            else {
                String name = "*" + acc.getUserName().substring(1);
                System.out.println("======请输入"+name+"的姓氏======");
                String inputName = scanner.next();
                String resultName = inputName + acc.getUserName().substring(1);
                if(resultName.equals(acc.getUserName())){
                    while (true) {
                        System.out.println("======请输入您的转账金额======");
                        double money = scanner.nextDouble();
                        if(loginAcc.getBalance() >= money){
                            loginAcc.setBalance(loginAcc.getBalance() - money);//更新转账方的余额。
                            acc.setBalance(acc.getBalance() + money);//更新接收方的余额。
                            System.out.println("======用户"+loginAcc.getUserName()+"转账成功"+money+"元,接受方为"+acc.getUserName());
                            return;//直接退出方法。
                        }
                        else {
                            System.out.println("======余额不足======");
                            continue;
                        }
                    }
                }
                else {
                    System.out.println("======您输入的姓氏不正确======");
                }
            }
        }


    }
 private boolean accountCancellation(){//销户功能,如果销户成功则跳转到欢迎界面,销户失败则跳转到用户菜单。
     System.out.println("======用户销户功能======");
     System.out.println("======你确定是否销户y/n======");
     char command = scanner.next().charAt(0);
     switch (command){
         case 'y' :
             if(loginAcc.getBalance() != 0){
                 System.out.println("======账户中存在金额,销户失败======");
                 return false;
             }
             else {
                 accounts.remove(loginAcc);
                 System.out.println("======销户成功======");
                 return true;
             }
         default :
             System.out.println("======账户保留======");
             return false;
     }
 }

 private void changePassword(){//修改密码功能。
     System.out.println("======修改密码======");
     while (true) {
         System.out.println("======请输入您的新密码======");
         String newPassword1 = scanner.next();
         System.out.println("======请再次输入您的新密码======");
         String newPassword2 = scanner.next();
         if (newPassword1.equals(loginAcc.getPassword()) || newPassword2.equals(loginAcc.getPassword())){
             System.out.println("======新密码不得与旧密码相同,请重新输入======");
             continue;
         }
         if (!newPassword1.equals(newPassword2)){
             System.out.println("======两次输入的密码不同,请重新设置======");
             continue;
         }
         else {
             System.out.println("======设置密码成功======");
             System.out.println("======请重新登录======");
             break;
         }
     }

 }
    private void createAccount(){//用户开户功能。
        //1、创建对象用于接受用户所填入的用户信息。
        System.out.println("======用户开户操作======");
        Account acc = new Account();
        //2、用户输入个人信息。
        System.out.println("======请输入您的姓名======");
        String userName = scanner.next();
        acc.setUserName(userName);
        while (true) {
            System.out.println("======请输入您的性别======");
            char gender = scanner.next().charAt(0);
            if(gender == '男'||gender == '女'){
                acc.setGender(gender);
                break;
            }
            else {
                System.out.println("======性别输入有误,请重新输入======");
            }
        }
        System.out.println("======您的银行卡号为======");
        acc.setCardID(generateCardID());
        System.out.println(acc.getCardID());
        while (true) {
            System.out.println("======请输入您的6位数字密码======");
            String password1 = scanner.next();
            System.out.println("======请再次输入您的确认密码======");
            String password2 = scanner.next();
            if(password1.equals(password2)){
                System.out.println("======密码设置成功======");
                acc.setPassword(password1);
                break;
            }
            else{
                System.out.println("======两次输入的密码不相同,请重新输入======");
            }
        }
        System.out.println("======请输入您的取现额度======");
        double limit = scanner.nextDouble();
        acc.setLimit(limit);
        accounts.add(acc);//用户信息录入完成,讲用户对象放到ArrayList集合当中。
        System.out.println("======用户"+acc.getUserName()+"开户成功======");
    }
    private String generateCardID(){//生成八位且唯一的银行卡号。
        while (true) {
            String cardID = "";//保存最终结果。
            Random random = new Random();
            for (int i = 0; i < 8; i++) {
                int data = random.nextInt(10);
                cardID = cardID + data;
            }
            Account acc = getAccountByID(cardID);
            if(acc == null){
                return cardID;
            }
        }
    }
    private Account getAccountByID(String cardID){//判断是否有相同的cardID.
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if(acc.getCardID().equals(cardID)){
                return acc;
            }
        }
        return null;
    }

}

 

package com.ctgu.ATMModele;

public class Test {//测试类。

    public static void main(String[] args) {
        ATM atm = new ATM();
        atm.start();
    }
}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值