day09

day09

利用所学基本知识实现一个简易ATM银行系统

Account类

package day09;
//定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
public class Account {
    private String  cardId;//卡号
    private String userName;//用户名
    private char sex;//性别
    private String password;//密码
    private double balance;//余额
    private double limit;//限额

    public Account() {
    }

    public Account(String cardId, String userName, char sex, String password, double balance, double limit) {
        this.cardId = cardId;
        this.userName = userName;
        this.sex = sex;
        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;
    }

    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 getBalance() {
        return balance;
    }

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

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }

    public String toString(){
        return "用户名:"+userName+",卡号:"+cardId;
    }
}

ATM类

package day09;
//定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
//定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求,比如:展示ATM的系统欢迎页、开通帐户、转账……
//定义一个测试类Test,负责对我们开发的ATM系统进行测试。

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
 * 此类专门用来实现功能
 */
public class ATM {
    private static final int CARD_ID_LENGTH = 8;
    ArrayList<Account> accounts = new ArrayList<>();
    Scanner sc = new Scanner(System.in);
    Account m_account;

    /**
     * 开始界面
     */
        public void start(){

            accounts.add(new Account("123456","李倍杰",'男',"123456",1000,20000.0));
            accounts.add(new Account("666666","夏开宏",'男',"123456",1000,20000.0));
            System.out.println(accounts);
            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:
                        System.out.println("进入登录界面");
                        login();
                        break;
                    case 2:
                        System.out.println("进入开户界面");
                        creatAccount();
                        break;
                    default:
                        System.out.println("错误指令");
                        break;
                }
            }
        }

    /**
     * 实现开户功能
     */
    public void creatAccount(){
        Random random = new Random();
        Account account = new Account();
        //设置账户名称
        System.out.println("请输入您的账户名称:");
        String name = sc.next();
        account.setUserName(name);
        while (true){
            System.out.println("请输入性别");
            char sex = sc.next().charAt(0);
            if (sex == '男' ||sex == '女' ) {account.setSex(sex);
                break;}
            else System.out.println("输入错误,请重新输入");
        }
        //设置账户密码
        while (true){
            System.out.println("请输入密码");
            String pwd1 = sc.next();
            System.out.println("请再次输入密码");
            String pwd2 = sc.next();

            if (pwd1.equals(pwd2)){ account.setPassword(pwd1);break;}
            else System.out.println("你输入的2次密码不一致,请您确认");
        }
        //设置限额
        System.out.println("请输入限额");
        double limit = sc.nextDouble();
        account.setLimit(limit);

        //生成卡号
        //todo
        account.setCardId(creatCardId());

        //把账号对象存入集合
        accounts.add(account);
        System.out.println("恭喜您开户成功!");
        System.out.println(accounts);
        System.out.println("按任意键+Enter退出...");
        String s = sc.next();
    }

    /**
     * 返回一个包含8位数字的字符串
     * @return
     */
    public String creatId(){
        Random random = new Random();
        String Id = "";
        for (int i = 0;i<CARD_ID_LENGTH;i++){
            Id += random.nextInt(10);
        }
        return Id;
    }

    /**
     * 创建一个CardId
     * @return CardId
     */
    public String creatCardId(){
        String cardId = creatId();
        for (Account account : accounts) {
            while (account.getCardId().equals(cardId)) {
                cardId = creatId();
            }
        }
        return cardId;
    }

    /**
     * 实现用户的登录功能
     */
    public void login(){
        System.out.println("==系统登录==");
        if (accounts.size()==0){
            System.out.println("当前系统数据库无任何账户,请先创建账户再登录");
            return;
        }else {
            label:while (true){
                System.out.println("请输入登录卡号:");
                String userInput = sc.next();
                for (Account account : accounts) {
                    if (userInput.equals(account.getCardId())) {
                        System.out.println("请输入密码:");
                        String password = sc.next();
                        if (password.equals(account.getPassword())) {
                            System.out.println("登陆成功!");
                            m_account = account;
                            showUserCommand();
                            break label;
                        } else {
                            System.out.println("密码错误,请重新输入");
                            break;
                        }
                    }
                }
                System.out.println("卡号不存在,请重新输入");
            }
        }
    }

    /**
     * 展示登录后的操作界面
     */
    public void showUserCommand(){
        while (true){
            System.out.println("恭喜" + m_account.getUserName() + "成功登录ATM系统,您的卡号为:" + m_account.getCardId());
            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:
                    System.out.println("查询账户");
                    showLoginAccount();
                    break;
                case 2:
                    System.out.println("存款");
                    depositMoney();
                    break;
                case 3:
                    System.out.println("取款");
                    drawMoney();
                    break;
                case 4:
                    System.out.println("转账");
                    transferMoney();
                    break;
                case 5:
                    System.out.println("5、密码修改");
                    updatePassWord();

                    break;
                case 6:
                    System.out.println("已退出");
                    return;
                case 7:
                    System.out.println("7、注销账户");
                        if (deleteAccount()){
                            return;
                        }
                    break;
                default:
                    System.out.println("指令错误");
            }
        }
    }

    /**
     * 查询账户
     */
    private void showLoginAccount(){
        System.out.println("==当前您的账户信息如下:==");
        System.out.println("卡号:" + m_account.getCardId());
        System.out.println("户主:" + m_account.getUserName());
        System.out.println("性别:" + m_account.getSex());
        System.out.println("余额:" + m_account.getBalance());
        System.out.println("每次取现额度:" + m_account.getLimit());

        exitTip();
    }

    /**
     * 存钱
     */
    private void depositMoney(){
            System.out.println("==存款操作==");
            System.out.println("请输入存款金额");
            double money = sc.nextDouble();
            if (money >=0){
                m_account.setBalance(m_account.getBalance()+money);
                System.out.println("存款成功,当前余额为"+m_account.getBalance());
            }else System.out.println("您的输入错误!");
        exitTip();
    }
    /**
     * 取钱
     */
    private void drawMoney(){
        if (m_account.getBalance()<100) {
            System.out.println("您的余额不足,你的账户余额是"+m_account.getBalance()+"元");
        } else{
            System.out.println("请输入取款金额:");
            double draw = sc.nextDouble();
                if (draw> m_account.getLimit()){
                    System.out.println("每次只能取"+m_account.getLimit()+"限额的钱");
                }else {
                    m_account.setBalance(m_account.getBalance()-draw);
                    System.out.println("取款成功,当前余额为"+m_account.getBalance());
                }
        }
        exitTip();
    }

    /**
     * 转账
     */
    private void transferMoney(){
        System.out.println("==用户转账==");
        if (accounts.size()<2){
            System.out.println("当前系统中只有你一个账户,无法为其他账户转账~~");
            exitTip();
            return;
        }

        if (m_account.getBalance() == 0){
            System.out.println("您自己都没钱,就别转了~~");
            exitTip();
            return;
        }

        System.out.println("输入对方卡号:");
        String objectId = sc.next();
        if (m_account.getCardId().equals(objectId)){
            System.out.println("不能给自己转账");
            exitTip();
            return;
        }
        for (int i = 0;i < accounts.size();i++){
            if (accounts.get(i).getCardId().equals(objectId)){
                Account objectAccount = accounts.get(i);
                System.out.println("*"+objectAccount.getUserName().substring(1));
                System.out.println("请输入对方姓氏:");
                char firstName = sc.next().charAt(0);
                if (objectAccount.getUserName().charAt(0) != firstName ){
                    System.out.println("对不起,您输入的姓氏有问题,转账失败!");
                    exitTip();
                    return;
                }else {
                    System.out.println("请输入转账金额:");
                    double transfer = sc.nextDouble();
                    if (transfer> m_account.getBalance()){
                        System.out.println("对不起,余额不足,转账失败!");
                        exitTip();
                        return;
                    }else {
                        m_account.setBalance(m_account.getBalance()-transfer);
                        objectAccount.setBalance(objectAccount.getBalance()+transfer);
                        System.out.println("您转账成功了~~~");
                        exitTip();
                        return;
                    }
                }
            }
        }
        System.out.println("您输入的卡号不正确!");
        exitTip();
    }

    /**
     * 提示按任意键+Enter退出...
     */
    private void exitTip(){
        System.out.println("按任意键+Enter退出...");
        String s = sc.next();
    }

    /**
     * 修改密码
     */
    private void updatePassWord(){
            System.out.println("==账户密码修改操作==");
            System.out.println("请您输入当前账户的密码:");
            String oldPassWord = sc.next();
            if (m_account.getPassword().equals(oldPassWord)){
                System.out.println("请输入新密码:");
                String newPassword = sc.next();
                System.out.println("请再次输入新密码:");
                if (newPassword.equals(sc.next())){
                    m_account.setPassword(newPassword);
                    System.out.println("恭喜您,您的密码修改成功~~~,下次登录请输入新密码");
                }else System.out.println("您输入的2次密码不一致~~,修改密码失败");
            }else {
                System.out.println("您当前输入的密码不正确~~,修改密码失败");
            }
    }

    private boolean deleteAccount(){
        System.out.println("==进行销户操作==");
        System.out.println("请问您确认销户吗?y/n");
        String command = sc.next();
        if (command.equals("y")){
            if (m_account.getBalance()!=0){
                System.out.println("对不起,您的账户中存钱金额,不允许销户");
                return false;
            }else {
                accounts.remove(m_account);
                return true;
            }
        }else if (command.equals("n")){
            return false;
        }else
            System.out.println("您输入的指令有误,销户失败");
            return false;
    }
}

Test类

package day09;

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

    }
}
posted @ 2023-03-18 16:37  萌新小夏  阅读(14)  评论(0)    收藏  举报