Skip to content
Extraits de code Groupes Projets
Valider 06c3b2a8 rédigé par Adrien Payen's avatar Adrien Payen
Parcourir les fichiers

last update

parent 6e267aac
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
Fichier ajouté
Fichier ajouté
Fichier ajouté
Aucun aperçu pour ce type de fichier
Fichier ajouté
...@@ -39,6 +39,10 @@ academic_year_pattern = re.compile(r'^(BAC[123]|MA[12])$') ...@@ -39,6 +39,10 @@ academic_year_pattern = re.compile(r'^(BAC[123]|MA[12])$')
campus_pattern = re.compile(r'^(Louvain-la-Neuve|Mons)$', re.IGNORECASE) campus_pattern = re.compile(r'^(Louvain-la-Neuve|Mons)$', re.IGNORECASE)
curriculum_pattern = re.compile(r'^(INGM1BA|INGM2M)$', re.IGNORECASE) curriculum_pattern = re.compile(r'^(INGM1BA|INGM2M)$', re.IGNORECASE)
def reload_data(file_path):
return pd.read_excel(file_path)
# REGISTER # REGISTER
def register_student(data): def register_student(data):
# Setting up the patterns to follow for entering information # Setting up the patterns to follow for entering information
...@@ -186,6 +190,7 @@ def register_student(data): ...@@ -186,6 +190,7 @@ def register_student(data):
# Ask the user if they want to modify any information before registration # Ask the user if they want to modify any information before registration
modify_info = input("Do you want to modify any information before registration? (YES/NO): ").upper() modify_info = input("Do you want to modify any information before registration? (YES/NO): ").upper()
if modify_info == "YES": if modify_info == "YES":
data = reload_data(file_path)
modify(data) # Call the modify function to update information modify(data) # Call the modify function to update information
break # Exit the loop after modification break # Exit the loop after modification
elif modify_info == "NO": elif modify_info == "NO":
...@@ -193,15 +198,7 @@ def register_student(data): ...@@ -193,15 +198,7 @@ def register_student(data):
else: else:
print("Invalid input. Please enter either 'YES' or 'NO'.") print("Invalid input. Please enter either 'YES' or 'NO'.")
return return
"""
def reload_data(file_path):
pd.read_excel(file_path)
return"""
# faire la fonction qui permet de faire un reload des données !!!!
...@@ -231,9 +228,11 @@ def register(data, firstname, lastname, Curriculum, date_of_birth, place_of_birt ...@@ -231,9 +228,11 @@ def register(data, firstname, lastname, Curriculum, date_of_birth, place_of_birt
data.to_excel(file_path, index=False) data.to_excel(file_path, index=False)
data = reload_data(file_path)
print('The person has been registered.\n') print('The person has been registered.\n')
return return data
def generate_matricule(firstname, lastname, date_of_birth): def generate_matricule(firstname, lastname, date_of_birth):
consonant_of_firstname = ''.join([c for c in firstname if c.lower() not in 'aeiou'])[:3] consonant_of_firstname = ''.join([c for c in firstname if c.lower() not in 'aeiou'])[:3]
...@@ -267,6 +266,13 @@ def modify(data): ...@@ -267,6 +266,13 @@ def modify(data):
if confirmation == "YES": if confirmation == "YES":
student_index = student_row.index[0] student_index = student_row.index[0]
print("\nDetails of the student before modification:")
for col in ['Matricule', 'Firstname', 'Lastname', 'Date of Birth', 'Place of Birth', 'Address', 'Telephone', 'Email', 'Gender', 'Academic Year', 'Curriculum', 'Campus']:
print(f"{col}: {data.at[student_index, col]}")
for course, grade in data.iloc[student_index].items():
if course not in field_mapping.values():
print(f"{course}: {grade}")
print(f"\nModifying the student with matricule {matricule_to_modify}:\n") print(f"\nModifying the student with matricule {matricule_to_modify}:\n")
print("1. Firstname") print("1. Firstname")
print("2. Lastname") print("2. Lastname")
...@@ -286,6 +292,8 @@ def modify(data): ...@@ -286,6 +292,8 @@ def modify(data):
field_name_to_modify = field_mapping.get(field_to_modify, None) field_name_to_modify = field_mapping.get(field_to_modify, None)
print(f"You are modifying the field: {field_name_to_modify}") print(f"You are modifying the field: {field_name_to_modify}")
matricule = None
if field_to_modify == 1: # If the field to modify is the name (Name) if field_to_modify == 1: # If the field to modify is the name (Name)
while True: while True:
firstname = input("What is the name you want to modify? ") firstname = input("What is the name you want to modify? ")
...@@ -440,7 +448,8 @@ def modify(data): ...@@ -440,7 +448,8 @@ def modify(data):
print("Modification canceled.") print("Modification canceled.")
break # Exit the loop if modification is canceled break # Exit the loop if modification is canceled
data.at[student_index, 'Matricule'] = matricule # Update the Matricule column with the new matricule if matricule is not None:
data.at[student_index, 'Matricule'] = matricule # Update the Matricule column with the new matricule
print("Be careful because of a modification the registration number has changed :") print("Be careful because of a modification the registration number has changed :")
...@@ -448,6 +457,7 @@ def modify(data): ...@@ -448,6 +457,7 @@ def modify(data):
# Save the modified data to the Excel file # Save the modified data to the Excel file
data.to_excel(file_path, index=False) data.to_excel(file_path, index=False)
data = reload_data(file_path)
print("Modification successfully done.") print("Modification successfully done.")
# Mapping for field names to DataFrame column names # Mapping for field names to DataFrame column names
...@@ -714,7 +724,7 @@ def sort_master(data): ...@@ -714,7 +724,7 @@ def sort_master(data):
def export_option(data): def export_option(data):
export = input("Do you want to export in a file? (YES/NO) ").upper() export = input("Do you want to export in a file? (YES/NO) ").upper()
if export == "YES": if export == "YES":
filename = input("Enter the filename: ") filename = input("Enter the filename without .xlsx : ")
filename = filename + '.xlsx' filename = filename + '.xlsx'
export_data_to_excel(data, filename) export_data_to_excel(data, filename)
...@@ -738,9 +748,9 @@ def see_the_data(data, columns_to_show=None): ...@@ -738,9 +748,9 @@ def see_the_data(data, columns_to_show=None):
def statistics_analysis(data): def statistics_analysis(data):
print_menu([ print_menu([
"Get basic statistics", "Get basic statistics of a student",
"Get all student grades", "Get all grades of a student",
"Get all grades for a course", "Get all grades of a course",
]) ])
stats_choice = get_valid_input("Enter the number of what you want to do: ", 1, 3) stats_choice = get_valid_input("Enter the number of what you want to do: ", 1, 3)
...@@ -830,7 +840,7 @@ def display_student_grades(results): ...@@ -830,7 +840,7 @@ def display_student_grades(results):
for index, row in results.iterrows(): for index, row in results.iterrows():
student_name = f"{row['Firstname']} {row['Lastname']}" student_name = f"{row['Firstname']} {row['Lastname']}"
print(f"\nGrades for student {student_name}:") print(f"\nGrades for student {student_name}:")
table = [[column, grade] for column, grade in row.iteritems() if pd.notnull(grade)] table = [[column, grade] for column, grade in row.items() if pd.notna(grade) and column not in ['Firstname', 'Lastname', 'Academic Year', 'Curriculum', 'Place of Birth', 'Telephone', 'Address', 'Gender', 'Email', 'Campus', 'Date of Birth', 'Matricule']]
print(tabulate(table, headers=["Course", "Grade"], tablefmt="pretty")) print(tabulate(table, headers=["Course", "Grade"], tablefmt="pretty"))
export_choice = input("Do you want to export these statistics? (YES/NO): ").upper() export_choice = input("Do you want to export these statistics? (YES/NO): ").upper()
if export_choice == 'YES': if export_choice == 'YES':
...@@ -838,7 +848,8 @@ def display_student_grades(results): ...@@ -838,7 +848,8 @@ def display_student_grades(results):
def course_grades(data): def course_grades(data):
print("Here is the list of courses:") print("Here is the list of courses:")
print(data.select_dtypes(include=['number']).columns) for course in data.columns[13:]:
print(f"- {course}")
course_name = input("For which course do you want to display grades? ") course_name = input("For which course do you want to display grades? ")
...@@ -870,12 +881,6 @@ def display_course_grades(students_in_course, course_name): ...@@ -870,12 +881,6 @@ def display_course_grades(students_in_course, course_name):
def export_stats(data): def export_stats(data):
# Ensure numeric columns only # Ensure numeric columns only
numeric_columns = data.select_dtypes(include=['number']).columns numeric_columns = data.select_dtypes(include=['number']).columns
# Calculate overall statistics
overall_stats = calculate_overall_stats(data, numeric_columns)
# Save overall statistics to Excel
overall_stats.to_excel("overall_statistics.xlsx", index=False)
# Calculate and save statistics for each student # Calculate and save statistics for each student
for index, row in data.iterrows(): for index, row in data.iterrows():
...@@ -885,18 +890,7 @@ def export_stats(data): ...@@ -885,18 +890,7 @@ def export_stats(data):
print("Statistics exported successfully.") print("Statistics exported successfully.")
def calculate_overall_stats(data, numeric_columns):
all_grades = [row[column] for column in numeric_columns for _, row in data.iterrows() if not pd.isnull(row[column])]
overall_stats = {
"Lowest grade": min(all_grades),
"Highest grade": max(all_grades),
"Average grade": statistics.mean(all_grades),
"Median grade": statistics.median(all_grades),
"Standard deviation of grades": statistics.stdev(all_grades)
}
return pd.DataFrame(list(overall_stats.items()), columns=["Metric", "Value"])
def calculate_student_stats(row, numeric_columns): def calculate_student_stats(row, numeric_columns):
student_grades = [row[column] for column in numeric_columns if not pd.isnull(row[column])] student_grades = [row[column] for column in numeric_columns if not pd.isnull(row[column])]
...@@ -919,7 +913,7 @@ def calculate_student_stats(row, numeric_columns): ...@@ -919,7 +913,7 @@ def calculate_student_stats(row, numeric_columns):
# Action # Action
def action(): def action(data):
print("What do you want to do?\nBelow, you will find what is possible followed by the commands to type.") print("What do you want to do?\nBelow, you will find what is possible followed by the commands to type.")
print("1. Register a student") print("1. Register a student")
print("2. Modify one or more fields") print("2. Modify one or more fields")
...@@ -960,11 +954,13 @@ def action(): ...@@ -960,11 +954,13 @@ def action():
menu = [] menu = []
while True: while True:
response = action() data = reload_data(file_path)
response = action(data)
if response is False: if response is False:
break break
else: else:
if response == True: if response:
# Reload the menu if the file was modified
menu = [] menu = []
else: else:
menu.append(response) menu.append(response)
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter