Commit 882d59f807b5aa9fab1b276c0fb7e9e7d071f5f9

Authored by mandjemb
1 parent 3d82806c

Rapport

grid.data
No preview for this file type
grille.ser
No preview for this file type
@@ -92,52 +92,50 @@ nous allons également une `ArrayList` de `Case`. @@ -92,52 +92,50 @@ nous allons également une `ArrayList` de `Case`.
92 92
93 ```java 93 ```java
94 94
95 -class Grille { 95 +class Grid {
96 Map<String, Case> cases = new HashMap<>(); 96 Map<String, Case> cases = new HashMap<>();
97 97
98 - double getValeur(String colonne, int ligne){  
99 - String code=colonne+ligne;  
100 - return cases.get(code).getValeur(); 98 + double getValue(String column, int line){
  99 + return cases.getCell(column, line).getValue();
101 } 100 }
102 } 101 }
103 102
104 103
105 -class Case {  
106 - String colonne;  
107 - int ligne;  
108 - double valeur; 104 +class Cell {
  105 + String column;
  106 + int line;
  107 + double value;
109 108
110 - double getValeur() {  
111 - return valeur; 109 + double getValue() {
  110 + return value;
112 } 111 }
113 } 112 }
114 113
115 ``` 114 ```
116 115
117 116
118 -#### 2. Methode getFormuleAsString 117 +#### 2. Methode getFormuleAsString (acceder au contenu)
119 118
120 ```java 119 ```java
121 120
122 -class Grille { 121 +class Grid {
123 Map<String, Case> cases = new HashMap<>(); 122 Map<String, Case> cases = new HashMap<>();
124 123
125 - String getFormule(String colonne, int ligne) {  
126 - String code=colonne+ligne;  
127 - return cases.get(code).getFormuleAsString(); 124 + String getFormuleAsString(String column, int line) {
  125 + return this.getCell(column, line).toString();
128 } 126 }
129 } 127 }
130 128
131 129
132 -class Case {  
133 - String colonne;  
134 - int ligne;  
135 - double valeur;  
136 - Formule formule; 130 +class Cell {
  131 + String column;
  132 + int line;
  133 + double value;
  134 + Formula formula;
137 135
138 String getFormuleAsString() { 136 String getFormuleAsString() {
139 - if (formule != null)  
140 - return formule.toString(); 137 + if (formula != null)
  138 + return formula.toString();
141 else 139 else
142 return toString(); 140 return toString();
143 } 141 }
@@ -145,49 +143,48 @@ class Case { @@ -145,49 +143,48 @@ class Case {
145 143
146 // Exemple pour Addition 144 // Exemple pour Addition
147 class Addition { 145 class Addition {
148 - Case gauche;  
149 - Case droite; 146 + Cell leftCell;
  147 + Cell rightCell;
150 148
151 String toString() { 149 String toString() {
152 - return gauche.toString() + "+" + droite.toString(); 150 + return leftCell.toString() + "+" + rightCell.toString();
153 } 151 }
154 } 152 }
155 153
156 ``` 154 ```
157 155
158 156
159 -#### 3. Methode getFormuleDeveloppe 157 +#### 3. Methode getDevelopedFormula
160 158
161 ```java 159 ```java
162 -class Grille{ 160 +class Grid{
163 Map<String, Case> cases = new HashMap<>(); 161 Map<String, Case> cases = new HashMap<>();
164 162
165 - String getFormuleDeveloppe(String colonne, int ligne) {  
166 - String code=colonne+ligne;  
167 - return cases.get(code).getFormuleDeveloppe(); 163 + String getDevelopedFormula(String column, int line) {
  164 + return this.getCell(column,line).getFormuleDeveloppe();
168 } 165 }
169 } 166 }
170 167
171 class Case{ 168 class Case{
172 - String colonne;  
173 - int ligne;  
174 - double valeur;  
175 - Formule formule;  
176 - ArrayList<Case> utiliseDans = new ArrayList<Case>(); 169 + String column;
  170 + int line;
  171 + double value;
  172 + Formula formula;
  173 + List<Cell> usedIn = new ArrayList<>();
177 174
178 - String getFormuleDeveloppe() {  
179 - if (formule != null)  
180 - return formule.getFormuleDeveoppe(); 175 + String getDevelopedFormula() {
  176 + if (formula != null)
  177 + return formula.getFormuleDeveoppe();
181 else 178 else
182 return toString(); 179 return toString();
183 } 180 }
184 } 181 }
185 182
186 Average 183 Average
187 -class Moyenne {  
188 - List<Case> listCases = new ArrayList<Case>(); 184 +class Average {
  185 + List<Cell> listCases = new ArrayList<Cell>();
189 186
190 - String getFormuleDeveloppe() { 187 + String getDevelopedFormula() {
191 return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")"; 188 return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")";
192 } 189 }
193 } 190 }
@@ -215,8 +212,8 @@ class Addition { @@ -215,8 +212,8 @@ class Addition {
215 212
216 ```java 213 ```java
217 class Multiplication { 214 class Multiplication {
218 - Case gauche;  
219 - Case droite; 215 + Cell gauche;
  216 + Cell droite;
220 217
221 double eval() { 218 double eval() {
222 return gauche.getValeur() * droite.getValeur(); 219 return gauche.getValeur() * droite.getValeur();
@@ -229,8 +226,8 @@ class Multiplication { @@ -229,8 +226,8 @@ class Multiplication {
229 226
230 ```java 227 ```java
231 class Soustraction { 228 class Soustraction {
232 - Case gauche;  
233 - Case droite; 229 + Cell gauche;
  230 + Cell droite;
234 231
235 double eval() { 232 double eval() {
236 return gauche.getValeur() - droite.getValeur(); 233 return gauche.getValeur() - droite.getValeur();
@@ -243,8 +240,8 @@ class Soustraction { @@ -243,8 +240,8 @@ class Soustraction {
243 240
244 ```java 241 ```java
245 class Division { 242 class Division {
246 - Case gauche;  
247 - Case droite; 243 + Cell gauche;
  244 + Cell droite;
248 245
249 double eval() { 246 double eval() {
250 if (droite.getValeur() != 0) 247 if (droite.getValeur() != 0)
@@ -259,8 +256,8 @@ class Division { @@ -259,8 +256,8 @@ class Division {
259 - Dans Moyenne : 256 - Dans Moyenne :
260 257
261 ```java 258 ```java
262 -class Moyenne {  
263 - List<Case> listCases = new ArrayList<Case>(); 259 +class Average {
  260 + List<Cell> listCases = new ArrayList<Cell>();
264 261
265 double eval() { 262 double eval() {
266 double val=0; 263 double val=0;
@@ -278,8 +275,8 @@ class Moyenne { @@ -278,8 +275,8 @@ class Moyenne {
278 - Dans Somme : 275 - Dans Somme :
279 276
280 ```java 277 ```java
281 -class Somme {  
282 - List<Case> listCases = new ArrayList<Case>(); 278 +class Sum {
  279 + List<Cell> listCases = new ArrayList<Cell>();
283 280
284 double eval() { 281 double eval() {
285 double val=0; 282 double val=0;
@@ -297,7 +294,7 @@ class Somme { @@ -297,7 +294,7 @@ class Somme {
297 #### 5. Methode setValeur 294 #### 5. Methode setValeur
298 295
299 ```java 296 ```java
300 -class Grille { 297 +class Grid {
301 Map<String, Case> cases = new HashMap<>(); 298 Map<String, Case> cases = new HashMap<>();
302 299
303 void setValeur(String colonne, int ligne, double value) { 300 void setValeur(String colonne, int ligne, double value) {
@@ -306,12 +303,12 @@ class Grille { @@ -306,12 +303,12 @@ class Grille {
306 } 303 }
307 } 304 }
308 305
309 -class Case { 306 +class Cell {
310 String colonne; 307 String colonne;
311 int ligne; 308 int ligne;
312 double valeur; 309 double valeur;
313 Formule formule; 310 Formule formule;
314 - List<Case> utiliseDans = new ArrayList<Case>(); 311 + List<Cell> utiliseDans = new ArrayList<Cell>();
315 312
316 void setValeur(double value) { 313 void setValeur(double value) {
317 valeur = value; 314 valeur = value;
@@ -325,8 +322,8 @@ class Case { @@ -325,8 +322,8 @@ class Case {
325 #### 5. Methode setFormule 322 #### 5. Methode setFormule
326 323
327 ```java 324 ```java
328 -class Grille {  
329 - Map<String, Case> cases = new HashMap<>(); 325 +class Grid {
  326 + Map<String, Cell> cases = new HashMap<>();
330 327
331 void setFormule(String colonne, int ligne, Formule formule) { 328 void setFormule(String colonne, int ligne, Formule formule) {
332 String code = colonne + ligne; 329 String code = colonne + ligne;
@@ -335,12 +332,12 @@ class Grille { @@ -335,12 +332,12 @@ class Grille {
335 } 332 }
336 333
337 334
338 -class Case { 335 +class Cell {
339 String colonne; 336 String colonne;
340 int ligne; 337 int ligne;
341 double valeur; 338 double valeur;
342 Formule formule; 339 Formule formule;
343 - List<Case> utiliseDans = new ArrayList<Case>(); 340 + List<Cell> utiliseDans = new ArrayList<Cell>();
344 341
345 void updateValeur() { 342 void updateValeur() {
346 valeur = formule.eval(); 343 valeur = formule.eval();
@@ -359,18 +356,32 @@ class Case { @@ -359,18 +356,32 @@ class Case {
359 356
360 BinaryOperation 357 BinaryOperation
361 class OperationBinaire { 358 class OperationBinaire {
362 - Case gauche;  
363 - Case droite; 359 + Cell gauche;
  360 + Cell droite;
364 361
365 boolean creerCycle(Case case) { 362 boolean creerCycle(Case case) {
366 - if (gauche != case && droite != case) {  
367 - if (gauche.isFormula() && droite.isFormula())  
368 - return gauche.getFormule().creerCycle(case) && droite.getFormule().creerCycle(case);  
369 - else  
370 - return false;  
371 - } 363 + Si la case gauche ne contient pas de formule et la case de droite contient une
  364 + rechercher si la case est dans la formule de la case de droite
  365 +
  366 + Si la case gauche contient une formule et la case de droite n'en contient pas
  367 + rechercher si la case est dans la formule de la case de gauche
  368 +
  369 + Si la case gauche et la droite contiennent des formules
  370 + rechercher si la case est dans les deux formule
372 371
373 - return true; 372 + Si les deux cases n'ont pas de formules
  373 + rechercher si la case est égale à case gauche ou droite
  374 + }
  375 +}
  376 +
  377 +Function
  378 +class Fonction {
  379 + List<Cell> listCells;
  380 +
  381 + boolean creerCycle(Case case) {
  382 +
  383 + Si la case n'est pas dans listCells
  384 + Pour toute les cases dans listCells qui contiennent des formules, regarder si la case est dans la formule
374 } 385 }
375 } 386 }
376 387
@@ -408,15 +419,57 @@ Le schéma ci-dessus nous montre que, l&#39;implémentation est composé de 5 packag @@ -408,15 +419,57 @@ Le schéma ci-dessus nous montre que, l&#39;implémentation est composé de 5 packag
408 ### MODES D'UTILISATION 419 ### MODES D'UTILISATION
409 420
410 421
411 -** Commandes de compilation**:  
412 -  
413 -MAKEFILE : 422 +** Commande de compilation**:
414 423
415 find src -not \( -path src/kernel/test -prune \) -name \*.java |xargs -i javac -d bin {} -cp src/ 424 find src -not \( -path src/kernel/test -prune \) -name \*.java |xargs -i javac -d bin {} -cp src/
416 425
  426 +** Commande d'exécution**:
  427 +
  428 +java bin/app/Main
  429 +
417 ## 3. BILAN 430 ## 3. BILAN
418 431
419 Au cours de ce projet les actions suivantes ont été faites : 432 Au cours de ce projet les actions suivantes ont été faites :
420 433
421 -- Création du noyeau : gestion des cycles, propagations des valeurs.  
422 -- Réalisation de l'ihm avec possibilité de mettre aussi bien des valeurs que des formules. 434 +### Le noyeau
  435 +
  436 +- La gestion des cycles aussi bien direct qu'indirects.
  437 +- 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.
  438 +- La gestion de la langue (en francais et en anglais).
  439 +- De supprimer une case que si elle existe et, n'est pas utilisée par d'autres cases.
  440 +- De sérialiser l'état d'une grille après avoir effectué des actions.
  441 +
  442 +### L'interface graphique
  443 +
  444 +L'interface graphique implementée permet d'effectuer les actions suivantes :
  445 +
  446 +- Créer une case à partir de d'une valeure.
  447 +- Créer une case en saisissant une formule (aussi bien français qu'en anglais).
  448 +Par exemple, on crée la case A10=SOMME(A1,A2,B2)
  449 +![CASE](rapport_image/case_f.png) ![CASE](rapport_image/case_fv.png)
  450 +-Emettre une erreur lorsque l'on saisit du texte au lieu d'un double ou une formule incorrecte.
  451 +![CASE](rapport_image/erreur_s.png)
  452 + -Emettre une erreur indiquant qu'un cycle est généré.
  453 + -Emettre une erreur indiquant qu'on ne peut pas supprimer une case utilisé par d'autres cases.
  454 +![CASE](rapport_image/erreur_sup.png)
  455 +
  456 +### Les tests
  457 +
  458 +Plusieurs tests ont été réalisés au cours de ce projet notamment celles permettant de :
  459 +
  460 +- Créer une ou plusieurs cases
  461 +- Mettre à jour une case avec une valeur ou formule
  462 +- Créer une exception lorsqu'un cycle est créee
  463 +- Créer une exception lorsqu'on utilise une case pas encore créée
  464 +- Effectuer le re-calcul des cases qui dependent d'une case quand elle est modifiée
  465 +- Supprimer une case que si elle n'est pas utilisée par d'autres cases
  466 +
  467 +
  468 +## Conclusion
  469 +
  470 +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 :
  471 +- 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.
  472 +-La deuxième, de créer un interface.
  473 +Ces deux parties ont été réalisées ainsi que des tests permettant de fonctionner le fonctionnement.
  474 +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.
  475 +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.
rapport_image/Thumbs.db 0 → 100644
No preview for this file type
rapport_image/case_f.PNG 0 → 100644

10.5 KB

rapport_image/case_fv.PNG 0 → 100644

6.24 KB

rapport_image/erreur_s.PNG 0 → 100644

15 KB

rapport_image/erreur_sup.PNG 0 → 100644

10.3 KB

src/ihm/TablooProto.java
@@ -140,7 +140,9 @@ public class TablooProto extends JPanel { @@ -140,7 +140,9 @@ public class TablooProto extends JPanel {
140 return "" + (row + 1); 140 return "" + (row + 1);
141 } else { 141 } else {
142 try { 142 try {
143 - return grid.getDevelopedFormula(this.getColumnName(col), row + 1) + "=" + grid.getValue(this.getColumnName(col), row + 1); 143 + //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);
  144 + return grid.getFormulaAsString(this.getColumnName(col), row + 1) + "=" + grid.getValue(this.getColumnName(col), row + 1);
  145 +
144 } catch (CellNotFoundException e) { 146 } catch (CellNotFoundException e) {
145 // TODO Auto-generated catch block 147 // TODO Auto-generated catch block
146 148
src/kernel/exception/CannotDeleteCellException.java
@@ -3,6 +3,6 @@ package kernel.exception; @@ -3,6 +3,6 @@ package kernel.exception;
3 public class CannotDeleteCellException extends Exception { 3 public class CannotDeleteCellException extends Exception {
4 4
5 public CannotDeleteCellException() { 5 public CannotDeleteCellException() {
6 - super("Cette cellule est utilisée dans une autre cellule."); 6 + super("Cette cellule est utilisée dans une autre cellule.");
7 } 7 }
8 } 8 }
src/kernel/exception/CreateCycleException.java
1 package kernel.exception; 1 package kernel.exception;
2 2
3 public class CreateCycleException extends Exception { 3 public class CreateCycleException extends Exception {
  4 + public CreateCycleException() {
  5 + super("L'aasignation de cette formule créée un cycle.");
  6 + }
4 } 7 }