我创建了一个简单的银行程序。该程序要求用户的名称和起始余额。从那里,用户可以做4件事,检查余额,增加资金,转移资金和退出程序。Check Balance只需返回用户的姓名和帐户中剩余的资金。增加资金,要求用户在他的帐户中存入一个金额。转帐资金要求用户从他的帐户中扣除一笔款项。这是一个简单的程序,可以练习您对对象的理解以及如何操作它们的字段。您可以尝试重写一种方法来简化此程序的一个功能。
我发布这段代码是为了让人们对我的程序是否遵循OOP标准以及对其编写方式的任何改进征求人们的意见。我是自学Java的,我喜欢任何反馈,这样我就可以从创建这个程序中学习。
import java.util.Scanner;
public class Main {
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
boolean quit = false;
int choice;
String accountName;
double startBalance;
System.out.printf("%24s\n","BankApp v1.0");
System.out.println("=====================================");
System.out.println("Please enter your details below.");
System.out.println("Account Name: ");
accountName = scanner.nextLine();
System.out.println("Starting Balance: ");
startBalance = scanner.nextDouble();
Account account = new Account(accountName,startBalance);
while(!quit){
printMainMenu();
choice = scanner.nextInt();
switch(choice){
case 1:
System.out.printf("Account Name: %s\nAccount Balance: $%.2f\n",account.getAccountName(),
account.getAccountBal());
break;
case 2:
System.out.println("Enter amount to be added: ");
account.addFunds(scanner.nextDouble());
break;
case 3:
System.out.println("Enter amount to be transferred: ");
account.transferFunds(scanner.nextDouble());
break;
case 4:
quit = true;
break;
default:
System.out.println("Invalid choice.");
break;
}
}
scanner.close();
}
public static void printMainMenu(){
System.out.printf("%24s\n" +
"=====================================\n" +
"Please select an option:\n" +
"1 - Check Balance\n" +
"2 - Add Funds\n" +
"3 - Transfer Funds\n" +
"4 - Exit the program\n" +
"=====================================\n" +
"Choice: ","BankApp v1.0");
}
}
这是帐户类代码。
public class Account {
private String accountName;
private double accountBal;
public Account(String accountName, double accountBal) {
if(accountBal < 0) {
System.out.println("Starting balance cannot be less than zero.\nBalance set to $0.00");
}else {
this.accountName = accountName;
this.accountBal = accountBal;
System.out.println("Account initialized.\nBalance set to $" + this.accountBal);
}
}
public String getAccountName() {
return accountName;
}
public double getAccountBal() {
return accountBal;
}
public void transferFunds(double withdrawal){
if(withdrawal > this.accountBal){
System.out.printf("Unable to transfer $%.2f. Balance is insufficient.\n",withdrawal);
}else if(withdrawal < 0){
System.out.println("Transfer amount must be greater than zero. Transfer failed.");
}else{
this.accountBal -= withdrawal;
System.out.printf("Transfer of $%.2f successful. Your new balance is $%.2f.\n",withdrawal,this.accountBal);
}
}
public void addFunds(double deposit){
if(deposit < 0){
System.out.println("Amount deposited must be greater than zero.");
}else {
this.accountBal += deposit;
System.out.printf("Deposit of $%.2f successful. Your new balance is $%.2f.\n",deposit,this.accountBal);
}
}
}
发布于 2020-05-15 08:44:21
public class Main
可以有一个更好的名称,也许可以想到public class ExerciseObjectManipulation
。以后,您可以在SCM中更容易地找到这样的类。Account.accountName
和Account.accountBal
。这使您有机会将Account.accountBal
正确命名为Account.balance
(也可避免在名称中使用缩写)。getAccountName
和getAccountBal
printMainMenu()
来完成这个任务了?!Account
提供一个构造函数,以创建没有余额的帐户。System.out
中是很好的(即使向System.error
写入更合适,但正确的方法是抛出一个Exception
!)现在可以创建一个负平衡的Account
,即使不是所有属性都设置好了--这太糟糕了,您创建了一个未完成的对象!。
public Account(String name, double balance) {
if(accountBal < 0) {
throw new IllegalArgumentException("Starting balance cannot be less than zero");
}
this.name = name;
this.balance = balance;
}
transferFunds()
,请参阅addFunds()
if(deposit < 0){
System.out.println("Amount deposited must be greater than zero.");
}
deposit <= 0
或cannot be less than zero.
在这里也一样:if(withdrawal < 0)
发布于 2020-05-09 13:55:37
我可以给出的一个建议是,从Account
类中的方法中抛出异常或返回true/false,以便客户机(在您的例子中是main类)能够采取必要的操作。我在这里看到的问题是,Account
类会打印一些显示给用户的文本。显然,这不是Account
类的工作。
其次,在您的主要方法中有太多的代码行,这使我认为您应该创建一个类/方法,并相应地发布工作。
https://codereview.stackexchange.com/questions/241997
复制相似问题