Я пытаюсь создать банковскую систему (объектно-ориентированную), которая может хранить/хранить информацию учетной записи, которую пользователь должен будет ввести. Когда учетная запись создана, ее можно найти/найти, используя номер учетной записи для снятия, сдачи на хранение, просмотра транзакций и удаления.
Проблема, с которой я столкнулся, - это раздел транзакции. Для каждой учетной записи вы должны иметь возможность хранить только последние 6 tranactions в порядке возрастания, и это должно быть напечатано. Не могли бы вы посоветовать мне, в каких точках я должен искать.
class BankAccount{
private int accountNumber;
private String holderName;
private String holderAddress;
private String openDate;
private double balance;
private double[] transactions;
private String[] transactionsSummary;
private int numOfTransactions;
private static int noOfAccounts=0;
public String getAccountInfo(){
return "Account number: " + accountNumber + "\nCustomer Name: " + holderName + "\nHolder Address: " + holderAddress + "\nOpen Date: " + openDate + "\nBalance:" + balance +"\n";
}
public String getTransactionInfo(int n)
{
String transaction = transactionsSummary[n];
if (transaction == null) {
return "No transaction exists with that number.";
}
else {
return transaction;
}
}
public BankAccount(String abc, double xyz, String address, String open){
holderName = abc;
balance = xyz;
holderAddress = address;
openDate = open;
noOfAccounts ++;
accountNumber = noOfAccounts;
transactions = new double[100];
transactionsSummary = new String[100];
transactions[0] = balance;
transactionsSummary[0] = "A balance of : $" + Double.toString(balance) + " was deposited.";
numOfTransactions = 1;
}
public int getAccountNum(){
return accountNumber;
}
public int getNumberOfTransactions() {
return numOfTransactions;
}
public void deposit(double amount){
if (amount<=0) {
System.out.println("Amount to be deposited should be positive");
} else {
balance = balance + amount;
transactions[numOfTransactions] = amount;
transactionsSummary[numOfTransactions] = "$" + Double.toString(amount) + " was deposited.";
numOfTransactions++;
}
}
public void withdraw(double amount)
{
if (amount<=0){
System.out.println("Amount to be withdrawn should be positive");
}
else
{
if (balance < amount) {
System.out.println("Insufficient balance");
} else {
balance = balance - amount;
transactions[numOfTransactions] = amount;
transactionsSummary[numOfTransactions] = "$" + Double.toString(amount) + " was withdrawn.";
numOfTransactions++;
}
}
}
}//end of class
class BankAccount{
private int accountNumber;
private String holderName;
private String holderAddress;
private String openDate;
private double balance;
private double[] transactions;
private String[] transactionsSummary;
private int numOfTransactions;
private static int noOfAccounts=0;
public String getAccountInfo(){
return "Account number: " + accountNumber + "\nCustomer Name: " + holderName + "\nHolder Address: " + holderAddress + "\nOpen Date: " + openDate + "\nBalance:" + balance +"\n";
}
public String getTransactionInfo(int n)
{
String transaction = transactionsSummary[n];
if (transaction == null) {
return "No transaction exists with that number.";
}
else {
return transaction;
}
}
public BankAccount(String abc, double xyz, String address, String open){
holderName = abc;
balance = xyz;
holderAddress = address;
openDate = open;
noOfAccounts ++;
accountNumber = noOfAccounts;
transactions = new double[100];
transactionsSummary = new String[100];
transactions[0] = balance;
transactionsSummary[0] = "A balance of : $" + Double.toString(balance) + " was deposited.";
numOfTransactions = 1;
}
public int getAccountNum(){
return accountNumber;
}
public int getNumberOfTransactions() {
return numOfTransactions;
}
public void deposit(double amount){
if (amount<=0) {
System.out.println("Amount to be deposited should be positive");
} else {
balance = balance + amount;
transactions[numOfTransactions] = amount;
transactionsSummary[numOfTransactions] = "$" + Double.toString(amount) + " was deposited.";
numOfTransactions++;
}
}
public void withdraw(double amount)
{
if (amount<=0){
System.out.println("Amount to be withdrawn should be positive");
}
else
{
if (balance < amount) {
System.out.println("Insufficient balance");
} else {
balance = balance - amount;
transactions[numOfTransactions] = amount;
transactionsSummary[numOfTransactions] = "$" + Double.toString(amount) + " was withdrawn.";
numOfTransactions++;
}
}
}
}//end of class
Я лишь дам вам несколько советов.
Прежде всего, Java является языком OO, поэтому вы должны использовать объекты. Вместо того чтобы иметь два массива для хранения сумм транзакций и сводок транзакций, у вас должен быть один массив, содержащий объекты типа Transaction
. Transaction
класс должен иметь поле amount
и поле summary
.
Во-вторых: вместо использования массива вы можете использовать List<Transaction>
. Каждый раз, когда появляется новая транзакция, вы добавляете ее в конец списка. Если размер списка становится больше 6, вы удаляете первый элемент списка (самый старый). LinkedList - хороший выбор для этой функции. Поскольку список имеет размер, вам не нужно самостоятельно поддерживать numOfTransactions
. Список делает это для вас.
Вы используете String для хранения даты. Это не соответствующий тип. Вы должны использовать дату.
И вы используете статическое поле для хранения количества созданных учетных записей. Это плохой дизайн. Вместо этого вы должны иметь объект Bank, содержащий все учетные записи банка (например, Map<Integer, BankAccount>
, который позволит найти учетную запись на основе ее номера).
latestTransactions
типа List<Transaction>
. Класс Bank должен иметь поле accounts
типа Map<Integer, BankAccount>
. Вы не реализуете Map и LinkedList. Это классы, предоставляемые JDK.
Если вы хотите сделать это с помощью массива, вам нужно написать дополнительные методы, и вы должны поместить транзакции и summery в один класс (например, @JB Nizet говорит). Лучше всего использовать List
. В противном случае вы должны написать весь метод самостоятельно. Методы должны выглядеть так:
import java.util.*;
private List<Transaction> transactions = new ArrayList<Transaction>();
public void addTransaction (Transaction t) {
if (transactions.size() + 1 > 6)
transactions.remove(0); // deletes the list element on the first place
transactions.add(t);
}
Если вы действительно хотите использовать массив, позвоните мне, и я могу вам помочь, но я бы предложил вам использовать Список.
Надеюсь, это поможет!
List
вроде (из интерфейса List) :)