#include #include #include #include "conf.h" 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; } ptConf newConfChain() { ptConf confChain = (ptConf) malloc(sizeof(tConf)); confChain -> next = (ptConf) malloc(sizeof(tConf)); confChain -> next -> next = NULL; confChain -> id = -1; return confChain; } 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; } void removeConf(ptConf confChain, int id) { ptConf px = confChain; while (px -> next != NULL && px -> next -> id != id) { px = px -> next; } if (px -> next != NULL && px -> next -> id == id) { ptListenerList py = px -> next -> listeners -> next; while (py -> next != NULL) { removeConfFromConfList(py -> listener -> confs, px -> next); py = py -> next; } ptConf tmp = px -> next -> next; free(px -> next); px -> next = tmp; } } 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; } 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; } 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; } void removeListener(ptListener listenerChain, int id) { ptListener px = listenerChain; while (px -> next != NULL && px -> next -> id != id) { px = px -> next; } if (px -> next != NULL && px -> next -> id == id) { ptConfList py = px -> next -> confs -> next; while (py -> next != NULL) { removeListenerFromListenerList(py -> conf -> listeners, px -> next); py = py -> next; } ptListener tmp = px -> next -> next; free(px -> next); px -> next = tmp; px -> next -> prev = px; } } 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; } 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; } } 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"); } 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; } 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; } } 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"); } int participateToConf(ptConf confChain, ptListener listenerChain, int confId, int listenerId, int grade) { 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; } addListenerToListenerList(px -> listeners, py, grade); addConfToConfList(py -> confs, px, grade); return 0; } 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; } } int confParticipations(ptConf conf) { ptListenerList px = conf -> listeners -> next; int nb = 0; while (px -> next != NULL) { nb++; px = px -> next; } return nb; }