【问题标题】:How to create multiple accounts with user input using class constructor如何使用类构造函数通过用户输入创建多个帐户
【发布时间】:2020-11-10 18:36:23
【问题描述】:

我在 java 中创建了这个银行帐户类构造函数,它可以创建任意数量的帐户。这是我的 java 课程作业的一部分。但是,我必须手动指定帐户的每个属性(帐户 ID 和余额)。 我想做的是让用户参与进来。例如,如果用户想创建一个新帐户,则应提示他们。如果他们回答是,他们应该能够设置帐号(奇怪?我知道)和账户余额。然后程序应该使用输入为他们创建帐户。 我已经有了检查账户余额、进行存款或取款的选项,这些选项按预期工作,但是,我希望它适用于创建的多个账户。例如,提示用户是否要创建新帐户,如果是,请指定帐号和余额。如果他们想检查现有帐户的状态,程序应该为他们提供他们想要获取信息的帐户的选项。然后程序应该通过显示我已经创建的提示的例行行为。 如果代码允许用户一次创建多个帐户,那也很好。例如:

  • 在 main 中,创建一个包含 10 个 Account 对象的数组,ID 为 0 - 9,每个起始余额为 100 美元。
  • 提示用户输入 ID。
  • 提示用户提款或存款(或两者)的金额。
  • 修改该帐户,然后打印其余额。

这是我现有的类构造函数部分:

// Bank account class creator 

public class Account {
    // Create attributes for the Account class
    private int id; 
    private double balance;
    private double withdraw;
    private double deposit;
    private static double annualRate;
    private static String dateCreated;
    
    // Create default constructor
    Account() {
        id = 0;
        balance = 0;
        java.util.Date date = new java.util.Date();
        dateCreated = date.toString();
        annualRate = 4.5;
    }
    // Create constructor which allows input values
    Account(int accountId, double accountBalance) {
        this.id = accountId;
        this.balance = accountBalance;
    }
    // Getter for account ID
    int getId() {
        return this.id;
    }
    // Getter for account balance
    double getBalance() {
        return this.balance;
    }
    // Getter for annual interest rate
    double getAnnualRate() {
        return this.annualRate;
    }
    // Getter for date
    String getDate() {
        return this.dateCreated;
    }
    // Getter for monthly interest amount
    double getMonthlyInterest() {
        return  this.balance * this.annualRate / 1200;
    }
    // Getter for annual interest amount
    double getAnnualInterest() {
        return  this.balance * this.annualRate / 100;
    }
    // Validate deposit (filter negative numbers out)
    double deposit(double depositAmount) {
        if (depositAmount > 0) {
            this.balance = this.balance + depositAmount;
            return this.balance;
        }
        else return 0;
    }
    // Validate withdraw (filter negative numbers out)
    double withdraw(double withdrawAmount) {
        if (withdrawAmount > 0) {
            this.balance = this.balance - withdrawAmount;
            return this.balance;
        }
        else return 0;
    }
    // Validate ID (filter negative numbers out)
    void setId(int accountId) {
        if (accountId > 0)
            this.id = accountId;
        else
            this.id = 0;    
    }
    // Validate interest rate (filter negative numbers out)
    void setAnnualRate(double currentInterest) {
        if (currentInterest > 0)
            this.annualRate = currentInterest;
        else
            this.annualRate = 0;    
    }
    // Setter for balance
    void setBalance() {
         this.balance = this.balance + this.deposit - this.withdraw;
    }

}

以下是使用构造函数创建账户的主要代码:

// Bank account tester 

import java.util.Scanner; // import java Scanner utility
public class TestAccount {

    public static void main(String[] args) {
        Account account1 = new Account();           // Create a new account
        Scanner input = new Scanner(System.in);     // Create a Scanner object
        
        System.out.println("1. Show balance");      
        System.out.println("2. Deposit funds");
        System.out.println("3. Withdraw funds");
        System.out.println("4. Exit");
        System.out.println("");
        System.out.print("Enter choice: ");
        
        int userInput = input.nextInt();            // Get input from the user
        
        while (userInput != 4) {                    // Start of loop to check for exit condition
    
            if(userInput == 1) {
                // Display account balance, monthly interest and current date
                System.out.printf("Balance: $%.2f\n" , account1.getBalance());
                System.out.printf("Monthly interest $%.2f\n" , account1.getMonthlyInterest());
                System.out.println("Date created: " + account1.getDate());
            }
                
            else if (userInput == 2) {
                // Deposit funds to account
                System.out.println("Enter amount to deposit:");
                double inputAmount = input.nextDouble();
                account1.deposit(inputAmount);
            }
            else if (userInput == 3) {
                // Withdraw funds from account
                System.out.println("Enter amount to withdraw:");
                double inputAmount = input.nextDouble();
                account1.withdraw(inputAmount);
            } else
                // Prompt the user to input option choice if they input invalid option
                System.out.println("That is not a valid choice. Please enter a valid choice; ");
            // Continue displaying the options until the user's option is to exit 
            System.out.println("");
            System.out.println("1. Show balance");
            System.out.println("2. Deposit funds");
            System.out.println("3. Withdraw funds");
            System.out.println("4. Exit");
            userInput = input.nextInt();    // Continue getting inputs until user chooses to exit
            
        }
        input.close(); // close the input method
        // Display an exit message when the user chooses to exit
        System.out.println("Thank you for using our banking software ");
    }
}

如果您能指出我的代码中的任何错误或冗余,例如不正确地使用静态或冗余“this”,我也将不胜感激。关键字。

【问题讨论】:

    标签: java arrays class


    【解决方案1】:

    关于可能的重构的几件事:

    帐户中静态使用无效

    关键字 static 表示特定成员属于一个类型本身,而不是属于该类型的一个实例。 块引用

    annualRatedateCreated 不应是静态的,因为这意味着这些值将在 Account 类的所有实例之间共享。

    可以删除重复的程序选项打印代码:

    private void printHelp() {
        System.out.println("1. Show balance");
        System.out.println("2. Deposit funds");
        System.out.println("3. Withdraw funds");
        System.out.println("4. Exit");
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多