Erstellen Sie eine Bankensystem-Konsolenanwendung in Java
Verbessern Sie Ihre OOP-Kenntnisse durch ein praktisches Projekt in Java.
Heute werden wir eine einfache Java-Anwendung für das Bankensystem entwickeln. Wir werden mehr Zeit damit verbringen, die Konzepte der objektorientierten Programmierung zu verstehen.
Zunächst muss die Java-Umgebung auf dem Computer installiert sein, vorzugsweise Java 11. Wenn Sie Java noch nicht in Ihrer lokalen Umgebung installiert haben , befolgen Sie bitte diese Schritte, um sich vorzubereiten .
Als Nächstes beginnen wir mit der detaillierten Beschreibung der Funktionalitäten der Konsolenanwendung.
Funktionalitäten:
- Konto-Erstellung,
- Einloggen Ausloggen,
- Anzeige der letzten 5 Transaktionen,
- Geld einzahlen,
- Aktuelle Benutzerinformationen anzeigen.
- Nachlass
- Polymorphismus
- Verkapselung
Beginnen Sie mit der Entwicklung Ihrer Anwendung
Erstellen Sie ein neues Java-Projekt in Eclipse oder Intellij.
Definieren wir eine neue Schnittstelle namens Savings Account .
public interface SavingsAccount {
void deposit(double amount, Date date);
}
Daher kann die Implementierung der Methode in der Customer-Klasse gefunden werden , indem die Methode mit demselben Namen und denselben Parametern überschrieben wird . Wenn Sie eine Methode der übergeordneten Schnittstelle in der untergeordneten Klasse überschreiben, wie im gegebenen Beispiel. Der Kontext ergibt sich aus der Tatsache, dass wir, um Geld auf das Girokonto einzuzahlen, zunächst einen Kunden benötigen.
Definieren wir also unsere Kundenklasse .
public class Customer extends Person implements SavingsAccount {
private String username;
private String password;
private double balance;
private ArrayList<String> transactions = new ArrayList<>(5);
public Customer(String firstName, String lastName, String address, String phone, String username, String password, double balance, ArrayList<String> transactions, Date date) {
super(firstName, lastName, address, phone);
this.username = username;
this.password = password;
this.balance = balance;
addTransaction(String.format("Initial deposit - " + NumberFormat.getCurrencyInstance().format(balance) + " as on " + "%1$tD" + " at " + "%1$tT.", date));
}
private void addTransaction(String message) {
transactions.add(0, message);
if (transactions.size() > 5) {
transactions.remove(5);
transactions.trimToSize();
}
}
//Getter Setter
public ArrayList<String> getTransactions() {
return transactions;
}
@Override
public void deposit(double amount, Date date) {
balance += amount;
addTransaction(String.format(NumberFormat.getCurrencyInstance().format(amount) + " credited to your account. Balance - " + NumberFormat.getCurrencyInstance().format(balance) + " as on " + "%1$tD" + " at " + "%1$tT.", date));
}
@Override
public String toString() {
return "Customer{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", balance=" + balance +
", transactions=" + transactions +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Customer customer = (Customer) o;
if (Double.compare(customer.getBalance(), getBalance()) != 0) return false;
if (getUsername() != null ? !getUsername().equals(customer.getUsername()) : customer.getUsername() != null)
return false;
if (getPassword() != null ? !getPassword().equals(customer.getPassword()) : customer.getPassword() != null)
return false;
return getTransactions() != null ? getTransactions().equals(customer.getTransactions()) : customer.getTransactions() == null;
}
@Override
public int hashCode() {
int result;
long temp;
result = getUsername() != null ? getUsername().hashCode() : 0;
result = 31 * result + (getPassword() != null ? getPassword().hashCode() : 0);
temp = Double.doubleToLongBits(getBalance());
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (getTransactions() != null ? getTransactions().hashCode() : 0);
return result;
}
Durch die Implementierung der SavingsAccount-Schnittstelle müssen wir die Deposit-Methode in der Customer-Klasse überschreiben, da wir die Implementierung der Methode in dieser Klasse schreiben.
Außerdem wird die Transaktionsliste initialisiert, um die letzten 5 Transaktionen anzuzeigen. Im Konstruktor wird die Methode addTransaction aufgerufen, die das Datum der Änderungen und die durchgeführten Transaktionen anzeigt.
private void addTransaction(String message) {
transactions.add(0, message);
if (transactions.size() > 5) {
transactions.remove(5);
transactions.trimToSize();
}
}
public class Person {
private String firstName;
private String lastName;
private String address;
private String phone;
public Person() {}
public Person(String firstName, String lastName, String address, String phone) {
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
this.phone = phone;
}
//Getters Setters
@Override
public String toString() {
return "Person{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (getFirstName() != null ? !getFirstName().equals(person.getFirstName()) : person.getFirstName() != null)
return false;
if (getLastName() != null ? !getLastName().equals(person.getLastName()) : person.getLastName() != null)
return false;
if (getAddress() != null ? !getAddress().equals(person.getAddress()) : person.getAddress() != null)
return false;
return getPhone() != null ? getPhone().equals(person.getPhone()) : person.getPhone() == null;
}
@Override
public int hashCode() {
int result = getFirstName() != null ? getFirstName().hashCode() : 0;
result = 31 * result + (getLastName() != null ? getLastName().hashCode() : 0);
result = 31 * result + (getAddress() != null ? getAddress().hashCode() : 0);
result = 31 * result + (getPhone() != null ? getPhone().hashCode() : 0);
return result;
}
Schließlich unsere Hauptklasse, benannt als Bank-Klasse .
Dies ist die Hauptklasse, von der aus wir die Anwendung starten und mit der Funktionalität aller Klassen interagieren.
public class Bank {
private static double amount = 0;
Map<String, Customer> customerMap;
Bank() {
customerMap = new HashMap<String, Customer>();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Customer customer;
Bank bank = new Bank();
int choice;
outer:
while (true) {
System.out.println("\n-------------------");
System.out.println("BANK OF JAVA");
System.out.println("-------------------\n");
System.out.println("1. Registrar cont.");
System.out.println("2. Login.");
System.out.println("3. Exit.");
System.out.print("\nEnter your choice : ");
choice = sc.nextInt();
sc.nextLine();
switch (choice) {
case 1:
System.out.print("Enter First Name : ");
String firstName = sc.nextLine();
System.out.print("Enter Last Name : ");
String lastName = sc.nextLine();
System.out.print("Enter Address : ");
String address = sc.nextLine();
System.out.print("Enter contact number : ");
String phone = sc.nextLine();
System.out.println("Set Username : ");
String username = sc.next();
while (bank.customerMap.containsKey(username)) {
System.out.println("Username already exists. Set again : ");
username = sc.next();
}
System.out.println("Set a password:");
String password = sc.next();
sc.nextLine();
customer = new Customer(firstName, lastName, address, phone, username, password, new Date());
bank.customerMap.put(username, customer);
break;
case 2:
System.out.println("Enter username : ");
username = sc.next();
sc.nextLine();
System.out.println("Enter password : ");
password = sc.next();
sc.nextLine();
if (bank.customerMap.containsKey(username)) {
customer = bank.customerMap.get(username);
if (customer.getPassword().equals(password)) {
while (true) {
System.out.println("\n-------------------");
System.out.println("W E L C O M E");
System.out.println("-------------------\n");
System.out.println("1. Deposit.");
System.out.println("2. Transfer.");
System.out.println("3. Last 5 transactions.");
System.out.println("4. User information.");
System.out.println("5. Log out.");
System.out.print("\nEnter your choice : ");
choice = sc.nextInt();
sc.nextLine();
switch (choice) {
case 1:
System.out.print("Enter amount : ");
while (!sc.hasNextDouble()) {
System.out.println("Invalid amount. Enter again :");
sc.nextLine();
}
amount = sc.nextDouble();
sc.nextLine();
customer.deposit(amount, new Date());
break;
case 2:
System.out.print("Enter beneficiary username : ");
username = sc.next();
sc.nextLine();
System.out.println("Enter amount : ");
while (!sc.hasNextDouble()) {
System.out.println("Invalid amount. Enter again :");
sc.nextLine();
}
amount = sc.nextDouble();
sc.nextLine();
if (amount > 300) {
System.out.println("Transfer limit exceeded. Contact bank manager.");
break;
}
if (bank.customerMap.containsKey(username)) {
Customer payee = bank.customerMap.get(username); //Todo: check
payee.deposit(amount, new Date());
customer.withdraw(amount, new Date());
} else {
System.out.println("Username doesn't exist.");
}
break;
case 3:
for (String transactions : customer.getTransactions()) {
System.out.println(transactions);
}
break;
case 4:
System.out.println("Titularul de cont cu numele: " + customer.getFirstName());
System.out.println("Titularul de cont cu prenumele : " + customer.getLastName());
System.out.println("Titularul de cont cu numele de utilizator : " + customer.getUsername());
System.out.println("Titularul de cont cu addresa : " + customer.getAddress());
System.out.println("Titularul de cont cu numarul de telefon : " + customer.getPhone());
break;
case 5:
continue outer;
default:
System.out.println("Wrong choice !");
}
}
} else {
System.out.println("Wrong username/password.");
}
} else {
System.out.println("Wrong username/password.");
}
break;
case 3:
System.out.println("\nThank you for choosing Bank Of Java.");
System.exit(1);
break;
default:
System.out.println("Wrong choice !");
}}}}
Unten haben wir einen neuen Konstruktor, der unsere Karten- und Kundendaten speichert. Map.put wird zum Speichern oder Aktualisieren von Kundendaten verwendet.
customer = new Customer(firstName, lastName, address, phone, username, password, new Date());
bank.customerMap.put(username, customer);
Fall 1: Wir laden Geld auf das Girokonto ein.
Fall 2: Wir zeigen die letzten 5 Transaktionen an.
Fall 3: Wir zeigen die Daten des Kunden aus der Karte in der Konsole an.
Fall 4: Wir schließen das Menü.
Quellcode hier .
Abschließende Gedanken
Ich hoffe, dass dieses Beispiel hilfreich ist, um Ihnen dabei zu helfen, sich mit der Verwendung von OOP-Konzepten in Java vertraut zu machen. Daher ist es wichtig, Übungen zu machen, die Ihnen helfen, die Logik zu durchdenken.
Bleiben Sie dran, um mehr über das Thema zu erfahren!
Danke fürs Lesen! Viel Spaß beim Lernen
Unterstützen Sie unsere Publikation, indem Sie ihr folgen
So lernen Sie Spring Boot in 2 Monaten. Intellij IDEA Überhitzt Ihren PC, verwenden Sie stattdessen Eclipse
![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































