Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
import random
import pandas as pd
import os
import statistics
import re
file_path = '/content/Data_Base.xlsx'
data = pd.read_excel(file_path)
page_excel = 'exporter_les_noms.xlsx'
menu = []
Name_pattern = re.compile(r'^[A-Za-zéèêëàâäôöûüçÉÈÊËÀÂÄÔÖÛÜÇ][A-Za-zéèêëàâäôöûüçÉÈÊËÀÂÄÔÖÛÜÇ\'\-]*$')
Date_pattern = re.compile(r'^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}$')
Place_of_birth_pattern = re.compile(r'^[A-Za-zÀ-ÖØ-öø-ÿ\s]+$')
Address_pattern = re.compile(r'^[A-Za-z\s]+ \d+, [A-Za-z\s]+$')
Telephone_pattern = re.compile(r'^\d{3}/\d{2}\.\d{2}\.\d{2}$')
Email_pattern = re.compile(r'^[a-zA-Z0-9._%+-]+@student\.uclouvain\.be$')
Genre_pattern = re.compile(r'^[MFO]$')
Academic_year_pattern = re.compile(r'^(BAC[123]|MA[12])$')
Campus_pattern = re.compile(r'^(Louvain-la-Neuve|Mons)$', re.IGNORECASE)
# REGISTER
def enregistrer_eleve(data) :
# mise en place des patterns a respecter pour rentrer les informations
while True:
Name = input("Quel est son nom ? ") # Demander le nom à l'utilisateur
if Name_pattern.match(Name): # Vérifier si le nom correspond au format spécifié
print("Le nom est valide.")
break # Sortir de la boucle si le nom est valide
else:
print("Le nom n'est pas valide. Assurez-vous de suivre le format spécifié.")
while True: # Demander le prénom à l'utilisateur
Surname = input("Quel est son prénom ? ") # Vérifier si le prénom correspond au format spécifié
if Name_pattern.match(Surname):
print("Le prénom est valide.")
break # Sortir de la boucle si le prénom est valide
else:
print("Le prénom n'est pas valide. Assurez-vous de suivre le format spécifié.")
while True:
Date_of_birth = input("Veuillez entrer une date au format jj/mm/yyyy : ")
if Date_pattern.match(Date_of_birth):
print("La date est valide.")
break # Sortir de la boucle si la date est valide
else:
print("La date n'est pas valide. Assurez-vous de suivre le format jj/mm/yyyy.")
while True:
Place_of_birth = input("Quelle est la ville de naissance ? ")
if Place_of_birth_pattern.match(Place_of_birth):
print("La ville de naissance est valide.")
break # Sortir de la boucle si la ville de naissance est valide
else:
print("La ville de naissance n'est pas valide. Assurez-vous d'utiliser uniquement des lettres et des espaces.")
while True:
Address = input("Veuillez entrer une adresse au format 'rue numéro, ville' : ")
if Address_pattern.match(Address):
print("L'adresse est valide.")
break # Sortir de la boucle si l'adresse est valide
else:
print("L'adresse n'est pas valide. Assurez-vous de suivre le format 'rue numéro, ville'.")
while True:
Telephone = input("Quel est son numéro de téléphone ? (à mettre au format 000/00.00.00) ")
if Telephone_pattern.match(Telephone):
print("Le numéro de téléphone est valide.")
break # Sortir de la boucle si le numéro de téléphone est valide
else:
print("Le numéro de téléphone n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Email = input("Entrez l'email de l'université (@student.uclouvain.be) : ")
if Email_pattern.match(Email):
print("L'email est valide.")
break # Sortir de la boucle si l'email est valide
else:
print("L'email n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Genre = input("Quel est votre sexe ? (Pour Homme entrez M, pour Femme entrez F, et pour un autre type entrez O) : ")
if Genre_pattern.match(Genre):
print("Le genre est valide.")
break # Sortir de la boucle si le genre est valide
else:
print("Le genre n'est pas valide. Assurez-vous de suivre le format demandé.")
while True:
Academic_year = input("Quelle est votre année académique ? (BAC1/BAC2/BAC3/MA1/MA2) : ")
if Academic_year_pattern.match(Academic_year):
print("L'année académique est valide.")
break # Sortir de la boucle si l'année académique est valide
else:
print("L'année académique n'est pas valide. Assurez-vous de suivre le format demandé.")
Courses_and_grade = {}
if Academic_year == 'MA2':
for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1 + coursMA2 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'MA1':
for cours in coursBAC1 + coursBAC2 + coursBAC3 + coursMA1 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC3':
for cours in coursBAC1 + coursBAC2 + coursBAC3 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC2':
for cours in coursBAC1 + coursBAC2 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
elif Academic_year == 'BAC1':
for cours in coursBAC1 :
note = input(f"Quelle est la note pour {cours} ? ")
while not note.isdigit() or int(note) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
note = input(f"Quelle est la note pour {cours} ? ")
Courses_and_grade[cours] = int(note)
while True:
Campus = input("Entrez 'Louvain-la-Neuve' ou 'Mons' en fonction du campus : ")
if Campus_pattern.match(Campus):
print("Le choix du campus est valide.")
break # Sortir de la boucle si le choix du campus est valide
else:
print("Le choix du campus n'est pas valide. Assurez-vous de suivre le format demandé.")
enregistrer(data,Name, Surname, Date_of_birth, Place_of_birth, Address, Telephone, Email, Genre, Academic_year, Courses_and_grade, Campus)
def enregistrer(data, Name, Surname, Date_of_Birth, Place_of_Birth, Address, Telephone, Email, Genre, Academic_year, Courses_and_grade, Campus):
Matricule = generer_matricule(Name, Surname, Date_of_Birth)
etudiant = {
"Name": Name,
"Surname": Surname,
"Date of Birth": Date_of_Birth,
"Place of Birth": Place_of_Birth,
"Address": Address,
"Telephone": Telephone,
"Email": Email,
"Genre": Genre,
"Academic Year": Academic_year,
"Campus": Campus,
"Matricule": Matricule
}
for cours, note in Courses_and_grade.items():
etudiant[cours] = note
data = pd.concat([data, etudiant], ignore_index=True)
data.to_excel(file_path, index=False)
print('La personne a été enregistrée.\n')
return
def generer_matricule(Name, Surname, Date_of_birth) :
consonnes_nom = ''.join([c for c in Name if c.lower() not in 'aeiouy'])[:3]
consonnes_prenom = ''.join([c for c in Surname if c.lower() not in 'aeiouy'])[:2]
derniere_consonne_nom = ''.join([c for c in Surname if c.lower() not in 'aeiouy']).lower()[-1] # ne sait pas si c'est la consonne du prénom ou du nom
annee_naissance_str = str(Date_of_birth)[-2:]
entier_aleatoire = random.randint(0, 10)
matricule_e = f"{consonnes_nom}{consonnes_prenom}{derniere_consonne_nom}{annee_naissance_str}{entier_aleatoire}"
matricule_e = matricule_e.lower()
return matricule_e
# MODIFY
def modifier(data) : # il faudrait pouvoir modifier plusieurs champs sans soucis et ne pas remttre le matricule une fois rentrer
# matricule ne peut être modifié, il est unique donc je me base sur cela.
while True :
data_to_modify = input("Entrez le matricule de l'étudiant que vous souhaitez modifier (ou 'q pour quitter) : ")
if data_to_modify.lower() == 'q' :
print("Opération annulée.")
break
student_index = data[data['Matricule'] == data_to_modify.lower()].index.tolist()
if not student_index :
print("Aucun étudiant n'a été trouvé avec le matricule que vous avez spécifié.")
return
student_index = student_index[0]
print(f"\nModification de l'étudiant avec le matricule {data_to_modify} :\n")
print("1. Name")
print("2. Surname")
print("3. Date of Birth")
print("4. Place of Birth")
print("5. Address")
print("6. Telephone")
print("7. Email")
print("8. Sex (M | F | O)")
print("9. Academic Year")
print("10. Curriculum")
print("11. Courses already passed and their grade")
print("12. Campus")
field_to_modify = int(input("Entrez le numéro du champ que vous souhaitez modifier : "))
field_name_to_modify = field_mapping.get(field_to_modify, None)
print(f"Vous modifiez le champ : {field_name_to_modify}")
if field_to_modify == 1: # Si le champ à modifier est le nom (Name)
while True:
Name = input("Quel est le nom que vous voulez modifier ? ")
if Name_pattern.match(Name):
print("Le nom est valide.")
# Ajoutez ici le code pour mettre à jour le champ dans vos données
break # Sortir de la boucle si le nom est valide
else:
print("Le nom n'est pas valide. Assurez-vous de suivre le format spécifié.")
elif field_to_modify == 2:
while True: # Demander le prénom à l'utilisateur
Surname = input("Quel est son prénom ? ") # Vérifier si le prénom correspond au format spécifié
if Name_pattern.match(Surname):
print("Le prénom est valide.")
break # Sortir de la boucle si le prénom est valide
else:
print("Le prénom n'est pas valide. Assurez-vous de suivre le format spécifié.")
elif field_to_modify == 3 :
while True:
Date_of_birth = input("Veuillez entrer une date au format jj/mm/yyyy : ")
if Date_pattern.match(Date_of_birth):
print("La date est valide.")
break # Sortir de la boucle si la date est valide
else:
print("La date n'est pas valide. Assurez-vous de suivre le format jj/mm/yyyy.")
elif field_to_modify == 4 :
while True:
Place_of_birth = input("Quelle est la ville de naissance ? ")
if Place_of_birth_pattern.match(Place_of_birth):
print("La ville de naissance est valide.")
break # Sortir de la boucle si la ville de naissance est valide
else:
print("La ville de naissance n'est pas valide. Assurez-vous d'utiliser uniquement des lettres et des espaces.")
elif field_to_modify == 5 :
while True:
Address = input("Veuillez entrer une adresse au format 'rue numéro, ville' : ")
if Address_pattern.match(Address):
print("L'adresse est valide.")
break # Sortir de la boucle si l'adresse est valide
else:
print("L'adresse n'est pas valide. Assurez-vous de suivre le format 'rue numéro, ville'.")
elif field_to_modify == 6 :
while True:
Telephone = input("Quel est son numéro de téléphone ? (à mettre au format 000/00.00.00) ")
if Telephone_pattern.match(Telephone):
print("Le numéro de téléphone est valide.")
break # Sortir de la boucle si le numéro de téléphone est valide
else:
print("Le numéro de téléphone n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 7 :
while True:
Email = input("Entrez l'email de l'université (@student.uclouvain.be) : ")
if Email_pattern.match(Email):
print("L'email est valide.")
break # Sortir de la boucle si l'email est valide
else:
print("L'email n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 8 :
while True:
Genre = input("Quel est votre sexe ? (Pour Homme entrez M, pour Femme entrez F, et pour un autre type entrez O) : ")
if Genre_pattern.match(Genre):
print("Le genre est valide.")
break # Sortir de la boucle si le genre est valide
else:
print("Le genre n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 9 :
while True:
Academic_year = input("Quelle est votre année académique ? (BAC1/BAC2/BAC3/MA1/MA2) : ")
if Academic_year_pattern.match(Academic_year):
print("L'année académique est valide.")
break # Sortir de la boucle si l'année académique est valide
else:
print("L'année académique n'est pas valide. Assurez-vous de suivre le format demandé.")
elif field_to_modify == 11: # Courses and grades
print("Courses already passed and their grade:\n")
for course, grade in data.iloc[student_index].items():
if course not in field_mapping.values():
print(f"{course}: {grade}")
while True:
course_to_modify = input("Entrez le cours que vous souhaitez modifier : ")
if course_to_modify in data.columns: # Le cours a été trouvé, vous pouvez continuer avec le reste de votre code
print("Le cours spécifié a été trouvé.") # Ajoutez ici le reste de votre code pour traiter le cours
break # Sortir de la boucle puisque le cours a été trouvé
else:
print("Le cours spécifié n'a pas été trouvé. Veuillez en sélectionner un nouveau.")
new_grade = input(f"Entrez la nouvelle note pour {course_to_modify} : ")
while not new_grade.isdigit() or int(new_grade) not in range(0, 21):
print("La note doit être un nombre entier entre 0 et 20.")
new_grade = input(f"Entrez la nouvelle note pour {course_to_modify} : ")
# Update the grade
data.at[student_index, course_to_modify] = int(new_grade)
elif field_to_modify == 12 :
while True:
Campus = input("Entrez 'Louvain-la-Neuve' ou 'Mons' en fonction du campus : ")
if Campus_pattern.match(Campus):
print("Le choix du campus est valide.")
break # Sortir de la boucle si le choix du campus est valide
else:
print("Le choix du campus n'est pas valide. Assurez-vous de suivre le format demandé.")
else:
new_value = input(f"Entrez la nouvelle valeur pour le champ sélectionné : ")
data.at[student_index, field_mapping[field_to_modify]] = new_value
# Save the modified data to the Excel file
data.to_excel(file_path, index=False)
print("Modification effectuée avec succès.")
# Mapping for field names to DataFrame column names
field_mapping = {
1: 'Name',
2: 'Surname',
3: 'Date of Birth',
4: 'Place of Birth',
5: 'Address',
6: 'Telephone',
7: 'Email',
8: 'Genre',
9: 'Academic Year',
10: 'Curriculum',
12: 'Campus'
}
# DELETE
def supprimer(data):
matricule_to_delete = input("Entrez le matricule de l'étudiant que vous souhaitez supprimer : ")
student_index = data[data['Matricule'] == matricule_to_delete.lower()].index.tolist()
if not student_index:
print("Aucun étudiant n'a été trouvé avec le matricule que vous avez spécifié.")
return
student_index = student_index[0]
print(f"\nSuppression de l'étudiant avec le matricule {matricule_to_delete} :\n")
# Afficher les détails de l'étudiant avant la suppression
print("Détails de l'étudiant avant suppression :")
print(data.iloc[student_index])
confirmation = input("Voulez-vous vraiment supprimer cet étudiant ? (OUI/NON) ").upper()
if confirmation == "OUI":
# Supprimer l'étudiant
data = data.drop(index=student_index)
# Sauvegarder les données modifiées dans le fichier Excel
data.to_excel(file_path, index=False)
print("Suppression effectuée avec succès.")
else:
print("Suppression annulée.")
# FIND
def trouver_etudiant(data):
critere_recherche = input("Entrez le critère de recherche (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
if resultats.empty:
print("Aucun étudiant trouvé avec les critères spécifiés.")
else:
print("Étudiant(s) trouvé(s) :")
for index, row in resultats.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# SHOW
def filtrer(data):
if data.empty:
print("La liste des étudiants est vide.")
else:
print("\nListe des étudiants :")
for index, row in data.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# Utilisation de la fonction exporter_liste_etudiants_filtree_excel
# exporter_liste_etudiants_filtree_excel(data, 'liste_etudiants_filtree.xlsx')
"""
print('Pour Filtrer les élèves, entrez SCREEN')
print('Pour exporter la liste en document excel, entrez EXPORT')
print('Pour lire la liste, entrez READ')
montre = input("")
if montre == "SCREEN" :
filtrer(data)
elif montre == "EXPORT" :
exporter(data)
elif montre == "READ" :
lire(data)
"""
def show(data):
a = input("Voulez-vous voir la liste des étudiants ? OUI/NON")
if a == "OUI" :
for index, row in data.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
b = input("Voulez-vous exporter la liste ? OUI/NON")
if b == "OUI" :
try:
data.to_excel(page_excel, index=False)
print(f"La liste des étudiants a été exportée avec succès vers {page_excel}.")
except Exception as e:
print(f"Erreur lors de l'exportation vers Excel : {e}")
c = input("Voulez-vous lire la liste exportée ? OUI/NON")
if c == "OUI" :
try:
os.system(f"start excel {page_excel}")
except Exception as e:
print(f"Erreur lors de l'ouverture du fichier Excel : {e}")
return ouvrir_excel(page_excel)
return
return
return
def ouvrir_excel(page_excel):
try:
os.system(f"start excel {page_excel}")
except Exception as e:
print(f"Erreur lors de l'ouverture du fichier Excel : {e}")
# SORTING
def trier(data) :
print('1. Trier par ordre alphabétique croissant')
print('2. Trier par ordre alphabétique décroissant')
print('3. Trier par date de naissance')
print('4. Trier par age')
print('5. Trier par matricule')
print('6. Trier par année académique')
print('7. Obtenir toutes les personnes qui ont réussi un cours')
print('8. Obtenir toutes les personnes qui ont raté le cours')
print('9. Obtenir tous les étudiants de bachelier')
print('10. Obtenir tous les étudiants de master')
sorting = input("")
if sorting == "1" :
tri_asc(data)
elif sorting == "2" :
tri_desc(data)
elif sorting == "3" :
tri_date(data)
elif sorting == "4" :
tri_age(data)
elif sorting == "5" :
tri_matricule(data)
elif sorting == "6" :
tri_annee(data)
elif sorting == "7" :
tri_reussi(data)
elif sorting == "8" :
tri_rate(data)
elif sorting == "9" :
tri_bac(data)
elif sorting == "10" :
tri_master(data)
return
def tri_asc(data):
if 'Name' not in data.columns:
print("La colonne 'Name' n'existe pas dans le DataFrame.")
return
# Trier le DataFrame par la colonne 'Name'
data_trie = data.sort_values(by='Name', ascending=True)
# Afficher la liste triée
print("\nListe des étudiants triée par ordre alphabétique (croissant) :")
for index, row in data_trie.iterrows():
print(f"Nom: {row['Name']}, Prénom: {row['Surname']}, Matricule: {row['Matricule']}")
# Exemple d'utilisation
# Remplacez 'data' par le nom de votre DataFrame
#STATS
def stats(data):
print('1. Avoir les statistiques de bases')
print('2. Avoir toutes les notes des étudiants')
print('3. Avoir toutes les notes des étudiants dans un cours')
print('4. Exporter toutes les statistiques')
while True:
stats = input("Entrez le numéro de ce que vous voulez faire : ") # Vérifier si la commande est un entier
if stats.isdigit(): # Convertir la commande en entier
stats_int = int(stats) # Vérifier si la commande est entre 1 et 8
if 1 <= stats_int <= 8:
print("La commande est valide.")
break # Sortir de la boucle si la commande est valide
else:
print("La commande doit être comprise dans celles proposées.")
if stats == "1" :
stats_base(data)
elif stats == "2" :
stats_grade(data)
elif stats == "3" :
stats_cours(data)
elif stats == "4" :
stats_export(data)
def stats_base(data):
critere_recherche = input("Entrez le critère de recherche des statistiques de l'étudiant (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
notes_columns = resultats.select_dtypes(include=['number']).columns
for index, row in resultats.iterrows():
student_name = f"{row['Name']} {row['Surname']}"
student_notes = [row[column] for column in notes_columns if not pd.isnull(row[column])]
if student_notes:
lowest_grade = min(student_notes)
highest_grade = max(student_notes)
average_grade = statistics.mean(student_notes)
median_grade = statistics.median(student_notes)
std_deviation = statistics.stdev(student_notes)
print(f"\nStatistiques pour l'étudiant {student_name}:")
print(f"Note la plus basse : {lowest_grade}")
print(f"Note la plus élevée : {highest_grade}")
print(f"Moyenne des notes : {average_grade}")
print(f"Médiane des notes : {median_grade}")
print(f"Écart-type des notes : {std_deviation}")
else:
print(f"\nAucune note trouvée pour l'étudiant {student_name}.")
def stats_grade(data):
critere_recherche = input("Entrez le critère de recherche des statistiques de l'étudiant (Nom/Prénom/Matricule) : ").capitalize()
if critere_recherche == "Nom":
nom_recherche = input("Entrez le nom de l'étudiant : ")
resultats = data[data['Name'].str.contains(nom_recherche, case=False, na=False)]
elif critere_recherche == "Prénom":
prenom_recherche = input("Entrez le prénom de l'étudiant : ")
resultats = data[data['Surname'].str.contains(prenom_recherche, case=False, na=False)]
elif critere_recherche == "Matricule":
matricule_recherche = input("Entrez le matricule de l'étudiant : ")
resultats = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
else:
print("Critère de recherche invalide.")
return
etudiant = data[data['Matricule'].str.contains(matricule_recherche, case=False, na=False)]
if etudiant.empty:
print(f"Aucun étudiant trouvé avec le matricule {matricule_recherche}.")
return
# Sélection des colonnes contenant les notes
colonnes_notes = etudiant.select_dtypes(include=['number']).columns
# Affichage des notes de l'étudiant
print(f"Notes de l'étudiant avec le matricule {matricule_recherche} :")
for colonne in colonnes_notes:
if not pd.isnull(etudiant[colonne].values[0]):
print(f"{colonne}: {etudiant[colonne].values[0]}")
def stats_cours(data):
colonnes_numeriques = data.select_dtypes(include=['number']).columns.tolist()
print("Voici la liste des cours : ")
for colonne in colonnes_numeriques:
print(colonne)
# Vérifier si le cours existe dans les colonnes du DataFrame
nom_cours = input(print("Pour quel cours voulez-vous afficher les notes ?"))
if nom_cours not in data.columns:
print(f"Le cours spécifié ({nom_cours}) n'a pas été trouvé.")
return
# Filtrer les étudiants qui ont participé à ce cours (note non nulle)
etudiants_cours = data[data[nom_cours].notnull()]
if etudiants_cours.empty:
print(f"Aucun étudiant n'a participé au cours {nom_cours}.")
return
# Afficher les notes des étudiants pour le cours spécifié
print(f"Notes des étudiants pour le cours {nom_cours} :")
for index, row in etudiants_cours.iterrows():
print(f"Matricule: {row['Matricule']}, Note: {row[nom_cours]}")
def stats_export(data) :
return
# Exemple d'utilisation
# Assurez-vous que vous avez déjà défini et chargé votre DataFrame 'data' avant d'appeler cette fonction
# Remplacez 'Nom_du_Cours' par le nom réel du cours que vous recherchez
# afficher_notes_cours(data, 'Nom_du_Cours')
# Action
def action() :
print("Que voulez-vous faire ?\n Ci-dessous, vous trouverez ce qu'il est possible de faire suivi des commandes à taper.\n")
print("1. Inscrire un étudiant")
print("2. Modifier un ou plusieurs champs")
print("3. Supprimer un élève")
print("4. Trouver un élève")
print("5. Voir")
print("6. Trier, montrer ou exporter la liste")
print("7. Voir les statistiques")
print("8. Arreter le programme")
while True:
commande = input("Entrez le numéro de ce que vous voulez faire : ") # Vérifier si la commande est un entier
if commande.isdigit(): # Convertir la commande en entier
commande_int = int(commande) # Vérifier si la commande est entre 1 et 8
if 1 <= commande_int <= 8:
print("La commande est valide.")
break # Sortir de la boucle si la commande est valide
else:
print("La commande doit être comprise dans celles proposées.")
if commande == "1" :
enregistrer_eleve(data)
elif commande == "2" :
modifier(data)
elif commande == "3" :
supprimer(data)
elif commande == "4" :
trouver_etudiant(data)
elif commande == "5" :
show(data)
elif commande == "6" :
trier(data)
elif commande == "7" :
stats(data)
elif commande == "8" :
return False
menu = []
while True:
rep = action()
if rep is False:
break
else:
if rep == True:
menu = []
else:
menu.append(rep)