自助银行服务系统项目开发__渣渣的Java学习之路

自助银行服务系统项目开发

1.系统功能

系统功能

2系统功能简介

2.1 开户

利用开户功能系统可以创建新的用户,在此过程中用户可以自定义用户名、密码和设置
首次存入的金额。

2.2 插卡

要使用插卡功能,必须输入已开户并正确的用户名和密码,验证通过后,会显示如
下菜单:
这里写图片描述

2.2.1 查询余额

查询当前登陆用户的余额。

2.2.2 取款

将取款金额从已登录帐户中扣除,要求取款金额必须小于帐户余额。

2.2.3 转账

将输入的金额从登陆的帐户中扣除,并将此金额存入指定的已开户的帐户中,
要求转入帐户必须存在,转出帐户中余额要大于转出金额。

2.2.4 存款

将存入金额存入已登录的帐户中,要求存入金额必须大于 0。

2.2.5 修改密码

用户通过此功能更改登录密码,要求在输入旧密码正确的情况下修改。

2.2.6 退出

退出该层菜单,返回主菜单。

2.3 系统管理

此功能要求输入正确的管理员密码(Admin)后使用,登录成功后显示如下菜单:
这里写图片描述

2.3.1 显示所有用户

此功能显示所有已开户帐户。

2.3.2 冻结帐户

使用这个功能的时候会首先显示未被冻结的帐户列表,管理员可以输入列表
中的用户名来冻结这个帐户,冻结帐户后该帐户将无法使用系统功能。

2.3.3 恢复帐户

此功能会首先显示已被冻结的帐户列表,管理员可以输入列表中用户名来恢
复帐户,恢复帐户后该用户可以继续使用系统功能。

2.3.4 退出

退出该级菜单,返回系统主菜单。

2.4 退出

退出整个系统。

程序启动入口

//保存为Start.java
/**
 * @author xaioqiang
 * @version 1.0
 * @since 20170805
 */

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

}

账户共有信息类

public class Account {
    /**
     * 每个人账户的共有属性
     */
    private String name;
    private String password;
    private int balance = 0;
    private boolean enable = true;//用来表示账户是否冻结,true代表正常,false代表已经被冻结

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

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

    public int getBalance() {
        return balance;
    }

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

    public boolean isEnable() {
        return enable;
    }

    public void setEnable(boolean enable) {
        this.enable = enable;
    }
}

主程序

import java.util.Scanner;

public class Atm {
    //new一个临时的Account对象,存放当前登录用户信息
    private Account CurrentAccount = new Account();
    //输入器
    Scanner input = new Scanner(System.in);
    private Bank bank = new Bank();
    private Account accounts[] = bank.getAccounts();

    /**
     * 主菜单
     */
    public void StartUp() {//启动入口
        int menul;
        System.out.println("1.开户");
        System.out.println("2.插卡");
        System.out.println("3.系统管理");
        System.out.println("4.退出系统");
        menul = input.nextInt();
        while (true) {
            switch (menul) {
            case 1:
                SaveUser();
                break;
            case 2:
                inSert();
                break;
            case 3:
                Admin();
                break;
            case 4:
                System.out.println("成功退出系统...");
                System.exit(0);
            default:
                System.out.println("指令错误,请重新输入!");
                StartUp();
                break;

            }
        }
    }

    /**
     * 开户
     */
    private void SaveUser() {
        Account account = new Account();
        System.out.println("请输入用户名:");
        String username = input.next();

        if (bank.checkByName(username)) {
            System.out.println("此用户名已存在,请重新输入!");
            SaveUser();// 重新调用开户方法
        } else {
            System.out.println("请输入密码:");
            String userpassword = input.next();
            account.setName(username);
            account.setPassword(userpassword);
        }
        boolean isSave = bank.Save(account);
        if (isSave) {
            System.out.println("开户成功!");
        } else {
            System.out.println("开户失败,请重新尝试!");
        }
        StartUp(); // 返回主菜单
    }

    /**
     * 用户登录
     */
    private void inSert() {
        // Account CurrentAccount = new Account();//这个CurrentAcount必须设置为全局对象,
        // 如果放在insert里面后面二级菜单的各项都要用到这个对象就会出现错误
        Account account = new Account();//一个临时Account对象,用于临时存放用户输入的账户名和密码
        System.out.println("请输入用户名:");
        String username = input.next();
        account.setName(username);
        System.out.println("请输入密码:");
        String userpassword = input.next();
        account.setPassword(userpassword);
        CurrentAccount = bank.checkByNameAndPassword(account);//将在用户的Account数组中的迭代结果传递给Current
        if (CurrentAccount != null) {
            if (CurrentAccount.isEnable()) {
                System.out.println("登录成功");
                SecondMenul();
            } else {
                System.out.println("该账户已被冻结!请管理人员解除冻结!");
                StartUp();
            }
        } else {
            System.out.println("用户名或密码错误!请检查后重新登录!");
            StartUp();
        }

    }

    /**
     * 用户登陆后的二级菜单
     */
    private void SecondMenul() {
        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 Menul = input.nextInt();
        while (true) {
            switch (Menul) {
            case 1:
                ShowMoney();
                SecondMenul();
                break;
            case 2:
                TakeMoney();
                SecondMenul();
                break;
            case 3:
                TransferMoney();
                SecondMenul();
                break;
            case 4:
                SaveMoney();
                SecondMenul();
                break;
            case 5:
                ChangePassword();
                StartUp();
                break;
            case 6:
                StartUp();
                break;
            case 7:
                System.out.println("成功退出系统...");
                System.exit(0);
            default:
                System.out.println("指令错误,请重新输入!");
                SecondMenul();
                break;
            }
        }

    }

    /**
     * 余额查询
     */
    private void ShowMoney() {
        System.out.println("当前余额为:" + CurrentAccount.getBalance());
    }

    /**
     * 取款
     */
    private void TakeMoney() {
        System.out.println("请输入取款金额:");
        int Money = input.nextInt();
        if (Money <= 0) {
            System.out.println("输入金额有误,请重新输入:");
            TakeMoney();
        } else {
            if (CurrentAccount.getBalance() < Money) {
                System.out.println("余额不足!");
            } else {
                CurrentAccount.setBalance(CurrentAccount.getBalance() - Money);
                System.out.println("取款成功,余额为" + CurrentAccount.getBalance());
            }
        }
    }

    /**
     * 存款
     */
    private void SaveMoney() {

        System.out.println("请输入存款金额:");
        int Money = input.nextInt();
        if (Money <= 0) {
            System.out.println("输入金额有误,请重新输入:");
            SaveMoney();
        } else {
            CurrentAccount.setBalance(Money);
            System.out.println("存款成功,余额为" + CurrentAccount.getBalance());
        }
    }

    /**
     * 转账
     */
    private void TransferMoney() {
        int Money;
        System.out.println("输入被转账人账号");
        String name = input.next();
        Account OtherAccount = bank.Search(name);
        System.out.println("输入转账金额:");
        Money = input.nextInt();
        if (OtherAccount == null) {
            System.out.println("用户名不存在,请检查后重新输入!");
            TransferMoney();
        }
        if (Money <= 0) {
            System.out.println("输入金额有误,请重新输入:");
            TransferMoney();
        } else {
            if (Money > CurrentAccount.getBalance()) {
                System.out.println("余额不足!");
            } else {
                CurrentAccount.setBalance(CurrentAccount.getBalance() - Money);
                OtherAccount.setBalance(OtherAccount.getBalance() + Money);
                System.out.println("转账成功,余额为" + CurrentAccount.getBalance());
            }
        }
    }

    /**
     * 修改密码
     */
    private void ChangePassword() {
        System.out.println("请输入原密码:");
        String OldPassword = input.next();
        String NewPassword;
        String ReNewPassword;
        if (CurrentAccount.getPassword().equals(OldPassword)) {
            System.out.println("请输入新密码:");
            NewPassword = input.next();
            System.out.println("请再次输入新密码:");
            ReNewPassword = input.next();
            while (!NewPassword.equals(ReNewPassword)) {
                System.out.println("两次输入不一致,重新输入:");
                System.out.println("请输入新密码:");
                NewPassword = input.next();
                System.out.println("请再次输入新密码:");
                ReNewPassword = input.next();
                if (ReNewPassword.equals(NewPassword)) {
                    break;
                }
            }
            CurrentAccount.setPassword(NewPassword);
            System.out.println("修改成功");
            System.out.println("请重新登录!");
        } else {
            System.out.println("原密码输入错误!请重新输入:");
            ChangePassword();
        }

    }

    /**
     * 管理员登录
     */

    private void Admin() {
        System.out.println("请输入管理员密码:");
        String Adminpassword = input.next();
        if (Adminpassword.equals("Admin")) {
            System.out.println("登录成功");
            AdminMenul();
        } else {
            System.out.println("密码错误!请检查后重新登录!");
            StartUp();
        }
    }

    /**
     * 系统管理菜单
     */
    private void AdminMenul() {

        System.out.println("1.显示所有账户");
        System.out.println("2.冻结账户");
        System.out.println("3.解冻账户");
        System.out.println("4.返回主菜单");
        System.out.println("5.退出系统");
        int menul = input.nextInt();
        switch (menul) {
        case 1:
            ShowAllAccount();
            AdminMenul();
            break;
        case 2:
            FreezeAccount();
            AdminMenul();
            break;
        case 3:
            UnfreezeAccount();
            AdminMenul();
            break;
        case 4:
            StartUp();
            break;
        case 5:
            System.out.println("成功退出系统...");
            System.exit(0);
            break;
        default :
            System.out.println("指令错误,请重新输入!");
            AdminMenul();
            break;
        }
    }

    /**
     * 显示所有冻结/正常的账户,因为两个冻结和解冻只是一个enable值的不同,因此这里传入一个参数既可以让两个都使用
     */
    private void ViewAllAccount(boolean enable) {
        System.out.println("账户名\t\t状态");
        for (int i = 0; i < accounts.length; i++) {
            if (accounts[i] != null && accounts[i].isEnable() == enable) {
                System.out.println(accounts[i].getName() + "\t\t"
                        + (accounts[i].isEnable() ? "正常" : "冻结"));
            }
        }
    }

    /**
     * 显示所有账户
     */
    private void ShowAllAccount() {
        System.out.println("账户名\t\t状态");
        for (int i = 0; i < accounts.length; i++) {
            if (accounts[i] != null) {
                System.out.println(accounts[i].getName() + "\t\t"
                        + (accounts[i].isEnable() ? "正常" : "冻结"));
            }
        }

    }

    /**
     * 冻结账户,先显示所有未被冻结的账户,然后输入要冻结的账户名
     */

    private void FreezeAccount() {
        ViewAllAccount(true);
        System.out.println("输入要冻结的账户名:");
        String username = input.next();
        Account account = bank.Search(username);//将寻找到的用户对象放入临时对象中
        if (account != null) {
            account.setEnable(false);//对临时账户的状态尽心修改,传入一个boolean类型的值,因为是临时对象指向的原对象数组,因此原对象数组也被修改了
            System.out.println("账户冻结成功!");
        } else {
            System.out.println("该用户不存在!");
    }
    }

    /**
     * 恢复账户,先显示所有已经被冻结的账户
     */

    private void UnfreezeAccount() {
        ViewAllAccount(false);
        System.out.println("输入要恢复的账户名:");
        String username = input.next();
        Account account = bank.Search(username);//将寻找到的用户对象放入临时对象中
        if (account != null) {
            account.setEnable(true);
            System.out.println("账户解冻成功!");
        } else {
            System.out.println("该用户不存在!");
        }

    }
}

对象数组处理的方法类


public class Bank {
    Scanner input = new Scanner(System.in);
    private Account accounts[] = new Account[50];

    /**
     * 为Atm调用Bank里面的Account对象数组提供一个方法
     */
    public Account[] getAccounts() {
        return accounts;
    }

    /**
     * 判断用户名是否存在
     */
    public boolean checkByName(String username) {
        for (Account account : accounts) {
            if (account != null && account.getName().equals(username)) {
                return true;// 已存在,返回true
            }
        }
        return false;// 不存在返回false
    }

    /**
     * 判断用户是否达到上限,没有则进行保存
     */
    public boolean Save(Account account) {
        for (int i = 0; i < accounts.length; i++) {
            if (accounts[i] == null) {
                accounts[i] = account;
                return true;
            }
        }
        return false;
    }

    /**
     * 用户登录时的检查方法 检查输入的账户密码 因为存在三种情况(成功,账户或密码错误,账户被冻结)
     * 而用来描述账户是否冻结用的是boolean,
     * 导致这里返回布尔类型的话是不够用,因此成功了直接返回对象,否则就返回null
     */
    //迭代对象数组
    public Account checkByNameAndPassword(Account account) {
        for (int i = 0; i < accounts.length; i++) {
            if (accounts[i] != null
                    && accounts[i].getName().equals(account.getName())
                    && accounts[i].getPassword().equals(account.getPassword())) {
                return accounts[i];
            }
        }
        return null;
    }

    /**
     * 根据用户名寻找账户并返回要寻找到的账户对象
     */
    //迭代对象数组
    public Account Search(String username) {
        for (int i = 0; i < accounts.length; i++) {
            if (accounts[i] != null && accounts[i].getName().equals(username)) {
                return accounts[i];
            }
        }
        return null;
    }

}

暑假第二个月留在学校参加院里的Java培训,也学了一个星期了,学长教的很认真,上周给我们讲了一个小项目,让我们写一个自助银行服务系统项目开发。对于我这超级渣渣而言,还是有点困难的,,不过学长还是给我们写了一些做一下示范。

真心得膜拜学长,一边给我们讲一边写代码,思路什么的完全不受干扰,突然间感觉自己真是……,之后好好花了时间了写,虽然慢不过总算完成了。

也学了一个星期了,感觉java没了指针却到处都是指针影子,特别是方法里面。有时候真的搞不懂为什么方法里面的值并没有返回也把对象数组改变了,想想学长说的指向联系一下指针。就清楚多了。还好之前上了c和c++面向对象的课,学java不那么吃力。

private void FreezeAccount() {
        ViewAllAccount(true);
        System.out.println("输入要冻结的账户名:");
        String username = input.next();
        Account account = bank.Search(username);//将寻找到的用户对象放入临时对象中
        if (account != null) {
            account.setEnable(false);//对临时账户的状态进行修改,传入一个boolean类型的值,因为临时对象指向的原对象数组,因此原对象数组也被修改了
            System.out.println("账户冻结成功!");
        } else {
            System.out.println("该用户不存在!");
    }
    }

写完的的最后真有点信心爆棚,第一次写这么多代码。虽然只是一个别人看都看上的小东西,迷糊迷糊进了计算机,才发现并不好学,一年时间荒废了也没学到什么,看着身边的大神一个一个的,唉,好好努力咯!

发布了15 篇原创文章 · 获赞 8 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览