Java du programme de la Banque. Comment permettez à vos clients d'avoir plusieurs comptes?
Je suis en train de faire un programme de la banque en java et 5 classes:
Compte, SavingsAccount (hérite de Compte), CreditAccount (hérite de Compte), de la Banque, le Client.
Le programme de travail tel qu'il est, mais je ne peux pas comprendre comment faire un client d'avoir deux comptes ou plus. Permet de dire qu'un client veut à la fois un compte de crédit ET un compte d'épargne, ou peut-être deux comptes d'épargne.
Quelqu'un peut-il me donner des suggestions? Merci
Banque classe:
public class Bank {
String bankName;
private Customer[] customers = new Customer[100];
Bank(String bankName) {
this.bankName = bankName;
}
public Customer[] getCustomer() {
return customers;
}
public String getBankname() {
return bankName;
}
}
Compte de la classe:
public abstract class Account {
protected double balance = 0;
protected String accountId;
public Account() {} //Defaultkonstruktor
public Account(double bal, String id) { //Konstruktor
if (balance >= 0) {
balance = bal;
}
else {
balance = 0;
}
accountId = id;
}
public abstract void deposit(double amount);
public abstract void withdraw(double amount);
public abstract double getBalance();
public abstract String getAccountId();
public abstract void transfer(double amount, Account account);
}
Classe SavingsAccount: (CreditAccount classe est similaire)
public class SavingsAccount extends Account{
private double interest = 2.9;
public SavingsAccount() { //Konstruktor
super();
}
public SavingsAccount(double balance, String id) { //Konstruktor
super(bal,id);
}
public void setInterest(Customer customer) {
//code
}
public void setBalance(double balance) {
//code
}
@Override
public void deposit(double amount) {
//code
}
@Override
public void withdraw(double amount) {
//code
}
@Override
public double getBalance(){
//code
}
@Override
public String getAccountId(){
//code
}
@Override
public void transfer(double amount, Account account) {
//code
}
public void setInterest(double interest){
//code
}
public double getInterest(){
//code
}
}
La classe de la clientèle:
public class Customer {
private String firstName;
private String lastName;
private String number;
private SavingsAccount account = new SavingsAccount();
private CreditAccount cAccount = new CreditAccount();
Customer(String firstName, String lastName, String number, SavingsAccount account) {
this.firstName = firstName;
this.lastName = lastName;
this.number = number;
this.account = account;
}
Customer(String firstName, String lastName, String number, CreditAccount cAccount) {
this.firstName = firstName;
this.lastName = lastName;
this.number = number;
this.cAccount = cAccount;
}
public SavingsAccount getAccount() {
return account;
}
public CreditAccount getCreditAccount() {
return cAccount;
}
}
Principal:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int choice;
int numberOfCustomers = 0;
boolean endProgram = false;
String bankName;
System.out.print("Name of bank: ");
bankName = input.next();
Bank bank = new Bank(bankName);
String accountId;
SavingsAccount acc = new SavingsAccount();
Customer[] customer = bank.getCustomer();
do {
System.out.println(" " + bank.getBankname() + "\n");
System.out.println(" 1. See balance ");
System.out.println(" 2. Withdraw ");
System.out.println(" 3. Deposit ");
System.out.println(" 4. Transfer ");
System.out.println(" 5. Add interest ");
System.out.println(" 6. Add new customer ");
System.out.println(" 7. Show customers ");
System.out.println(" 8. Change interest ");
System.out.println(" 0. Exit ");
choice = input.nextInt();
switch(choice) {
case 1:
//code
break;
case 2:
//code
break;
case 3:
//code
break;
case 4:
//code
break;
case 5:
//code
break;
case 6: //Add customer
System.out.println("Choose account: ");
System.out.println("1. Savings account");
System.out.println("2. Credit account");
choice = input.nextInt();
switch(choice) {
case 1: //Create savings account
System.out.print("Enter amount to deposit: ");
double amount = input.nextDouble();
System.out.println("Account number is: " + numberOfCustomers);
SavingsAccount savingsAccount = new SavingsAccount(amount, String.valueOf(numberOfCustomers));
System.out.print("First name: ");
String firstName = input.next();
System.out.print("Last name: ");
String lastName = input.next();
System.out.print("Customer number: ");
String pnumber = input.next();
Customer newCustomer = new Customer(firstName, lastName, pnumber, savingsAccount);
customer[numberOfCustomers] = newCustomer;
numberOfCustomers++;
break;
case 2: //Create credit account
System.out.print("Enter amount to deposit: ");
double amount = input.nextDouble();
System.out.println("Account number is: " + numberOfCustomers);
CreditAccount creditAccount = new CreditAccount(amount, String.valueOf(numberOfCustomers));
System.out.print("First name: ");
String firstName = input.next();
System.out.print("Last name: ");
String lastName = input.next();
System.out.print("Customer number: ");
String pnumber = input.next();
Customer newCustomer = new Customer(firstName, lastName, pnumber, creditAccount);
customer[numberOfCustomers] = newCustomer;
numberOfCustomers++;
break;
}
break;
case 7:
//code
break;
case 8:
//code
break;
case 0:
//code
break;
}
} while (!endProgram);
}
- Dans la classe de Clients, l'utilisation d'un
List<Account>
au lieu de champs individuels. - Donner au Client une collection de Comptes comme un
ArrayList<Account>
avec qui il peut contenir plusieurs objets de Compte. Remarque, @DaveMorrissey donne la meilleure réponse, à faire de la accountList variable de typeList<Account>
car il est presque toujours préférable à "le code de l'interface" plutôt que de la classe de béton, mais c'est le sujet d'une autre discussion.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord renommer le Compte de AbstractAccount et de créer une interface de Compte, votre dossier de Crédit et les comptes d'Épargne sont des implémentations concrètes. Puis dans votre Client de classe de déclarer une variable de comptes, qui est une Liste de comptes. Quelque chose comme
Votre interface de Compte pourrait ressembler
Votre classe devient refait
Votre SavingAccount devient
Je serais un peu inquiet que cette méthode est déclarée abstraite sur le Compte de la classe. Pourquoi un transfert être mis en œuvre différemment sur les deux classes différentes?
Je suggère cette méthode serait plus appartenir à un AccountManager classe qui permettrait d'assurer le bon montant est crédité/débité à partir de deux comptes.
Cette classe peut ensuite vérifier que le "fromAccount' a les fonds nécessaires à la disposition de transfert comme une étape de validation avant le transfert se passe.
addAccount(Account account)
,removeAccount(Account account)
,Account getAccount(String accountId)
,...List<Accounts>
, le Client n'aurait pas le SavingsAccount ou CheckingAccount variables, et vous devez trouver un moyen de donner à chaque Client les Comptes dont il a besoin.Au lieu de télécharger le Client du constructeur de l'objet SavingsAccount ou CreditAccount,
vous pouvez utiliser:
Et ajouter la méthode de jeu de compte et cAccount:
bien sûr, vous pouvez créer une liste comme dans le commentaire précédent:
et de la méthode add: