23982881
[mandjemb]
update ihm
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# RAPPORT FINALE
> ANDJEMBE Maksoudath, TANIEL Rémi
Le but du projet est de réaliser un tableur "basique" mais facilement
extensible, l'application sera divisée en 2 parties :
* le kernel
* la partie graphique
Le kernel s'occupera de toutes les opérations de notre grid, les cases
ne pourront contenir que des réels ou des formules(opération binaire ou
des fonctions acceptant des plages de cases).
|
08cc28cc
[mandjemb]
update ihm
|
14
|
## 1. ANALYSE ET CONCEPTION
|
23982881
[mandjemb]
update ihm
|
15
16
17
18
19
20
21
|
### SCHEMA UML
Voici le schéma UML de notre application, les classes et méthodes
abstraites sont en italique :
|
453ac322
mandjemb
up
|
22
|
![UML](rapport_image/uml.png)
|
23982881
[mandjemb]
update ihm
|
23
24
25
26
27
28
29
30
31
32
33
|
### PSEUDO-JAVA CREATION GRILLE,CASES
Voici un exemple de création d'une grid et de l'ajout / modification /
affichage de plusieurs types de case :
```java
class Application {
public static void main(String[] args) {
|
9f417dcb
mandjemb
Update rapport
|
34
|
Grid g = new Grid();
|
23982881
[mandjemb]
update ihm
|
35
36
37
38
39
40
|
g.createCase("b",1); //Ajout case vide
g.createCase("a",1,100.0); //Ajout case avec valeur
g.createCase("a",2,50.0); //Ajout case avec valeur
g.createCase("a",3,new Addition(g.getCase("a",2),g.getCase("a",1))); //Ajout case avec operation binaire
|
37b36bec
mandjemb
update rapport
|
41
|
List<Cell> plageCase1 = new ArrayList<Cell>(); // Crée une liste de case
|
23982881
[mandjemb]
update ihm
|
42
43
44
45
46
47
|
plageCase1.add(g.getCase("a",1));
plageCase1.add(g.getCase("a",2));
plageCase1.add(g.getCase("a",3));
g.createCase("a",4,new Somme(plageCase1)); //Ajout case avec fonctions
|
9f417dcb
mandjemb
Update rapport
|
48
|
g.setValue("b",1,100); //Met la valeur de b1 à 100
|
23982881
[mandjemb]
update ihm
|
49
|
|
37b36bec
mandjemb
update rapport
|
50
|
List<Cell> plageCase2 = new ArrayList<Cell>(); // Crée une liste de case
|
23982881
[mandjemb]
update ihm
|
51
52
53
54
|
plageCase1.add(g.getCase("a",4));
plageCase1.add(g.getCase("a",2));
plageCase1.add(g.getCase("a",3));
|
9f417dcb
mandjemb
Update rapport
|
55
|
g.setFormula("b",2,new Moyenne(plageCase2)); //Met la formule dans b2
|
23982881
[mandjemb]
update ihm
|
56
|
|
9f417dcb
mandjemb
Update rapport
|
57
58
59
60
|
g.getValue("a",1); //Affichera 100.0
g.getValue("a",4); //Affichera (100+50+150)=100
g.getFormulaAsString("b",2); //Affichera MOYENNE(a4,a2,a3)
g.getDevelopedFormula("b",2);
|
23982881
[mandjemb]
update ihm
|
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
}
}
```
### CHOIX STRUCTURE DE DONNÉES
Nous devons choisir une structure de donnée pour stocker les cases dans
notre grid, nous savons déjà que nous allons utiliser ne collection
pour les stocker,voici celles que nous connaissons:
- des tableaux
- des listes
- des maps
- des sets
D'après le schéma UML ci-dessus, nous allons donc utiliser une `HashMap`
pour stocker les cases de notre grid :
* Pour rechercher une case et, effectuer des opérations dessus ce sera
plus facile, la clé de la Map sera une chaine de caractère (String) qui
représente la coordonnée de cette case (c'est-à-dire la concaténation
du nom de ligne et de l'indice de la colonne, exemple "A1", "B9", etc...)
Une case peut etre utilisée dans plusieurs autres cases, on ne sait
pas le nombre d'autres cases où elle sera utilisée, on stockera donc
cette donée dans une `ArrayList` de `Case`.
Certaines fonctions (`Moyenne`, `Somme`) utilise également une plage de case, pour stocker ces cases,
nous allons également une `ArrayList` de `Case`.
### METHODES ESSENTIELLES EN PSEUDO-JAVA
#### 1. Methode getValeur
|
9f417dcb
mandjemb
Update rapport
|
93
94
|
Cette méthode retourne la valeur d'une case se trouvant dans une grille grâce aux coordonnées de la case.
Elle utilise la méthode getCell qui permet d'accet à une case qui existe et dans le contraire lève une exeption.
|
23982881
[mandjemb]
update ihm
|
95
96
|
```java
|
882d59f8
mandjemb
Rapport
|
97
|
class Grid {
|
9f417dcb
mandjemb
Update rapport
|
98
|
Map<String, Cell> cells = new HashMap<>();
|
23982881
[mandjemb]
update ihm
|
99
|
|
882d59f8
mandjemb
Rapport
|
100
|
double getValue(String column, int line){
|
9f417dcb
mandjemb
Update rapport
|
101
|
return this.getCell(column, line).getValue();
|
23982881
[mandjemb]
update ihm
|
102
103
104
105
|
}
}
|
882d59f8
mandjemb
Rapport
|
106
107
108
109
|
class Cell {
String column;
int line;
double value;
|
23982881
[mandjemb]
update ihm
|
110
|
|
882d59f8
mandjemb
Rapport
|
111
112
|
double getValue() {
return value;
|
23982881
[mandjemb]
update ihm
|
113
114
115
116
117
118
|
}
}
```
|
882d59f8
mandjemb
Rapport
|
119
|
#### 2. Methode getFormuleAsString (acceder au contenu)
|
23982881
[mandjemb]
update ihm
|
120
|
|
9f417dcb
mandjemb
Update rapport
|
121
122
123
|
Cette méthode permet de retourner le contenu d'une case. Si elle contient une formule, on retourne la formule simple et dans le cas contraire son nom
pou dire qu'elle ne contient pas de formule mais une valeur.
|
23982881
[mandjemb]
update ihm
|
124
125
|
```java
|
882d59f8
mandjemb
Rapport
|
126
|
class Grid {
|
9f417dcb
mandjemb
Update rapport
|
127
|
Map<String, Cell> cells = new HashMap<>();
|
23982881
[mandjemb]
update ihm
|
128
|
|
882d59f8
mandjemb
Rapport
|
129
130
|
String getFormuleAsString(String column, int line) {
return this.getCell(column, line).toString();
|
23982881
[mandjemb]
update ihm
|
131
132
133
134
|
}
}
|
882d59f8
mandjemb
Rapport
|
135
136
137
138
139
|
class Cell {
String column;
int line;
double value;
Formula formula;
|
23982881
[mandjemb]
update ihm
|
140
141
|
String getFormuleAsString() {
|
882d59f8
mandjemb
Rapport
|
142
143
|
if (formula != null)
return formula.toString();
|
23982881
[mandjemb]
update ihm
|
144
145
146
147
|
else
return toString();
}
}
|
9f417dcb
mandjemb
Update rapport
|
148
149
|
```
**Exemple pour Addition** (Opération Binaire)
|
23982881
[mandjemb]
update ihm
|
150
|
|
9f417dcb
mandjemb
Update rapport
|
151
152
153
|
La classe BinaryOperation implémente la methode toString() en, récuperant l'opérateur qui est définit dans la méthode getOperator() de chaque classe qui hérite d'elle.
```java
class BinaryOperation {
|
882d59f8
mandjemb
Rapport
|
154
155
|
Cell leftCell;
Cell rightCell;
|
23982881
[mandjemb]
update ihm
|
156
|
|
9f417dcb
mandjemb
Update rapport
|
157
158
159
160
161
162
163
164
165
|
public String toString() {
return "(" + this.leftCell.getId() + this.getOperator() + this.rightCell.getId() + ")";
}
}
class Addition {
public String getOperator() {
return "+";
}
|
23982881
[mandjemb]
update ihm
|
166
167
168
169
170
|
}
```
|
882d59f8
mandjemb
Rapport
|
171
|
#### 3. Methode getDevelopedFormula
|
23982881
[mandjemb]
update ihm
|
172
|
|
9f417dcb
mandjemb
Update rapport
|
173
|
Cette méthode renvoie la formule dévéloppée d'une case.
|
23982881
[mandjemb]
update ihm
|
174
|
```java
|
882d59f8
mandjemb
Rapport
|
175
|
class Grid{
|
9f417dcb
mandjemb
Update rapport
|
176
|
Map<String, Cell> cells = new HashMap<>();
|
23982881
[mandjemb]
update ihm
|
177
|
|
882d59f8
mandjemb
Rapport
|
178
179
|
String getDevelopedFormula(String column, int line) {
return this.getCell(column,line).getFormuleDeveloppe();
|
23982881
[mandjemb]
update ihm
|
180
181
182
|
}
}
|
9f417dcb
mandjemb
Update rapport
|
183
|
class Cell{
|
882d59f8
mandjemb
Rapport
|
184
185
186
187
188
|
String column;
int line;
double value;
Formula formula;
List<Cell> usedIn = new ArrayList<>();
|
23982881
[mandjemb]
update ihm
|
189
|
|
882d59f8
mandjemb
Rapport
|
190
191
|
String getDevelopedFormula() {
if (formula != null)
|
9f417dcb
mandjemb
Update rapport
|
192
|
return formula.getDevelopedFormula();
|
23982881
[mandjemb]
update ihm
|
193
194
195
196
|
else
return toString();
}
}
|
9f417dcb
mandjemb
Update rapport
|
197
198
199
|
```
**Exemple de la méthode getDevelopedFormula() pour la class Average** (moyenne)
|
23982881
[mandjemb]
update ihm
|
200
|
|
9f417dcb
mandjemb
Update rapport
|
201
|
```java
|
882d59f8
mandjemb
Rapport
|
202
203
|
class Average {
List<Cell> listCases = new ArrayList<Cell>();
|
23982881
[mandjemb]
update ihm
|
204
|
|
882d59f8
mandjemb
Rapport
|
205
|
String getDevelopedFormula() {
|
23982881
[mandjemb]
update ihm
|
206
207
208
209
210
211
212
213
214
|
return Average + listCases.stream().map(c -> c.getFormuleDeveloppe()).collect((Collectors).joining(", ")) + ")";
}
}
```
#### 4. Methode eval()
|
9f417dcb
mandjemb
Update rapport
|
215
216
217
218
219
220
221
222
223
224
225
|
Cette méthode permet de retourner le résultat d'un calacul avec des opérations binaires ou des fonctions.
##### Opération binaires
class BinaryOperation {
Cell leftCell;
Cell rightCell;
}
Les classes Addition,Multiplication,Substraction et Division héritent de la classe BinaryOpération et utilisent donc ses attributs leftCell et rightCell.
|
23982881
[mandjemb]
update ihm
|
226
227
228
229
|
- Dans Addition :
```java
class Addition {
|
23982881
[mandjemb]
update ihm
|
230
231
|
double eval() {
|
9f417dcb
mandjemb
Update rapport
|
232
|
return leftCell.getValue() + rightCell.getValue();
|
23982881
[mandjemb]
update ihm
|
233
234
235
236
237
238
239
240
241
|
}
}
```
- Dans Multiplication :
```java
class Multiplication {
|
9f417dcb
mandjemb
Update rapport
|
242
|
|
23982881
[mandjemb]
update ihm
|
243
244
|
double eval() {
|
9f417dcb
mandjemb
Update rapport
|
245
|
return leftCell.getValue() * rightCell.getValue();
|
23982881
[mandjemb]
update ihm
|
246
247
248
249
250
251
252
253
|
}
}
```
- Dans Soustraction :
```java
|
9f417dcb
mandjemb
Update rapport
|
254
|
class Substraction {
|
23982881
[mandjemb]
update ihm
|
255
256
|
double eval() {
|
9f417dcb
mandjemb
Update rapport
|
257
|
return leftCell.getValue() - rightCell.getValue();
|
23982881
[mandjemb]
update ihm
|
258
259
260
261
262
263
264
265
266
|
}
}
```
- Dans Division :
```java
class Division {
|
9f417dcb
mandjemb
Update rapport
|
267
|
|
23982881
[mandjemb]
update ihm
|
268
269
|
double eval() {
|
9f417dcb
mandjemb
Update rapport
|
270
271
|
if (droite.getValue() != 0)
return gauche.getValue() / droite.getValue();
|
23982881
[mandjemb]
update ihm
|
272
273
274
275
276
277
|
else
lève une exception
}
}
```
|
9f417dcb
mandjemb
Update rapport
|
278
279
280
281
282
283
284
285
|
##### Fonctions
class Function {
List<Cell> listCells;
}
Les classes Average et Sum héritent de la classe BinaryOpération et utilisent donc son attribut listCells.
|
23982881
[mandjemb]
update ihm
|
286
287
288
289
|
- Dans Moyenne :
```java
|
882d59f8
mandjemb
Rapport
|
290
|
class Average {
|
23982881
[mandjemb]
update ihm
|
291
292
293
294
295
|
double eval() {
double val=0;
if (listCases.size() != 0)
|
9f417dcb
mandjemb
Update rapport
|
296
297
298
|
for(int i=0; i<listCells.size(); i++)
val += listCells.get(i).getValue();
return val / listCells.size();
|
23982881
[mandjemb]
update ihm
|
299
300
301
302
303
304
305
306
307
|
else
lève une exception
}
}
```
- Dans Somme :
```java
|
882d59f8
mandjemb
Rapport
|
308
|
class Sum {
|
23982881
[mandjemb]
update ihm
|
309
310
311
312
|
double eval() {
double val=0;
if (listCases.size() != 0)
|
9f417dcb
mandjemb
Update rapport
|
313
314
|
for(int i=0; i<listCells.size(); i++)
val += listCells.get(i).getValue();
|
23982881
[mandjemb]
update ihm
|
315
316
317
318
319
320
321
322
|
return val;
else
lève une exception
}
}
```
|
9f417dcb
mandjemb
Update rapport
|
323
324
325
|
#### 5. Methode setValue
Lorsque l'on modifie une valeur d'une case, on met à jour la valeur des cases qui utilisent la case.
|
23982881
[mandjemb]
update ihm
|
326
327
|
```java
|
882d59f8
mandjemb
Rapport
|
328
|
class Grid {
|
9f417dcb
mandjemb
Update rapport
|
329
|
Map<String, Cell> cells = new HashMap<>();
|
23982881
[mandjemb]
update ihm
|
330
|
|
9f417dcb
mandjemb
Update rapport
|
331
332
333
|
void setValue(String column, int line, double value) {
this.getCell(column, line).setValue(value);
}
|
23982881
[mandjemb]
update ihm
|
334
335
|
}
|
882d59f8
mandjemb
Rapport
|
336
|
class Cell {
|
9f417dcb
mandjemb
Update rapport
|
337
338
339
340
341
|
String column;
int line;
double value;
Formula formula;
List<Cell> usedIn = new ArrayList<Cell>();
|
23982881
[mandjemb]
update ihm
|
342
|
|
9f417dcb
mandjemb
Update rapport
|
343
344
345
346
|
void setValue(double valeur) {
value = valeur;
for(int i=0; i<usedIn.size(); i++)
usedIn.get(i).updateValue();
|
23982881
[mandjemb]
update ihm
|
347
348
349
350
351
|
}
}
```
|
23982881
[mandjemb]
update ihm
|
352
|
|
9f417dcb
mandjemb
Update rapport
|
353
354
355
|
#### 5. Methode setFormula
Cette méthode assigne une formule à une case en étant sûre qu'un cycle n'est pas créée.
|
23982881
[mandjemb]
update ihm
|
356
|
```java
|
882d59f8
mandjemb
Rapport
|
357
358
|
class Grid {
Map<String, Cell> cases = new HashMap<>();
|
23982881
[mandjemb]
update ihm
|
359
|
|
9f417dcb
mandjemb
Update rapport
|
360
|
void setFormula(String column, int line, Formula formula) {
|
23982881
[mandjemb]
update ihm
|
361
|
String code = colonne + ligne;
|
9f417dcb
mandjemb
Update rapport
|
362
|
this.getCell(column, line).setFormula(formula);
|
23982881
[mandjemb]
update ihm
|
363
364
365
366
|
}
}
|
882d59f8
mandjemb
Rapport
|
367
|
class Cell {
|
9f417dcb
mandjemb
Update rapport
|
368
369
370
371
372
|
String column;
int line;
double value;
Formula formula;
List<Cell> usedIn = new ArrayList<Cell>();
|
23982881
[mandjemb]
update ihm
|
373
|
|
9f417dcb
mandjemb
Update rapport
|
374
375
|
void updateValue() {
valeur = formula.eval();
|
23982881
[mandjemb]
update ihm
|
376
377
|
}
|
9f417dcb
mandjemb
Update rapport
|
378
379
|
void setFormula(Formula formula) {
if (!formula.createCycle(this))
|
23982881
[mandjemb]
update ihm
|
380
|
formule = formula;
|
9f417dcb
mandjemb
Update rapport
|
381
382
383
|
updateValue();
for(int i=0; i<usedIn.size(); i++)
usedIn.get(i).updateValue();
|
23982881
[mandjemb]
update ihm
|
384
385
386
387
|
else
lève une exception
}
}
|
9f417dcb
mandjemb
Update rapport
|
388
389
390
391
392
393
|
```
#### 5. Methode createCycle
Cette méthode vérifie si on créée un cycle direct ou indirece.La façon de la définir est differente si on a une opération binaire ou une focntion.
##### Opération binaire
|
23982881
[mandjemb]
update ihm
|
394
|
|
9f417dcb
mandjemb
Update rapport
|
395
396
397
398
|
```java
class BinaryOperation {
Cell leftCell;
Cell rightCell;
|
23982881
[mandjemb]
update ihm
|
399
|
|
9f417dcb
mandjemb
Update rapport
|
400
|
boolean createCycle(Cell cell) {
|
882d59f8
mandjemb
Rapport
|
401
|
Si la case gauche ne contient pas de formule et la case de droite contient une
|
9f417dcb
mandjemb
Update rapport
|
402
|
rechercher si la case est dans la formule de la case de droite
|
882d59f8
mandjemb
Rapport
|
403
404
405
406
407
408
|
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
|
23982881
[mandjemb]
update ihm
|
409
|
|
882d59f8
mandjemb
Rapport
|
410
411
412
413
414
|
Si les deux cases n'ont pas de formules
rechercher si la case est égale à case gauche ou droite
}
}
|
9f417dcb
mandjemb
Update rapport
|
415
416
417
418
419
420
|
```
##### Fonction
```java
class Function {
|
882d59f8
mandjemb
Rapport
|
421
422
|
List<Cell> listCells;
|
9f417dcb
mandjemb
Update rapport
|
423
|
boolean creerCycle(Cell cell) {
|
882d59f8
mandjemb
Rapport
|
424
425
426
|
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
|
23982881
[mandjemb]
update ihm
|
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
|
}
}
```
### LISTE DE TESTS
Afin de s'assurer de la maintenabilité de notre code et de la qualité de
celui-ci, nous allons réaliser plusieurs tests sur les différentes méthodes
que nous allons programmé dans notre application, voici quelques
exemples :
- Création d'une case avec une valeur fixe
- Création d'une case avec une formule d' `Opération binaire` et une
fonction comme `Moyenne`
- Modification d'une case avec une valeur sans qu'elle soit utilisée dans
une autre case
- Modification d'une case avec une valeur utilisée dans une autre case
- Vérification qu'une erreur se lève lors de la création des 2 types
de cycles (direct et indirect)
- Renvoie de la formule dévéloppée d'une case avec une formule assez compliqué
|
08cc28cc
[mandjemb]
update ihm
|
448
449
450
|
## 2. STRUCTURE DU PROJET
|
3d82806c
[mandjemb]
rapp
|
451
|
|
e4ef4371
[mandjemb]
mm
|
452
453
|
### PACKAGES,CLASSES,FICHIERS DE DONNÉES
|
08cc28cc
[mandjemb]
update ihm
|
454
455
456
|
L'implémentation du projet peut se résumer comme suit :
![PACKAGE](package.png)
|
e4ef4371
[mandjemb]
mm
|
457
458
459
460
461
462
|
Le schéma ci-dessus nous montre que, l'implémentation est composé de 5 package (representant 5 repertoires) contenant des classes ( chaque classe est un fichier d'extension java).
### MODES D'UTILISATION
|
9f417dcb
mandjemb
Update rapport
|
463
464
465
|
Concernant les commandes de compilation et d'exécution, sous des logiciels comme Eclipse ou IntelliJ par exemple, juste un clique bouton suffit.
Par contre, dans le cas contraire, il faut se placer dans à la raicne du repertoire contenant les fichiers et lancer les commandes suivantes :
|
e4ef4371
[mandjemb]
mm
|
466
|
|
9f417dcb
mandjemb
Update rapport
|
467
|
**Commande de compilation**:
|
e4ef4371
[mandjemb]
mm
|
468
|
|
294cf1f5
mandjemb
update
|
469
|
mkdir -p bin|find src -not \( -path src/kernel/test -prune \) -name \*.java|xargs -i javac -d bin {} -cp src/
|
e4ef4371
[mandjemb]
mm
|
470
|
|
9f417dcb
mandjemb
Update rapport
|
471
|
**Commande d'exécution**:
|
882d59f8
mandjemb
Rapport
|
472
|
|
294cf1f5
mandjemb
update
|
473
474
|
**java -cp bin app.Menu** pour tester les possibilités qu'offre une grille
ou **java -cp bin ihm.TablooProto** pour lancer l'interface graphique de la grille.
|
64bfe3ad
mandjemb
update
|
475
|
|
294cf1f5
mandjemb
update
|
476
477
|
Si l'on ne veut pas saisir ces commandes, on peut directement utiliser les fichiers bash exécutable **appbash** ou **tablobash** respectivement pour acceder au menu
ou à l'interface grapphique en faisant **./appbash** ou **./tablobash**.
|
882d59f8
mandjemb
Rapport
|
478
|
|
3d82806c
[mandjemb]
rapp
|
479
480
481
|
## 3. BILAN
Au cours de ce projet les actions suivantes ont été faites :
|
e4ef4371
[mandjemb]
mm
|
482
|
|
882d59f8
mandjemb
Rapport
|
483
484
485
486
487
488
489
490
491
492
493
494
495
496
|
### 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).
|
13e51102
mandjemb
img
|
497
498
499
500
501
502
|
Par exemple, on crée la case A10=SOMME(A1,A2,B2)
![CASE](rapport_image/case_f.PNG)
![CASE](rapport_image/case_fv.PNG)
|
1b85b400
mandjemb
update rf
|
503
|
- Emettre une erreur lorsque l'on saisit du texte au lieu d'un double ou une formule incorrecte.
|
13e51102
mandjemb
img
|
504
505
|
![CASE](rapport_image/erreur_s.PNG)
|
1b85b400
mandjemb
update rf
|
506
507
|
- 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.
|
13e51102
mandjemb
img
|
508
509
|
![CASE](rapport_image/erreur_sup.PNG)
|
882d59f8
mandjemb
Rapport
|
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
|
### 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
|
2cc93bf1
mandjemb
update rf
|
525
|
En résumé, ce 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 :
|
882d59f8
mandjemb
Rapport
|
526
|
- 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.
|
fe6de1ca
mandjemb
update rf
|
527
|
- La deuxième, de créer un interface.
|
882d59f8
mandjemb
Rapport
|
528
529
|
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.
|
fe6de1ca
mandjemb
update rf
|
530
|
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.
|