diff --git a/singleFile.c b/singleFile.c deleted file mode 100644 index a3731ce..0000000 --- a/singleFile.c +++ /dev/null @@ -1,1189 +0,0 @@ -//+--------------------------------------------------------------------------------+ -//| | -//| Ce projet réalisé par Victor PASGRIMAUD et Lukian LEIZOUR avant le 01/12/2023. | -//| Il permet de stocker des conférences ainsi que des abonnés qui y participent. | -//| | -//+--------------------------------------------------------------------------------+ - -#include -#include -#include -#include - -//+----------------------------------------+ -//| Conf management | -//+----------------------------------------+ - -struct listenerList; - -//Structure permettant de stocker les conférences, le champs listeners correspond à une liste de pointeurs d'abonnés. - -typedef struct conf -{ - int id; - char title[30]; - char speaker[20]; - int day; - int month; - int year; - struct listenerList *listeners; - struct conf *next; -} tConf; - -typedef struct confList -{ - struct conf *conf; - int grade; - struct confList *next; -} tConfList; - -//Structure permettant de stocker les abonnés, le champs confs correspond à une liste de pointeurs de conférences. - -typedef struct listener -{ - int id; - char name[20]; - int age; - int level; - struct confList *confs; - struct listener *prev; - struct listener *next; -} tListener; - -typedef struct listenerList -{ - struct listener *listener; - int grade; - struct listenerList *next; -} tListenerList; - -typedef tConf *ptConf; -typedef tListener *ptListener; -typedef tConfList *ptConfList; -typedef tListenerList *ptListenerList; - -int findConfId(ptConf confChain); -ptConf newConfChain(); -void addConf(ptConf confChain, int id, char title[], char speaker[], int day, int month, int year); -void removeConf(ptConf confChain, int id); -int findListenerId(ptListener listenerChain); -ptListener newListenerChain(); -int addListener(ptListener listenerChain, int id, char name[], int age, int level); -void removeListener(ptListener listenerChain, int id); -void addConfToConfList(ptConfList confList, ptConf conf, int grade); -void removeConfFromConfList(ptConfList confList, ptConf conf); -void printConfList(ptConfList confList); -void addListenerToListenerList(ptListenerList listenerList, ptListener listener, int grade); -void removeListenerFromListenerList(ptListenerList listenerList, ptListener listener); -void printListenerList(ptListenerList listenerList); -int participateToConf(ptConf confChain, ptListener listenerChain, int confId, int listenerId, int grade); -int confGradeAvg(ptConf conf); -int confParticipations(ptConf conf); - -//fonction permettant de trouver un id de conférence libre. - -int findConfId(ptConf confChain) -{ - ptConf px = confChain; - int max = 0; - - while (px->next != NULL) - { - if (px->id > max) - { - max = px->id; - } - - px = px->next; - } - - return max + 1; -} - -//fonction permettant de créer une liste de conférences vide. -//nous ajoutons un élément vide afin de grandement décomplexifier la suppression de conférences. - -ptConf newConfChain() -{ - ptConf confChain = (ptConf)malloc(sizeof(tConf)); - - confChain->next = (ptConf)malloc(sizeof(tConf)); - confChain->next->next = NULL; - confChain->id = -1; - - return confChain; -} - -//fonction permettant d'ajouter une conférence à une liste de conférences. - -void addConf(ptConf confChain, int id, char title[], char speaker[], int day, int month, int year) -{ - ptConf px = confChain; - - while (px->next != NULL) - { - px = px->next; - } - - px->id = id; - px->day = day; - px->month = month; - px->year = year; - strcpy(px->title, title); - strcpy(px->speaker, speaker); - px->listeners = (ptListenerList)malloc(sizeof(tListenerList)); - px->listeners->next = (ptListenerList)malloc(sizeof(tListenerList)); - px->listeners->listener = NULL; - px->listeners->next->next = NULL; - px->next = (ptConf)malloc(sizeof(tConf)); - px->next->next = NULL; -} - -//fonction permettant de supprimer une conférence d'une liste de conférences. - -void removeConf(ptConf confChain, int id) -{ - //on recherche la conférence à supprimer. - - ptConf px = confChain; - - while (px->next != NULL && px->next->id != id) - { - px = px->next; - } - - if (px->next != NULL && px->next->id == id) - { - //on supprime la conférence de tous les abonnés qui y ont participé. - - ptListenerList py = px->next->listeners->next; - - while (py->next != NULL) - { - removeConfFromConfList(py->listener->confs, px->next); - py = py->next; - } - - //on supprime la conférence de la liste de conférences. - - ptConf tmp = px->next->next; - free(px->next); - px->next = tmp; - } -} - -//fonction permettant de trouver un id d'abonné libre. - -int findListenerId(ptListener listenerChain) -{ - ptListener px = listenerChain; - int max = 0; - - while (px->next != NULL) - { - if (px->id > max) - { - max = px->id; - } - - px = px->next; - } - - return max + 1; -} - -//fonction permettant de créer une liste d'abonnés vide. -//nous ajoutons un élément vide afin de grandement décomplexifier la suppression d'abonnés. - -ptListener newListenerChain() -{ - ptListener listenerChain = (ptListener)malloc(sizeof(tListener)); - - listenerChain->prev = NULL; - listenerChain->next = (ptListener)malloc(sizeof(tListener)); - listenerChain->next->prev = listenerChain; - listenerChain->next->next = NULL; - listenerChain->id = -1; - - return listenerChain; -} - -//fonction permettant d'ajouter un abonné à une liste d'abonnés. - -int addListener(ptListener listenerChain, int id, char name[], int age, int level) -{ - if (level < 0 || level > 5) - { - return -1; - } - - ptListener px = listenerChain; - - while (px->next != NULL) - { - px = px->next; - } - - px->id = id; - strcpy(px->name, name); - px->age = age; - px->level = level; - px->confs = (ptConfList)malloc(sizeof(tConfList)); - px->confs->next = (ptConfList)malloc(sizeof(tConfList)); - px->confs->conf = NULL; - px->confs->next->next = NULL; - px->next = (ptListener)malloc(sizeof(tListener)); - px->next->next = NULL; - px->next->prev = px; - return 0; -} - -//fonction permettant de supprimer un abonné d'une liste d'abonnés. - -void removeListener(ptListener listenerChain, int id) -{ - //on recherche l'abonné à supprimer. - - ptListener px = listenerChain; - - while (px->next != NULL && px->next->id != id) - { - px = px->next; - } - - if (px->next != NULL && px->next->id == id) - { - //on supprime l'abonné de toutes les conférences auxquelles il a participé. - - ptConfList py = px->next->confs->next; - - while (py->next != NULL) - { - removeListenerFromListenerList(py->conf->listeners, px->next); - py = py->next; - } - - //on supprime l'abonné de la liste d'abonnés. - - ptListener tmp = px->next->next; - free(px->next); - px->next = tmp; - px->next->prev = px; - } -} - -//fonction permettant d'ajouter une conférence à une liste de conférences. - -void addConfToConfList(ptConfList confList, ptConf conf, int grade) -{ - ptConfList px = confList; - - while (px->next != NULL) - { - px = px->next; - } - - px->conf = conf; - px->next = (ptConfList)malloc(sizeof(tConfList)); - px->grade = grade; - px->next->next = NULL; -} - -//fonction permettant de supprimer une conférence d'une liste de conférences. - -void removeConfFromConfList(ptConfList confList, ptConf conf) -{ - ptConfList px = confList; - - while (px->next != NULL && px->next->conf != conf) - { - px = px->next; - } - - if (px->next != NULL && px->next->conf == conf) - { - ptConfList tmp = px->next->next; - free(px->next); - px->next = tmp; - } -} - -//fonction permettant d'afficher une liste de conférences. - -void printConfList(ptConfList confList) -{ - ptConfList px = confList; - - printf("Participation aux conferences : "); - while (px->next != NULL) - { - printf("%s(%d) ", px->conf->title, px->grade); - px = px->next; - } - printf("\n"); -} - -//fonction permettant d'ajouter un abonné à une liste d'abonnés. - -void addListenerToListenerList(ptListenerList listenerList, ptListener listener, int grade) -{ - ptListenerList px = listenerList; - - while (px->next != NULL) - { - px = px->next; - } - - px->listener = listener; - px->next = (ptListenerList)malloc(sizeof(tListenerList)); - px->grade = grade; - px->next->next = NULL; -} - -//fonction permettant de supprimer un abonné d'une liste d'abonnés. - -void removeListenerFromListenerList(ptListenerList listenerList, ptListener listener) -{ - ptListenerList px = listenerList; - - while (px->next != NULL && px->next->listener != listener) - { - px = px->next; - } - - if (px->next != NULL && px->next->listener == listener) - { - ptListenerList tmp = px->next->next; - free(px->next); - px->next = tmp; - } -} - -//fonction permettant d'afficher une liste d'abonnés. - -void printListenerList(ptListenerList listenerList) -{ - ptListenerList px = listenerList; - - printf("Participants : "); - while (px->next != NULL) - { - printf("%s(%d) ", px->listener->name, px->grade); - px = px->next; - } - printf("\n"); -} - -//fonction permettant à un abonné de participer à une conférence. - -int participateToConf(ptConf confChain, ptListener listenerChain, int confId, int listenerId, int grade) -{ - //on vérifie que la note est comprise entre 0 et 5 et que l'abonné n'a pas déjà participé à la conférence. - - if (grade < 0 || grade > 5) - { - return -1; - } - - ptConf px = confChain; - ptListener py = listenerChain; - ptListenerList pz; - - while (px->next != NULL && px->id != confId) - { - px = px->next; - } - - pz = px->listeners->next; - while (pz->next != NULL) - { - if (pz->listener->id == listenerId) - { - return -2; - } - pz = pz->next; - } - - while (py->next != NULL && py->id != listenerId) - { - py = py->next; - } - - if (px->id != confId || py->id != listenerId) - { - return -2; - } - - //on ajoute la conférence à la liste de conférences de l'abonné et l'abonné à la liste d'abonnés de la conférence. - - addListenerToListenerList(px->listeners, py, grade); - addConfToConfList(py->confs, px, grade); - - return 0; -} - -//fonction permettant de calculer la moyenne des notes d'une conférence. - -int confGradeAvg(ptConf conf) -{ - ptListenerList px = conf->listeners->next; - int total = 0, nb = 0; - - while (px->next != NULL) - { - total += px->grade; - nb++; - px = px->next; - } - - if (nb != 0) - { - return total / nb; - } - else - { - return -1; - } -} - -//fonction permettant de calculer le nombre de participants à une conférence. - -int confParticipations(ptConf conf) -{ - ptListenerList px = conf->listeners->next; - int nb = 0; - - while (px->next != NULL) - { - nb++; - px = px->next; - } - - return nb; -} - -//+----------------------------------------+ -//| Files management | -//+----------------------------------------+ - -void readConfs(ptConf confChain); -void readListeners(ptListener listenerChain); -void readRelations(ptConf confChain, ptListener listenerChain); -void saveConf(ptConf confChain); -void saveListeners(ptListener listenerChain); -void saveRelations(ptConf confChain); - -//fonction permettant de lire les conférences dans le fichier ./data/confs. - -void readConfs(ptConf confChain) -{ - //on ouvre le fichier ./data/confs. - - FILE *file = fopen("./data/confs", "r"); - char line[100]; - //on vérifie que le fichier a bien été ouvert. - - if (file == NULL) - { - printf("ça marche pas."); - return; - } - - //on lit le fichier ligne par ligne et on ajoute les conférences à la liste de conférences. - - while (fgets(line, sizeof(line), file)) - { - int id = atoi(strtok(line, ",")); - char *title = strtok(NULL, ","); - char *speaker = strtok(NULL, ","); - int day = atoi(strtok(NULL, ",")); - int month = atoi(strtok(NULL, ",")); - int year = atoi(strtok(NULL, ",")); - - addConf(confChain, id, title, speaker, day, month, year); - } - - //on ferme le fichier. - - fclose(file); -} - -//fonction permettant de lire les abonnés dans le fichier ./data/listeners. - -void readListeners(ptListener listenerChain) -{ - //on ouvre le fichier ./data/listeners. - - FILE *file = fopen("./data/listeners", "r"); - char line[100]; - - //on vérifie que le fichier a bien été ouvert. - - if (file == NULL) - { - printf("ça marche pas."); - return; - } - - //on lit le fichier ligne par ligne et on ajoute les abonnés à la liste d'abonnés. - - while (fgets(line, sizeof(line), file)) - { - int id = atoi(strtok(line, ",")); - char *name = strtok(NULL, ","); - int day = atoi(strtok(NULL, ",")); - int month = atoi(strtok(NULL, ",")); - addListener(listenerChain, id, name, day, month); - } - - //on ferme le fichier. - - fclose(file); -} - -//fonction permettant de lire les relations entre conférences et abonnés dans le fichier ./data/relations. - -void readRelations(ptConf confChain, ptListener listenerChain) -{ - //on ouvre le fichier ./data/relations. - - FILE *file = fopen("./data/relations", "r"); - char line[100]; - char *token1; - char *token2; - - //on vérifie que le fichier a bien été ouvert. - - if (file == NULL) - { - printf("ça marche pas."); - return; - } - - //on lit le fichier ligne par ligne et on ajoute les relations entre conférences et abonnés. - - while (fgets(line, sizeof(line), file)) - { - int confId = atoi(strtok(line, ":")); - - while ((token1 = strtok(NULL, ";")) != NULL && (token2 = strtok(NULL, ",")) != NULL) - { - participateToConf(confChain, listenerChain, confId, atoi(token1), atoi(token2)); - } - } - - //on ferme le fichier. - - fclose(file); -} - -//fonction permettant d'écrire les conférences dans le fichier ./data/confs. - -void saveConf(ptConf confChain) -{ - //on ouvre le fichier ./data/confs. - - FILE *file = fopen("./data/confs", "w"); - ptConf px = confChain; - - //on écrit les conférences dans le fichier. - - while (px->next != NULL) - { - fprintf(file, "%d,%s,%s,%d,%d,%d\n", px->id, px->title, px->speaker, px->day, px->month, px->year); - px = px->next; - } - - //on ferme le fichier. - - fclose(file); -} - -//fonction permettant d'écrire les abonnés dans le fichier ./data/listeners. - -void saveListeners(ptListener listenerChain) -{ - //on ouvre le fichier ./data/listeners. - - FILE *file = fopen("./data/listeners", "w"); - ptListener px = listenerChain; - - //on écrit les abonnés dans le fichier. - - while (px->next != NULL) - { - fprintf(file, "%d,%s,%d,%d\n", px->id, px->name, px->age, px->level); - px = px->next; - } - - //on ferme le fichier. - - fclose(file); -} - -//fonction permettant d'écrire les relations entre conférences et abonnés dans le fichier ./data/relations. - -void saveRelations(ptConf confChain) -{ - //on ouvre le fichier ./data/relations. - - FILE *file = fopen("./data/relations", "w"); - ptConf px = confChain; - ptListenerList py; - printf("test"); - - //on écrit les relations entre conférences et abonnés dans le fichier. - - while (px->next != NULL) - { - printf("test"); - py = px->listeners->next; - - if (py->next != NULL) - { - fprintf(file, "%d:", px->id); - } - - while (py->next != NULL) - { - fprintf(file, "%d;%d", py->listener->id, py->grade); - if (py->next->next != NULL) - { - fprintf(file, ","); - } - else - { - fprintf(file, "\n"); - } - py = py->next; - } - - px = px->next; - } - - //on ferme le fichier. - - fclose(file); -} - -//+----------------------------------------+ -//| Screen manager | -//+----------------------------------------+ - -void goToCoords(int x, int y); -void drawHoryLine(char c, int lenght); -void drawVertiLine(char c, int lenght); -void drawRectangle(int x, int y, int lenght, int height); -void drawMenu(char *options[], int lenght); -void tasse(); -void menuConf(ptConf confChain, ptListener listenerChain); -void menuAbo(ptConf confChain, ptListener listenerChain); -void menu(ptConf confChain, ptListener listenerChain); - -//fonction permettant de déplacer le curseur à des coordonnées données. - -void goToCoords(int x, int y) -{ - COORD coords; - - coords.X = x; - coords.Y = y; - - SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coords); -} - -//fonction permettant de dessiner une ligne horizontale dans la console. - -void drawHoryLine(char c, int lenght) -{ - int i = 0; - - while (i != lenght) - { - printf("%c", c); - i++; - } -} - -//fonction permettant de dessiner une ligne verticale dans la console. - -void drawVertiLine(char c, int lenght) -{ - CONSOLE_SCREEN_BUFFER_INFO info; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info); - int x = info.dwCursorPosition.X; - int y = info.dwCursorPosition.Y; - - int i = 0; - - while (i != lenght) - { - goToCoords(x, y + i); - printf("%c", c); - i++; - } -} - -//fonction permettant de dessiner un rectangle à partir d'un point de départ, d'une longueur et d'une hauteur. - -void drawRectangle(int x, int y, int lenght, int height) -{ - goToCoords(x, y); - printf("%c", 201); - drawHoryLine(205, lenght - 2); - printf("%c", 187); - goToCoords(x, y + 1); - drawVertiLine(186, height - 2); - goToCoords(x + lenght - 1, y + 1); - drawVertiLine(186, height - 2); - goToCoords(x, y + height - 1); - printf("%c", 200); - drawHoryLine(205, lenght - 2); - printf("%c", 188); -} - -//fonction permettant de dessiner un menu à partir d'un tableau de chaînes de caractères. - -void drawMenu(char *options[], int lenght) -{ - //on calcule la longueur de la chaîne la plus longue. - - int max = strlen(options[0]); - int i; - - for (i = 0; i < lenght; i++) - { - if (strlen(options[i]) > max) - { - max = strlen(options[i]); - } - } - - //on récupère la taille de la console. - - CONSOLE_SCREEN_BUFFER_INFO info; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info); - int columns = info.srWindow.Right - info.srWindow.Left + 1; - int rows = info.srWindow.Bottom - info.srWindow.Top + 1; - - //on dessine le rectangle. - - drawRectangle((columns - max - 4) / 2, 2, max + 4, lenght + 4); - - //on écrit les options. - - for (i = 0; i < lenght; i++) - { - goToCoords((columns - max - 4) / 2 + 2, 4 + i); - printf("%s", options[i]); - } -} - -//+---------------------------+ -//| | -//| ( ) ( ) ) | -//| ) ( ) ( ( | -//| ( ) ( ) ) | -//| _____________ | -//| <_____________> ___ | -//| | |/ _ \ | -//| | | | | | -//| | |_| | | -//| ___| |\___/ | -//| / \___________/ \ | -//| \_____________________/ | -//| | -//+---------------------------+ - -//fonction permettant d'afficher un tasse. - -void tasse() -{ - printf(" ( ) ( ) )\n ) ( ) ( (\n ( ) ( ) )\n _____________\n <_____________> ___\n | |/ _ \\\n | | | |\n | |_| |\n ___| |\\___/\n/ \\___________/ \\\n\\_____________________/\n"); -} - -//fonction permettant d'afficher le menu des conférences. - -void menuConf(ptConf confChain, ptListener listenerChain) -{ - //on affiche le menu. - - char *options[] = {"1/ Voir la liste des conferences", "2/ Ajouter une conference", "3/ Supprimer une conference", "4/ Supprimer les conferences inferieures a une date", "5/ Retour"}; - system("cls"); - drawMenu(options, 5); - goToCoords(0, 13); - tasse(); - printf("\n"); - - //on récupère le choix de l'utilisateur. - - printf("Que voulez-vous faire ? : "); - int choice; - scanf("%d", &choice); - - //on effectue l'action correspondante. - - switch (choice) - { - case 1: //on affiche la liste des conférences. - { - ptConf px = confChain->next; - - while (px->next != NULL) - { - printf("Id : %d\nTitre : %s\nConferencier : %s\n", px->id, px->title, px->speaker); - printf("Date : %d/%d/%d\n", px->day, px->month, px->year); - printf("Nombre de participants : %d\n", confParticipations(px)); - if (px->listeners->next->next != NULL) - { - printListenerList(px->listeners->next); - } - int avg; - if ((avg = confGradeAvg(px) != -1)) - { - printf("Moyenne des notes : %d\n", confGradeAvg(px)); - } - printf("\n"); - px = px->next; - } - system("pause"); - menuConf(confChain, listenerChain); - break; - } - - case 2: //on ajoute une conférence. - { - int id, day, month, year; - char title[30]; - char speaker[20]; - - id = findConfId(confChain); - printf("Titre de la conference : "); - scanf("%29s", &title); - printf("Nom du conferencier : "); - scanf("%19s", &speaker); - printf("Jour : "); - scanf("%d", &day); - printf("Mois : "); - scanf("%d", &month); - printf("Annee : "); - scanf("%d", &year); - - addConf(confChain, id, title, speaker, day, month, year); - saveConf(confChain->next); - menuConf(confChain, listenerChain); - break; - } - - case 3: //on supprime une conférence. - { - ptConf px = confChain->next; - - printf("\n"); - while (px->next != NULL) - { - printf("%d : %s\n", px->id, px->title); - px = px->next; - } - printf("\n"); - - int id; - - printf("Id de la conference a supprimer : "); - scanf("%d", &id); - - removeConf(confChain, id); - saveConf(confChain->next); - saveRelations(confChain->next); - menuConf(confChain, listenerChain); - break; - } - - case 4: //on supprime les conférences inférieures à une date. - { - ptConf px = confChain->next; - - printf("\n"); - while (px->next != NULL) - { - printf("%s : %d/%d/%d\n", px->title, px->day, px->month, px->year); - px = px->next; - } - printf("\n"); - - int day, month, year, time; - printf("Jour : "); - scanf("%d", &day); - printf("Mois : "); - scanf("%d", &month); - printf("Annee : "); - scanf("%d", &year); - - time = day + 31 * month + 365 * year; - - px = confChain; - - while (px->next != NULL) - { - if ((px->day + px->month * 31 + px->year * 365) < time && px != confChain) - { - ptConf py = px->next; - removeConf(confChain, px->id); - px = py; - } - else if ((px->day + px->month * 31 + px->year * 365) < time && px == confChain) - { - removeConf(confChain, px->id); - } - else - { - px = px->next; - } - } - - saveConf(confChain->next); - saveRelations(confChain->next); - menuConf(confChain, listenerChain); - } - - case 5: //on retourne au menu principal. - menu(confChain, listenerChain); - break; - - default: - break; - } -} - -//fonction permettant d'afficher le menu des abonnés. - -void menuAbo(ptConf confChain, ptListener listenerChain) -{ - //on affiche le menu. - - char *options[] = {"1/ Voir la liste des abonnes", "2/ Ajouter un abonne", "3/ Suprimer un abonne", "4/ Retour"}; - system("cls"); - drawMenu(options, 4); - goToCoords(0, 12); - tasse(); - printf("\n"); - - //on récupère le choix de l'utilisateur. - - printf("Que voulez-vous faire ? : "); - int choice; - scanf("%d", &choice); - - //on effectue l'action correspondante. - - switch (choice) - { - case 1: //on affiche la liste des abonnés. - { - ptListener py = listenerChain->next; - - while (py->next != NULL) - { - printf("Id : %d\nNom: %s\nAge: %d\nNiveau: %d\n", py->id, py->name, py->age, py->level); - if (py->confs->next->next != NULL) - { - printConfList(py->confs->next); - } - printf("\n"); - py = py->next; - } - system("pause"); - menuAbo(confChain, listenerChain); - break; - } - - case 2: //on ajoute un abonné. - { - int id, age, level; - char name[20]; - - id = findListenerId(listenerChain); - printf("Nom : "); - scanf("%19s", &name); - printf("Age : "); - scanf("%d", &age); - printf("Niveau : "); - scanf("%d", &level); - - if (addListener(listenerChain, id, name, age, level) != -1) - { - saveListeners(listenerChain->next); - } - else - { - printf("Le niveau de l'abonne doit etre compris entre 0 et 5.\n\n"); - system("pause"); - } - menuAbo(confChain, listenerChain); - break; - } - - case 3: //on supprime un abonné. - { - ptListener px = listenerChain->next; - - printf("\n"); - while (px->next != NULL) - { - printf("%d : %s\n", px->id, px->name); - px = px->next; - } - printf("\n"); - - int id; - - printf("Id de l'abonne a supprimer : "); - scanf("%d", &id); - - removeListener(listenerChain, id); - saveListeners(listenerChain->next); - saveRelations(confChain->next); - menuAbo(confChain, listenerChain); - break; - } - - case 4: //on retourne au menu principal. - menu(confChain, listenerChain); - break; - - default: - break; - } -} - -//fonction permettant d'afficher le menu principal. - -void menu(ptConf confChain, ptListener listenerChain) -{ - //on affiche le menu. - - char *options[] = {"1/ Gestion des conferences", "2/ Gestion des abonnes", "3/ Participer a une conference", "4/ Voir la meilleure conference", "5/ Quitter"}; - system("cls"); - drawMenu(options, 5); - goToCoords(0, 13); - tasse(); - printf("\n"); - - //on récupère le choix de l'utilisateur. - - printf("Que voulez-vous faire ? : "); - int choice; - scanf("%d", &choice); - - //on effectue l'action correspondante. - - switch (choice) - { - case 1: //on affiche le menu des conférences. - menuConf(confChain, listenerChain); - break; - - case 2: //on affiche le menu des abonnés. - menuAbo(confChain, listenerChain); - break; - - case 3: //on permet à un abonné de participer à une conférence. - { - ptConf px = confChain->next; - ptListener py = listenerChain->next; - - printf("\n"); - while (px->next != NULL) - { - printf("%d : %s\n", px->id, px->title); - px = px->next; - } - printf("\n"); - while (py->next != NULL) - { - printf("%d : %s\n", py->id, py->name); - py = py->next; - } - printf("\n"); - - int confId, listenerId, grade; - printf("Entrez l'ID de la conference : "); - scanf("%d", &confId); - printf("Entrez l'ID du participant : "); - scanf("%d", &listenerId); - printf("Entrez la note attribuee par le participant : "); - scanf("%d", &grade); - - if (participateToConf(confChain, listenerChain, confId, listenerId, grade) != -1) - { - saveRelations(confChain->next); - } - else - { - printf("La note doit etre comprise entre 0 et 5 et l'abonne ne doit pas avoir deja participe a la conference\n\n"); - system("pause"); - } - - menu(confChain, listenerChain); - break; - } - - case 4: //on affiche la meilleure conférence. - { - ptConf px = confChain -> next; - int max = confGradeAvg(px); - ptConf confMax = px; - - while (px->next != NULL) - { - int tmp = confGradeAvg(px); - if (tmp > max) - { - confMax = px; - max = tmp; - } - - px = px->next; - } - - printf("La conference la mieux notee est : %s\n\n", confMax->title); - - system("pause"); - menu(confChain, listenerChain); - - break; - } - - case 5: //on quitte le programme. - break; - - default: - break; - } -} - -//+----------------------------------------+ -//| Main function | -//+----------------------------------------+ - -//fonction main. - -int main() -{ - //on initialise les listes de conférences et d'abonnés. - - ptConf confChain = newConfChain(); - ptListener listenerChain = newListenerChain(); - - //on lit les fichiers de données. - - readConfs(confChain); - readListeners(listenerChain); - readRelations(confChain, listenerChain); - - //on affiche le menu principal. - - menu(confChain, listenerChain); - - return 0; -} \ No newline at end of file