From 882d59f807b5aa9fab1b276c0fb7e9e7d071f5f9 Mon Sep 17 00:00:00 2001 From: mandjemb Date: Thu, 20 Jun 2019 01:02:05 +0200 Subject: [PATCH] Rapport --- grid.data | Bin 1564 -> 0 bytes grille.ser | Bin 4 -> 0 bytes rapport_finale.md | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------ rapport_image/Thumbs.db | Bin 0 -> 56320 bytes rapport_image/case_f.PNG | Bin 0 -> 10773 bytes rapport_image/case_fv.PNG | Bin 0 -> 6390 bytes rapport_image/erreur_s.PNG | Bin 0 -> 15394 bytes rapport_image/erreur_sup.PNG | Bin 0 -> 10582 bytes src/ihm/TablooProto.java | 4 +++- src/kernel/exception/CannotDeleteCellException.java | 2 +- src/kernel/exception/CreateCycleException.java | 3 +++ 11 files changed, 132 insertions(+), 74 deletions(-) create mode 100644 rapport_image/Thumbs.db create mode 100644 rapport_image/case_f.PNG create mode 100644 rapport_image/case_fv.PNG create mode 100644 rapport_image/erreur_s.PNG create mode 100644 rapport_image/erreur_sup.PNG diff --git a/grid.data b/grid.data index 7539639..123c347 100644 Binary files a/grid.data and b/grid.data differ diff --git a/grille.ser b/grille.ser index 711006c..8477490 100644 Binary files a/grille.ser and b/grille.ser differ diff --git a/rapport_finale.md b/rapport_finale.md index 5f91eeb..6e9a600 100644 --- a/rapport_finale.md +++ b/rapport_finale.md @@ -92,52 +92,50 @@ nous allons également une `ArrayList` de `Case`. ```java -class Grille { +class Grid { Map cases = new HashMap<>(); - double getValeur(String colonne, int ligne){ - String code=colonne+ligne; - return cases.get(code).getValeur(); + double getValue(String column, int line){ + return cases.getCell(column, line).getValue(); } } -class Case { - String colonne; - int ligne; - double valeur; +class Cell { + String column; + int line; + double value; - double getValeur() { - return valeur; + double getValue() { + return value; } } ``` -#### 2. Methode getFormuleAsString +#### 2. Methode getFormuleAsString (acceder au contenu) ```java -class Grille { +class Grid { Map cases = new HashMap<>(); - String getFormule(String colonne, int ligne) { - String code=colonne+ligne; - return cases.get(code).getFormuleAsString(); + String getFormuleAsString(String column, int line) { + return this.getCell(column, line).toString(); } } -class Case { - String colonne; - int ligne; - double valeur; - Formule formule; +class Cell { + String column; + int line; + double value; + Formula formula; String getFormuleAsString() { - if (formule != null) - return formule.toString(); + if (formula != null) + return formula.toString(); else return toString(); } @@ -145,49 +143,48 @@ class Case { // Exemple pour Addition class Addition { - Case gauche; - Case droite; + Cell leftCell; + Cell rightCell; String toString() { - return gauche.toString() + "+" + droite.toString(); + return leftCell.toString() + "+" + rightCell.toString(); } } ``` -#### 3. Methode getFormuleDeveloppe +#### 3. Methode getDevelopedFormula ```java -class Grille{ +class Grid{ Map cases = new HashMap<>(); - String getFormuleDeveloppe(String colonne, int ligne) { - String code=colonne+ligne; - return cases.get(code).getFormuleDeveloppe(); + String getDevelopedFormula(String column, int line) { + return this.getCell(column,line).getFormuleDeveloppe(); } } class Case{ - String colonne; - int ligne; - double valeur; - Formule formule; - ArrayList utiliseDans = new ArrayList(); + String column; + int line; + double value; + Formula formula; + List usedIn = new ArrayList<>(); - String getFormuleDeveloppe() { - if (formule != null) - return formule.getFormuleDeveoppe(); + String getDevelopedFormula() { + if (formula != null) + return formula.getFormuleDeveoppe(); else return toString(); } } Average -class Moyenne { - List listCases = new ArrayList(); +class Average { + List listCases = new ArrayList(); - String getFormuleDeveloppe() { + String getDevelopedFormula() { return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")"; } } @@ -215,8 +212,8 @@ class Addition { ```java class Multiplication { - Case gauche; - Case droite; + Cell gauche; + Cell droite; double eval() { return gauche.getValeur() * droite.getValeur(); @@ -229,8 +226,8 @@ class Multiplication { ```java class Soustraction { - Case gauche; - Case droite; + Cell gauche; + Cell droite; double eval() { return gauche.getValeur() - droite.getValeur(); @@ -243,8 +240,8 @@ class Soustraction { ```java class Division { - Case gauche; - Case droite; + Cell gauche; + Cell droite; double eval() { if (droite.getValeur() != 0) @@ -259,8 +256,8 @@ class Division { - Dans Moyenne : ```java -class Moyenne { - List listCases = new ArrayList(); +class Average { + List listCases = new ArrayList(); double eval() { double val=0; @@ -278,8 +275,8 @@ class Moyenne { - Dans Somme : ```java -class Somme { - List listCases = new ArrayList(); +class Sum { + List listCases = new ArrayList(); double eval() { double val=0; @@ -297,7 +294,7 @@ class Somme { #### 5. Methode setValeur ```java -class Grille { +class Grid { Map cases = new HashMap<>(); void setValeur(String colonne, int ligne, double value) { @@ -306,12 +303,12 @@ class Grille { } } -class Case { +class Cell { String colonne; int ligne; double valeur; Formule formule; - List utiliseDans = new ArrayList(); + List utiliseDans = new ArrayList(); void setValeur(double value) { valeur = value; @@ -325,8 +322,8 @@ class Case { #### 5. Methode setFormule ```java -class Grille { - Map cases = new HashMap<>(); +class Grid { + Map cases = new HashMap<>(); void setFormule(String colonne, int ligne, Formule formule) { String code = colonne + ligne; @@ -335,12 +332,12 @@ class Grille { } -class Case { +class Cell { String colonne; int ligne; double valeur; Formule formule; - List utiliseDans = new ArrayList(); + List utiliseDans = new ArrayList(); void updateValeur() { valeur = formule.eval(); @@ -359,18 +356,32 @@ class Case { BinaryOperation class OperationBinaire { - Case gauche; - Case droite; + Cell gauche; + Cell droite; boolean creerCycle(Case case) { - if (gauche != case && droite != case) { - if (gauche.isFormula() && droite.isFormula()) - return gauche.getFormule().creerCycle(case) && droite.getFormule().creerCycle(case); - else - return false; - } + Si la case gauche ne contient pas de formule et la case de droite contient une + rechercher si la case est dans la formule de la case de droite + + Si la case gauche contient une formule et la case de droite n'en contient pas + rechercher si la case est dans la formule de la case de gauche + + Si la case gauche et la droite contiennent des formules + rechercher si la case est dans les deux formule - return true; + Si les deux cases n'ont pas de formules + rechercher si la case est égale à case gauche ou droite + } +} + +Function +class Fonction { + List listCells; + + boolean creerCycle(Case case) { + + Si la case n'est pas dans listCells + Pour toute les cases dans listCells qui contiennent des formules, regarder si la case est dans la formule } } @@ -408,15 +419,57 @@ Le schéma ci-dessus nous montre que, l'implémentation est composé de 5 packag ### MODES D'UTILISATION -** Commandes de compilation**: - -MAKEFILE : +** Commande de compilation**: find src -not \( -path src/kernel/test -prune \) -name \*.java |xargs -i javac -d bin {} -cp src/ +** Commande d'exécution**: + +java bin/app/Main + ## 3. BILAN Au cours de ce projet les actions suivantes ont été faites : -- Création du noyeau : gestion des cycles, propagations des valeurs. -- Réalisation de l'ihm avec possibilité de mettre aussi bien des valeurs que des formules. +### Le noyeau + +- La gestion des cycles aussi bien direct qu'indirects. +- La modification d'une case par des valeurs ou des formules et dans ce dernier cas la vérification qu'aucun cycle n'est créée. +- La gestion de la langue (en francais et en anglais). +- De supprimer une case que si elle existe et, n'est pas utilisée par d'autres cases. +- De sérialiser l'état d'une grille après avoir effectué des actions. + +### L'interface graphique + +L'interface graphique implementée permet d'effectuer les actions suivantes : + +- Créer une case à partir de d'une valeure. +- Créer une case en saisissant une formule (aussi bien français qu'en anglais). +Par exemple, on crée la case A10=SOMME(A1,A2,B2) +![CASE](rapport_image/case_f.png) ![CASE](rapport_image/case_fv.png) +-Emettre une erreur lorsque l'on saisit du texte au lieu d'un double ou une formule incorrecte. +![CASE](rapport_image/erreur_s.png) + -Emettre une erreur indiquant qu'un cycle est généré. + -Emettre une erreur indiquant qu'on ne peut pas supprimer une case utilisé par d'autres cases. +![CASE](rapport_image/erreur_sup.png) + +### Les tests + +Plusieurs tests ont été réalisés au cours de ce projet notamment celles permettant de : + +- Créer une ou plusieurs cases +- Mettre à jour une case avec une valeur ou formule +- Créer une exception lorsqu'un cycle est créee +- Créer une exception lorsqu'on utilise une case pas encore créée +- Effectuer le re-calcul des cases qui dependent d'une case quand elle est modifiée +- Supprimer une case que si elle n'est pas utilisée par d'autres cases + + +## Conclusion + +En résumé, Cc projet de programmation par objet (PPO) avait pour but de développer les actions que l'on peut faire avec un classeur Excel usuel.Il était divisé en deux parties : +- La première, créée un noyeau avec differentes méthodes permettant d'effectuer et vérifier des actions comme la création, modification d'une case avec des valeurs, opérations usuelles ou formules. +-La deuxième, de créer un interface. +Ces deux parties ont été réalisées ainsi que des tests permettant de fonctionner le fonctionnement. +ce projet nous a donc été bénéfique car, il nous a permis de pouvoir mettre en pratique nos connaisances tout en developpant des nouvelles. +Aussi, concernant les améliorations possibles , l'on pourrait envisager de pouvoir ajouter dans l'interface une option permettant de choisir la langue étant donné qu'actuellement l'on fait un choix d'affichage dans une langue et l'utilisateur ne peut la modifier mais, peut rentrer le nom de d'une fonction dans les deux langues, sera fonctionnera. diff --git a/rapport_image/Thumbs.db b/rapport_image/Thumbs.db new file mode 100644 index 0000000..c52f9c5 Binary files /dev/null and b/rapport_image/Thumbs.db differ diff --git a/rapport_image/case_f.PNG b/rapport_image/case_f.PNG new file mode 100644 index 0000000..b9d6826 Binary files /dev/null and b/rapport_image/case_f.PNG differ diff --git a/rapport_image/case_fv.PNG b/rapport_image/case_fv.PNG new file mode 100644 index 0000000..03b5753 Binary files /dev/null and b/rapport_image/case_fv.PNG differ diff --git a/rapport_image/erreur_s.PNG b/rapport_image/erreur_s.PNG new file mode 100644 index 0000000..0fdb1fc Binary files /dev/null and b/rapport_image/erreur_s.PNG differ diff --git a/rapport_image/erreur_sup.PNG b/rapport_image/erreur_sup.PNG new file mode 100644 index 0000000..c52ae41 Binary files /dev/null and b/rapport_image/erreur_sup.PNG differ diff --git a/src/ihm/TablooProto.java b/src/ihm/TablooProto.java index 58ce381..76ecfaf 100644 --- a/src/ihm/TablooProto.java +++ b/src/ihm/TablooProto.java @@ -140,7 +140,9 @@ public class TablooProto extends JPanel { return "" + (row + 1); } else { try { - return grid.getDevelopedFormula(this.getColumnName(col), row + 1) + "=" + grid.getValue(this.getColumnName(col), row + 1); + //return grid.getCell(this.getColumnName(col), row + 1).containFormula() ? grid.getFormulaAsString(this.getColumnName(col), row + 1) + "=" + grid.getValue(this.getColumnName(col), row + 1) : grid.getValue(this.getColumnName(col), row + 1); + return grid.getFormulaAsString(this.getColumnName(col), row + 1) + "=" + grid.getValue(this.getColumnName(col), row + 1); + } catch (CellNotFoundException e) { // TODO Auto-generated catch block diff --git a/src/kernel/exception/CannotDeleteCellException.java b/src/kernel/exception/CannotDeleteCellException.java index e1d18f2..7899a53 100644 --- a/src/kernel/exception/CannotDeleteCellException.java +++ b/src/kernel/exception/CannotDeleteCellException.java @@ -3,6 +3,6 @@ package kernel.exception; public class CannotDeleteCellException extends Exception { public CannotDeleteCellException() { - super("Cette cellule est utilisée dans une autre cellule."); + super("Cette cellule est utilisée dans une autre cellule."); } } diff --git a/src/kernel/exception/CreateCycleException.java b/src/kernel/exception/CreateCycleException.java index 8e20268..e12a981 100644 --- a/src/kernel/exception/CreateCycleException.java +++ b/src/kernel/exception/CreateCycleException.java @@ -1,4 +1,7 @@ package kernel.exception; public class CreateCycleException extends Exception { + public CreateCycleException() { + super("L'aasignation de cette formule créée un cycle."); + } } -- libgit2 0.21.2