模拟ATM系统的实现

1,创建一个类命名Account用于存储ATM的用户数据

package code;

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;
    }
}

2,实现ATM系统的各个功能,创建一个操作类

package code;

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


public class Atm {
    ArrayList<Account> accounts=new ArrayList<>();
    Scanner sc=new Scanner(System.in);
    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:
                    //用户开户
                    creatAccount();
                    break;
                case 2:
                    //用户登录
                    login();
                    break;
                default:
                    System.out.println("没有该操作~~");
            }
        }
    }
    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 = getAccountBy(cardId);
            if(acc==null){
                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;
                        showUser();
                        return;
                    }else{
                        System.out.println("密码错误,请重新输入:");
                    }
                }
            }
        }
    }
    private void showUser(){
        while (true) {
            System.out.println(loginacc.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:
                    showAcc();
                    break;
                case 2:
                    deposit();
                    break;
                case 3:
                    drawmoney();
                    break;
                case 4:
                    transmoney();
                    break;
                case 5:
                    updataPass();
                    return;
                case 6:
                    System.out.println(loginacc.getUserName()+"您退出系统成功");
                    return;
                case 7:
                    if(deleteAccount()){
                        return;
                    }
                    break;
                default:
                    System.out.println("您选择的操作不存在,请重新选择:");
            }
        }
    }

    private void updataPass() {
        System.out.println("===账户密码修改===");
        while (true) {
            System.out.println("请输入当前账户密码:");
            String pass=sc.next();
            if(loginacc.getPassWord().equals(pass)){
                while (true) {
                    System.out.println("请您输入新密码:");
                    String newpass=sc.next();
                    System.out.println("请您确认新密码:");
                    String okpass=sc.next();
                    if(okpass.equals(newpass)){
                        loginacc.setPassWord(okpass);
                        System.out.println("密码修改成功!");
                        return;
                    }else{
                        System.out.println("两次密码不一致,请再次输入密码:");
                    }
                }
            }else{
                System.out.println("密码错误,请重新输入:");
            }
        }
    }

    private boolean deleteAccount() {
        System.out.println("===销户操作===");
        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;
                }
            default:
                System.out.println("销户取消");
                return false;

        }
    }

    private void transmoney() {
        System.out.println("===用户转账===");
        if(accounts.size()<2){
            System.out.println("当前系统只存在一个账户~~");
            return;
        }
        if(loginacc.getMoney()==0){
            System.out.println("当前账户没有钱~~");
            return;
        }
        while (true) {
            System.out.println("请输入对方卡号:");
            String cardId=sc.next();
            Account acc=getAccountBy(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)){
                    while (true) {
                        System.out.println("请您输入转账给对方的金额:");
                        double money=sc.nextDouble();
                        if(loginacc.getMoney()>=money){
                            loginacc.setMoney(loginacc.getMoney()-money);
                            acc.setMoney(acc.getMoney()+money);
                            System.out.println("转账成功了");
                            return;
                        }else{
                            System.out.println("您的余额不足,您最多可转"+loginacc.getMoney());
                        }
                    }
                }else{
                    System.out.println("对不起,输入姓氏有问题~~");
                }
            }
        }
    }

    private void drawmoney() {
        System.out.println("===取钱操作===");
        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()){
                    System.out.println("您的取款金额超出了限额,您当前的限额是:"+loginacc.getLimit());
                }else{
                    loginacc.setMoney(loginacc.getMoney()-money);
                    System.out.println("您取款:"+money+"成功,取款后余额为:"+loginacc.getMoney());
                    break;
                }
            }else {
                System.out.println("您的账户余额不足,现余额是:"+loginacc.getMoney());
            }
        }
    }

    private void deposit() {
        System.out.println("===存钱操作===");
        System.out.println("请您输入存款金额:");
        double money=sc.nextDouble();
        loginacc.setMoney(loginacc.getMoney() + money);
        System.out.println("恭喜您存钱"+money+"成功,存钱后余额是:" + loginacc.getMoney());
    }

    private void showAcc(){
        System.out.println("===当前账户信息如下===");
        System.out.println("卡号:"+loginacc.getCardId());
        System.out.println("户主:"+loginacc.getUserName());
        System.out.println("性别:"+loginacc.getSex());
        System.out.println("余额:"+loginacc.getMoney());
        System.out.println("每次取现额度:"+loginacc.getLimit());

    }
    private void creatAccount(){
        //1、创建一个账户对象,用于封装用户的开户信息
        System.out.println("==系统开户操作==");
        Account acc=new Account();

        //2、需要用户输入自己的开户信息,赋值给账户对象
        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 okWord=sc.next();
            if(passWord.equals(okWord)){
                acc.setPassWord(okWord);
                break;
            }else{
                System.out.println("您输入的两次密码不一致,请您确认~~");
            }
        }

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

        //需要系统自动生成8位数字的卡号,并且不能重复
        String newCard=creatCardId();
        acc.setCardId(newCard);

        //3、把这个账户对象存入到账户集合中去
        accounts.add(acc);
        System.out.println("恭喜您"+acc.getUserName()+"开户成功,您的卡号是:"+acc.getCardId());

    }
    //利用随机数生成8位卡号
    private String creatCardId(){
        while (true) {
            String cardId="";
            Random r=new Random();
            for (int i = 0; i < 8; i++) {
                int data=r.nextInt(10);
                cardId += data;
            }
            Account acc = getAccountBy(cardId);
            if(acc==null){
                return cardId;
            }
        }
    }
    //查找accounts集合中是否存在相同的卡号,存在返回找到的对象,不存在则返回null
    private Account getAccountBy(String cardId){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc=accounts.get(i);
            if(acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;
    }
}

3,创建主体去调用各个功能

package code;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值