如何制作一条只在从非活动状态返回后显示的消息



我正在开发一个java程序,该程序基本上模拟银行账户进行存款、取款、显示余额等操作。我几乎完成了所有操作。我只是被困在一个有待完成的部分。该程序询问用户起始余额和利率是多少。我唯一缺少的是,当余额低于25美元时,我需要显示一条消息,表明账户处于非活动状态,这就完成了。现在我需要一条消息,说这个账户是活跃的,但只有一次余额低于25,然后又超过25。我尝试过的每一种方式都会显示活动,每次余额超过25,我只需要在从非活动状态回来后显示一次,但无法管理如何做到这一点。任何想法都将不胜感激,这是我的代码:

///BankDemo class
import java.util.Scanner;
public class BankDemo {

@SuppressWarnings("unlikely-arg-type")

public static void main(String[] args) {

Scanner keyboard = new Scanner(System.in);

float startingBalance;
float interestRate;
String userInput;

System.out.print("Enter beginning balance :$");
startingBalance = keyboard.nextFloat();

System.out.print("Enter interest rate(whole number) :%");
interestRate = keyboard.nextFloat();

float bal = startingBalance;
float rate = interestRate;

BankAccount ba = new BankAccount(startingBalance, interestRate);
SavingsAccount sv = new SavingsAccount(bal, rate);

while(startingBalance > -1) {
System.out.println("Enter D for deposit" + "nEnter W to Withdraw" + "nEnter B for Balance" + 
"nEnter M for Monthly Process" + "nEnter E to Exit");
userInput = keyboard.next().toLowerCase();

if("d".equals(userInput)) {
ba.deposit();
} else if("w".equals(userInput)) {
ba.withdraw();
} else if("b".equals(userInput)) {
ba.totalBalance();
} else if("m".equals(userInput)) {
ba.monthlyProcess();
} else {
System.out.print("Error, option not validn");
}
}
}
}
///BankAccount class
import java.util.Scanner;
public class BankAccount {
protected float balance;
protected float numDeposits;
protected float numWithdrawals;
protected float annualRate;
protected float monthlyServCharg;
float charge = 1;

public BankAccount(float startingBalance, float interestRate) {
balance = startingBalance;
annualRate = interestRate /= 100.0;
}
public void deposit() {
float valueD;
Scanner keyboard = new Scanner(System.in);

System.out.print("Enter the amount you want to deposit :$");
valueD = keyboard.nextFloat();
if(valueD < 0) {
System.out.println("Error: Must enter positive valuen");
}
balance += valueD;
numDeposits++;
}
public void withdraw() {
float valueW;
Scanner keyboard = new Scanner(System.in);

System.out.print("Enter the amount you want to withdraw :$");
valueW = keyboard.nextFloat();
if(valueW < 0) {
System.out.println("Error: Must enter positive valuen");
}
balance -= valueW;
numWithdrawals++;
if(balance < 25) {
System.out.print("Your balance is less than minimum balance. Your account is now INACTIVEn");
}
if(numWithdrawals > 4) {
balance --;
System.out.print("You have exceeded monthly limit of withdrawals. Fee of $1 chargedn");
}
}
public void totalBalance() {
System.out.printf("Your Balance is: %.2fn", balance);
}
public void calcInterest() {
float monRate = annualRate / 12;
float monInt = balance * monRate;
balance += monInt;
}
public void monthlyProcess() {
calcInterest();
balance -= monthlyServCharg;
numWithdrawals = 0;
numDeposits = 0;
monthlyServCharg = 0;
System.out.printf("Your Balance after Monthly process is: %.2fn", balance);
}

public void exit() {
totalBalance();
System.out.print("nThank you. Bye");
}
}
///SavingsAccount class
public class SavingsAccount extends BankAccount {
private boolean active;

public SavingsAccount(float bal, float rate) {
super(bal, rate);
if(bal < 25)
active = false;
else
active = true;
}
public void withdraw() {
if(active)
super.withdraw();
}
public void deposit(float amount) {
if(!active) {
if(amount + balance < 25)
return;
}
super.deposit();
}
public void withdrawals() {
if(numWithdrawals > 4) {
monthlyServCharg += numWithdrawals - 4;
}
if(balance < 25)
active = false;
}
}

只有当active状态发生变化时,即当您停用帐户时,才会显示消息:

if(balance < 25 && active) {
System.out.print("Your balance is less than minimum balance. Your account is now INACTIVEn"); 
active = false;      
}

当你再次激活它时:

if( balance >= 25 && !active) {
//print message here
active = true;      
}

为了在BankAccount中实现这一点,它已经需要SavingsAccount具有的active标志(当时子类不需要它(。如果帐户未激活,您可能还想禁止提款。

最新更新