Atm机系统的实现

/**
 * Atm机系统的实现
 * 
 * 1、本文档为银行自动柜员机ATM模拟系统说明。
 * 2、需求规定
 * 主要功能包括新开账户和客户服务。
 * 客户服务包括:存款服务、取款服务、转账、打印清单
 * 3、数据结构
 * 用户信息包括:账号、姓名、密码和账户总金额
 * 4、新开帐户
 * 新开账户主要包括设置新用户信息并把用户信息存储到变长数组中。
 * 
 * 设计的起点:现实世界的模拟
 * 1、阅读《需求分析书》,搞清楚软件功能定界,不要做出幻影需求
 * 2、查找需求说明中的名词,并区分名词之间的关系---类和属性
 * 3、查找需求说明中的动词---方法,最麻烦的是职责划分
 * 4、额外要求:不是强制要求,可以绘制UML类图---可以识图但是不要求绘图实现步骤
 * 
 * 1、制作atm包
 * 2、编写账户类,其中包括卡号、金额等属性以及存款,取款,查看余额,转帐四个方法
 * 3、编写ATM应用主函数实例化一个长度为10的数组,用来保存多个账户对象。插卡提示后用户输入信息登录系统(卡号和密码),
 * 如果失败三次将执行吞卡处理提示用户选择要进行的操作(1:修改密码2:存款3:取款4:查余额5:转账0:退卡),重复过程,直到用户输入0结束循环
 * 用户输入1,那么可以修改当前登录用户的密码
 * 用户输入2,那么提示用户输入存入的金额,然后在数组中查找到这个账户对象,并调用这张卡对象的存款方法进行存款
 * 用户输入3,那么提示用户要取出的金额,然后在数组中查找到这个账户对象,并调用这张卡对象的取款方法进行存款
 * 用户输入4,那么在数组中查找到这张卡对象,并调用这张卡对象的查余额方法得到余额,并输出给用户看
 * 用户输入5,那么提示用户输入转账目标卡的卡号,然后在数组中查找到这个目标卡对象,并调用卡类的转账函数,执行转账操作
 * 要求:不允许面向过程,每个方法中所包含语句不得大于30行,每个方法需要有对应的文档注释
 *
 */
1.用户类

package atm;

//用户信息包括:账号、姓名、密码和账户总金额
public class User {
    private String idNum;// 账号19位
    private String name;// 姓名
    private int password;// 密码
    private int account;// 账户余额

    // 存款
    public boolean deposit(int saveMoney) {
        boolean flag = false;
        while (true) {
            if (saveMoney % 100 == 0) {
                this.account += saveMoney;
                flag = true;
                break;
            } else {
                System.out.println("请放入一百面值的钞票!!!");
                break;
            }
        }
        return flag;
    }

    // 取款
    public boolean withdrawMoney(int borrowMoney) {
        boolean flag = false;
        if (this.account > borrowMoney) {
            if (borrowMoney % 100 == 0) {
                this.account -= borrowMoney;
                flag = true;
            }
        } else
            System.out.println("账户余额不足");
        return flag;
    }

    // 查看余额
    public void showAccount(User p) {
        System.out.println("当前账户余额为:" + p.getAccount());
    }

    // ============================================================================
    public User(String idNum, String name, int password, int account) {
        super();
        this.idNum = idNum;
        this.name = name;
        this.password = password;
        this.account = account;
    }

    public User() {

    }

    public String getIdNum() {
        return idNum;
    }

    public void setIdNum(String idNum) {
        this.idNum = idNum;
    }

    public String getName() {
        return name;
    }

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

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    // 获取账户总金额
    public int getAccount() {
        return account;
    }

    public void setAccount(int account) {
        this.account = account;
    }

    @Override
    public String toString() {
        return "User [idNum=" + idNum + ", name=" + name + ", password=" + password + ", account=" + account + "]";
    }
}


 

2.用户账户类(工具类)

package atm;

public class UserAccount {
    private User[] user;// 存用户信息的数组
    private static int count = 0;// 实际用户的个数
    private static boolean flag = false;

    public UserAccount() {
        this(10);
    }

    public UserAccount(int len) {
        if (len < 0)
            throw new IllegalArgumentException("数组长度异常");
        user = new User[len];
    }

    // 添加新用户
    public void add(User p) {
        if (count == user.length)
            dilatation();
        user[count++] = p;
    }

    public void show() {
        for (int i = 0; i < count; i++) {
            System.out.println(user[i]);
        }
    }

    // 如果数组长度不够,则增加数组长度
    private void dilatation() {
        int len = user.length * 3 / 2;
        User[] perArr = new User[len];
        for (int i = 0; i < count; i++)
            perArr[i] = user[i];
        this.user = perArr;
    }

    // 判断此账户是否存在
    public boolean isExists(String idNum) {
        // System.out.println(idNum);
        for (int i = 0; i < count; i++) {
            // System.out.println(user[i].getIdNum());
            if (idNum.equals(user[i].getIdNum())) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    // 登录
    public boolean login(String idNum, int password) {
        for (int i = 0; i < count; i++) {
            if (idNum.equals(user[i].getIdNum()) && password == user[i].getPassword()) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    // 转账
    public boolean transferAccount(User user1, String aimIdNum, int money) {
        User aimUser = null;// 创建一个目标账户
        for (int i = 0; i < count; i++) {
            if (aimIdNum.equals(user[i].getIdNum()) && !aimIdNum.equals(user1.getIdNum())) {
                aimUser = findUser(aimIdNum);
                if (user1.withdrawMoney(money)) {
                    if (aimUser.deposit(money)) {
                        flag = true;
                        break;
                    }
                }
            } else
                flag = false;
        }
        return flag;
    }

    // 根据账号查找用户
    public User findUser(String idNum) {
        User user1 = null;
        boolean flag = false;
        for (int i = 0; i < count; i++) {
            if (idNum.equals(user[i].getIdNum())) {
                user1 = user[i];
                flag = true;
                break;
            }
        }
        if (!flag)
            System.out.println("没有此账户");
        // System.out.println(user1);
        return user1;
    }
}


 

3.Atm机类

package atm;

import java.util.Scanner;

//atm端
public class Atm {
    // private static int atmAccount = 100000;// atm账户余额
    private String idNum;// 账号
    private String name;// 姓名
    private int password;// 密码
    private int account;// 账户余额
    private User user;
    private UserAccount userAc;
    private static Scanner sc = new Scanner(System.in);

    public Atm() {
        userAc = new UserAccount(10);
        User u1 = new User("888888", "张三", 123456, 5000);
        User u2 = new User("88888", "李四", 123456, 5000);
        User u3 = new User("8888", "王五", 123456, 5000);
        userAc.add(u1);
        userAc.add(u2);
        userAc.add(u3);
//        userAc.show();
    }

    // 主窗口
    public void mainMenu() {

        System.out.println("欢迎使用本系统~~");
        int choose;
        while (true) {
            try {
                System.out.println("请输入:1->注册,2->登录,0->退出");
                choose = sc.nextInt();
                switch (choose) {
                case 1:
                    System.out.println("请输入您的账号:");
                    idNum = sc.next();
                    System.out.println("请输入您的姓名:");
                    name = sc.next();
                    System.out.println("请输入您的密码:");
                    password = sc.nextInt();
                    System.out.println("请输入您的余额:");
                    account = sc.nextInt();
                    regist(idNum, name, password, account);
                    userAc.show();
                    break;
                case 2:
                    for (int i = 0; i < 3; i++) {
//                        User user1 = new User();
                        System.out.println("输错三次将会被冻结,这是第" + (i + 1) + "次登录");
                        System.out.println("请输入您的账号:");
                        idNum = sc.next();
//                        user1.setIdNum(sc.next());
                        System.out.println("请输入您的密码:");
                        password = sc.nextInt();
                        login(idNum, password);
//                        user1.setPassword(sc.nextInt());
//                        login(user1);
                        if (i == 2)
                            System.out.println("输错三次,密码已被冻结");
                    }
                    System.out.println("-----------------");
                    break;
                case 0:
                    System.exit(0);
                    break;
                default:
                    break;
                }
            } catch (Exception e) {
                System.out.println("输入有误");
                sc = new Scanner(System.in);
            }
        }
    }

    // 注册
    public void regist(String idNum, String name, int password, int account) {
        if (userAc.isExists(idNum))
            System.out.println("账号已存在");
        else {
            user = new User(idNum, name, password, account);
            userAc.add(user);
            System.out.println("注册完成");
        }
    }

    // 登录
    public void login(String idNum, int password) {
        if (userAc.isExists(idNum)) {
            if (userAc.login(idNum, password)) {
                System.out.println("登录成功");
                user = userAc.findUser(idNum);
                secondaryMenu(user);
            } else
                System.out.println("密码错误");
        } else
            System.out.println("账号不存在");
    }

    // 副菜单
    public void secondaryMenu(User user) {
        int choose;
        int money;
        while (true) {
            try {
                System.out.println("请输入:1->修改密码,2->存款,3->取款,4->查余额,5->转账,0->退出");
                choose = sc.nextInt();
                switch (choose) {
                case 1:
                    System.out.println("请输入新密码:");
                    int pas = sc.nextInt();
                    user.setPassword(pas);
                    System.out.println("密码修改成功");
                    mainMenu();
                    break;
                case 2:
                    System.out.println("请输入您要存的金额:");
                    money = sc.nextInt();
                    user.deposit(money);
                    System.out.println("存款成功");
                    user.showAccount(user);
                    break;
                case 3:
                    System.out.println("请输入您要取的金额:");
                    money = sc.nextInt();
                    user.withdrawMoney(money);
                    System.out.println("取款成功");
                    user.showAccount(user);
                    break;
                case 4:
                    user.showAccount(user);
                    break;
                case 5:
                    System.out.println("请输入要转账的账号:");
                    String aimIdNum = sc.next();
                    User user11 = userAc.findUser(aimIdNum);
//                    System.out.println("请输入要转账的姓名:");
//                    String name = sc.next();
                    System.out.println("请输入要转账的金额:");
                    money = sc.nextInt();
                    boolean res = userAc.transferAccount(user, aimIdNum, money);
                    if (res) {
                        System.out.println("转账成功");
                        System.out.println(user.getName() + "现有金额为:" + user.getAccount());
                        System.out.println(user11.getName() + "现有金额为:" + user11.getAccount());
                    } else {
                        System.out.println("转账失败");
                        System.out.println(user.getName() + "现有金额为:" + user.getAccount());
                        System.out.println(user11.getName() + "现有金额为:" + user11.getAccount());//
                    }
                    break;
                case 0:
                    mainMenu();
                    break;
                default:
                    break;
                }
            } catch (Exception e) {
                System.out.println("输入不合法");
                sc = new Scanner(System.in);
            }
        }
    }
}


 

4.测试类

package atm;

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值