Java课程设计——设计一个银行系统

Java课程设计——设计一个银行系统

1、题目要求

设计 Account1 类,包含:

■ 一个名为 id 的 int 类型的私有数据域(默认值为 0),长度为 6 位。

■ 一个名为 balance 的 double 类型的私有数据域(默认值为0)。

■ 一个名为 annualInterestRate 的 double 类型的私有数据域存储当前利率(默认值为 0)。 假设所有的账户都有相同的利率。

■ 一个名为 dateCreated 的 Date 类型的私有数据域存储账户的开户日期。

■ 一个能创建默认账户的无参构造方法。

■ 一个能创建带特定 id 和初始余额的构造方法,初始余额不能为负数。

■ id、balance 和 annualInterestRate 的访问器和修改器。

■ dateCreated 的访问器。

■ 一个名为 getMonthlyInterestRate 的方法返回月利率。

■ 一个名为 withDraw 的方法从账户提取特定金额。

■ 一个名为 deposit 的方法向账户存人特定金额。

■ double 类型的数据域保留 2 位小数。

■ 成员方法和数据域应进行基本的合理性检查。

设计测试类 ATMMachine1:

创建一个有 100 个账户的数组,其 id 为 0,1,2,…99, 并初始化收支为 1000 美元。

主菜单如下:

Main menu

1: check balance

2: withdraw

3: deposit

4: exit

2、分析过程

根据题目要求,我们首先需要创建一个Account1类,其中包含一个名为id的int类型的私有数据域;一个名为balance的double类型的私有数据域;一个名为annualInterestRated的double类型的私有数据域;一个名为dateCreated的Date类型的数据域;一个无参构造方法和一个带特定id和余额的构造方法,设置的余额不能为负数,所以我自定义了一个异常,当余额为负数的时候,会抛出异常;其中还包含了id、balance、annualInterestRated的访问器和修改器,dateCreated的访问器,一个名为getMonthlyInterestRate的方法,用于获取月利率,一个名为 withDraw 的方法从账户提取特定金额,一个名为 deposit 的方法向账户存人特定金额。题目要求double类型的数据域保留两位小数,我这里创建BigDecimal对象,调用其中的setScale()方法使其转化为两位小数进行输出。由此我将Account1类创建完毕,然后进行测试。

测试类:

首先我创建了一个名为numList的int类型的数组,里面按顺序存放0到99的数字,其目的是为了判断用户输入的id是否在0到99中,如果在的话,则用户登录成功,否则提示用户输入一个正确的id。同时创建一个名为accounts类型为Account1的列表,里面存放id从0到99,余额为1000的Account1的对象。在这里我想的是可以进行无数次的使用的测试类,所以使用while(true)语句,用户进行输入id符合要求,进行菜单展示,用户可以输入1、2、3、4,分别进行查询余额、取款、存款和退出功能,每一个操作中,我先从列表中获取输入id对应的账户,在查询余额时,我直接通过账户中的getBalance()方法获取余额、取款时,通过账户中的withDraw()方法从余额中取出、取款时,通过账户中的deposit()方法向余额存入、退出时我设置isLogin变量为false.

相关函数:

displayMenu():展示菜单

processMenu():执行1.创建账户 2.取款 3.存款 4.退出相关的操作

withDraw():取款 deposit():存款

3、 UML类图

Java课程设计——设计一个银行系统_第1张图片
Java课程设计——设计一个银行系统_第2张图片
​ 图1 银行系统UML图

4、系统测试

输入数据 id=66 存款200 取款400
预期输出 账户余额为800
实际输出
Java课程设计——设计一个银行系统_第3张图片
Java课程设计——设计一个银行系统_第4张图片
Java课程设计——设计一个银行系统_第5张图片

5、代码展示

Account1类

package version1;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;

/**
 * @Auther: paradise
 * @Date: 2021/6/24 - 06 - 24 - 15:46
 */
public class Account1 {
    private int id = 0;
    private double balance = 0;
    private double annualInterestRate = 0;
    private Date dateCreated;

    /**Constructing a parameter-less construction method*/
    public Account1() {
    }

    /**Constructing a construction method with special id and balance*/
    public Account1(int id, double balance) throws InvalidBalanceException{
        this.id = id;
        setBalance(balance);
    }

    /**Return the id*/
    public int getId() {
        return id;
    }

    /**Set the id*/
    public void setId(int id){
        this.id = id;
    }

    /**Return the balance*/
    public double getBalance() {
        BigDecimal bigDecimal = new BigDecimal(balance).setScale(2, RoundingMode.HALF_UP);
        return bigDecimal.doubleValue();
    }

    /**Set the balance*/
    public void setBalance(double newBalance) throws InvalidBalanceException{
        if (newBalance >= 0){
            balance = newBalance;
        }
        else{
            throw new InvalidBalanceException(newBalance);
        }
    }

    /**Return the annual Interest Rate*/
    public double getAnnualInterestRate() {
        BigDecimal bigDecimal = new BigDecimal(annualInterestRate / 100).setScale(2, RoundingMode.HALF_UP);
        return bigDecimal.doubleValue();
    }

    /**Set the annual interest rate*/
    public void setAnnualInterestRate(double annualInterestRate) {
        this.annualInterestRate = annualInterestRate;
    }

    /**Return the date*/
    public Date getDateCreated() {
        dateCreated = new Date();
        return dateCreated;
    }

    /**Return the monthly interest rate*/
    public double getMonthlyInterestRate(){
        BigDecimal bigDecimal = new BigDecimal(annualInterestRate / 1200).setScale(2, RoundingMode.HALF_UP);
        return bigDecimal.doubleValue();
    }

    /**Return the monthly interest*/
    public double getMonthlyInterest()
    {
        return balance * getMonthlyInterestRate();
    }

    /**Enter the number of money you withdraw*/
    public void withDraw(double withdrawalAmount) throws InvalidBalanceException {
        balance -= withdrawalAmount;
    }

    /**Enter the number of money you deposit*/
    public void deposit(double depositAmount) throws InvalidBalanceException {
        balance += depositAmount;
    }
}

InvalidBalanceException类

package version1;

/**
 * @Auther: paradise
 * @Date: 2021/6/24 - 06 - 24 - 15:47
 */
public class InvalidBalanceException extends Exception{
    private double balance;

    /**Construct an exception*/
    public InvalidBalanceException(double balance){
        super("Invalid balance " + balance);
        this.balance = balance;
    }

    public double getBalance(){
        return balance;
    }
}

ATMMachine1类

package version1;

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

/**
 * @Auther: paradise
 * @Date: 2021/6/24 - 06 - 24 - 15:48
 */
public class ATMMachine1 {
    private static Scanner scanner;
    private static boolean isLogin = false;
    private static ArrayList<Account1> accounts = new ArrayList<Account1>();

    /**Display the menu*/
    public static void displayMenu(){
        System.out.print("\nMain menu\n" + "1: check balance\n" +  "2: withdraw\n" + "3: deposit\n" + "4: exit\n");
        System.out.print("Enter a choice: ");
    }

    /**Display the process menu*/
    public static void processMenu(int id, int command) throws InvalidBalanceException {
        switch (command) {
            case 1:
                System.out.print("The balance is " + accounts.get(id).getBalance() + "\n" );
                break;
            case 2:
                System.out.print("Enter an amount to withdraw: ");
                double withdrawMoney = scanner.nextDouble();
                accounts.get(id).withDraw(withdrawMoney);
                break;
            case 3:
                System.out.print("Enter an amount to deposit:" );
                double depositMoney = scanner.nextDouble();
                accounts.get(id).deposit(depositMoney);
                break;
            case 4:
                isLogin = false;
                break;
            default:
                System.out.println("please enter a right command:");
                break;
        }
    }

    //这是一个main方法,是程序的入口
    public static void main(String[] args) throws InvalidBalanceException {
        int[] numList = new int[100];
        for(int i = 0; i < numList.length; i++){
            numList[i] = i;
        }

        for(int i = 0; i < numList.length; i++){
            Account1 account = new Account1(i, 1000);
            accounts.add(account);
        }

        while (true) {
            System.out.print("Enter an id: ");
            Scanner input = new Scanner(System.in);
            int id = input.nextInt();
            for (int num : numList) {
                if (id == num) {
                    isLogin = true;
                }
            }
            if (!isLogin) {
                System.out.println("Please enter a correct id: ");
            }
            while (isLogin) {
                displayMenu();
                scanner = new Scanner(System.in);
                int command = scanner.nextInt();
                processMenu(id, command);
            }
        }
    }
}

你可能感兴趣的:(课程设计,银行系统,java,开发语言)