JavaRush /Blog Java /Random-FR /Pause café #201. Comment créer une application bancaire c...

Pause café #201. Comment créer une application bancaire console en Java

Publié dans le groupe Random-FR
Source : Medium Aujourd'hui, nous allons développer une application Java simple pour un système bancaire. Cela nous aidera à mieux comprendre comment les concepts POO sont utilisés dans les programmes Java. Pause café #201.  Comment créer une application bancaire console en Java - 1Pour commencer, nous aurons besoin d'un environnement Java installé sur l'ordinateur, de préférence Java 11. Ensuite, nous commencerons par une description détaillée des fonctions de l'application console. Fonctionnel:
  1. Créer un compte;
  2. Entrée sortie;
  3. Affichage des 5 dernières transactions ;
  4. Dépôt en espèces;
  5. Afficher les informations sur l'utilisateur actuel.
Concepts de programmation orientée objet utilisés :
  1. Héritage;
  2. Polymorphisme;
  3. Encapsulation.

Développement d'applications

Créons un nouveau projet Java dans Eclipse ou IntelliJ IDEA. Définissons une nouvelle interface appelée SavingsAccount .
public interface SavingsAccount {

    void deposit(double amount, Date date);
}
J'ai implémenté une interface qui héberge la méthode de dépôt . J'appelle cette méthode chaque fois que j'ajoute de l'argent sur mon compte courant. Le concept POO utilisé ici est le polymorphisme (les méthodes dans une interface n'ont pas de corps). L'implémentation de cette méthode peut être trouvée dans la classe Customer en remplaçant une méthode avec le même nom et les mêmes paramètres. De cette façon, vous remplacez une méthode de l’interface parent dans la classe enfant. Ensuite, nous avons besoin d'un client pour ajouter de l'argent sur le compte courant. Mais d'abord, 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;
    }
Le concept POO utilisé ici est l'héritage , car la classe Customer reçoit les propriétés de la classe Person . Autrement dit, presque tous les attributs de la classe Person sont hérités et les relations parent-enfant sont visibles de Person à Customer . Nous avons maintenant besoin d'un constructeur avec tous les attributs des deux classes et en ajoutant un mot-clé superconstructor pour spécifier les attributs hérités. Lors de l'implémentation de l' interface SavingsAccount , nous devons remplacer la méthode de dépôt dans la classe Customer . Pour ce faire, nous allons écrire une implémentation de la méthode dans cette classe. De plus, la liste des transactions est initialisée pour afficher les cinq dernières transactions. Le constructeur appelle la méthode addTransaction , qui affiche la date des modifications et des transactions terminées.
private void addTransaction(String message) {

        transactions.add(0, message);
        if (transactions.size() > 5) {
            transactions.remove(5);
            transactions.trimToSize();
        }
    }
Parlons maintenant de la classe parent Person .
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;
    }
Dans la classe Person , nous avons utilisé le concept d'encapsulation en appliquant le modificateur d'accès privé à chaque attribut. L'encapsulation en Java peut être définie comme le mécanisme par lequel les méthodes qui opèrent sur ces données sont combinées en une seule unité. Essentiellement, les données de la classe Person ne sont disponibles que dans cette classe, et non dans d'autres classes ou packages. Et enfin, notre classe principale, appelée Bank . Il s'agit de la classe principale à partir de laquelle nous exécutons 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 !");
            }}}}
En utilisant la bibliothèque java.util , nous appelons Scanner pour lire le clavier. En convertissant l' objet Customer à travers sa définition, connue sous le nom de Bank , nous créons un nouvel objet de type Bank() . Après un certain temps, nous affichons le menu Démarrer. Lors de l'utilisation de nextLine , le numéro ajouté depuis le clavier est lu. 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 client. client = nouveau client (prénom, nom, adresse, téléphone, nom d'utilisateur, mot de passe, nouvelle date ());
bank.customerMap.put(username, customer);
S'il y a une connexion, nous obtenons un nouveau menu avec des options. La même approche fonctionne en utilisant while et en passant à la fonctionnalité d'application d'appel. Étape 1 : Ajoutez de l'argent sur votre compte courant. Étape 2 : Affichez les 5 dernières transactions. Étape 3 : Nous transmettons les données client de la carte vers la console. Étape 4 : Fermez le menu. Le code source du programme peut être trouvé ici . J'espère que cet exemple vous aidera à vous familiariser davantage avec l'utilisation des concepts de POO en Java.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION