//我是一名韩国留学生 大一这学期修JAVA 这个是本星期的作业 由于太菜 无法把两个账户之间互相转账 和利息利率写出来 谢谢帮助我的各位!!
import java.text.DecimalFormat;
import java.util.Scanner;
class BankAccount
{
private int balance;
public BankAccount(int initial_amount) {
if (initial_amount >= 0)
balance = initial_amount;
else
balance = 0;
}
public int getBalance() {
return balance;
}
public boolean deposit(int amount) {
boolean result = false;
if (amount < 0)
System.out.println("invalid deposit amount");
else {
balance = balance + amount;
result = true;
}
return result;
}
public boolean withdraw(int amount) {
boolean result = false;
if (amount < 0)
System.out.println("invalid withdraw amount");
else if (amount > balance)
System.out.println("not enough balance");
else {
balance = balance - amount;
result = true;
}
return result;
}
}
class BankReader
{
private String input_line = "";
private Scanner scan;
public BankReader() {
scan = new Scanner(System.in); // Reading from System.in
}
public char readCommand(String message) {
System.out.print(message);
input_line = scan.nextLine().toUpperCase();
return input_line.charAt(0);
}
public int readAmount()
{
int answer = 0;
String s = input_line.substring(1, input_line.length());
if(s.length() > 0) {
//double dollars_cents = new Double(s).doubleValue();
double dollars_cents = Double.parseDouble(s);
answer = (int)(dollars_cents*100);
} else
System.out.println("invalid command - input amount: 0");
return answer;
}
}
class BankWriter
{
private BankAccount bank;
private String last_transaction = "";
public BankWriter(BankAccount b) {
bank = b;
}
public String unconvert(int i) {
return new DecimalFormat("0.00").format(i/100.0);
}
public void setTransaction(String message, int amount)
{
last_transaction = message + " " + unconvert(amount);
System.out.println("transaction: " + last_transaction);
}
public void setTransaction(String message)
{
last_transaction = message;
System.out.println("transaction: " + last_transaction);
}
}
class AccountController
{
private BankReader reader; // input view
private BankAccount primary_account, secondary_account, account;
private BankWriter primary_writer, secondary_writer, writer;
public AccountController (BankReader r, BankAccount a1,BankWriter w1, BankAccount a2, BankWriter w2)
{
reader = r;
primary_account = a1;
primary_writer = w1;
secondary_account = a2;
secondary_writer = w2;
account = primary_account;
writer = primary_writer;
}
public void resetAccount (BankAccount new_account,BankWriter new_writer) {
account = new_account;
writer = new_writer;
}
public void processTransactions()
{
char command = reader.readCommand("Commands (P/S/D/W/T/I/Q): ");
switch (command) {
case 'P':
resetAccount(primary_account, primary_writer);
break;
case 'S':
resetAccount(secondary_account, secondary_writer);
break;
case 'Q':
System.out.println("Quit");
return;
case 'D':
{
int amount = reader.readAmount();
if (account.deposit(amount)) writer.setTransaction("deposit $", amount);
else writer.setTransaction("deposit error ", amount);
break;
}
case 'W':
{
int amount = reader.readAmount();
if (account.withdraw(amount)) writer.setTransaction("withdraw $", amount);
else writer.setTransaction("withdraw error ", amount);
break;
}
case 'T':
// 'T 금액', 활성 계좌에서 비활성 계좌로 금액만큼 이체
{
// 코드를 작성하세요.
int amount= reader.readAmount();
if(amount > 0 && account==primary_account
&&primary_account.withdraw(amount)
&&secondary_account.deposit(amount)){
writer.setTransaction("transfer $", amount);
}else{
writer.setTransaction("transfer error");
}
if(amount > 0 && account==secondary_account
&&secondary_account.withdraw(amount)
&&primary_account.deposit(amount)){
writer.setTransaction("transfer $", amount);
}else{
writer.setTransaction("transfer error");
}
break;
}
case 'I':
// 'I 이율', 활성 계좌의 금액을 이율만큼 증가
{
// 코드를 작성하세요.
break;
}
default:
writer.setTransaction("invalid commpand: " + command);
}
// 모든 계좌의 정보를 출력합니다.
System.out.println("=======================");
System.out.println("== currently active : " + ((account == primary_account) ? "primary" : "secondary"));
System.out.println("== primary account : " + primary_writer.unconvert(primary_account.getBalance()));
System.out.println("== secondary account : " + secondary_writer.unconvert(secondary_account.getBalance()));
System.out.println("=======================");
this.processTransactions();
}
}
public class Main {
public static void main(String[] args) {
BankReader reader = new BankReader();
BankAccount primary_account = new BankAccount(0);
BankWriter primary_writer = new BankWriter(primary_account);
BankAccount secondary_account = new BankAccount(0);
BankWriter secondary_writer = new BankWriter(secondary_account);
AccountController controller = new AccountController(reader,
primary_account, primary_writer, secondary_account,
secondary_writer);
controller.processTransactions();
}
}
JAVA银行账户问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- ChatGPTᴼᴾᴱᴺᴬᴵ 2023-11-01 15:50关注
所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。
该回答引用ChatGPT-3.5,仅为您提供参考,不保证完全正确
您好!看起来您正在编写一个Java程序来模拟银行账户和交易。您已经完成了基本的账户操作,但您需要添加转账和利息计算的功能。我将帮助您添加这些功能。- 转账功能('T'命令):
在转账部分,您需要根据所选的活动账户(primary_account或secondary_account)进行转账操作。根据您的代码,可以这样实现:
case 'T': int amount = reader.readAmount(); if (amount > 0) { if (account == primary_account && primary_account.withdraw(amount) && secondary_account.deposit(amount)) { writer.setTransaction("transfer $", amount); } else if (account == secondary_account && secondary_account.withdraw(amount) && primary_account.deposit(amount)) { writer.setTransaction("transfer $", amount); } else { writer.setTransaction("transfer error"); } } else { writer.setTransaction("invalid transfer amount: " + amount); } break;
- 利息计算功能('I'命令):
利息计算需要一个利率,您可以将其添加到您的银行账户类中,并通过命令来设置它。首先,您需要在BankAccount类中添加一个利率字段和相应的方法:
private double interestRate; public void setInterestRate(double rate) { if (rate >= 0) { interestRate = rate; } } public void applyInterest() { int interestAmount = (int) (balance * interestRate); balance += interestAmount; }
然后,在AccountController类的'I'命令部分,您可以设置利率并应用利息:
case 'I': double rate = reader.readAmount() / 100.0; // 读取利率,例如输入5代表5% if (rate >= 0) { account.setInterestRate(rate); account.applyInterest(); writer.setTransaction("interest applied: " + rate * 100 + "%"); } else { writer.setTransaction("invalid interest rate: " + rate * 100 + "%"); } break;
现在,您的程序应该能够处理转账和利息计算了。希望这有所帮助!如果您有其他问题,欢迎继续提问。
该回答引用NewBing,仅为您提供参考,不保证完全正确
超出输入上限(<4000字)
该回答引用文心大模型3.5,仅为您提供参考,不保证完全正确
超出输入上限(<2000字)
该回答引用讯飞星火认知大模型,仅为您提供参考,不保证完全正确
为了实现两个账户之间互相转账和利息利率,你需要在BankAccount
类中添加一个方法来计算利息,并在AccountController
类的processTransactions
方法中调用这个方法。以下是修改后的代码:- 在
BankAccount
类中添加一个计算利息的方法calculateInterest
:
public double calculateInterest(double rate) { return balance * rate; }
- 在
AccountController
类的processTransactions
方法中调用calculateInterest
方法:
case 'I': { // 读取利率 double interestRate = reader.readAmount() / 100.0; // 计算主账户的利息并存入主账户 primary_account.deposit((int) (primary_account.calculateInterest(interestRate))); // 计算次账户的利息并存入次账户 secondary_account.deposit((int) (secondary_account.calculateInterest(interestRate))); writer.setTransaction("interest calculated and deposited"); break; }
现在,当你输入命令
I
时,程序将计算主账户和次账户的利息并将其存入相应的账户。注意,这里假设利率是以百分比形式输入的,所以在读取利率时需要除以100。
该回答引用通义千问大模型,仅为您提供参考,不保证完全正确
超出输入上限(<5500字)本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - 转账功能('T'命令):
悬赏问题
- ¥15 wpf datagrid如何实现多层表头
- ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
- ¥20 网站后台使用极速模式非常的卡
- ¥20 Keil uVision5创建project没反应
- ¥15 mmseqs内存报错
- ¥15 vika文档如何与obsidian同步
- ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
- ¥15 陆空双模式无人机飞控设置
- ¥15 sentaurus lithography
- ¥100 求抖音ck号 或者提ck教程