Java学习:ATM系统入门实战项目

1.功能实现代码——实现业务需求

ATM.java


package com.ATM;

import java.sql.SQLOutput;
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);
    private Account loginacc;//记住登陆之后的用户

    public void start() {
        while (true) {
            System.out.println("ATM start");
            System.out.println("1.用户登录");
            System.out.println("2.用户开户");
            System.out.println("请输入:");
            String choice = sc.next();

            switch (choice) {
                case "1":
                    login();
                    break;

                case "2":
                    addATM();
                    break;

                default:
                    System.out.println("没有该操作!");

            }
        }

    }


    private void login() {
        System.out.println("==系统登录==");
        if (Accounts.isEmpty()) {
            System.out.println("当前系统里面没有储存账号!!!");
            return;

        }


        while (true) {
            System.out.println("请您输入您的卡号:");
            String cardid = sc.next();

            Account acc = getAccountByCardid(cardid);
            if (acc == null) {
                System.out.println("输入的卡号不存在");
            } else {
                System.out.println("请您输入密码");
                String password = sc.next();
                while (true) {
                    if (acc.getPassword().equals(password)) {
                        System.out.println("恭喜您登陆成功" + acc.getUserName() + "卡号是:" + acc.getCardid());
                        loginacc = acc;
                        showusercommand(loginacc);
                        return;//退出当前功能
                    } else {
                        System.out.println("输入的密码有问题,请再次输入:");
                        break;
                    }
                }
            }
        }
    }

    private void showusercommand(Account acc) {
        while (true) {
            System.out.println(acc.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.注销当前账户");

            int command = sc.nextInt();
            switch (command) {
                case 1:
                    showloginaccount(acc);
                    break;
                case 2:
                    depositMoney(acc);
                    break;
                case 3:
                    drawmoney(acc);
                    break;
                case 4:
                    teansferMoney(acc);
                    break;
                case 5:
                    ChangePassword(acc);
                    return;
                case 6:
                    System.out.println(acc.getUserName() + "退出系统成功");
                    return;
                case 7:
                   if(Deleteaccount(acc)){
                       return;
                   }else{
                    break;
                   }
                default:
                    System.out.println("操作不存在,请重新选择!");
            }
        }
    }

    private void ChangePassword(Account acc) {
        System.out.println("请您输入当前账户的密码:");
        while (true) {
            String password = sc.next();

            if (acc.getPassword().equals(password)) {
                while (true) {
                    System.out.println("===请您输入新密码:===");
                    String newpassword = sc.next();
                    System.out.println("请您再次输入新密码:");
                    String recheckpassword = sc.next();
                    if(recheckpassword.equals(newpassword)){
                        acc.setPassword(newpassword);
                        System.out.println("恭喜您密码设置成功");
                        return;
                    }else{
                        System.out.println("两次密码输入不一致,请重新输入");
                    }
                }

            }else{
                System.out.println("密码错误,请重新输入!");
            }
        }
    }


    //销户成功
    private boolean Deleteaccount(Account acc) {

        System.out.println("请问您确认销户吗?y/n");
        while (true) {
            String command = sc.next();
            switch (command) {
                case "y":
                    //判断是否有钱
                    if(acc.getBalance() == 0){
                        Accounts.remove(acc);
                        System.out.println("您的账号已经销户!!!");
                        return true;
                    }else{
                        System.out.println("您的账户还有余额,销户失败!");
                        return false;
                    }
                case "n":
                    return false;
                default:
                    System.out.println("输入有误,请您重新输入!");

            }
        }
    }

    private void teansferMoney(Account acc) {
        System.out.println("==用户转账==");
        if (Accounts.size() < 2) {
            System.out.println("当前系统只有一个账号!");
            return;
        }
        if (acc.getBalance() == 0) {
            System.out.println("您的账户余额为0,无法转帐!!");
            return;
        }

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

            Account Toacc = getAccountByCardid(cardid);
            if (Toacc == null) {
                System.out.println("对方卡号不存在!");

            } else if (acc.getCardid().equals(Toacc.getCardid())) {
                System.out.println("小调皮,不准给自己转账~~~");
            } else {
                //对方账户存在,验证姓名
                String name = '*' + Toacc.getUserName().substring(1);
                System.out.println("请您输入【" + name + "】的姓氏");
                String prename = sc.next();
//startsWith() 方法用于检测字符串是否以指定的前缀开始。

                if (Toacc.getUserName().startsWith(prename)) {
                    while (true) {
                        System.out.println("请输入要转给对方的金额");
                        double money = sc.nextDouble();
                        //判断金额是否可以转账
                        if (acc.getBalance() >= money) {
                            acc.setBalance(acc.getBalance() - money);
                            Toacc.setBalance(Toacc.getBalance() + money);
                            System.out.println("转账成功,您的剩余余额为" + acc.getBalance());
                            return;

                        } else {
                            System.out.println("余额不足,无法转账");
                            System.out.println("请重试!");
                        }
                    }
                } else {
                    System.out.println("对不起,您输入的姓氏有误,请重新输入!");
                }
            }
        }

    }

    private void drawmoney(Account acc) {
        System.out.println("==取钱操作==");
        while (true) {
            if (acc.getBalance() < 100) {
                System.out.println("账户余额不足100元,不能取款!!!");
                return;
            } else {
                System.out.println("请您输入取款余额:");
                double money = sc.nextDouble();


                //判断余额是否充足
                if (money > acc.getBalance()) {
                    System.out.println("余额不足,您账户中的余额是" + acc.getBalance());

                } else {
                    if (money > acc.getLimit()) {
                        System.out.println("您当前取款超过了最多限额!");
                    } else {
                        //可以开始取钱
                        acc.setBalance(acc.getBalance() - money);
                        System.out.println("恭喜您取钱成功!!!");
                        System.out.println("您当前余额剩余:" + acc.getBalance());
                        break;
                    }

                }
            }
        }
    }


    //2.存款操作
    private void depositMoney(Account acc) {
        System.out.println("==存钱操作==");
        System.out.println("请您输入存款金额");
        double money = sc.nextDouble();

        //更新
        acc.setBalance(acc.getBalance() + money);
        System.out.println("您当余额为:" + acc.getBalance());
    }

    //1.展示当前登录账户的信息
    private void showloginaccount(Account acc) {
        System.out.println("====您当前账户信息如下====");
        System.out.println("卡号:" + acc.getCardid());
        System.out.println("户主:" + acc.getUserName());
        System.out.println("性别:" + acc.getSex());
        System.out.println("余额" + acc.getBalance());
        System.out.println("每次取钱额度:" + acc.getLimit());
    }


    private void addATM() {
        //1.创建一个用关乎对象,用于封装用户信息
        Account acc = new Account();

        System.out.println("==注册开户==");
        //2.输入信息
        System.out.println("请您输入账户名称");
        String name = sc.next();
        acc.setUserName(name);

        while (true) {
            System.out.println("请您输入您的性别");
            char sex = sc.next().charAt(0);
            if (sex == '男') {
                acc.setSex(sex);
                break;
            } else if (sex == '女') {
                acc.setSex(sex);
                break;
            } else {
                System.out.println("输入有误,请重新输入");
            }
        }

        while (true) {
            System.out.println("请您输入账户密码:");
            String password = sc.next();
            System.out.println("请您再次输入账户密码:");
            String password2 = sc.next();
            if (password.equals(password2)) {
                acc.setPassword(password);
                break;
            } else {
                System.out.println("您输入的两次密码不一致,请重新输入");
            }
        }

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

        //重点为这个账号生成卡号,由系统自动生成,8位数字,不能与其他账号重复
        String cardid = creatcardid();
        acc.setCardid(cardid);
        System.out.println("卡号为" + acc.getCardid());

        Accounts.add(acc);


        System.out.println("恭喜您注册成功" + acc.getUserName() + "开户成功,您的卡号是:");


    }

    //返回一个八位数字的卡号
    private String creatcardid() {
        while (true) {
            String cardid = "";
            Random random = new Random();
            for (int i = 0; i < 8; i++) {
                int data = random.nextInt(10);
                cardid += data;
            }
            //3.判断卡号是否与其他账号是否重复的方法
            Account acc = getAccountByCardid(cardid);
            if (acc == null) {
                return cardid;
            }
        }

    }


    //查询账户对象返回
    private Account getAccountByCardid(String cardid) {
        for (int i = 0; i < Accounts.size(); i++) {
            Account acc = Accounts.get(i);
            if (acc.getCardid().equals(cardid)) {
                return acc;//返回查到的账号
            }

        }
        return null;//查无此账户
    }


}

2.创建账户对象,保存信息

Account.java


package com.ATM;

public class Account {
    private String cardid;
    private String userName;
    private char sex;
    private String password;
    private double balance;
    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 getBalance() {
        return balance;
    }

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

    public double getLimit() {
        return limit;
    }

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

3.系统测试类——运行系统

text.java

package com.ATM;

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

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值