Commit 882d59f807b5aa9fab1b276c0fb7e9e7d071f5f9
1 parent
3d82806c
Rapport
Showing
11 changed files
with
132 additions
and
74 deletions
Show diff stats
grid.data
No preview for this file type
grille.ser
No preview for this file type
rapport_finale.md
... | ... | @@ -92,52 +92,50 @@ nous allons également une `ArrayList` de `Case`. |
92 | 92 | |
93 | 93 | ```java |
94 | 94 | |
95 | -class Grille { | |
95 | +class Grid { | |
96 | 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 | 119 | ```java |
121 | 120 | |
122 | -class Grille { | |
121 | +class Grid { | |
123 | 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 | 136 | String getFormuleAsString() { |
139 | - if (formule != null) | |
140 | - return formule.toString(); | |
137 | + if (formula != null) | |
138 | + return formula.toString(); | |
141 | 139 | else |
142 | 140 | return toString(); |
143 | 141 | } |
... | ... | @@ -145,49 +143,48 @@ class Case { |
145 | 143 | |
146 | 144 | // Exemple pour Addition |
147 | 145 | class Addition { |
148 | - Case gauche; | |
149 | - Case droite; | |
146 | + Cell leftCell; | |
147 | + Cell rightCell; | |
150 | 148 | |
151 | 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 | 159 | ```java |
162 | -class Grille{ | |
160 | +class Grid{ | |
163 | 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 | 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 | 178 | else |
182 | 179 | return toString(); |
183 | 180 | } |
184 | 181 | } |
185 | 182 | |
186 | 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 | 188 | return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")"; |
192 | 189 | } |
193 | 190 | } |
... | ... | @@ -215,8 +212,8 @@ class Addition { |
215 | 212 | |
216 | 213 | ```java |
217 | 214 | class Multiplication { |
218 | - Case gauche; | |
219 | - Case droite; | |
215 | + Cell gauche; | |
216 | + Cell droite; | |
220 | 217 | |
221 | 218 | double eval() { |
222 | 219 | return gauche.getValeur() * droite.getValeur(); |
... | ... | @@ -229,8 +226,8 @@ class Multiplication { |
229 | 226 | |
230 | 227 | ```java |
231 | 228 | class Soustraction { |
232 | - Case gauche; | |
233 | - Case droite; | |
229 | + Cell gauche; | |
230 | + Cell droite; | |
234 | 231 | |
235 | 232 | double eval() { |
236 | 233 | return gauche.getValeur() - droite.getValeur(); |
... | ... | @@ -243,8 +240,8 @@ class Soustraction { |
243 | 240 | |
244 | 241 | ```java |
245 | 242 | class Division { |
246 | - Case gauche; | |
247 | - Case droite; | |
243 | + Cell gauche; | |
244 | + Cell droite; | |
248 | 245 | |
249 | 246 | double eval() { |
250 | 247 | if (droite.getValeur() != 0) |
... | ... | @@ -259,8 +256,8 @@ class Division { |
259 | 256 | - Dans Moyenne : |
260 | 257 | |
261 | 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 | 262 | double eval() { |
266 | 263 | double val=0; |
... | ... | @@ -278,8 +275,8 @@ class Moyenne { |
278 | 275 | - Dans Somme : |
279 | 276 | |
280 | 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 | 281 | double eval() { |
285 | 282 | double val=0; |
... | ... | @@ -297,7 +294,7 @@ class Somme { |
297 | 294 | #### 5. Methode setValeur |
298 | 295 | |
299 | 296 | ```java |
300 | -class Grille { | |
297 | +class Grid { | |
301 | 298 | Map<String, Case> cases = new HashMap<>(); |
302 | 299 | |
303 | 300 | void setValeur(String colonne, int ligne, double value) { |
... | ... | @@ -306,12 +303,12 @@ class Grille { |
306 | 303 | } |
307 | 304 | } |
308 | 305 | |
309 | -class Case { | |
306 | +class Cell { | |
310 | 307 | String colonne; |
311 | 308 | int ligne; |
312 | 309 | double valeur; |
313 | 310 | Formule formule; |
314 | - List<Case> utiliseDans = new ArrayList<Case>(); | |
311 | + List<Cell> utiliseDans = new ArrayList<Cell>(); | |
315 | 312 | |
316 | 313 | void setValeur(double value) { |
317 | 314 | valeur = value; |
... | ... | @@ -325,8 +322,8 @@ class Case { |
325 | 322 | #### 5. Methode setFormule |
326 | 323 | |
327 | 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 | 328 | void setFormule(String colonne, int ligne, Formule formule) { |
332 | 329 | String code = colonne + ligne; |
... | ... | @@ -335,12 +332,12 @@ class Grille { |
335 | 332 | } |
336 | 333 | |
337 | 334 | |
338 | -class Case { | |
335 | +class Cell { | |
339 | 336 | String colonne; |
340 | 337 | int ligne; |
341 | 338 | double valeur; |
342 | 339 | Formule formule; |
343 | - List<Case> utiliseDans = new ArrayList<Case>(); | |
340 | + List<Cell> utiliseDans = new ArrayList<Cell>(); | |
344 | 341 | |
345 | 342 | void updateValeur() { |
346 | 343 | valeur = formule.eval(); |
... | ... | @@ -359,18 +356,32 @@ class Case { |
359 | 356 | |
360 | 357 | BinaryOperation |
361 | 358 | class OperationBinaire { |
362 | - Case gauche; | |
363 | - Case droite; | |
359 | + Cell gauche; | |
360 | + Cell droite; | |
364 | 361 | |
365 | 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'implémentation est composé de 5 packag |
408 | 419 | ### MODES D'UTILISATION |
409 | 420 | |
410 | 421 | |
411 | -** Commandes de compilation**: | |
412 | - | |
413 | -MAKEFILE : | |
422 | +** Commande de compilation**: | |
414 | 423 | |
415 | 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 | 430 | ## 3. BILAN |
418 | 431 | |
419 | 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. | ... | ... |
No preview for this file type
10.5 KB
6.24 KB
15 KB
10.3 KB
src/ihm/TablooProto.java
... | ... | @@ -140,7 +140,9 @@ public class TablooProto extends JPanel { |
140 | 140 | return "" + (row + 1); |
141 | 141 | } else { |
142 | 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 | 146 | } catch (CellNotFoundException e) { |
145 | 147 | // TODO Auto-generated catch block |
146 | 148 | ... | ... |
src/kernel/exception/CannotDeleteCellException.java
... | ... | @@ -3,6 +3,6 @@ package kernel.exception; |
3 | 3 | public class CannotDeleteCellException extends Exception { |
4 | 4 | |
5 | 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 | } | ... | ... |