Compare commits

..

No commits in common. "9268c43abc9a1facb8ad6a71ca7302022707662a" and "e27615fc62e282da5d4791b1a85be65608c43daa" have entirely different histories.

11 changed files with 307 additions and 306 deletions

2
.gitignore vendored
View file

@ -1,3 +1,3 @@
singleFile.c
main.exe main.exe
.vscode/ .vscode/
dataBackup/

View file

@ -15,7 +15,7 @@ Ce projet a pour but de créer un système de gestion de conférences en C.
## Requis ## Requis
- gcc sur windows avec [MinGW](https://sourceforge.net/projects/mingw/) - gcc sur windows (MinGW)[https://sourceforge.net/projects/mingw/]
## Installation ## Installation

320
conf.c
View file

@ -3,262 +3,225 @@
#include <string.h> #include <string.h>
#include "conf.h" #include "conf.h"
int findConfId(ptConf confChain) int findConfId(ptConf confChain) {
{
ptConf px = confChain; ptConf px = confChain;
int max = 0; int max = 0;
while (px->next != NULL) while (px -> next != NULL) {
{ if (px -> id > max) {
if (px->id > max) max = px -> id;
{
max = px->id;
} }
px = px->next; px = px -> next;
} }
return max + 1; return max + 1;
} }
ptConf newConfChain() ptConf newConfChain() {
{ ptConf confChain = (ptConf) malloc(sizeof(tConf));
ptConf confChain = (ptConf)malloc(sizeof(tConf));
confChain->next = (ptConf)malloc(sizeof(tConf)); confChain -> next = (ptConf) malloc(sizeof(tConf));
confChain->next->next = NULL; confChain -> next -> next = NULL;
confChain->id = -1; confChain -> id = -1;
return confChain; return confChain;
} }
void addConf(ptConf confChain, int id, char title[], char speaker[], int day, int month, int year) void addConf(ptConf confChain, int id, char title[], char speaker[], int day, int month, int year) {
{
ptConf px = confChain; ptConf px = confChain;
while (px->next != NULL) while (px -> next != NULL) {
{ px = px -> next;
px = px->next;
} }
px->id = id; px -> id = id;
px->day = day; px -> day = day;
px->month = month; px -> month = month;
px->year = year; px -> year = year;
strcpy(px->title, title); strcpy(px -> title, title);
strcpy(px->speaker, speaker); strcpy(px -> speaker, speaker);
px->listeners = (ptListenerList)malloc(sizeof(tListenerList)); px -> listeners = (ptListenerList) malloc(sizeof(tListenerList));
px->listeners->next = (ptListenerList)malloc(sizeof(tListenerList)); px -> listeners -> next = (ptListenerList) malloc(sizeof(tListenerList));
px->listeners->listener = NULL; px -> listeners -> listener = NULL;
px->listeners->next->next = NULL; px -> listeners -> next -> next = NULL;
px->next = (ptConf)malloc(sizeof(tConf)); px -> next = (ptConf) malloc(sizeof(tConf));
px->next->next = NULL; px -> next -> next = NULL;
} }
void removeConf(ptConf confChain, int id) void removeConf(ptConf confChain, int id) {
{
ptConf px = confChain; ptConf px = confChain;
while (px->next != NULL && px->next->id != id) while (px -> next != NULL && px -> next -> id != id) {
{ px = px -> next;
px = px->next;
} }
if (px->next != NULL && px->next->id == id) if (px -> next != NULL && px -> next -> id == id) {
{ ptListenerList py = px -> next -> listeners -> next;
ptListenerList py = px->next->listeners->next;
while (py->next != NULL) while (py -> next != NULL) {
{ removeConfFromConfList(py -> listener -> confs, px -> next);
removeConfFromConfList(py->listener->confs, px->next); py = py -> next;
py = py->next;
} }
ptConf tmp = px->next->next; ptConf tmp = px -> next -> next;
free(px->next); free(px -> next);
px->next = tmp; px -> next = tmp;
} }
} }
int findListenerId(ptListener listenerChain) int findListenerId(ptListener listenerChain) {
{
ptListener px = listenerChain; ptListener px = listenerChain;
int max = 0; int max = 0;
while (px->next != NULL) while (px -> next != NULL) {
{ if (px -> id > max) {
if (px->id > max) max = px -> id;
{
max = px->id;
} }
px = px->next; px = px -> next;
} }
return max + 1; return max + 1;
} }
ptListener newListenerChain() ptListener newListenerChain() {
{ ptListener listenerChain = (ptListener) malloc(sizeof(tListener));
ptListener listenerChain = (ptListener)malloc(sizeof(tListener));
listenerChain->prev = NULL; listenerChain -> prev = NULL;
listenerChain->next = (ptListener)malloc(sizeof(tListener)); listenerChain -> next = (ptListener) malloc(sizeof(tListener));
listenerChain->next->prev = listenerChain; listenerChain -> next -> prev = listenerChain;
listenerChain->next->next = NULL; listenerChain -> next -> next = NULL;
listenerChain->id = -1; listenerChain -> id = -1;
return listenerChain; return listenerChain;
} }
int addListener(ptListener listenerChain, int id, char name[], int age, int level) int addListener(ptListener listenerChain, int id, char name[], int age, int level) {
{ if (level < 0 || level > 5) {
if (level < 0 || level > 5)
{
return -1; return -1;
} }
ptListener px = listenerChain; ptListener px = listenerChain;
while (px->next != NULL) while (px -> next != NULL) {
{ px = px -> next;
px = px->next;
} }
px->id = id; px -> id = id;
strcpy(px->name, name); strcpy(px -> name, name);
px->age = age; px -> age = age;
px->level = level; px -> level = level;
px->confs = (ptConfList)malloc(sizeof(tConfList)); px -> confs = (ptConfList) malloc(sizeof(tConfList));
px->confs->next = (ptConfList)malloc(sizeof(tConfList)); px -> confs -> next = (ptConfList) malloc(sizeof(tConfList));
px->confs->conf = NULL; px -> confs -> conf = NULL;
px->confs->next->next = NULL; px -> confs -> next -> next = NULL;
px->next = (ptListener)malloc(sizeof(tListener)); px -> next = (ptListener) malloc(sizeof(tListener));
px->next->next = NULL; px -> next -> next = NULL;
px->next->prev = px; px -> next -> prev = px;
return 0; return 0;
} }
void removeListener(ptListener listenerChain, int id) void removeListener(ptListener listenerChain, int id) {
{
ptListener px = listenerChain; ptListener px = listenerChain;
while (px->next != NULL && px->next->id != id) while (px -> next != NULL && px -> next -> id != id) {
{ px = px -> next;
px = px->next;
} }
if (px->next != NULL && px->next->id == id) if (px -> next != NULL && px -> next -> id == id) {
{ ptConfList py = px -> next -> confs -> next;
ptConfList py = px->next->confs->next;
while (py->next != NULL) while (py -> next != NULL) {
{ removeListenerFromListenerList(py -> conf -> listeners, px -> next);
removeListenerFromListenerList(py->conf->listeners, px->next); py = py -> next;
py = py->next;
} }
ptListener tmp = px->next->next; ptListener tmp = px -> next -> next;
free(px->next); free(px -> next);
px->next = tmp; px -> next = tmp;
px->next->prev = px; px -> next -> prev = px;
} }
} }
void addConfToConfList(ptConfList confList, ptConf conf, int grade) void addConfToConfList(ptConfList confList, ptConf conf, int grade) {
{
ptConfList px = confList; ptConfList px = confList;
while (px->next != NULL) while (px -> next != NULL) {
{ px = px -> next;
px = px->next;
} }
px->conf = conf; px -> conf = conf;
px->next = (ptConfList)malloc(sizeof(tConfList)); px -> next = (ptConfList) malloc(sizeof(tConfList));
px->grade = grade; px -> grade = grade;
px->next->next = NULL; px -> next -> next = NULL;
} }
void removeConfFromConfList(ptConfList confList, ptConf conf) void removeConfFromConfList(ptConfList confList, ptConf conf) {
{
ptConfList px = confList; ptConfList px = confList;
while (px->next != NULL && px->next->conf != conf) while (px -> next != NULL && px -> next -> conf != conf) {
{ px = px -> next;
px = px->next;
} }
if (px->next != NULL && px->next->conf == conf) if (px -> next != NULL && px -> next -> conf == conf) {
{ ptConfList tmp = px -> next -> next;
ptConfList tmp = px->next->next; free(px -> next);
free(px->next); px -> next = tmp;
px->next = tmp;
} }
} }
void printConfList(ptConfList confList) void printConfList(ptConfList confList) {
{
ptConfList px = confList; ptConfList px = confList;
printf("Participation aux conferences : "); printf("Participation aux conferences : ");
while (px->next != NULL) while (px -> next != NULL) {
{ printf("%s(%d) ", px -> conf -> title, px -> grade);
printf("%s(%d) ", px->conf->title, px->grade); px = px -> next;
px = px->next;
} }
printf("\n"); printf("\n");
} }
void addListenerToListenerList(ptListenerList listenerList, ptListener listener, int grade) void addListenerToListenerList(ptListenerList listenerList, ptListener listener, int grade) {
{
ptListenerList px = listenerList; ptListenerList px = listenerList;
while (px->next != NULL) while (px -> next != NULL) {
{ px = px -> next;
px = px->next;
} }
px->listener = listener; px -> listener = listener;
px->next = (ptListenerList)malloc(sizeof(tListenerList)); px -> next = (ptListenerList) malloc(sizeof(tListenerList));
px->grade = grade; px -> grade = grade;
px->next->next = NULL; px -> next -> next = NULL;
} }
void removeListenerFromListenerList(ptListenerList listenerList, ptListener listener) void removeListenerFromListenerList(ptListenerList listenerList, ptListener listener) {
{
ptListenerList px = listenerList; ptListenerList px = listenerList;
while (px->next != NULL && px->next->listener != listener) while (px -> next != NULL && px -> next -> listener != listener) {
{ px = px -> next;
px = px->next;
} }
if (px->next != NULL && px->next->listener == listener) if (px -> next != NULL && px -> next -> listener == listener) {
{ ptListenerList tmp = px -> next -> next;
ptListenerList tmp = px->next->next; free(px -> next);
free(px->next); px -> next = tmp;
px->next = tmp;
} }
} }
void printListenerList(ptListenerList listenerList) void printListenerList(ptListenerList listenerList) {
{
ptListenerList px = listenerList; ptListenerList px = listenerList;
printf("Participants : "); printf("Participants : ");
while (px->next != NULL) while (px -> next != NULL) {
{ printf("%s(%d) ", px -> listener -> name, px -> grade);
printf("%s(%d) ", px->listener->name, px->grade); px = px -> next;
px = px->next;
} }
printf("\n"); printf("\n");
} }
int participateToConf(ptConf confChain, ptListener listenerChain, int confId, int listenerId, int grade) int participateToConf(ptConf confChain, ptListener listenerChain, int confId, int listenerId, int grade) {
{ if (grade < 0 || grade > 5) {
if (grade < 0 || grade > 5)
{
return -1; return -1;
} }
@ -266,68 +229,57 @@ int participateToConf(ptConf confChain, ptListener listenerChain, int confId, in
ptListener py = listenerChain; ptListener py = listenerChain;
ptListenerList pz; ptListenerList pz;
while (px->next != NULL && px->id != confId) while (px -> next != NULL && px -> id != confId) {
{ px = px -> next;
px = px->next;
} }
pz = px->listeners->next; pz = px -> listeners -> next;
while (pz->next != NULL) while (pz -> next != NULL) {
{ if (pz -> listener -> id == listenerId) {
if (pz->listener->id == listenerId)
{
return -2; return -2;
} }
pz = pz->next; pz = pz -> next;
} }
while (py->next != NULL && py->id != listenerId) while (py -> next != NULL && py -> id != listenerId) {
{ py = py -> next;
py = py->next;
} }
if (px->id != confId || py->id != listenerId) if (px -> id != confId || py -> id != listenerId) {
{
return -2; return -2;
} }
addListenerToListenerList(px->listeners, py, grade); addListenerToListenerList(px -> listeners, py, grade);
addConfToConfList(py->confs, px, grade); addConfToConfList(py -> confs, px, grade);
return 0; return 0;
} }
int confGradeAvg(ptConf conf) int confGradeAvg(ptConf conf) {
{ ptListenerList px = conf -> listeners -> next;
ptListenerList px = conf->listeners->next;
int total = 0, nb = 0; int total = 0, nb = 0;
while (px->next != NULL) while (px -> next != NULL) {
{ total += px -> grade;
total += px->grade;
nb++; nb++;
px = px->next; px = px -> next;
} }
if (nb != 0) if (nb != 0) {
{
return total / nb; return total / nb;
} } else {
else
{
return -1; return -1;
} }
} }
int confParticipations(ptConf conf) int confParticipations(ptConf conf) {
{ ptListenerList px = conf -> listeners -> next;
ptListenerList px = conf->listeners->next;
int nb = 0; int nb = 0;
while (px->next != NULL) while (px -> next != NULL) {
{
nb++; nb++;
px = px->next; px = px -> next;
} }
return nb; return nb;

38
conf.h
View file

@ -3,47 +3,43 @@
struct listenerList; struct listenerList;
typedef struct conf typedef struct conf {
{
int id; int id;
char title[30]; char title[30];
char speaker[20]; char speaker[20];
int day; int day;
int month; int month;
int year; int year;
struct listenerList *listeners; struct listenerList* listeners;
struct conf *next; struct conf* next;
} tConf; } tConf;
typedef struct confList typedef struct confList {
{ struct conf* conf;
struct conf *conf;
int grade; int grade;
struct confList *next; struct confList* next;
} tConfList; } tConfList;
typedef struct listener typedef struct listener {
{
int id; int id;
char name[20]; char name[20];
int age; int age;
int level; int level;
struct confList *confs; struct confList* confs;
struct listener *prev; struct listener* prev;
struct listener *next; struct listener* next;
} tListener; } tListener;
typedef struct listenerList typedef struct listenerList {
{ struct listener* listener;
struct listener *listener;
int grade; int grade;
struct listenerList *next; struct listenerList* next;
} tListenerList; } tListenerList;
typedef tConf *ptConf; typedef tConf* ptConf;
typedef tListener *ptListener; typedef tListener* ptListener;
typedef tConfList *ptConfList; typedef tConfList* ptConfList;
typedef tListenerList *ptListenerList; typedef tListenerList* ptListenerList;
int findConfId(ptConf confChain); int findConfId(ptConf confChain);
ptConf newConfChain(); ptConf newConfChain();

View file

@ -0,0 +1,12 @@
1,Rapport_du_GIEC,Jean_Jouzzel,15,11,2022
2,L_esprit_critique,Thomas_Durand,6,2,2023
3,La_resilience,Arthur_Keller,20,10,2022
4,American_lobbying,Salah_Oueslati,30,11,2023
5,Crysper_case9_et_ADN,Peggy_Baron,18,10,2023
6,Materiaux_de_demain,Emmanuel_Chirache,15,11,2023
7,Les_IA,Matthieu_Maurer,1,6,2023
8,Therories_du_complots,Jean_Benoit,1,4,2021
9,Le_lacet_irlandais,Mick_Oconnell,31,3,2022
10,Litterature_et_SF,Terry_Pratchett,15,5,2021
11,Les_chaises_en_bois,David,24,12,2023
12,cybersecurite_des_coquillages,Bob,6,2,2024

View file

@ -0,0 +1,19 @@
1,Simon,21,3
3,Thomas,20,3
4,Victor,19,2
5,Lukian,19,2
6,Natacha,18,1
7,Caroline,22,4
8,Lucas,23,4
9,Clodine,64,3
10,Kevin,26,3
11,Titouan,18,1
12,Louise,20,3
13,Chayma,22,5
14,Elisa,23,5
15,Erwan,19,2
18,Marion,17,1
19,Tom,17,1
20,Sebastien,45,5
21,Jean,50,5
22,Patrick,15,5

View file

@ -0,0 +1,6 @@
1:12;0,1;4
2:12;0,1;4
3:12;0,1;4
4:12;0,1;4
9:20;5
10:21;5

12
dataBackup/confs Normal file
View file

@ -0,0 +1,12 @@
1,Rapport_du_GIEC,Jean_Jouzzel,15,11,2022
2,L_esprit_critique,Thomas_Durand,6,2,2023
3,La_resilience,Arthur_Keller,20,10,2022
4,American_lobbying,Salah_Oueslati,30,11,2023
5,Crysper_case9_et_ADN,Peggy_Baron,18,10,2023
6,Materiaux_de_demain,Emmanuel_Chirache,15,11,2023
7,Les_IA,Matthieu_Maurer,1,6,2023
8,Therories_du_complots,Jean_Benoit,1,4,2021
9,Le_lacet_irlandais,Mick_Oconnell,31,3,2022
10,Litterature_et_SF,Terry_Pratchett,15,5,2021
11,Les_chaises_en_bois,David,24,12,2023
12,cybersecurite_des_coquillages,Bob,6,2,2024

19
dataBackup/listeners Normal file
View file

@ -0,0 +1,19 @@
1,Simon,21,3
3,Thomas,20,3
4,Victor,19,2
5,Lukian,19,2
6,Natacha,18,1
7,Caroline,22,4
8,Lucas,23,4
9,Clodine,64,3
10,Kevin,26,3
11,Titouan,18,1
12,Louise,20,3
13,Chayma,22,5
14,Elisa,23,5
15,Erwan,19,2
18,Marion,17,1
19,Tom,17,1
20,Sebastien,45,5
21,Jean,50,5
22,Patrick,15,5

6
dataBackup/relations Normal file
View file

@ -0,0 +1,6 @@
1:12;0,1;4
2:12;0,1;4
3:12;0,1;4
4:12;0,1;4
9:20;5
10:21;5

View file

@ -3,20 +3,17 @@
#include <string.h> #include <string.h>
#include "conf.h" #include "conf.h"
void readConfs(ptConf confChain) void readConfs(ptConf confChain) {
{
FILE *file = fopen("./data/confs", "r"); FILE *file = fopen("./data/confs", "r");
char line[100]; char line[100];
char *token; char *token;
if (file == NULL) if (file == NULL) {
{
printf("ça marche pas."); printf("ça marche pas.");
return; return;
} }
while (fgets(line, sizeof(line), file)) while (fgets(line, sizeof(line), file)) {
{
int id = atoi(strtok(line, ",")); int id = atoi(strtok(line, ","));
char *title = strtok(NULL, ","); char *title = strtok(NULL, ",");
char *speaker = strtok(NULL, ","); char *speaker = strtok(NULL, ",");
@ -30,20 +27,17 @@ void readConfs(ptConf confChain)
fclose(file); fclose(file);
} }
void readListeners(ptListener listenerChain) void readListeners(ptListener listenerChain) {
{
FILE *file = fopen("./data/listeners", "r"); FILE *file = fopen("./data/listeners", "r");
char line[100]; char line[100];
char *token; char *token;
if (file == NULL) if (file == NULL) {
{
printf("ça marche pas."); printf("ça marche pas.");
return; return;
} }
while (fgets(line, sizeof(line), file)) while (fgets(line, sizeof(line), file)) {
{
int id = atoi(strtok(line, ",")); int id = atoi(strtok(line, ","));
char *name = strtok(NULL, ","); char *name = strtok(NULL, ",");
int day = atoi(strtok(NULL, ",")); int day = atoi(strtok(NULL, ","));
@ -54,25 +48,21 @@ void readListeners(ptListener listenerChain)
fclose(file); fclose(file);
} }
void readRelations(ptConf confChain, ptListener listenerChain) void readRelations(ptConf confChain, ptListener listenerChain) {
{
FILE *file = fopen("./data/relations", "r"); FILE *file = fopen("./data/relations", "r");
char line[100]; char line[100];
char *token1; char *token1;
char *token2; char *token2;
if (file == NULL) if (file == NULL) {
{
printf("ça marche pas."); printf("ça marche pas.");
return; return;
} }
while (fgets(line, sizeof(line), file)) while (fgets(line, sizeof(line), file)) {
{
int confId = atoi(strtok(line, ":")); int confId = atoi(strtok(line, ":"));
while ((token1 = strtok(NULL, ";")) != NULL && (token2 = strtok(NULL, ",")) != NULL) while ((token1 = strtok(NULL, ";")) != NULL && (token2 = strtok(NULL, ",")) != NULL) {
{
participateToConf(confChain, listenerChain, confId, atoi(token1), atoi(token2)); participateToConf(confChain, listenerChain, confId, atoi(token1), atoi(token2));
} }
} }
@ -80,61 +70,50 @@ void readRelations(ptConf confChain, ptListener listenerChain)
fclose(file); fclose(file);
} }
void saveConf(ptConf confChain) void saveConf(ptConf confChain) {
{
FILE *file = fopen("./data/confs", "w"); FILE *file = fopen("./data/confs", "w");
ptConf px = confChain; ptConf px = confChain;
while (px->next != NULL) 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);
fprintf(file, "%d,%s,%s,%d,%d,%d\n", px->id, px->title, px->speaker, px->day, px->month, px->year); px = px -> next;
px = px->next;
} }
fclose(file); fclose(file);
} }
void saveListeners(ptListener listenerChain) void saveListeners(ptListener listenerChain) {
{
FILE *file = fopen("./data/listeners", "w"); FILE *file = fopen("./data/listeners", "w");
ptListener px = listenerChain; ptListener px = listenerChain;
while (px->next != NULL) while(px -> next != NULL){
{ fprintf(file,"%d,%s,%d,%d\n",px -> id,px -> name,px -> age,px -> level);
fprintf(file, "%d,%s,%d,%d\n", px->id, px->name, px->age, px->level); px = px -> next;
px = px->next;
} }
fclose(file); fclose(file);
} }
void saveRelations(ptConf confChain) void saveRelations(ptConf confChain) {
{
FILE *file = fopen("./data/relations", "w"); FILE *file = fopen("./data/relations", "w");
ptConf px = confChain; ptConf px = confChain;
ptListenerList py; ptListenerList py;
printf("test"); printf("test");
while (px->next != NULL) while(px -> next != NULL){
{
printf("test"); printf("test");
py = px->listeners->next; py = px -> listeners -> next;
if (py->next != NULL) if (py -> next != NULL) {
{ fprintf(file, "%d:", px -> id);
fprintf(file, "%d:", px->id);
} }
while (py->next != NULL) while (py -> next != NULL) {
{ fprintf(file, "%d;%d", py -> listener -> id, py -> grade);
fprintf(file, "%d;%d", py->listener->id, py->grade); if (py -> next -> next != NULL) {
if (py->next->next != NULL)
{
fprintf(file, ","); fprintf(file, ",");
} } else {
else
{
fprintf(file, "\n"); fprintf(file, "\n");
} }
py = py->next; py = py -> next;
} }
px = px->next; px = px -> next;
} }
fclose(file); fclose(file);
} }