Ecole Nationale des Sciences Appliquées-Khouribga Le 29 Mars 2022 Partiel JAVA Durée : 3 h heures Créer un Répertoire Examen-Nom. Créer un projet par Problème Problème 1 : 14 Points Le but de ce problème est de réaliser un logiciel de gestion des comptes en respectant les règles suivantes : Durée : 2heures 1- L’ajout de nouveaux attributs est interdit 2- L’ajout de nouveaux méthodes doit respecter les normes de POO( Encapsulation,…) : private ou protected 3- Le code des méthodes ne doit pas dépasser 10 lignes pour une meilleur lisibilité -Veuillez implémenter les classes attributs et méthodes suivants : Classe Méthode ou attribut énumération Type_Operation Debit(1, "Débit"), Credit(2,"Crédit") Integer code ; Strring nom public Type_Operation(Integer code, String nom) public Integer getCode(), public void setCode(Integer code) public String getNom() void setNom(String nom) Description Cette énumération représente le type d'opération, une opération est un débit si le montant est strictement positif et un crédit si le montant est strictement négative. classe Opération String Date , float montant, Type_Operation type La date de l'opération sous la forme jj/mm/aa (05/12/21) deux constructeurs avec et sans paramètres, getteurs et setteurs pour date, Montant et type public String getJour(), public String getMois(), Chaque méthode retourne jour ou mois ou année de la date de l’opération public String getAnnée() abstract classe Compte Cette classe représente un compte bancaire String date Date d'ouverture du compte ArrayList<Client> Signataires Représente les propriétaires du compte Integer numero Float solde HashMap<String ,Operation> listeOperations public Compte(Integer numero, Float solde) public Integer getNumero() public Float getSolde() protected void setSolde(Float solde) Représente la liste des opérations effectués sur le compte, la clé est la date de l'opération la date d’ouverture est la date du système Public ArrayList<Client> getSignataires() Retourne la liste des signataires protected void addClient(Client client) Ajoute un client à la liste des clients protected void supprimeClient(Integer id) Supprime un client par son id public boolean addOperation(Operation operation) Ajoute une opération à la liste des opérations en vérifiant que le montant est différent de zéro public ArrayList<Operation> getOperations() Retourne la liste des opérations public boolean equals(Object obj) Deux comptes sont égaux si ils ont le même numéro public abstract boolean addSignataires(Client client); Ajoute un signataire au listes des propriétaires du compte public abstract boolean removeSignataire(Client client) Supprime un client class Client représente la classe client d'une banque ArrayList<Compte> mesComptes La liste de ces comptes String nom Nom du client String prenom Prenom du client Integer age Age du client String CIN Integer id Identifiant du client constructeurs sans paramètres public Client(Integer id, String nom, String prenom, String cIN) getteurs et setteurs pour Nom, prenom, age et CIN et id class CompteCourant extends Compte public void addCompte(Compte compte) Ajoute un compte Public removeCompte(Compte compte) Suprrime un compte public boolean equals(Object obj) Deux clients sont égaux si ils ont même CIN, âge, prénom et nom Float soldeMax Le solde Max est une valeur négative que le compte ne doit jamais dépasser public CompteCourant(Integer numero, Float solde, Float soldeMax) public boolean addSignataires(Client client) Le nombre de signataire ne doit jamais dépasser 4 N’oubliez de mettre à jour le client public boolean removeSignataires(Client client) Si le compte à un seule signataire, il faut que le solde du compte est égale à zéro pour enlever le signataire N’oubliez de mettre à jour le client public boolean addOperation(Operation operation) Ajoute une opération en vérifiant que les contraintes suivantes : 1- le montat de l’opération est # 0 2- si l’opération est un crédit il ne faut pas dépasser solde Max 3-faire la mise à jour du solde class CompteEpargne extends Compte public void afficheReleveCourant(String mois, String anne) Une méthode qui affiche le relevé d'un mois pour une année par ordre décroissant des jours public void afficheDébitCourant(String mois, String année) Une méthode qui affiche la somme des opérations de Débit d'un mois pour une année public void afficheCréditCourant(String mois, String année) Une méthode qui affiche la somme des opérations de Crédit d'un mois pour une année Double interet public CompteEpargne(Integer numero, Float solde, Double interet) public boolean addSignataires(Client client) Cette méthode doit respecter les règles métier suivantes : 1-Verifier que le client n'est pas déjà signataire 2-Les signataires doivent avoir le même nom de famille 3-Le nombre de signataire ne doit pas dépasser 3 N’oubliez de mettre à jour le client public boolean removeSignataires(Integer id) Cette méthode supprime un signataire public boolean addOperation(Operation operation) Cette méthode ajoute une opération en respectant les règles suivantes : N’oubliez de mettre à jour le client 1- Pour un crédit : la somme ne doit jamais dépasser le solde 2- Pour un débit : l'opération est permise seulement en anniversaire du compte 3- La méthode doit recalculer le solde class Banque Cette classe représente une banque HashMap<Integer, Client> mesClients Liste des clients, la clé est le numéro du client String nom Public void Banque(String nom) Constructeur Boolean addClient (String nom,String prenom, String CIN ) La méthode ajoute un client en respectant les règles suivantes : 1-Le client ne doit pas exister 2-Le numéro du client est généré automatiquement ( dernier numéro +1) - Problème 2 : Programmation générique 8 Points 1-Créer un interface générique interface CritereSelection<E> { public boolean ok(E e); } 2- Créer une classe générique Filtre<E>, elle possédé un attribut : ArrayList< CritereSelection >liste des Critère Sélection et quatre méthodes dont la signature est : a-public abstract void selection(Collection<Object> list, Collection<Object> resultat); b- public static<E> ArrayList<E> selection(Collection<E> list, CritereSelection<E> c) : filtre la liste par le CritereSelection c. c- public void addCritere(CritereSelection c) :Ajoute une critère de sélection à la liste des CritèreSelection d- public boolean removeCritere(CritereSelection c) : Supprime une critère de sélection à la liste des Critère Sélection 3-Créer une classe générique FiltreMoyen<E> qui hérite de la classe Filtre. a- La méthode selection sélectionne les objets qui vérifient au minimum la moitié des critères ( attributs de la classe) au minimum. 4-Créer trois classes qui héritent de la classe CritereSelection : a-EstMltiple3<Integer> : vérifie si un nombre est multiple de 3 b-EstPremier<Integer> : vérifie si un nombre est premier c-EstPalindrome<String> : vérifie si un String est palindrome 5-Créer une classe Test qui exécute les étapes suivantes : a-Créer une instance f de la classe FiltreMoyen avec type Integer b-Ajouter deux instances EstMultiple3 et EstPremier dans les critères de l’instance f c-Créer une liste de 5 chiffres et exécuter la méthode selection sur la liste d-Afficher le résultat