Java - банковская система + функция транзакции

1

Я пытаюсь создать банковскую систему (объектно-ориентированную), которая может хранить/хранить информацию учетной записи, которую пользователь должен будет ввести. Когда учетная запись создана, ее можно найти/найти, используя номер учетной записи для снятия, сдачи на хранение, просмотра транзакций и удаления.

Проблема, с которой я столкнулся, - это раздел транзакции. Для каждой учетной записи вы должны иметь возможность хранить только последние 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
  • 0
    Здравствуй. Большое спасибо за помощь. Как мне поступить? Мне нужно полностью удалить массив для учетных записей и транзакции? Где я могу реализовать карту и связанный список?
Теги:

2 ответа

3

Я лишь дам вам несколько советов.

Прежде всего, Java является языком OO, поэтому вы должны использовать объекты. Вместо того чтобы иметь два массива для хранения сумм транзакций и сводок транзакций, у вас должен быть один массив, содержащий объекты типа Transaction. Transaction класс должен иметь поле amount и поле summary.

Во-вторых: вместо использования массива вы можете использовать List<Transaction>. Каждый раз, когда появляется новая транзакция, вы добавляете ее в конец списка. Если размер списка становится больше 6, вы удаляете первый элемент списка (самый старый). LinkedList - хороший выбор для этой функции. Поскольку список имеет размер, вам не нужно самостоятельно поддерживать numOfTransactions. Список делает это для вас.

Вы используете String для хранения даты. Это не соответствующий тип. Вы должны использовать дату.

И вы используете статическое поле для хранения количества созданных учетных записей. Это плохой дизайн. Вместо этого вы должны иметь объект Bank, содержащий все учетные записи банка (например, Map<Integer, BankAccount>, который позволит найти учетную запись на основе ее номера).

  • 0
    Здравствуй. Большое спасибо за помощь. Нужно ли полностью удалять массив для проекта и заменять его списком? Как мне хранить счета и транзакции, чтобы они были связаны?
  • 0
    Класс BankAccount должен иметь поле latestTransactions типа List<Transaction> . Класс Bank должен иметь поле accounts типа Map<Integer, BankAccount> . Вы не реализуете Map и LinkedList. Это классы, предоставляемые JDK.
Показать ещё 5 комментариев
1

Если вы хотите сделать это с помощью массива, вам нужно написать дополнительные методы, и вы должны поместить транзакции и 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);
}

Если вы действительно хотите использовать массив, позвоните мне, и я могу вам помочь, но я бы предложил вам использовать Список.

Надеюсь, это поможет!

  • 0
    Да, для таких мелочей вы действительно ДОЛЖНЫ использовать любой класс List вроде (из интерфейса List) :)
  • 0
    Большая проблема в том, что массив имеет фиксированный размер. Это означает, что вы должны перемещать каждый элемент массива или каждый раз создавать новый массив.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню