Créer une application de console de système bancaire en Java
Améliorez vos connaissances en POO grâce à un projet pratique en Java.
Aujourd'hui, nous allons développer une application Java simple pour le système bancaire. Nous passerons plus de temps à comprendre les concepts de la programmation orientée objet.
Pour commencer, nous aurons besoin de l'environnement Java installé sur l'ordinateur, de préférence Java 11. Si vous n'avez pas encore installé Java sur votre environnement local, veuillez suivre ces étapes pour vous préparer .
Ensuite, nous commencerons par détailler les fonctionnalités de l'application console.
Fonctionnalités :
- Création de compte,
- Connexion, déconnexion,
- Affichage des 5 dernières transactions,
- Déposer de l'argent,
- Afficher les informations sur l'utilisateur actuel.
- Héritage
- Polymorphisme
- Encapsulation
Commencez à développer votre application
Créez un nouveau projet Java dans Eclipse ou Intellij.
Définissons une nouvelle interface nommée Savings Account .
public interface SavingsAccount {
void deposit(double amount, Date date);
}
Par conséquent, l'implémentation de la méthode peut être trouvée dans la classe Customer en redéfinissant la méthode avec le même nom et les mêmes paramètres. Lorsque vous remplacez une méthode de l'interface parent dans la classe enfant, comme dans l'exemple donné. Le contexte est donné par le fait que, pour ajouter de l'argent au compte courant, nous avons d'abord besoin d'un client.
Alors, définissons notre classe Customer .
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;
}
En implémentant l'interface SavingsAccount , nous devons remplacer la méthode de dépôt dans la classe Customer car nous allons écrire l'implémentation de la méthode dans cette classe.
De plus, la liste des transactions est initialisée pour afficher les 5 dernières transactions. La méthode addTransaction est appelée dans le constructeur dont la date des modifications et les transactions effectuées sont affichées.
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;
}
Enfin notre classe principale, nommée classe Bank .
Il s'agit de la classe principale, à partir de laquelle nous démarrons l'application et interagissons avec les fonctionnalités de toutes les classes.
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 !");
}}}}
Ci-dessous, nous avons un nouveau constructeur qui enregistre notre carte, les données client. Map.put est utilisé pour enregistrer ou mettre à jour les données des clients.
customer = new Customer(firstName, lastName, address, phone, username, password, new Date());
bank.customerMap.put(username, customer);
Cas 1 : Nous ajoutons de l'argent au compte courant.
Cas 2 : Nous affichons les 5 dernières transactions.
Cas 3 : Nous affichons les données du client à partir de la carte dans la console.
Cas 4 : Nous fermons le menu.
Code source ici .
Dernières pensées
J'espère que cet exemple vous sera utile pour vous familiariser avec l'utilisation des concepts POO en Java. Par conséquent, la pratique d'exercices est importante pour vous aider à réfléchir à la logique.
Restez à l'écoute pour en savoir plus sur le sujet!
Merci d'avoir lu ! Bon apprentissage
Soutenez notre publication en la suivant
Comment apprendre Spring Boot en 2 mois Intellij IDEA surchauffe votre PC, utilisez plutôt Eclipse![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































