java编写简易ATM系统

package java项目.ATM机;

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

public class ATMSystem {
    public static void main(String[] args) {
        ArrayList<Acount> acounts=new ArrayList<>();
        System.out.println("欢迎进入ATM系统");
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("1.注册账户\t2.登陆账户");
            String input=sc.next();
            switch(input){
                case "1":
                    sign(acounts,sc);
                    break;
                case "2":
                    denglu(acounts,sc);
                    break;
                default:
                    System.out.println("您的操作有误请重新输入");
            }
        }
    }

    /**
     * 用户登录
     * @param acounts
     * @param sc
     */
    private static void denglu(ArrayList<Acount> acounts,Scanner sc) {
        if(acounts.size()==0){
            System.out.println("当前系统中无任何用户,请先开户再继续登录");
            return;
        }
        System.out.println("输入卡号");
        String cardId=sc.next();
        Acount acc=getAccountCardId(acounts,cardId);
        if (acc !=null){
            while (true) {
                System.out.println("请输入密码");
                String passWord=sc.next();
                if (acc.getPassWord().equals(passWord)){
                    System.out.println("恭喜"+acc.getUserName()+"先生/女士登陆成功,您的卡号是:"+acc.getCardId());
                    operation(acounts, sc, acc);
                    return;
                }else {
                    System.out.println("密码错误请重新输入");
                }
            }
        }else {
            System.out.println("输入的卡号不存在");
        }
    }

    private static void operation(ArrayList<Acount> acounts,Scanner sc,Acount acc) {
        System.out.println("欢迎进入操作界面");
        while (true) {
        System.out.println("1.查询\n2.存款\n3.取款\n4.转账\n5.修改密码\n6.退出\n7.注销当前账号");
            System.out.println("请输入要进行的操作");
            String input=sc.next();
            switch(input){
                case"1":
                    //查询账户
                    showAcount(acc);
                    break;
                case"2":
                    //存款
                    Deposit(acounts,sc,acc);
                    break;
                case"3":
                    //取款
                    qukuan(sc,acounts,acc);
                    break;
                case"4":
                    //转账
                    transfer(sc,acounts,acc);
                    break;
                case"5":
                    //修改密码
                    modifypassword(acc,sc,acounts);
                    break;
                case"6":
                    //退出
                    System.out.println("退出成功,欢迎下次登录~~");
                    return;
                case"7":
                    //注销当前账号
                    deleteAcount(acc,sc,acounts);
                    break;
                default:
                    System.out.println("您输入的命令有误");
            }
        }
    }

    private static void deleteAcount(Acount acc,Scanner sc,ArrayList<Acount> acounts) {
        System.out.println("您将要删除次账户,是否要选择删除");
        System.out.println("请输入要进行的操作");
        System.out.println("输入yes删除账户\n输入no无操作");
        String input=sc.next();
        if(acc.getMoney()>0){
            System.out.println("账户中还有余额,不能删除账户");
        }else{
            switch (input){
                case "yes":
                    acounts.remove(acc);
                    System.out.println("账户删除成功");
                case "no":
                    System.out.println("您的账户得到保留");
                    break;
            }
        }
    }
    /**
     * 修改密码
     * @param acc
     */
    private static void modifypassword(Acount acc,Scanner sc,ArrayList<Acount> acounts) {
        while (true) {
            System.out.println("请输入原始密码");
            String passWord=sc.next();
            if (passWord.equals(acc.getPassWord())){
                System.out.println("请输入新密码");
                String password=sc.next();
                acc.setPassWord(password);
                acounts.add(acc);
                return;
            }else {
                System.out.println("您输入的原始密码错误,请重新输入");
            }
        }
    }
    /**
     * 转账功能
     * @param sc
     * @param acounts
     * @param acc
     */
    private static void transfer(Scanner sc, ArrayList<Acount> acounts, Acount acc) {
        if (acounts.size()<2){
            System.out.println("账户数量小于2无法进行转账,请去注册");
            return;
        }
        while (true) {
            System.out.println("输入转账卡号");
            String cardId = sc.next();
            Acount ac=getAccountCardId(acounts, cardId);
            if (cardId.equals(ac.getCardId())){
                while (true) {
                    System.out.println("输入转账金额");
                    double money=sc.nextDouble();
                    if (money>acc.getMoney()){
                        System.out.println("余额不足,无法转账");
                    }else {
                        ac.setMoney(money + ac.getMoney());
                        acounts.add(ac);
                        System.out.println("转账成功");
                        acc.setMoney(acc.getMoney() - money);
                        showAcount(acc);
                        return;//结束转账方法
                    }
                }
            }else{
                System.out.println("输入的卡号不存在");
            }
        }
    }
    /**
     * 取款
     * @param sc
     * @param acounts
     * @param acc
     */
    private static void qukuan(Scanner sc,ArrayList<Acount> acounts,Acount acc) {
        for (; ;) {
            System.out.println("请输入取款金额");
            double money=sc.nextDouble();
            if(money>acc.getMoney()){
                System.out.println("您的余额不足,请重新输入");
            } else if(money> acc.getLimit()) {
                System.out.println("您的取款金额超出交易限制,请重新输入");
            }else {
                acc.setMoney(acc.getMoney()-money);
                acounts.add(acc);
                showAcount(acc);
                return;//结束取钱方法
            }
        }
    }
    /**
     * 存款
     * @param acounts
     * @param sc
     */
    private static void Deposit(ArrayList<Acount> acounts,Scanner sc,Acount acc) {
        System.out.println("请输入存款金额:");
        double money=sc.nextDouble();
        acc.setMoney(money+acc.getMoney());
        acounts.add(acc);//可写可不写 acc已经在集合中了
        System.out.println("存款成功");
    }

    /**
     * 查询账户
     * @param acc
     */
    private static void showAcount(Acount acc) {
        System.out.println("用户:"+acc.getUserName()+"\n"+"卡号:"+acc.getCardId()+
                "\n"+"余额:"+acc.getMoney()+"\n"+"限额:"+acc.getLimit());
    }

    /**
     * 注册账户
     * @param acounts
     * @param sc
     */
    private static void sign(ArrayList<Acount> acounts,Scanner sc) {
        Acount acount=new Acount();
        System.out.println("请输入用户名");
        String username=sc.next();
        acount.setUserName(username);
        while (true) {
            System.out.println("请输入密码");
            String password=sc.next();
            System.out.println("请再次确认密码");
            String okpassword=sc.next();
            if (password.equals(okpassword)){
                acount.setPassWord(password);
                break;
            }else{
                System.out.println("两次密码不一致请重新输入");
            }
        }
        System.out.println("请输入交易限额");
        double limit=sc.nextDouble();
        acount.setLimit(limit);
        String cardId=getcardId(acounts);
        acount.setCardId(cardId);
        acounts.add(acount);
        System.out.println(username+"先生/女士账户注册成功"+"\t卡号:"+cardId+"\t账户限额:"+limit);
    }

    /**
     * 生成8位随机卡号
     * @param acounts
     * @return
     */
    private static String getcardId(ArrayList<Acount> acounts) {
        while (true) {
            String cardId = "";
            Random rn=new Random();
            for (int i = 0; i < 8; i++) {
                cardId+=rn.nextInt(10);
            }
            Acount acc=getAccountCardId(acounts,cardId);
            if (acc==null){
                return cardId;
            }
        }
    }

    /**
     * 判断生成的卡号是否重复
     * @param acounts
     * @param cardId
     * @return
     */
    private static Acount getAccountCardId(ArrayList<Acount> acounts, String cardId) {
        for (int i = 0; i < acounts.size(); i++) {
            Acount ac=acounts.get(i);
            if (ac.getCardId().equals(cardId)){
                return ac;
            }
        }
        return null;
    }
}
package java项目.ATM机;

public class Acount {
    private String cardId;
    private String userName;
    private String passWord;
    private double limit;
    private double money;
    public Acount(){

    }

    public Acount(String cardId, String userName, String passWord, double limit, double money) {
        this.cardId = cardId;
        this.userName = userName;
        this.passWord = passWord;
        this.limit = limit;
        this.money = money;
    }

    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 String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public double getLimit() {
        return limit;
    }

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

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值