Java_项目实战-ATM转账

用户转账功能

  • 把钱转给别人,转帐前需要判断:
    1. 自己账户是否有钱,系统中是否有其他账户
//        1.判断系统中是否存在其他用户
        if (accounts.size() < 0) {
            System.out.println("系统中只存在1个用户,无法为其它用户转账");
            return;
        }
2. 接下来让用户输入对方卡号,判断对方账户是否存在,账户如果存在,还需要认证对方账户的户主姓氏
//        2.判断转账金额是否大于账户余额
        if (loginAccount.getMoney() < 0) {
            System.out.println("账户余额不足");
            return;
        }

        while (true) {
//        3.开始转账
            System.out.println("请输入对方卡号");
            String cardId = sc.next();

//        4.判断这个卡号是否正确
            Account account = getAccountByCardId(cardId);
            if (account == null) {
                System.out.println("该卡号不存在");
            } else {
//                对方账户存在,就继续让用户认证姓氏
                String name = "*" + account.getUserName().substring(1);
                System.out.println("请输入[" + name + "]的姓氏");
                String preName = sc.next();

3. 	完整代码
package com.badidu.ATM;

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

public class ATM {
    private ArrayList<Account> accounts = new ArrayList<>();
    //    ATM管理账户
    Scanner sc = new Scanner(System.in);

    private Account loginAccount;

    //    启动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("输入有误");
            }
        }
    }

    //    完成用户的登录操作
    private void login() {
        System.out.println("用户登录");
//        1.判断系统中是否存在账户对象,存在才能登陆,不存在跳出
        if (accounts.size() == 0) {
            System.out.println("系统中不存在账户对象");
            return;
//            跳出登录操作
        }


        while (true) {
//        2.系统中存在账户对象,可以开始进行登陆操作
            System.out.println("请输入您的登陆卡号:");
            String cardId = sc.next();
//        3.判断这个卡号是否存在
            Account account = getAccountByCardId(cardId);
            if (account == null) {
                //            说明次卡号不存在
                System.out.println("该卡号不存在");
            } else {

                while (true) {
                    //            卡号存在,继续输入用户密码
                    System.out.println("请输入您的登陆密码");
                    String password = sc.next();
                    //            4.判断密码是否正确
                    if (account.getPassword().equals(password)) {
                        loginAccount = account;
                        //                密码正确,登录成功
                        System.out.println("恭喜您," + account.getUserName() + "登录成功,您的卡号是:" + account.getCardId());
                        //        展示登陆后的操纵界面
                        showUserCommand();
                        return;
//                        跳出
                    } else {
                        System.out.println("密码错误");
                    }
                }
            }
        }
    }

    //    展示登陆后的操纵界面
    private void showUserCommand() {
        while (true) {
            System.out.println(loginAccount.getUserName() + "您可以选择如下功能进行账户的处理---");
            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:
                    //                "查询账户"
                    showLoginAccount();
                    break;
                case 2:
//                    存款
                    depositMoney();
                    break;
                case 3:
//                    取款
                    drawMoney();
                    break;
                case 4:
//                    转账
                    transferMoney();
                    break;
                case 5:
                    System.out.println("修改密码");
                    break;
                case 6:
                    System.out.println(loginAccount.getUserName() + "您退出系统成功");
                    return;
                default:
                    System.out.println("输入有误");
            }
        }
    }

    //    转账
    private void transferMoney() {
        System.out.println("---转账---");
//        1.判断系统中是否存在其他用户
        if (accounts.size() < 0) {
            System.out.println("系统中只存在1个用户,无法为其它用户转账");
            return;
        }
//        2.判断转账金额是否大于账户余额
        if (loginAccount.getMoney() < 0) {
            System.out.println("账户余额不足");
            return;
        }

        while (true) {
//        3.开始转账
            System.out.println("请输入对方卡号");
            String cardId = sc.next();

//        4.判断这个卡号是否正确
            Account account = getAccountByCardId(cardId);
            if (account == null) {
                System.out.println("该卡号不存在");
            } else {
//                对方账户存在,就继续让用户认证姓氏
                String name = "*" + account.getUserName().substring(1);
                System.out.println("请输入[" + name + "]的姓氏");
                String preName = sc.next();

//                5.判断这个姓氏是否正确
                if (account.getUserName().startsWith(preName)) {
//                    姓氏正确,可以开始转账

                    System.out.println("请您输入转账给对方的金额:");
                    double money = sc.nextDouble();
                    //        6.判断这个金额是否没有超过自己的余额
                    if (loginAccount.getMoney() >= money) {
                        //            转账成功
                        loginAccount.setMoney(loginAccount.getMoney() - money);
                        account.setMoney(account.getMoney() + money);
                        System.out.println("恭喜您,转账成功,您的余额为:" + loginAccount.getMoney());
                        return;
//                        跳出转账
                    } else {
                        System.out.println("余额不足,最多可转账:" + loginAccount.getMoney());
                    }
                } else {
                    System.out.println("姓氏错误,认证失败");
                }
            }
        }
    }

    private void drawMoney() {
        System.out.println("--取款操作--");
//        判断账户余额是否达到100元,不够,不能取前
        if (loginAccount.getMoney() < 100) {
            System.out.println("余额不足100");
            return;
        }

//        输入取款金额
        while (true) {
            System.out.println("请输入您要取款的金额");
            double money = sc.nextDouble();

//        判断账户余额是否足够
            if (loginAccount.getMoney() >= money) {
                //            账户中余额足够
                //            判断当前取款金额是否超过每次的限额
                if (money > loginAccount.getLimit()) {
                    System.out.println("取款金额超过每次的限额,您每次最多取" + loginAccount.getLimit() + "元款");
                } else {
                    //            账户余额减去取款金额
                    loginAccount.setMoney(loginAccount.getMoney() - money);
                    System.out.println("恭喜您,取款" + money + "成功,您的余额为:" + loginAccount.getMoney());
                    break;
                }
            } else {
                System.out.println("余额不足,您的余额为:" + loginAccount.getMoney());
            }
        }
    }

    private void depositMoney() {
        System.out.println("--存款操作--");
        System.out.println("请输入您要存款的金额");
        double money = sc.nextDouble();

//        更新当前登录的账户的余额
        loginAccount.setMoney(loginAccount.getMoney() + money);
        System.out.println("恭喜您,存钱" + money + "成功,您的余额为:" + loginAccount.getMoney());
    }

    //    展示当前登录的账户信息
    private void showLoginAccount() {
        System.out.println("----当前您的帐户信息如下:----");
        System.out.println("卡号" + loginAccount.getCardId());
        System.out.println("账户名" + loginAccount.getUserName());
        System.out.println("性别" + loginAccount.getSex());
        System.out.println("余额" + loginAccount.getMoney());
        System.out.println("取现额度" + loginAccount.getLimit());
    }

    //    完成用户开户操作
    public void createAccount() {
        System.out.println("----------用户开户操作-----");
//        1.创建一个账户对象,用于封装用户的开户信息
        Account account = new Account();

//        2.录入账户信息,赋值给账户对象
        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 password = sc.next();
            System.out.println("请您输入您的确认密码");
            String confirmPassword = sc.next();

//        判断两次密码是否一样
            if (password.equals(confirmPassword)) {
                account.setPassword(password);
                break;
            } else {
                System.out.println("两次密码不一样");
            }
        }

        System.out.println("请您输入的的取现额度");
        double limit = sc.nextDouble();
        account.setLimit(limit);

//        重点:我们需要为这个账户生成一个卡号(系统自动生成,8位数字表示,不重复)
        String newCardId = createCardId();
        account.setCardId(newCardId);

//        3.将账户对象添加到集合中
        accounts.add(account);
        System.out.println("恭喜您," + account.getUserName() + "开户成功,您的卡号是:" + account.getCardId());
    }

    //    返回一个8位数字的卡号,而且这个卡号不能与其他账户的卡号重复
    private String createCardId() {
        while (true) {
//        1.定义一个String类型的变量记住8位数字作为一个卡号
            String cardId = "";
//        2.循环8次,每次产生一个随机数给cardId连接起来
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);
                cardId += data;
            }
//        判断cardId中记住的卡号,是否与其他账户卡号重复,没重复,才可以作为一个新卡号返回
            Account account = getAccountByCardId(cardId);
            if (account == null) {
                return cardId;
            }
        }
    }

    //    根据卡号查询账户对象返回accounts=[c1,c2,c3……]
    private Account getAccountByCardId(String cardId) {
//        遍历全部账户对象
        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            if (account.getCardId().equals(cardId)) {
                return account;
            }
        }
        return null;
//        卡号不存在
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值