d8(84-90)-勇敢开始Java,咖啡拯救人生

ATM项目

架构搭建:1.账户类Account(卡号,姓名,性别,密码,余额,取现额度)

                  2.ATM类(ATM系统欢迎页,开通账户,转账

                  3.Test类

Account类
package cn.ptz;

public class Account {
    private String cardId;
    private String userName;
    private char sex;
    private String passWord;
    private double money;
    private double limit; // 提现额度

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

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

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    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 getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}
ATM类
package cn.ptz;

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

public class ATM {
    private ArrayList<Account> accounts = new ArrayList<>();
    private Scanner sc = new Scanner(System.in); // 给ATM自己用,所以private

    private Account loginAcc; // 登陆后的用户

    // 启动ATM 欢迎页
    public void start(){
        while (true) {
            System.out.println("===欢迎进入ATM系统===");
            System.out.println("1、用户登录");
            System.out.println("2、用户开户");
            System.out.println("请选择");
            int command = sc.nextInt();
            switch (command){
                case 1:
                    // 用户登录
                    login();
                    break;
                case 2:
                    // 用户开户
                    createAccount();
                    break;
                default:
                    System.out.println("输入错误");
                    System.out.println("-----------------");
            }
        }
    }


    // 用户开户 该方法私有,因为只是ATM类自己用
    private void createAccount(){
        System.out.println("===系统开户操作===");
        // 创建对象
        Account acc = new Account();

        // 输入信息
        System.out.println("请输入账户名称");
        String name = sc.next();
        acc.setUserName(name);

        while (true) {
            System.out.println("请输入性别");
            char sex = sc.next().charAt(0); // 取字符串的第一个字符
            if (sex == '男' || sex == '女'){
                acc.setSex(sex);
                break;
            }else {
                System.out.println("输入有误,请输入男或女");
            }
        }

        while (true) {
            System.out.println("请输入密码");
            String passWord = sc.next();
            System.out.println("请再次确认密码");
            String okPassWord = sc.next();
            if (passWord.equals(okPassWord)){
                acc.setPassWord(passWord);
                break;
            }else{
                System.out.println("两次密码不一致");
            }
        }

        System.out.println("请输入提现额度");
        double limit = sc.nextDouble();
        acc.setLimit(limit);


        // 自动生成卡号,且卡号不能重复
        String newCardId = createCardId();
        acc.setCardId(newCardId);


        accounts.add(acc);
        System.out.println("恭喜您," + acc.getUserName() + "开户成功,您的卡号是 " + acc.getCardId());
    }

    // 卡号生成
    private String createCardId(){
        while (true) {
            String cardId = "";
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10); // 0-9
                cardId += data;
            }

            // 判断是否重复
            Account acc = getAccountByCardId(cardId);
            if(acc == null){
                // 该卡号还没有账户对象
                return cardId;
            }
        }

    }

    // 根据卡号查账户对象
    private Account getAccountByCardId(String cardId){
        // 遍历所有账户对象
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if (cardId.equals(acc.getCardId())){
                return acc;
            }
        }
        return null;
    }
    

    private void login(){
        System.out.println("===系统登陆===");
        if (accounts.size() == 0) {
            System.out.println("当前系统无账户");
            return;
        }
        while (true) {
            System.out.println("请输入登录卡号");
            String cardId = sc.next();

            Account acc = getAccountByCardId(cardId);

            if (acc == null){
                System.out.println("卡号不存在");
                System.out.println("---------------");
            }else {
                while (true) {
                    // 卡号存在
                    System.out.println("请输入密码");
                    String passWord = sc.next();
                    if (acc.getPassWord().equals(passWord)){
                        // 密码正确
                        System.out.println(acc.getUserName() + "登录成功," + "卡号是" + acc.getCardId());
                        // 登录成功
                        loginAcc = acc;

                        showUserCommand();

                        // 退出
                        return;

                    }else{
                        System.out.println("密码错误");
                        System.out.println("----------------");
                    }
                }
            }
        }

    }


    private void showUserCommand(){
        while (true) {
            System.out.println(loginAcc.getUserName() + ",您可以选择对帐户进行如下功能处理");
            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、注销账号");

            int command = sc.nextInt();
            switch (command){
                case 1:
                    // 查询账户
                    showLoginAccount();
                    break;
                case 2:
                    // 存款
                    depositMoney();
                    break;
                case 3:
                    // 取款
                    drawMoney();
                    break;
                case 4:
                    // 转账
                    transferMoney();
                    break;
                case 5:
                    // 修改密码
                    updataPassWord();
                    return; // 密码修改后,需要重新登录
                case 6:
                    // 退出
                    System.out.println(loginAcc.getUserName() + ",您已成功退出");
                    return;
                case 7:
                    // 注销账户
                    if(deleteAccount()) {
                        return;
                    }
                    break;
                default:
                    System.out.println("输入有误");
                    System.out.println("--------------");
            }
        }
    }

    // 修改密码
    private void updataPassWord() {
        System.out.println("===密码修改系统===");
        while (true) {
            System.out.println("请输入当前账户密码");
            String passWord = sc.next();

            if (passWord.equals(loginAcc.getPassWord())){
                while (true) {
                    System.out.println("请输入新密码");
                    String newPassWord = sc.next();

                    System.out.println("请再次确认密码");
                    String okPassWord = sc.next();

                    if (newPassWord.equals(okPassWord)){
                        loginAcc.setPassWord(newPassWord);
                        System.out.println("密码修改成功");
                        return;
                    }else {
                        System.out.println("两次密码不一致");
                    }
                }

            }else{
                System.out.println("输入密码错误");
            }
        }

    }

    // 销户
    private boolean deleteAccount() {
        System.out.println("===销户系统===");
        while (true) {
            System.out.println("请问是否确认销户?y/n");

            String command= sc.next();
            switch (command){
                case "y":
                    if(loginAcc.getMoney() == 0){
                        accounts.remove(loginAcc);
                        System.out.println("销户成功");
                        return true;
                    }else {
                        System.out.println("当前账户仍有余额,不允许销户");
                        return false;
                    }
                case "n":
                    System.out.println("账户保留");
                    return false;
                default:
                    System.out.println("输入有误");
            }
        }
    }

    // 转账
    private void transferMoney() {
        System.out.println("===转账系统===");
        if (accounts.size() < 2){
            System.out.println("当前系统仅有一个账户,无法转账");
            return;
        }
        if (loginAcc.getMoney() == 0){
            System.out.println("当前账户余额为0");
            return;
        }
        while (true) {
            System.out.println("请输入你要转账的账户卡号");
            String cardId = sc.next();

            Account acc = getAccountByCardId(cardId);
            if (acc == null){
                System.out.println("没有当前账户");
            }else {
                String name = "*" + acc.getUserName().substring(1); // 这里没见过,记一下
                System.out.println("请输入【" + name + "】的姓氏");
                String preName = sc.next();

                if (acc.getUserName().startsWith(preName)){
                    System.out.println("认证通过");
                    while (true) {
                        System.out.println("请输入要转账的金额");
                        double money = sc.nextDouble();
                        if (money <= loginAcc.getMoney()){
                            loginAcc.setMoney(loginAcc.getMoney() - money);
                            acc.setMoney(acc.getMoney() + money);
                            return; // 跳出转账方法
                        }else {
                            System.out.println("您的余额不足,当前您的余额为" + loginAcc.getMoney());
                        }
                    }
                }else {
                    System.out.println("输入的姓氏错误");
                }
            }
        }
    }

    // 取钱
    private void drawMoney() {
        System.out.println("===取钱系统===");
        // 少于100元不给取
        if (loginAcc.getMoney() < 100){
            System.out.println("余额不足100,不能取钱");
            return;
        }
        while (true) {
            System.out.println("请输入要取的金额:");
            double money = sc.nextDouble();
            if (loginAcc.getMoney() >= money){
                if (money <= loginAcc.getLimit()){
                    loginAcc.setMoney(loginAcc.getMoney() - money);
                    System.out.println("取款" + money + "元成功。当前余额:" + loginAcc.getMoney());
                    break;
                }else {
                    System.out.println("取款金额超过每次提现金额,提现金额是" + loginAcc.getLimit());
                }
            }else {
                System.out.println("余额不足,余额是" + loginAcc.getMoney());
            }
        }
    }

    // 存钱
    private void depositMoney() {
        System.out.println("===存钱系统===");
        System.out.println("请输入存款金额:");
        double money = sc.nextDouble();
        loginAcc.setMoney(loginAcc.getMoney() + money);
        System.out.println("存钱" + money + "元,当前余额" + loginAcc.getMoney());
    }

    // 查询账户
    private void showLoginAccount(){
        System.out.println("当前账户信息=======");
        System.out.println("卡号:" + loginAcc.getCardId());
        System.out.println("户主:" + loginAcc.getUserName());
        System.out.println("余额:" + loginAcc.getMoney());
        System.out.println("每次提现额度:" + loginAcc.getLimit());
    }
}
Test类
package cn.ptz;

public class Test {
    public static void main(String[] args) {
        // 创建ATM对象
        ATM atm = new ATM();
        atm.start();
    }
}

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值