Commit fdefda76d576ca4755878a22eedbc1b95526c012

Authored by DUVAL
1 parent 327283e2

commit final

README.md 0 → 100755
... ... @@ -0,0 +1,21 @@
  1 +Choix de l'utilisateur:
  2 +
  3 +appuyer sur 1 : affiche les réalisateurs
  4 +
  5 +appuyer sur 2 : cherche un réalisateur
  6 +
  7 + le programme demande son nom et son prénom
  8 +
  9 +appuyer sur 3: affiche le réalisateur
  10 +
  11 +appuyer sur 4 : efface le réalisateur
  12 +
  13 +appuyer sur 5 : ajoute un film au réalisateur
  14 +
  15 +appuyer sur 6 : efface un film au réalisateur
  16 +
  17 +appuyer sur 7 : ajoute un réalisateur
  18 +
  19 +appuyer sur 8 : quitter le programme
  20 +
  21 +Pour utiliser un autre fichier que "very_small_example.list", remplacer le fichier utilisé par celui désiré dans la fonction "void init" localisée dans le fichier "fonction.c".
0 22 \ No newline at end of file
... ...
fin.cbp 0 → 100755
... ... @@ -0,0 +1,48 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  2 +<CodeBlocks_project_file>
  3 + <FileVersion major="1" minor="6" />
  4 + <Project>
  5 + <Option title="fin" />
  6 + <Option pch_mode="2" />
  7 + <Option compiler="gcc" />
  8 + <Build>
  9 + <Target title="Debug">
  10 + <Option output="bin/Debug/fin" prefix_auto="1" extension_auto="1" />
  11 + <Option object_output="obj/Debug/" />
  12 + <Option type="1" />
  13 + <Option compiler="gcc" />
  14 + <Compiler>
  15 + <Add option="-g" />
  16 + </Compiler>
  17 + </Target>
  18 + <Target title="Release">
  19 + <Option output="bin/Release/fin" prefix_auto="1" extension_auto="1" />
  20 + <Option object_output="obj/Release/" />
  21 + <Option type="1" />
  22 + <Option compiler="gcc" />
  23 + <Compiler>
  24 + <Add option="-O2" />
  25 + </Compiler>
  26 + <Linker>
  27 + <Add option="-s" />
  28 + </Linker>
  29 + </Target>
  30 + </Build>
  31 + <Compiler>
  32 + <Add option="-Wall" />
  33 + </Compiler>
  34 + <Unit filename="fonction.c">
  35 + <Option compilerVar="CC" />
  36 + </Unit>
  37 + <Unit filename="fonction.h" />
  38 + <Unit filename="main.c">
  39 + <Option compilerVar="CC" />
  40 + </Unit>
  41 + <Extensions>
  42 + <code_completion />
  43 + <envvars />
  44 + <debugger />
  45 + <lib_finder disable_auto="1" />
  46 + </Extensions>
  47 + </Project>
  48 +</CodeBlocks_project_file>
... ...
fonction .c 0 → 100755
... ... @@ -0,0 +1,402 @@
  1 +#include "fonction.h"
  2 +
  3 +/**Hash functions**/
  4 +
  5 +int hash(char *word)
  6 +{
  7 + int i = 0;
  8 + int nombreHache = 0;
  9 +
  10 +
  11 + for (i = 0 ; word[i] != '\0' ; i++)
  12 + {
  13 +
  14 + nombreHache += word[i];
  15 +
  16 + }
  17 +
  18 + return nombreHache %= TABLE_SIZE;
  19 +}
  20 +// initialisation du tableau, chaque element dans le tableau est un pointeur de réalisateur
  21 +
  22 +void initTable(tableReal table)
  23 +{
  24 + int e;
  25 + for(e = 0;e<TABLE_SIZE;e++)
  26 + {
  27 + table[e] = NULL;
  28 + }
  29 +}
  30 +
  31 +int hashNum(char nom[LINE_MAX],char prenom[LINE_MAX])
  32 +{
  33 + char concat[LINE_MAX];
  34 + int actualReal = 0;
  35 + memcpy(concat,nom,strlen(nom)+1);
  36 + strcat(concat,prenom);
  37 + actualReal = hash(concat);
  38 +
  39 + return actualReal;
  40 +}
  41 +
  42 +// Fonction permettant de trouver le réalisateur dans la table
  43 +
  44 +ptrealisateur findReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  45 +{
  46 + int actualReal = hashNum(nom,prenom);
  47 + ptrealisateur pt = table[actualReal];
  48 +
  49 + while( (strcmp(pt->nom,nom) != 0 && strcmp(pt->prenom,prenom) != 0) )
  50 + {
  51 + if(pt == NULL)
  52 + {
  53 + printf("%s %s ne fait pas parti de liste \n",nom,prenom);
  54 + break;
  55 + }
  56 + pt = pt->suivant;
  57 + if(strcmp(pt->nom,nom) == 0 && strcmp(pt->prenom,prenom) == 0)
  58 + printf("%s %s fait parti de liste \n",nom,prenom);
  59 + }
  60 +
  61 + return pt;
  62 +}
  63 +
  64 +// permet de copier une partie du chaîne dans une autre.
  65 +
  66 +int readPartOfLine(int a,int b,char line[LINE_MAX],char part[LINE_MAX])
  67 +{
  68 + int debut = a;
  69 + int endAv = b;
  70 + int av = 0;
  71 + while(debut < endAv)
  72 + {
  73 + part[av] = line[debut];
  74 + debut++;
  75 + av++;
  76 + }
  77 + part[av] = '\0';
  78 + return debut;
  79 +
  80 +}
  81 +
  82 +//repérer la position de la fin de chaîne de caractére
  83 +int findEnd(char line[LINE_MAX])
  84 +{
  85 + int av = 0;
  86 + while(line[av] != '\n')
  87 + av++;
  88 + return av;
  89 +}
  90 +
  91 +//permet de lire la chaîne de caractére qui correspond à une oeuvre
  92 +
  93 +void readElement(char element[LINE_MAX],ptoeuvres film)
  94 +{
  95 +
  96 + int begin = 0;
  97 + if(element[0] == '\t')
  98 + begin = 2;
  99 + int Pbegin = strpbrk(element,"(") - element;
  100 + int Pend =strpbrk(element,")") - element;
  101 + int end = findEnd(element);
  102 +
  103 + readPartOfLine(begin,Pbegin,element,film->title);
  104 +
  105 + readPartOfLine(Pbegin+1,Pend,element,film->annee);
  106 +
  107 + readPartOfLine(Pend+1,end,element,film->commentaire);
  108 +
  109 +
  110 +
  111 +}
  112 +
  113 +// initialisation des oeuvres
  114 +
  115 +void initOeuvre(ptoeuvres oe)
  116 +{
  117 +
  118 +
  119 + int e;
  120 + for(e = 0;e<LINE_MAX;e++)
  121 + {
  122 + oe->annee[e] = malloc(sizeof(char));
  123 + oe->commentaire[e] = malloc(sizeof(char));
  124 + oe->title[e] = malloc(sizeof(char));
  125 + }
  126 + oe->suivant = NULL;
  127 +
  128 +
  129 +}
  130 +// Permet de lire le fichier contenant la liste des réalisateurs
  131 +//repere les réalisateurs par l'existence d'une virgule dans la ligne en cours de lecture
  132 +
  133 +void readFile(FILE *file, tableReal database)
  134 +{
  135 +
  136 + int actualReal = 0;
  137 + int virgule = 0;
  138 + int tab = 0;
  139 + int end = 0;
  140 + int av = 0;
  141 +
  142 + char line[LINE_MAX];
  143 + char element[LINE_MAX];
  144 + char nom[LINE_MAX];
  145 + char prenom[LINE_MAX];
  146 +
  147 + char *ret;
  148 +
  149 + Oeuvres initOe;
  150 + ptoeuvres ptInitOe = NULL;
  151 +
  152 +
  153 + while(av == 0)
  154 + {
  155 +
  156 + if(fgets(line,LINE_MAX,file) != NULL)
  157 + {
  158 +
  159 +
  160 + ret = strpbrk(line,",");
  161 + if(ret != NULL)
  162 + {
  163 + virgule = ret - line;
  164 + tab = strpbrk(line,"\t") - line;
  165 + end = findEnd(line);
  166 + readPartOfLine(0,virgule,line,nom);
  167 + readPartOfLine(virgule+1,tab,line,prenom);
  168 +
  169 + int actualReal = hashNum(nom,prenom);
  170 +
  171 + database[actualReal] = malloc(sizeof(Realisateur));
  172 + readPartOfLine(0,virgule,line,database[actualReal]->nom);
  173 + readPartOfLine(virgule+1,tab,line,database[actualReal]->prenom);
  174 +
  175 +
  176 + database[actualReal]->filmographie = malloc(sizeof(Oeuvres));
  177 + ptInitOe = database[actualReal]->filmographie;
  178 +
  179 + initOeuvre(ptInitOe);
  180 + readPartOfLine(tab+1,end,line,element);
  181 + readElement(element,ptInitOe);
  182 +
  183 +
  184 + }
  185 + else if(strcmp(line,"\n") != 0)
  186 + {
  187 +
  188 + ptInitOe->suivant = malloc(sizeof(Oeuvres));
  189 + ptInitOe = ptInitOe->suivant;
  190 + initOeuvre(ptInitOe);
  191 + readElement(line,ptInitOe);
  192 + }
  193 + }
  194 + else
  195 + av = 1;
  196 +
  197 +
  198 +
  199 + }
  200 +
  201 +}
  202 +
  203 +// afficher un film
  204 +
  205 +void afficherFilm(ptoeuvres oe)
  206 +{
  207 + printf("titre : %s, annee : %s, commentaire : %s \n",oe->title,oe->annee,oe->commentaire);
  208 +
  209 +}
  210 +
  211 +//afficher tous les realisateurs
  212 +
  213 +void afficherTable(tableReal table)
  214 +{
  215 + int e;
  216 + ptoeuvres oe;
  217 + for(e=0;e<TABLE_SIZE;e++)
  218 + {
  219 + if(table[e] != NULL)
  220 + {
  221 + oe = table[e]->filmographie;
  222 + printf("nom : %s, prenom : %s \n",table[e]->nom,table[e]->prenom);
  223 + while(oe != NULL)
  224 + {
  225 + afficherFilm(oe);
  226 + oe = oe->suivant;
  227 +
  228 + }
  229 +
  230 +
  231 + }
  232 +
  233 + }
  234 +}
  235 +
  236 +// Permet d'afficher le réalisateur voulu ainsi que sa filmographie
  237 +
  238 +void afficherReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  239 +{
  240 + ptrealisateur pt = findReal(table,nom,prenom);
  241 + ptoeuvres ptOe = 0;
  242 + if(pt != NULL)
  243 + {
  244 + ptOe = pt->filmographie;
  245 + while(ptOe != NULL)
  246 + {
  247 + afficherFilm(ptOe);
  248 + ptOe = ptOe->suivant;
  249 + }
  250 +
  251 + }
  252 +
  253 +
  254 +
  255 +}
  256 +
  257 +// on ajouter un realisateur dans le tableau
  258 +
  259 +void addReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  260 +{
  261 + if(findReal(table,nom,prenom) == NULL)
  262 + {
  263 +
  264 + printf("ajout en court \n",nom,prenom);
  265 + int actualReal = hashNum(nom,prenom);
  266 + if(table[actualReal] == NULL)
  267 + {
  268 +
  269 + table[actualReal] = malloc(sizeof(Realisateur));
  270 + memcpy(table[actualReal]->nom,nom,strlen(nom)+1);
  271 + memcpy(table[actualReal]->prenom,prenom,strlen(prenom)+1);
  272 + table[actualReal]->suivant = NULL;
  273 + }
  274 + else{
  275 + ptrealisateur pt = table[actualReal]->suivant;
  276 + while(pt != NULL)
  277 + pt = pt->suivant;
  278 + pt = malloc(sizeof(Realisateur));
  279 + memcpy(pt->nom,nom,strlen(nom)+1);
  280 + memcpy(pt->prenom,prenom,strlen(prenom)+1);
  281 + pt->suivant = NULL;
  282 +
  283 +
  284 + }
  285 +
  286 +
  287 + }
  288 +
  289 +
  290 +}
  291 +
  292 +// ajouter un film d'un realisateur donné
  293 +
  294 +void addFilm(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX] )
  295 +{
  296 + ptrealisateur pt = findReal(table,nom,prenom);
  297 + ptoeuvres ptOe = 0;
  298 + ptOe = pt->filmographie;
  299 + int X = 0;
  300 + char anne[LINE_MAX];
  301 + char tittle[LINE_MAX];
  302 + char commentaire[LINE_MAX];
  303 +if(ptOe != NULL)
  304 +{
  305 + while(ptOe->suivant != NULL)
  306 + {
  307 + ptOe = ptOe->suivant;
  308 + }
  309 +}
  310 +else X = 1;
  311 +
  312 + ptoeuvres newOe = malloc(sizeof(Oeuvres));
  313 + initOeuvre(newOe);
  314 + printf("ajouter un film : \ntitre : ");
  315 + scanf("%s",&tittle);
  316 + printf("annee : ");
  317 + scanf("%s",&anne);
  318 + printf("commentaire : ");
  319 + scanf("%s",&commentaire);
  320 + memcpy(newOe->commentaire,commentaire,strlen(commentaire)+1);
  321 + memcpy(newOe->title,tittle,strlen(tittle)+1);
  322 + memcpy(newOe->annee,anne,strlen(anne)+1);
  323 +if(X == 0)
  324 + ptOe->suivant = newOe;
  325 +else
  326 + pt->filmographie = newOe;
  327 +}
  328 +
  329 +int eraseFilm(ptrealisateur real,char title[LINE_MAX])
  330 +{
  331 + ptoeuvres previousOe = real->filmographie;
  332 + ptoeuvres nextOe = real->filmographie->suivant;
  333 + if(previousOe == NULL)
  334 + return 1;
  335 + if(nextOe == NULL)
  336 + {
  337 + if(strcmp(previousOe->title,title) == 0)
  338 + {
  339 + real->filmographie = NULL;
  340 + }
  341 + return 1;
  342 + }
  343 +
  344 +
  345 +if(nextOe != NULL)
  346 +{
  347 +
  348 +
  349 + while(strcmp(nextOe->title,title) != 0 && (previousOe != NULL && nextOe != nextOe))
  350 + {
  351 + previousOe = nextOe;
  352 + nextOe = nextOe->suivant;
  353 + if(nextOe == NULL)
  354 + return 1;
  355 + }
  356 + previousOe->suivant = nextOe->suivant;
  357 + free(nextOe);
  358 +}
  359 +else
  360 +{
  361 + if(strcmp(nextOe->title,title) == 0)
  362 + {
  363 + free(nextOe);
  364 + previousOe->suivant = NULL;
  365 + return 1;
  366 + }
  367 + else if(strcmp(previousOe->title,title) == 0)
  368 + {
  369 + real->filmographie = nextOe;
  370 + free(previousOe);
  371 + return 1;
  372 + }
  373 +
  374 +
  375 +}
  376 + printf("%s n'existe pas \n",title);
  377 +
  378 +
  379 + return 0;
  380 +
  381 +}
  382 +
  383 +// supprimer un film d'un réalisateur donné
  384 +
  385 +void eraseReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  386 +{
  387 + ptrealisateur pt = findReal(table,nom,prenom);
  388 + ptoeuvres ptOe = pt->filmographie->suivant;
  389 + if(pt != NULL)
  390 + {
  391 + printf("effacement en court \n");
  392 + while(pt->filmographie != NULL)
  393 + {
  394 + pt->filmographie = ptOe->suivant;
  395 + ptOe = ptOe->suivant;
  396 + }
  397 + table[hashNum(nom,prenom)] = NULL;
  398 + free(ptOe);
  399 + free(pt);
  400 + }
  401 +
  402 +}
... ...
fonction.h 0 → 100755
... ... @@ -0,0 +1,66 @@
  1 +#ifndef FONCTION_H_INCLUDED
  2 +#define FONCTION_H_INCLUDED
  3 +#define TABLE_SIZE 100
  4 +#define LINE_MAX 1000
  5 +#include <stdio.h>
  6 +#include <stdlib.h>
  7 +#include <string.h>
  8 +
  9 +
  10 + typedef struct Oeuvres Oeuvres;
  11 + struct Oeuvres
  12 + {
  13 + char title[LINE_MAX];
  14 + char annee[LINE_MAX];
  15 + char commentaire[LINE_MAX];
  16 + Oeuvres *suivant;
  17 +
  18 + };
  19 +
  20 +
  21 + typedef Oeuvres *ptoeuvres;
  22 +
  23 +
  24 + typedef struct Realisateur Realisateur;
  25 + struct Realisateur
  26 + {
  27 + char nom[LINE_MAX];
  28 + char prenom[LINE_MAX];
  29 + ptoeuvres filmographie;
  30 + Realisateur *suivant;
  31 + };
  32 +
  33 + typedef Realisateur *ptrealisateur;
  34 + typedef ptrealisateur tableReal[TABLE_SIZE];
  35 +
  36 +
  37 + int hash(char *word);
  38 + void initTable(tableReal table);
  39 + int hashNum(char nom[LINE_MAX],char prenom[LINE_MAX]);
  40 +
  41 +
  42 + int findEnd(char line[LINE_MAX]);
  43 +
  44 + void initOeuvre(ptoeuvres oe);
  45 +
  46 + int readPartOfLine(int a,int b,char line[LINE_MAX],char part[LINE_MAX]);
  47 + void readElement(char element[LINE_MAX],ptoeuvres film);
  48 + void readFile(FILE *file, tableReal database);
  49 +
  50 + ptrealisateur findReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX]);
  51 +
  52 + void afficherFilm(ptoeuvres oe);
  53 + void afficherTable(tableReal table);
  54 + void afficherReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX]);
  55 +
  56 + void addReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX]);
  57 + void addFilm(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX] );
  58 +
  59 + int eraseFilm(ptrealisateur real,char title[LINE_MAX]);
  60 + void eraseReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX]);
  61 +
  62 +
  63 +
  64 +
  65 +
  66 +#endif // FONCTION_H_INCLUDED
... ...
main.c deleted
... ... @@ -1,151 +0,0 @@
1   -#include "fonction.h"
2   -
3   -//explication de l'utilisation du menu
4   -
5   -void commande()
6   -{
7   - printf("que voulez vous faire ? \n1 = afficher les realisteurs\n2 = chercher et selectionner un realisteur\n3 = afficher le realisateur selectionner\n4 = effacer le realisateur selectionner\n5 = ajouter un film au realisateur selectionner\n6 = effacer un film au realisateur selectioner\n7 = ajouter un realisateur\n8 = quitter \n");
8   -}
9   -
10   -// Menu du programme
11   -
12   -void menu(tableReal table)
13   -{
14   - int QUITTER = 0;
15   - int choix = 0;
16   - char nom[LINE_MAX];
17   - char prenom[LINE_MAX];
18   - char nomNew[LINE_MAX];
19   - char prenomNew[LINE_MAX];
20   - char titre[LINE_MAX];
21   - ptrealisateur pt = NULL;
22   - commande();
23   -
24   - while(QUITTER==0)
25   - {
26   - while(choix == 0)
27   - {
28   - scanf("%d",&choix);
29   - if(choix > 8 || choix < 0)
30   - choix = 0;
31   - system("cls");
32   - }
33   - switch(choix)
34   - {
35   -
36   - case 1: // afficher un realisateur
37   - {
38   - commande();
39   - afficherTable(table);
40   - choix = 0;
41   - break;
42   - }
43   - case 2: // chercher un realisateur
44   - {
45   - commande();
46   - printf("chercher, nom : ");
47   - scanf("%s",&nom);
48   - printf("prenom : ");
49   - scanf("%s",&prenom);
50   - pt = findReal(table,nom,prenom);
51   - choix = 0;
52   - break;
53   - }
54   - case 3: //afficher un realisteur selectionne
55   - {
56   - commande();
57   - if(pt != NULL)
58   - afficherReal(table,pt->nom,pt->prenom);
59   - else
60   - printf("pas de realisateur selectionner !");
61   -
62   - choix = 0;
63   - break;
64   - }
65   - case 4: // supprimer un realisateur selectionne
66   - {
67   - commande();
68   - if(pt != NULL)
69   - eraseReal(table,pt->nom,pt->prenom);
70   - else
71   - printf("pas de realisateur selectionner !");
72   -
73   - choix = 0;
74   - break;
75   - }
76   -
77   - case 5: // ajouter un film dans le realisateur selectionne
78   - {
79   - commande();
80   - if(pt != NULL)
81   - addFilm(table,pt->nom,pt->prenom);
82   - else
83   - printf("pas de realisateur selectionner !");
84   -
85   - choix = 0;
86   - break;
87   - }
88   - case 6: //supprimer un film dans le realisateur selectionne
89   - {
90   - commande();
91   - if(pt != NULL)
92   - {
93   - printf("nom du film à effacer :");
94   - scanf("%s",titre);
95   - eraseFilm(pt,titre);
96   - }
97   - else
98   - printf("pas de realisateur selectionner !");
99   -
100   - choix = 0;
101   - break;
102   - }
103   - case 7: // ajouter un realisateur
104   - {
105   - commande();
106   - printf("ajouter : nom : ");
107   - scanf("%s",&nomNew);
108   - printf("prenom : ");
109   - scanf("%s",&prenomNew);
110   - addReal(table,nomNew,prenomNew);
111   -
112   - choix = 0;
113   - break;
114   - }
115   - case 8: // quitter
116   - {
117   - printf("bye bitches !");
118   - QUITTER = 1;
119   - break;
120   - }
121   -
122   -
123   - }
124   -
125   -
126   - }
127   -
128   -
129   -}
130   -
131   -// Initialisation de tous les paramètres
132   -
133   -void init()
134   -{
135   -
136   - tableReal table;
137   - initTable(table);
138   - FILE* fichier = NULL;
139   - fichier = fopen("very_small_example.list", "r+");
140   - readFile(fichier,table);
141   - fclose(fichier);
142   -
143   - menu(table);
144   -
145   -}
146   -int main()
147   -{
148   -
149   - init();
150   - return 0;
151   -}
programmecomplet.c 0 → 100755
... ... @@ -0,0 +1,541 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#define LINE_MAX 1000
  4 +#define TABLE_SIZE 100
  5 +#include <string.h>
  6 +
  7 +
  8 +int hash(char *word)
  9 +{
  10 + int i = 0;
  11 + int nombreHache = 0;
  12 +
  13 +
  14 + for (i = 0 ; word[i] != '\0' ; i++)
  15 + {
  16 +
  17 + nombreHache += word[i];
  18 +
  19 + }
  20 +
  21 + return nombreHache %= TABLE_SIZE;
  22 +}
  23 +
  24 +typedef struct Oeuvres Oeuvres;
  25 +struct Oeuvres
  26 +{
  27 + char title[LINE_MAX];
  28 + char annee[LINE_MAX];
  29 + char commentaire[LINE_MAX];
  30 + Oeuvres *suivant;
  31 +
  32 +};
  33 +
  34 +
  35 +typedef Oeuvres *ptoeuvres;
  36 +
  37 +
  38 +typedef struct Realisateur Realisateur;
  39 +struct Realisateur
  40 +{
  41 + char nom[LINE_MAX];
  42 + char prenom[LINE_MAX];
  43 + ptoeuvres filmographie;
  44 + Realisateur *suivant;
  45 +};
  46 +
  47 +typedef Realisateur *ptrealisateur;
  48 +typedef ptrealisateur tableReal[TABLE_SIZE];
  49 +
  50 +
  51 +
  52 +void initTable(tableReal table)
  53 +{
  54 + int e;
  55 + for(e = 0;e<TABLE_SIZE;e++)
  56 + {
  57 + table[e] = NULL;
  58 + }
  59 +}
  60 +int hashNum(char nom[LINE_MAX],char prenom[LINE_MAX])
  61 +{
  62 + char concat[LINE_MAX];
  63 + int actualReal = 0;
  64 + memcpy(concat,nom,strlen(nom)+1);
  65 + strcat(concat,prenom);
  66 + actualReal = hash(concat);
  67 +
  68 + return actualReal;
  69 +}
  70 +ptrealisateur findReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  71 +{
  72 + int actualReal = hashNum(nom,prenom);
  73 + ptrealisateur pt = table[actualReal];
  74 +
  75 + while( (strcmp(pt->nom,nom) != 0 && strcmp(pt->prenom,prenom) != 0) )
  76 + {
  77 + if(pt == NULL)
  78 + {
  79 + printf("%s %s ne fait pas parti de liste \n",nom,prenom);
  80 + break;
  81 + }
  82 + pt = pt->suivant;
  83 + if(strcmp(pt->nom,nom) == 0 && strcmp(pt->prenom,prenom) == 0)
  84 + printf("%s %s fait parti de liste \n",nom,prenom);
  85 + }
  86 +
  87 + return pt;
  88 +}
  89 +int readPartOfLine(int a,int b,char line[LINE_MAX],char part[LINE_MAX])
  90 +{
  91 + int debut = a;
  92 + int endAv = b;
  93 + int av = 0;
  94 + while(debut < endAv)
  95 + {
  96 + part[av] = line[debut];
  97 + debut++;
  98 + av++;
  99 + }
  100 + part[av] = '\0';
  101 + return debut;
  102 +
  103 +}
  104 +int findEnd(char line[LINE_MAX])
  105 +{
  106 + int av = 0;
  107 + while(line[av] != '\n')
  108 + av++;
  109 + return av;
  110 +}
  111 +void readElement(char element[LINE_MAX],ptoeuvres film)
  112 +{
  113 +
  114 + int begin = 0;
  115 + if(element[0] == '\t')
  116 + begin = 2;
  117 + int Pbegin = strpbrk(element,"(") - element;
  118 + int Pend =strpbrk(element,")") - element;
  119 + int end = findEnd(element);
  120 +
  121 + readPartOfLine(begin,Pbegin,element,film->title);
  122 +
  123 + readPartOfLine(Pbegin+1,Pend,element,film->annee);
  124 +
  125 + readPartOfLine(Pend+1,end,element,film->commentaire);
  126 +
  127 +
  128 +
  129 +}
  130 +void initOeuvre(ptoeuvres oe)
  131 +{
  132 +
  133 +
  134 + int e;
  135 + for(e = 0;e<LINE_MAX;e++)
  136 + {
  137 + oe->annee[e] = malloc(sizeof(char));
  138 + oe->commentaire[e] = malloc(sizeof(char));
  139 + oe->title[e] = malloc(sizeof(char));
  140 + }
  141 + oe->suivant = NULL;
  142 +
  143 +
  144 +}
  145 +
  146 +void readFile(FILE *file, tableReal database)
  147 +{
  148 +
  149 + int actualReal = 0;
  150 + int virgule = 0;
  151 + int tab = 0;
  152 + int end = 0;
  153 + int av = 0;
  154 +
  155 + char line[LINE_MAX];
  156 + char element[LINE_MAX];
  157 + char nom[LINE_MAX];
  158 + char prenom[LINE_MAX];
  159 +
  160 + char *ret;
  161 +
  162 + Oeuvres initOe;
  163 + ptoeuvres ptInitOe = NULL;
  164 +
  165 +
  166 + while(av == 0)
  167 + {
  168 +
  169 + if(fgets(line,LINE_MAX,file) != NULL)
  170 + {
  171 +
  172 +
  173 + ret = strpbrk(line,",");
  174 + if(ret != NULL)
  175 + {
  176 + virgule = ret - line;
  177 + tab = strpbrk(line,"\t") - line;
  178 + end = findEnd(line);
  179 + readPartOfLine(0,virgule,line,nom);
  180 + readPartOfLine(virgule+1,tab,line,prenom);
  181 +
  182 + int actualReal = hashNum(nom,prenom);
  183 +
  184 + database[actualReal] = malloc(sizeof(Realisateur));
  185 + readPartOfLine(0,virgule,line,database[actualReal]->nom);
  186 + readPartOfLine(virgule+1,tab,line,database[actualReal]->prenom);
  187 +
  188 +
  189 + database[actualReal]->filmographie = malloc(sizeof(Oeuvres));
  190 + ptInitOe = database[actualReal]->filmographie;
  191 +
  192 + initOeuvre(ptInitOe);
  193 + readPartOfLine(tab+1,end,line,element);
  194 + readElement(element,ptInitOe);
  195 +
  196 +
  197 + }
  198 + else if(strcmp(line,"\n") != 0)
  199 + {
  200 +
  201 + ptInitOe->suivant = malloc(sizeof(Oeuvres));
  202 + ptInitOe = ptInitOe->suivant;
  203 + initOeuvre(ptInitOe);
  204 + readElement(line,ptInitOe);
  205 + }
  206 + }
  207 + else
  208 + av = 1;
  209 +
  210 +
  211 +
  212 + }
  213 +
  214 +}
  215 +void afficherFilm(ptoeuvres oe)
  216 +{
  217 + printf("titre : %s, annee : %s, commentaire : %s \n",oe->title,oe->annee,oe->commentaire);
  218 +
  219 +}
  220 +void afficherTable(tableReal table)
  221 +{
  222 + int e;
  223 + ptoeuvres oe;
  224 + for(e=0;e<TABLE_SIZE;e++)
  225 + {
  226 + if(table[e] != NULL)
  227 + {
  228 + oe = table[e]->filmographie;
  229 + printf("nom : %s, prenom : %s \n",table[e]->nom,table[e]->prenom);
  230 + while(oe != NULL)
  231 + {
  232 + afficherFilm(oe);
  233 + oe = oe->suivant;
  234 +
  235 + }
  236 +
  237 +
  238 + }
  239 +
  240 + }
  241 +}
  242 +void afficherReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  243 +{
  244 + ptrealisateur pt = findReal(table,nom,prenom);
  245 + ptoeuvres ptOe = 0;
  246 + if(pt != NULL)
  247 + {
  248 + ptOe = pt->filmographie;
  249 + while(ptOe != NULL)
  250 + {
  251 + afficherFilm(ptOe);
  252 + ptOe = ptOe->suivant;
  253 + }
  254 +
  255 + }
  256 +
  257 +
  258 +
  259 +}
  260 +void addReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  261 +{
  262 + if(findReal(table,nom,prenom) == NULL)
  263 + {
  264 +
  265 + printf("ajout en court \n",nom,prenom);
  266 + int actualReal = hashNum(nom,prenom);
  267 + if(table[actualReal] == NULL)
  268 + {
  269 +
  270 + table[actualReal] = malloc(sizeof(Realisateur));
  271 + memcpy(table[actualReal]->nom,nom,strlen(nom)+1);
  272 + memcpy(table[actualReal]->prenom,prenom,strlen(prenom)+1);
  273 + table[actualReal]->suivant = NULL;
  274 + }
  275 + else{
  276 + ptrealisateur pt = table[actualReal]->suivant;
  277 + while(pt != NULL)
  278 + pt = pt->suivant;
  279 + pt = malloc(sizeof(Realisateur));
  280 + memcpy(pt->nom,nom,strlen(nom)+1);
  281 + memcpy(pt->prenom,prenom,strlen(prenom)+1);
  282 + pt->suivant = NULL;
  283 +
  284 +
  285 + }
  286 +
  287 +
  288 + }
  289 +
  290 +
  291 +}
  292 +void addFilm(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX] )
  293 +{
  294 + ptrealisateur pt = findReal(table,nom,prenom);
  295 + ptoeuvres ptOe = 0;
  296 + ptOe = pt->filmographie;
  297 + int X = 0;
  298 + char anne[LINE_MAX];
  299 + char tittle[LINE_MAX];
  300 + char commentaire[LINE_MAX];
  301 +if(ptOe != NULL)
  302 +{
  303 + while(ptOe->suivant != NULL)
  304 + {
  305 + ptOe = ptOe->suivant;
  306 + }
  307 +}
  308 +else X = 1;
  309 +
  310 + ptoeuvres newOe = malloc(sizeof(Oeuvres));
  311 + initOeuvre(newOe);
  312 + printf("ajouter un film : \ntitre : ");
  313 + scanf("%s",&tittle);
  314 + printf("annee : ");
  315 + scanf("%s",&anne);
  316 + printf("commentaire : ");
  317 + scanf("%s",&commentaire);
  318 + memcpy(newOe->commentaire,commentaire,strlen(commentaire)+1);
  319 + memcpy(newOe->title,tittle,strlen(tittle)+1);
  320 + memcpy(newOe->annee,anne,strlen(anne)+1);
  321 +if(X == 0)
  322 + ptOe->suivant = newOe;
  323 +else
  324 + pt->filmographie = newOe;
  325 +}
  326 +
  327 +int eraseFilm(ptrealisateur real,char title[LINE_MAX])
  328 +{
  329 + ptoeuvres previousOe = real->filmographie;
  330 + ptoeuvres nextOe = real->filmographie->suivant;
  331 + if(previousOe == NULL)
  332 + return 1;
  333 + if(nextOe == NULL)
  334 + {
  335 + if(strcmp(previousOe->title,title) == 0)
  336 + {
  337 + real->filmographie = NULL;
  338 + }
  339 + return 1;
  340 + }
  341 +
  342 +
  343 +if(nextOe != NULL)
  344 +{
  345 +
  346 +
  347 + while(strcmp(nextOe->title,title) != 0 && (previousOe != NULL && nextOe != nextOe))
  348 + {
  349 + previousOe = nextOe;
  350 + nextOe = nextOe->suivant;
  351 + if(nextOe == NULL)
  352 + return 1;
  353 + }
  354 + previousOe->suivant = nextOe->suivant;
  355 + free(nextOe);
  356 +}
  357 +else
  358 +{
  359 + if(strcmp(nextOe->title,title) == 0)
  360 + {
  361 + free(nextOe);
  362 + previousOe->suivant = NULL;
  363 + return 1;
  364 + }
  365 + else if(strcmp(previousOe->title,title) == 0)
  366 + {
  367 + real->filmographie = nextOe;
  368 + free(previousOe);
  369 + return 1;
  370 + }
  371 +
  372 +
  373 +}
  374 + printf("%s n'existe pas \n",title);
  375 +
  376 +
  377 + return 0;
  378 +
  379 +}
  380 +
  381 +
  382 +
  383 +void eraseReal(tableReal table,char nom[LINE_MAX],char prenom[LINE_MAX])
  384 +{
  385 + ptrealisateur pt = findReal(table,nom,prenom);
  386 + ptoeuvres ptOe = pt->filmographie->suivant;
  387 + if(pt != NULL)
  388 + {
  389 + printf("effacement en court \n");
  390 + while(pt->filmographie != NULL)
  391 + {
  392 + pt->filmographie = ptOe->suivant;
  393 + ptOe = ptOe->suivant;
  394 + }
  395 + table[hashNum(nom,prenom)] = NULL;
  396 + free(ptOe);
  397 + free(pt);
  398 + }
  399 +
  400 +}
  401 +void commande()
  402 +{
  403 + printf("que voulez vous faire ? \n1 = afficher les realisteurs\n2 = chercher et selectionner un realisteur\n3 = afficher le realisateur selectionner\n4 = effacer le realisateur selectionner\n5 = ajouter un film au realisateur selectionner\n6 = effacer un film au realisateur selectioner\n7 = ajouter un realisateur\n8 = quitter \n");
  404 +}
  405 +void menu(tableReal table)
  406 +{
  407 + int QUITTER = 0;
  408 + int choix = 0;
  409 + char nom[LINE_MAX];
  410 + char prenom[LINE_MAX];
  411 + char nomNew[LINE_MAX];
  412 + char prenomNew[LINE_MAX];
  413 + char titre[LINE_MAX];
  414 + ptrealisateur pt = NULL;
  415 + commande();
  416 +
  417 + while(QUITTER==0)
  418 + {
  419 + while(choix == 0)
  420 + {
  421 + scanf("%d",&choix);
  422 + if(choix > 8 || choix < 0)
  423 + choix = 0;
  424 + system("cls");
  425 + }
  426 + switch(choix)
  427 + {
  428 +
  429 + case 1:
  430 + {
  431 + commande();
  432 + afficherTable(table);
  433 + choix = 0;
  434 + break;
  435 + }
  436 + case 2:
  437 + {
  438 + commande();
  439 + printf("chercher, nom : ");
  440 + scanf("%s",&nom);
  441 + printf("prenom : ");
  442 + scanf("%s",&prenom);
  443 + pt = findReal(table,nom,prenom);
  444 + choix = 0;
  445 + break;
  446 + }
  447 + case 3:
  448 + {
  449 + commande();
  450 + if(pt != NULL)
  451 + afficherReal(table,pt->nom,pt->prenom);
  452 + else
  453 + printf("pas de realisateur selectionner !");
  454 +
  455 + choix = 0;
  456 + break;
  457 + }
  458 + case 4:
  459 + {
  460 + commande();
  461 + if(pt != NULL)
  462 + eraseReal(table,pt->nom,pt->prenom);
  463 + else
  464 + printf("pas de realisateur selectionner !");
  465 +
  466 + choix = 0;
  467 + break;
  468 + }
  469 +
  470 + case 5:
  471 + {
  472 + commande();
  473 + if(pt != NULL)
  474 + addFilm(table,pt->nom,pt->prenom);
  475 + else
  476 + printf("pas de realisateur selectionner !");
  477 +
  478 + choix = 0;
  479 + break;
  480 + }
  481 + case 6:
  482 + {
  483 + commande();
  484 + if(pt != NULL)
  485 + {
  486 + printf("nom du film à effacer :");
  487 + scanf("%s",titre);
  488 + eraseFilm(pt,titre);
  489 + }
  490 + else
  491 + printf("pas de realisateur selectionner !");
  492 +
  493 + choix = 0;
  494 + break;
  495 + }
  496 + case 7:
  497 + {
  498 + commande();
  499 + printf("ajouter : nom : ");
  500 + scanf("%s",&nomNew);
  501 + printf("prenom : ");
  502 + scanf("%s",&prenomNew);
  503 + addReal(table,nomNew,prenomNew);
  504 +
  505 + choix = 0;
  506 + break;
  507 + }
  508 + case 8:
  509 + {
  510 + printf("au revoir !");
  511 + QUITTER = 1;
  512 + break;
  513 + }
  514 +
  515 +
  516 + }
  517 +
  518 +
  519 + }
  520 +
  521 +
  522 +}
  523 +void init()
  524 +{
  525 +
  526 + tableReal table;
  527 + initTable(table);
  528 + FILE* fichier = NULL;
  529 + fichier = fopen("very_small_example.list", "r+");
  530 + readFile(fichier,table);
  531 + fclose(fichier);
  532 +
  533 + menu(table);
  534 +
  535 +}
  536 +int main()
  537 +{
  538 +
  539 + init();
  540 + return 0;
  541 +}
... ...
rapport_cuadros_zhang_programmationavancee.pdf 0 → 100755
No preview for this file type