ATM案例(Java代码实现)

主要实现ATM窗口一下功能 1.查看余额, 2.存款, 3.取款, 4.转账, 5.打印 6.查询转账信息, 7.退卡

以下是示例代码

封装对象类

 package com.hope.entity;

public class User {

    private String name;//持卡人姓名
    private String card;//账号
    private String pwd;//密码
    private Double money;//余额

    public User(String name, String card, String pwd, Double money) {
        this.name = name;
        this.card = card;
        this.pwd = pwd;
        this.money = money;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", card='" + card + '\'' +
                ", pwd='" + pwd + '\'' +
                ", money=" + money +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public String getCard() {
        return card;
    }

    public void setCard(String card) {
        this.card = card;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}

工具类

package com.hope.entity;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public class UserTools {

    static int count = 3;
    //获取控制台输入对象
    Scanner sc = new Scanner(System.in);
    String str = null;

    /**
     * 初始化用户的信息
     *
     * @return
     */
    public List<User> getList() {
        //创建list集合存放User对象
        List<User> listuser = new ArrayList<>();

        User zhangsan = new User("张三", "1001", "123456", 2000.0);
        User lisi = new User("李四", "1002", "123456", 2000.0);
        listuser.add(zhangsan);
        listuser.add(lisi);
        return listuser;
    }

    /**
     * 登陆方法
     *
     * @param userList 存放初始化User对象
     * @return 返回User对象 用于判断!=null 表示登陆成功
     */
    public User login(List<User> userList) {
        User user = null;
        if (count > 0) {
            //提示输入卡号
            System.out.println("请输入卡号:");

            //获取输入的卡号
            String card = sc.next();
            //提示输入密码
            System.out.println("请输入密码:");
            //获取输入的密码
            String pwd = sc.next();
            //输入完毕之后  循环遍历用户集合
            for (User srcuser : userList) {
                //判断   如果输入的卡号和密码 和初始账号密码一样 登陆成功
                if (card.equals(srcuser.getCard()) && pwd.equals(srcuser.getPwd())) {
                    user = srcuser;
                    return user;
                } else {
                    count--;
                    System.out.println("-----------输入错误--------" + count);
                    break;
                }
            }
        }
        return user;
    }


    /**
     * 查询个人余额方法
     *
     * @param user 当前登陆成功的User用户
     */
    public String showMoney(User user) {

        return str = user.getName() + "的余额为:" + user.getMoney();
    }

    /**
     * 存放金额方法
     *
     * @param user
     */
    public String addMoney(User user, int number) {
        Double money = user.getMoney() + number;
        user.setMoney(money);
        System.out.println("存款成功" + money);
        return str = user.getName() + " 存款金额: " + number+"元\t存款后余额:"+user.getMoney();

    }

    /**
     * 取款方法
     *
     * @param user     .getMoney()当前金额
     * @param Withdraw 取款金额
     */
    public String delMoney(User user, int Withdraw) {
        if (user.getMoney() > Withdraw) {
            double v = user.getMoney() - Withdraw;
            user.setMoney(v);
            System.out.println("取款成功"+user.getMoney());
        } else {
            System.out.println("金额不足");
        }
        return str = user.getName() + "取款金额: " + Withdraw+"元\t取款后余额:"+user.getMoney();
    }

    /**
     * 判断是否有输入的卡号
     * @param list
     * @param card
     * @return  返回该对象
     */
    public  User findOne(List<User> list,String card){
        for (User user:list) {
            if (user.getCard().equals(card)){
                return  user;
            }
        }
        return  null;
    }
    /**
     * 转账方法
     *
     * @param list 用户集合
     * @param user 当前用户
     */
    public String Transfer(List<User> list, User user) {
        System.out.println("请输入要转账的卡号");
        String card = sc.next();
        //遍历用户集合
        for (User tUser : list) {
            //判断输入的卡号不是当前用户的卡号
            if (!user.getCard().equals(card)) {
                //调用方法  查找list集合有没有输入的卡号
                User one = findOne(list, card);
                //one  返回的对象不为空表示 有此卡号
                if (one!=null) {
                    System.out.println("输入转账的金额:");
                    //声明变量接收要转的金额
                    int TransferMoney = sc.nextInt();
                    //判断当前用户的金额  是否大于  转账的金额
                    if (user.getMoney() > TransferMoney) {
                        //当前用户大于转账的金额时  当前用户的金额重新赋值=当前金额-转账金额
                        user.setMoney(user.getMoney() - TransferMoney);
                        //将接受转账的用户的金额重新赋值=用户的金额+转账金额
                        one.setMoney(one.getMoney() + TransferMoney);
                        System.out.println("转账成功\t" + user.getName() + "的余额为:\t" + user.getMoney());
                        //将转账信息添加到 str 字符串中
                        str = user.getName()+ "给卡号 "+tUser.getCard() + "转账" +TransferMoney+"元\t转账后余额:"+user.getMoney();
                        return str;
                    } else {
                        System.out.println("账户金额不足,不支持转账");
                    }
                } else {
                    //此用户不存在
                    System.out.println("卡号输入格式错误没有此卡");
                    break;
                }
            } else {
                System.out.println("不可以给自己转账");
                break;
            }

        }
        return null;
    }

    /**
     * 打印方法
     * @param messageAll  存放所有操作信息的集合
     * @throws IOException
     */
    public void print(List<String> messageAll) throws IOException {

        File file = new File("D:\\U盘\\load\\a.txt");
        //判断是否有此文件  存在删除
        if (file.exists()){
            file.delete();
        }else {
            //创建文件
            file.mkdir();
        }

        FileWriter fw = new FileWriter(file);
        //遍历存放所有操作信息的messageAll集合
        for (String s:messageAll) {
            String value=s.toString()+"\n";
            //写入
            fw.write(value);
            fw.write("--------------------------------\n");
        }
        //清除清空缓冲区数据
        fw.flush();
        //关闭资源
        fw.close();
        System.out.println("打印成功\t地址在:D:\\U盘\\load\\a.txt");
    }
}

测试类

package com.hope.entity;

import java.io.IOException;
import java.util.*;

public class ATMTest {
    public static void main(String[] args) throws IOException {

        System.out.println("****************欢迎使用ATM******************");
        //创建list集合用于所有操作信息
        List<String> MessageAll = new ArrayList<>();
        //只存放转账信息
        List<String> mTransfer = new ArrayList<>();

        //调用工具类
        UserTools userTools = new UserTools();
        //声明一个对象变量 接收登陆成功的 的对象值
        User login = null;
        //用于判断是否循环
        boolean bn = true;
        //登陆失败循环次数
        int cout = 3;
        //初始化用户信息List存放数据
        List<User> listuser = userTools.getList();
        //循环登陆
        while (bn) {
            login = userTools.login(listuser);
            if (login != null) {//当获得的对象不为空时 表示登陆成功
                System.out.println("登陆成功");
                break;
            } else {//如果登陆不成功   继续循环登陆  直到3次结束
                if (cout > 0) {
                    cout--;//循环次数递减
                    System.out.println("----------登陆失败-----------" + cout);
                } else {//再循环3次内  还未登陆成功  结束循环  不可以在登陆了
                    System.out.println("没有机会了");
                    break;
                }
            }
        }
        //获取控制台输入对象
        Scanner sc = new Scanner(System.in);
        //登陆成功 展示其他业务
        if (login != null) {
            //输入业务编号错误循环的次数
            int BusinessNumber = 3;
            //循环业务功能
            while (bn) {
                System.out.println("1.查看余额,2.存款,3.取款,4.转账,5.打印 6.查询转账信息,7.退卡");
                //判断输入的编号是否是数子
                if (sc.hasNextInt()) {
                    //是数字接收输入的编号值
                    int num = sc.nextInt();
                    //switch循环便利输入的编号值执行代码块的功能
                    switch (num) {
                        case 1:
                            //通过工具类调用查询显示余额方法
                            System.out.println(userTools.showMoney(login).toString());
                            break;
                        case 2:
                            System.out.println("请输入要存的金额 金额范围在:1~20000以内");
                            int number = sc.nextInt();//输入的金额值
                            if (number <= 0) {//如果输入的金额值小于或者等于0 不可以存款 返回重新操作
                                System.out.println("输入格式错误,返回上一级");
                            } else if (number > 20000) {
                                System.out.println("输入的金额过大,请移至柜台处理");
                            } else {//当都不符合上面条件时执行 通过工具类执行存款金额
                                //存放金额   将当前登陆用户对象 和输入的金额  传参
                                String mAdd = userTools.addMoney(login, number);
                                //将操作信息添加到MessageAll中
                                MessageAll.add(mAdd);
                            }
                            break;
                        case 3:
                            System.out.println("输入取款金额:");
                            int Withdraw = sc.nextInt();
                            //将当前用户  和  输入的取款金额 传参进行调用取款方法
                            String mDelMoney = userTools.delMoney(login, Withdraw);
                            //将操作信息添加到MessageAll中
                            MessageAll.add(mDelMoney);
                            break;
                        case 4:
                            //转账
                            //将转账方法的返回值信息添加到message
                            String transfer = userTools.Transfer(listuser, login);
                            if (transfer!=null){
                                //将转账操作信息添加到mTransfer中单独存放
                                mTransfer.add(transfer);
                                //将操作信息添加到MessageAll中
                                MessageAll.add(transfer);
                            }


                            break;
                        case 5:
                            //打印信息的时候在刷新查询个人余额方法  将返回的余额信息添加MessageAll集合中
                            String mShowOne = userTools.showMoney(login);
                            MessageAll.add(mShowOne);
                            userTools.print(MessageAll);
                            break;
                        case 6:
                            if (mTransfer.size() != 0) {
                                for (String mt : mTransfer) {
                                    System.out.println(mt.toString());
                                }
                            } else {
                                System.out.println("暂时没有转账信息");
                            }
                            break;
                        case 7:
                            System.out.println("当前用户已退出");
                            //false结束循环
                            bn = false;
                            //结束当前正在运行中的java虚拟机 正常退出程序
                            System.exit(0);
                            break;
                        default:
                            if (BusinessNumber > 1) {//当业务编号的循环次数>1 继续循环
                                BusinessNumber--;
                                System.out.println("没有该项业务请重新输入,还有" + BusinessNumber + "机会");
                            } else {//否则  结束循环
                                bn = false;
                            }
                            break;
                    }

                } else {
                    //输入的不是数字  直接结束循环  ATM机没有字母
                    System.out.println("输入错误,没有该项业务请重新登陆");
                    bn = false;

                }

            }
        }

    }
}

猜你喜欢

转载自blog.csdn.net/newHollow/article/details/107444563