在控制台实现ATM功能

发布时间:2024年01月12日

ATM首页系统

首先进入ATM首页系统,选择开通账户或者用户登录功能

?1.开通账户

输入名字,姓氏,性别后,输入两次密码验证是否相同,如果密码不相同,则重新输入,如果密码相同,则随机生成一个卡号,并且确定不会重复,即开通成功

2.用户登录

用户登录可以分为,查询账户,存款,取款,转账,修改密码,退出,注销账户等功能

(1)查询账户

? ? ? ? 首先输入卡号,判断系统中是否有此卡号

? ? ? ? 如果没有,则重新输入;如果有,则输入密码,并判断密码是否正确

? ? ? ? 然后返回用户信息

(2)存款

? ? ? ? 输入存款金额,并修改账户金额

(3)取款

? ? ? ? 先判断账户余额是否有100,若没有则无法取款;若有则

? ? ? ? 判断取款金额是否大于余额,若大于,取款失败,重新输入取款金额;若小于则

? ? ? ? 判断取款金额是否大于限额,若大于,取款失败重新输入取款金额,若小于取款成功并更新账户金额

(4)转账

? ? ? ? 输入对方卡号,判断用户是否存在,若不存在,转账失败,重新输入卡号;若存在则

? ? ? ? 判断对方姓氏,若失败,重新输入转账账户;若成功则

? ? ? ? 输入转账金额,判断金额是否大于余额,若大于重新输入转账金额;若小于转账成功,更新

????????账户信息

(5)修改密码

? ? ? ? 先输入密码判断是否正确,若不正确,重新输入;若正确则

? ? ? ? 输入两次密码,判断是否相等,若不相等,重新输入;若相等则修改成功?

(6)退出

? ? ? ? 显示退出成功,显示ATM首页界面

(7)注销用户

? ? ? ? 先确定是否注销用户,若确认,则

? ? ? ? 判断余额是否为0;若是,注销成功,返回ATM首页界面;若不是,注销失败,返回操作界面

package Test1;

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);
   Random ra = new Random();
    //系统欢迎页面
    public void start(){
        while (true) {
            System.out.println("==================");
            System.out.println("欢迎进入ATM系统");
            System.out.println("请选择业务");
            System.out.println("1、用户登录");
            System.out.println("2、用户开户");
            System.out.println("请输入您要选择的命令");
            String i = sc.next();
            switch (i){
                case "1":
                    loginAccount();
                    break;
                case "2":
                    openAccount();
                    break;
                default:
                    System.out.println("没有此命令,请重新输入");
                    break;
            }
        }


    }

    //系统开户界面
    private void openAccount() {
        Account ac = new Account();
        System.out.println("===系统开户操作===");
        System.out.println("请输入账户用户名");
        String name = sc.next();
        ac.setName(name);
        while (true) {
            System.out.println("请输入性别");
            String sex = sc.next();
            if (sex.equals("男")||sex.equals("女")){
                ac.setSex(sex);
                break;
            }else{
                System.out.println("您输入的性别有误,请重新输入");
            }
        }

        while (true) {
            System.out.println("请输入密码");
            String password1 = sc.next();
            System.out.println("请再次确认密码");
            String password2 = sc.next();
            if(password1.equals(password2)){
                ac.setPassword(password1);
                break;
            }else{
                System.out.println("您两次输入的密码不一样,请重新输入");
            }
        }

        System.out.println("请输入限额");
        double limit = sc.nextDouble();
        ac.setLimit(limit);

        int idCard = createIdCard();
        ac.setIdCard(idCard);
        //将用户添加到列表中
        accounts.add(ac);

        System.out.println(ac.getName()+"您好,您已经开户成功,您的卡号是"+ac.getIdCard());

    }

    //登录
    private void loginAccount() {
        System.out.println("===欢迎来到ATM系统");
        //1.判断系统中有没有账户
        if(accounts.size()==0){
            System.out.println("系统中没有账户");
            return;
        }
        //2.系统中存在对象
        Account ac = null;
        while (true) {
            System.out.println("请输入卡号");
            int idcard = sc.nextInt();
            //判断是否有此卡号
            ac = getAccountBuId(idcard);
            if(ac==null){
                System.out.println("卡号错误,不存在此账号");
            }else{
                while (true) {
                    System.out.println("请输入密码");
                    String password = sc.next();
                    if (ac.getPassword().equals(password)){
                        //密码正确,登陆成功
                        System.out.println("恭喜您"+ac.getName()+",登陆成功");
                        showUserCommand(ac);
                        return;

                    }else{
                        System.out.println("您输入的密码不正确");
                    }
                }

            }
        }


    }

    //登录后的界面
    private void showUserCommand(Account account){
        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("请选择操作");
            String i = sc.next();
            switch (i){
                case "1"://查询账户
                    showUserAccount(account);
                    break;
                case "2"://存款
                    addUserMoney(account);
                    break;
                case "3"://取款
                    drawUserMoney(account);
                    break;
                case "4"://转账
                    transMoney(account);
                    break;
                case "5"://修改密码
                    changePassword(account);
                    return;
                case "6"://退出
                    System.out.println(account.getName()+",您退出系统成功");
                    return;
                case "7"://注销
                    boolean flag = logout(account);
                    if(flag){
                        //销户成功,返回欢迎界面
                        return;
                    }else{
                        //销户失败,返回操作界面
                        break;
                    }

                default:
                    System.out.println("您当前选择的操作不存在");
            }
        }

    }

    private boolean changePassword(Account account) {
        while (true) {
            System.out.println("请输入您的密码");
            String password = sc.next();
            if(account.getPassword().equals(password)){//输入的密码与原始密码相同
                while (true) {
                    System.out.println("请输入新密码");
                    String password1 = sc.next();
                    System.out.println("请再次输入密码");
                    String password2 = sc.next();
                    if(password1.equals(password2)){
                        account.setPassword(password);
                        System.out.println("修改成功,请重新登录");
                        return true;
                    }else{
                        System.out.println("您两次输入的密码不一样,请重新输入");
                    }
                }

            }
        }

    }

    //注销
    private boolean logout(Account account) {
        System.out.println("请确定是否注销账户:y/n");
        String flag = sc.next();
        if(flag.equals("y")){//确实要销户
            //判断用户的账户是否有钱
            if(account.getMoney()==0){//账户没钱
                System.out.println("销户成功!");
                return true;
            }else{//账户有钱
                System.out.println("对不起,您的账户中存在金额,销户失败,您的剩余金额是"+account.getMoney());
            }
        }
        return false;
    }

    //生成一个卡号
    private int createIdCard(){
        while (true) {
            String idCard="";
            for(int i=0;i<8;i++){
                idCard = idCard+ra.nextInt(10);
            }
            int id = Integer.parseInt(idCard);
            Account ac1 = getAccountBuId(id);
            if(ac1==null){
                //ID没有找到对象,可以返回作为一个新卡号
                return id;
            }
        }
    }

    //根据卡号查对象
    private Account getAccountBuId(int idCard){
        for (int i = 0; i < accounts.size(); i++) {
            Account ac = accounts.get(i);
            if(ac.getIdCard()==idCard){
                return ac;
            }
        }
        return null;//卡号不存在
    }

    //查询账户
    private void showUserAccount(Account account){
        System.out.println("当前您的账户信息如下");
        System.out.println("卡号:"+account.getIdCard());
        System.out.println("名字:"+account.getName());
        System.out.println("性别:"+account.getSex());
        System.out.println("余额:"+account.getMoney());
        System.out.println("限额:"+account.getLimit());
    }

    //存款
    private void addUserMoney(Account account){
        System.out.println("请输入要存的钱");
        double money = sc.nextDouble();
        double newMoney = account.getMoney()+money;
        account.setMoney(newMoney);
        System.out.println("当前余额为:"+account.getMoney());
    }

    //取款
    private void drawUserMoney(Account account) {
        //判断用户余额是否有100
        if(account.getMoney()<100){
            System.out.println("您的账户余额不足一百,不允许取钱");
            return;
        }
        while (true) {
            System.out.println("请输入要取的钱");
            double money = sc.nextDouble();
            //判断账户余额是否足够
            if(account.getMoney()<money){//余额不足
                System.out.println("您的账户余额不足,您的账户余额为"+account.getMoney());
            }else{//余额足够
                    if(money>account.getLimit()){//取款金额超过限额
                        System.out.println("当前取款金额超过限额。您每次最多可取"+account.getLimit());
                    }else{//可以开始取钱了
                        account.setMoney(account.getMoney()-money);
                        System.out.println("取款成功,取款后剩余"+account.getMoney());
                        break;
                    }
                }

        }
    }

    //转账
    private void transMoney(Account account) {
        while (true) {
            System.out.println("请输入要转账的账户");
            int id = sc.nextInt();
            //接受转账的账户
            Account newac = getAccountBuId(id);
            if (newac == null) {//当前账户不存在
                System.out.println("当前账户不存在");
            } else {//当前账户存在,验证对方姓氏
                String name = "*" + newac.getName().substring(1);//截取字符串
                System.out.println("请输入[" + name + "]的姓氏");
                String prename = sc.next();
                if (newac.getName().startsWith(prename)) {//是否以prename开始
                    //认证通过
                    while (true) {
                        System.out.println("请输入转账金额");
                        double money = sc.nextDouble();
                        if (account.getMoney() < money) {//余额不足
                            System.out.println("您的余额不足,您的余额是" + account.getMoney());
                        } else {//可以转账
                            account.setMoney(account.getMoney()-money);
                            newac.setMoney(newac.getMoney()+money);
                            System.out.println("您的余额是"+account.getMoney());
                            return;
                        }
                    }
                } else {
                    System.out.println("您输入的姓氏不正确");
                }
            }

        }

    }

}
package Test1;

public class Account {
    private int idCard;
    private String name;
    private String sex;
    private String password;
    private double money;
    private double limit;

    public Account(int idCard, String name, String sex, String password, double money, double limit) {
        this.idCard = idCard;
        this.name = name;
        this.sex = sex;
        this.password = password;
        this.money = money;
        this.limit = limit;
    }

    public Account() {
    }

    public int getIdCard() {
        return idCard;
    }

    public void setIdCard(int idCard) {
        this.idCard = idCard;
    }

    public String getName() {
        return name.charAt(0) + (sex.equals("男")?"先生":"女士");
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String 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;
    }
}
package Test1;

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

}

文章来源:https://blog.csdn.net/weixin_64491897/article/details/135539803
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。