fork download
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include <windows.h>
  5. typedef struct {
  6. char Nom[20] ;
  7. char Prenom [20];
  8. int Note ;
  9. }Etudiant;
  10. typedef struct cellule {
  11. Etudiant Etu ;
  12. struct cellule * Next ;
  13. }Cellule;
  14. Etudiant Saisir()
  15. { Etudiant E;
  16. printf("\n SAISI D'UN ETUDIANT : \n");
  17. printf(" Nom : ");
  18. scanf("%s",E.Nom);
  19. printf(" Prénom : ");
  20. scanf("%s",E.Prenom);
  21. printf(" Note : ");
  22. scanf("%d",&(E.Note));
  23. return E ;
  24. }
  25. void Afficher(Etudiant E)
  26. {
  27. printf(" Etudiant : %s %s %d \n",E.Nom,E.Prenom, E.Note);
  28. }
  29. void Add()
  30. { FILE * Fiche ;
  31. char Nomf[20];
  32. int cpt;
  33. int Nbre; // Nbre d'etudiants a ajouter
  34. Etudiant E ;
  35. puts(" Nom de fichier à utiliser pour ajout ?");
  36. scanf("%s",Nomf);
  37. puts(" Nbre d'etudiants a ajouter ?");
  38. scanf("%d",&Nbre);
  39. // Ouverture du fichier en ajout s'il existe sinon creation
  40. Fiche = fopen(Nomf , "a+");
  41. for(cpt=0 ; cpt<Nbre ;cpt++)
  42. {
  43. printf(" SAISI DE L'ELEVE %d : \n",cpt+1);
  44. E = Saisir();
  45. fwrite(&E , sizeof(Etudiant), 1 , Fiche);
  46. }
  47. fclose(Fiche);
  48. }
  49. void Load()
  50. { FILE * Fiche ;
  51. char Nomf[20];
  52. Etudiant E ;
  53. puts(" Nom de fichier à Lire ?");
  54. scanf("%s",Nomf);
  55. //Ouverture du fichier en lecture
  56. Fiche = fopen(Nomf , "r");
  57. if(Fiche==NULL)
  58. { puts(" Ce fichier n'existe pas !!!") ;
  59. return ;
  60. }
  61. while ( fread(&E,sizeof(Etudiant),1,Fiche) !=0 )
  62. {Afficher(E);
  63. }
  64. fclose(Fiche);
  65. }
  66. void SearchFirst()
  67. { FILE * Fiche ;
  68. char Nomf[20];
  69. char NomE[20];
  70. int Found=0 ;
  71. Etudiant E ;
  72. puts(" Nom de fichier à Lire ?");
  73. scanf("%s",Nomf);
  74. //Ouverture du fichier en lecture
  75. Fiche = fopen(Nomf , "r");
  76. if(Fiche==NULL)
  77. { puts(" Ce fichier n'existe pas !!!") ;
  78. return ;
  79. }
  80. puts(" Nom à rechercher ?");
  81. scanf("%s",NomE);
  82. while ( fread(&E,sizeof(Etudiant),1,Fiche)!=0 && Found==0)
  83. {
  84. if(strcmp(E.Nom,NomE)==0)
  85. {
  86. printf (" \n LA FICHE EST : \n");
  87. Afficher(E);
  88. Found=1;
  89. }
  90.  
  91. }
  92. if(Found==0)
  93. printf("CET ETUDIANT N'EXISTE PAS !!!\n");
  94. fclose(Fiche);
  95. }
  96. void Update()
  97. { FILE * Fiche ;
  98. char Nomf[20];
  99. char NomE[20]; // Nom de l'étudiant à rechercher
  100. Etudiant E ;
  101. puts(" Nom de fichier dans lequel on effectue la recherche ?");
  102. scanf("%s",Nomf);
  103. puts(" Nom de l'étudiant à rechercher ?");
  104. scanf("%s",NomE);
  105. //Ouverture du fichier en lecture et autre
  106. Fiche = fopen(Nomf , "r+");
  107. if(Fiche==NULL)
  108. { puts(" Ce fichier n'existe pas !!!") ;
  109. return ;
  110. }
  111. while ( fread(&E,sizeof(Etudiant),1,Fiche)!=0)
  112. { if(strcmp(E.Nom,NomE)== 0 )
  113. { // Je recule de sizeof(Etudiant) octets
  114. fseek(Fiche, -sizeof(Etudiant), SEEK_CUR);
  115. puts(" Nouveau prenom ");
  116. printf(" Prenom : ");
  117. scanf("%s",E.Prenom);
  118. printf(" La nouvelle note ?");
  119. scanf("%d",&(E.Note));
  120. fwrite(&E,sizeof(Etudiant),1,Fiche);
  121. printf(" Update ok ");
  122. fclose(Fiche);
  123. return ;
  124. }
  125. }
  126.  
  127.  
  128. printf("L'étudiant recherché n'existe pas !!!\n");
  129. fclose(Fiche);
  130.  
  131. }
  132. Etudiant* Upload(int * Nbre)
  133. { FILE * Fiche ;
  134. char Nomf[20];
  135. Etudiant * Liste ,E ;
  136. int Nb=0 ;
  137. puts(" Nom de fichier à charger ?");
  138. scanf("%s",Nomf);
  139. // Ouverture du fichier en Lecture/Ecriture
  140. Fiche = fopen(Nomf, "r+");
  141. if(Fiche==NULL)
  142. { puts(" Ce fichier n'existe pas !!!") ;
  143. return NULL;
  144. }
  145. // On doit parcourir le fichier pour compter le nbre d'étudiants
  146. while( fread(&E,sizeof(Etudiant),1, Fiche) )
  147. Nb++;
  148. (*Nbre)=Nb ; // Mise a jour de la taille
  149. // Allocation de l'espace nécessaire pour Nb étudiants
  150. Liste = (Etudiant*) malloc(Nb*sizeof(Etudiant));
  151. // Se repositionner au début
  152. rewind(Fiche);
  153. //je charge les Nb étudiants ds Liste
  154. fread(Liste , sizeof(Etudiant), Nb , Fiche);
  155. // Mise à jour de nbre d'étudiants
  156.  
  157. fclose(Fiche);
  158. return Liste ;
  159.  
  160. }
  161. void Affichetable(Etudiant* Tab , int taille)
  162. {
  163. int i ;
  164. puts(" LISTE DES ETUDIANTS ");
  165. for(i=0 ; i < taille ;i++)
  166. {
  167. Afficher(Tab[i]);
  168. puts("====================================");
  169. }
  170. }
  171. Cellule * Create(Etudiant E)
  172. {
  173. Cellule * Nouveau ;
  174. Nouveau = (Cellule*) malloc(sizeof(Cellule));
  175. Nouveau->Etu = E ;
  176. Nouveau->Next = NULL ;
  177. return Nouveau ;
  178. }
  179. Cellule * AjoutDebut(Cellule *L,Etudiant E)
  180. { Cellule*p;
  181. if(!L)
  182. return Create(E);
  183. p=Create(E);
  184. p->Next=L;
  185. return p;
  186. }
  187. Cellule * AjoutFin(Cellule *L , Etudiant E)
  188. { Cellule *p ;
  189. if(!L)
  190. return Create(E);
  191. for(p=L ; p->Next!=NULL ; p=p->Next);
  192. p->Next = Create(E);
  193. return L ;
  194. }
  195.  
  196. Cellule *DeleteFirst(Cellule *L)
  197. {
  198. if(!L)
  199. return L->Next;
  200. printf("liste VIDE");
  201. return NULL;
  202. }
  203. Cellule* UploadToList()
  204. { FILE * Fiche ;
  205. char Nomf[20];
  206. Cellule * Liste=NULL ;
  207. Etudiant E ;
  208. puts(" Nom de fichier à charger ?");
  209. scanf("%s",Nomf);
  210. // Ouverture du fichier en Lecture
  211. Fiche = fopen(Nomf, "r");
  212. if(Fiche==NULL)
  213. { puts(" Ce fichier n'existe pas !!!") ;
  214. return NULL;
  215. }
  216. while( fread(&E,sizeof(Etudiant),1, Fiche) )
  217. {
  218. Liste = AjoutFin(Liste, E);
  219. }
  220.  
  221. fclose(Fiche);
  222. return Liste ;
  223.  
  224. }
  225.  
  226. void AfficherListe(Cellule * L)
  227. {
  228. Cellule * p ;
  229. if(!L)
  230. {
  231. puts(" LA LISTE EST VIDE ");
  232. return ;
  233. }
  234. puts(" LA LISTE CHAINEE DES ETUDIANTS EST ");
  235. for(p=L ; p; p=p->Next)
  236. {
  237. Afficher(p->Etu);
  238. puts("======================================");
  239. }
  240. }
  241. void StockerListe(Cellule * L)
  242. { FILE * Fiche ;
  243. char Nomf[20];
  244. Cellule * p ;
  245. puts(" Nom de fichier à charger ?");
  246. scanf("%s",Nomf);
  247. // Ouverture du fichier en ecriture
  248. Fiche = fopen(Nomf, "w");
  249. for(p=L ; p ; p=p->Next)
  250. {
  251. fwrite(&(p->Etu),sizeof(Etudiant),1,Fiche);
  252. }
  253. fclose(Fiche);
  254. }
  255. void Delete()
  256. { Cellule* L=NULL, *p=NULL,*q=NULL ;
  257. L= UploadToList();
  258. char name[20];
  259. puts(" Nom a supprimer");
  260. scanf("%s",name);
  261. if(L)
  262. {
  263. if(!strcmp(L->Etu.Nom,name) )
  264. L= L->Next;
  265. else // si name ne se trouve pas au debut
  266. for(q=L , p=L->Next ; p && strcmp(p->Etu.Nom,name)!=0 ; q=p , p=p->Next);
  267. if(p!=NULL) // strcmp(p->Etu.Nom,name)==0
  268. q->Next = p->Next;
  269. else
  270. puts(" Ce nom n'est pas dans la liste");
  271. }
  272. StockerListe(L);
  273.  
  274. }
  275. Cellule * InsererCroissant( Cellule * L)
  276. { // On insere E dans la liste L triee croissante elle peut etre vide
  277. Etudiant E ;
  278. Cellule* Nouveau,*p,*q ;
  279. E=Saisir();
  280. Nouveau=Create(E);
  281. if(!L)
  282. return Nouveau;
  283.  
  284. if(strcmp(Nouveau->Etu.Nom,L->Etu.Nom)<=0)
  285. { Nouveau->Next = L;
  286. return Nouveau;
  287. }
  288. // Ajoiut s'effectuera au dela de debut
  289. for(q=L, p=L->Next ; p && strcmp(Nouveau->Etu.Nom,p->Etu.Nom)>0 ;q=p , p=p->Next); // Point virgule
  290. /* for(q=L, p=L->Next ; p ;q=p , p=p->Next)
  291.   {
  292.   if (strcmp(Nouveau->Etu.Nom,p->Etu.Nom)<=0 ) break ;
  293.   }*/
  294. q->Next = Nouveau;
  295. Nouveau->Next = p ;
  296. return L ;
  297. }
  298.  
  299. Cellule * InsertCroissant( Cellule * L, Etudiant E)
  300. { // On insere E dans la liste L triee croissante elle peut etre vide
  301. Cellule * Nouveau,*p,*q ;
  302. Nouveau=Create(E);
  303. if(!L)
  304. return Nouveau;
  305.  
  306. if(strcmp(Nouveau->Etu.Nom,L->Etu.Nom)<=0)
  307. { Nouveau->Next = L;
  308. return Nouveau;
  309. }
  310. // Ajouut s'effectuera au dela de debut
  311. for(q=L, p=L->Next ; p && strcmp(Nouveau->Etu.Nom,p->Etu.Nom)>0 ;q=p , p=p->Next); // Point virgule
  312. /* for(q=L, p=L->Next ; p ;q=p , p=p->Next)
  313.   {
  314.   if (strcmp(Nouveau->Etu.Nom,p->Etu.Nom)<=0 ) break ;
  315.   }*/
  316. q->Next = Nouveau;
  317. Nouveau->Next = p ;
  318. return L ;
  319. }
  320.  
  321.  
  322. Cellule * InsertDecroissant(Cellule * L, Etudiant E)
  323. {
  324. Cellule * Nouveau,*p,*q ;
  325. Nouveau=Create(E);
  326. if(!L)
  327. return Nouveau;
  328.  
  329. if(strcmp(Nouveau->Etu.Nom,L->Etu.Nom)>=0)
  330. {
  331. Nouveau->Next=L;
  332. return Nouveau;
  333. }
  334. for(q=L, p=L->Next ; p && strcmp(Nouveau->Etu.Nom,p->Etu.Nom)<0 ;q=p , p=p->Next);
  335. q->Next = Nouveau;
  336. Nouveau->Next = p ;
  337. return L ;
  338. }
  339.  
  340.  
  341. Cellule* TriCroissant(Cellule * L)
  342. {
  343. Cellule *LT=NULL , *p=NULL;
  344. for(p=L;p;p=p->Next)
  345. {
  346. LT=InsertCroissant(LT,p->Etu);
  347. }
  348. return LT;
  349. }
  350. Cellule * TriDecroissant(Cellule *L)
  351. {
  352. Cellule *LT=NULL , *p=NULL;
  353. for(p=L;p;p=p->Next)
  354. {
  355. LT=InsertDecroissant(LT,p->Etu);
  356. }
  357. return LT;
  358. }
  359. Cellule *Renverser(Cellule * L)
  360. {
  361. Cellule *p, *q, *LI=NULL;
  362. p=L;
  363. while(p!=NULL) // a least there is a next
  364. {
  365. q=p->Next;
  366. p->Next=LI;
  367. LI=p;
  368. p=q;
  369. }
  370. return LI;
  371. }
  372. int Taille(Cellule * L)
  373. {
  374. Cellule *p;
  375. int i=0;
  376. for(p=L,i=0;p;i++,p=p->Next);
  377. return i;
  378. }
  379.  
  380. Cellule * Position( Cellule *L, int pos)
  381. {
  382. int taille=Taille(L),i;
  383. Cellule *p;
  384. if(pos>taille)
  385. return NULL;// Erreur
  386. for(i=1 , p=L; i<pos ;i++ , p=p->Next);
  387. return p;
  388. }
  389. Cellule* Creer() // Elle creee un seul etudiant
  390. {
  391. Cellule * Nouveau;
  392. Nouveau = (Cellule*)malloc(sizeof(Cellule));
  393. Nouveau->Etu= Saisir();
  394. Nouveau->Next=NULL;
  395. return Nouveau;
  396. }
  397. // Cette fonction sert a inserer un etudiant dans une position precise si elle existe
  398. Cellule * InsererPosition(Cellule *L,int pos)
  399. { int i ;
  400. Cellule *p, *q, *Nouveau;
  401. int taille=Taille(L); // la taille de la liste
  402. if(pos<0 || pos>taille)
  403. {
  404. printf("la position %d n'existe pas \n",pos );
  405. return L;
  406. }
  407. Nouveau=Creer(); // insertion
  408. if(pos==1)
  409. {
  410. Nouveau->Next=L; // premiere cellule reservée pour le nouveau etudiant et le reste pour le reste de la liste
  411. return Nouveau;
  412. }
  413. for(i=1,p=L;i<pos;i++,p=q,p=p->Next);
  414. q->Next= Nouveau ;
  415. Nouveau->Next=p;
  416. return L ;
  417.  
  418. }
  419. Cellule * ajouterAvantNom(Cellule * L,char tab[20])
  420. {
  421. Cellule *p, *q, *Nouveau;
  422. Etudiant E;
  423. Nouveau=Create(Saisir(E));
  424. if (strcmp(L->Etu.Nom,tab)==0) {
  425. Nouveau->Next=L;
  426. return Nouveau;
  427. }
  428. for(p=L,q=L->Next;q&&strcmp(q->Etu.Nom,tab)!=0;p=q,q=q->Next);
  429. p->Next=Nouveau;
  430. Nouveau->Next=q;
  431. return L;
  432. }
  433.  
  434. Cellule * ajouterApresNom(Cellule * L,char tab[20])
  435. {
  436. Cellule *p=NULL, *q=NULL, *Nouveau=NULL;
  437. Etudiant E;
  438. for(p=L,q=p->Next;q&&strcmp(p->Etu.Nom,tab)!=0;p=q,q=q->Next);
  439. Nouveau=Create(Saisir(E));
  440. p->Next=Nouveau;
  441. Nouveau->Next=q;
  442. return L;
  443. }
  444.  
  445. int Menu()
  446. { int choix ;
  447. printf("\n 1----> Ajout Debut \n");
  448. printf(" 2 ----> Ajout Fin: \n");
  449. printf(" 3 ----> Ajout Avant un nom \n");
  450. printf(" 4 ----> Ajout Après un nom \n");
  451. printf(" 5 ----> DeleteFirst \n");
  452. printf(" 6 ----> DeleteAll \n");
  453. printf(" 7 ----> Afficher Liste \n");
  454. printf(" 8 ----> Le nom d'une position \n");
  455. printf(" 9 ----> Ajout d'un nom dans une position \n");
  456. printf(" 10 ----> Inserer Croissant \n");
  457. printf(" 11 ----> Tri Croissant \n");
  458. printf(" 12 ----> Tri DeCroissant \n");
  459. printf(" 13 ----> Renverser \n");
  460. printf(" 14 ----> Le nom d'une position \n");
  461. scanf("%d",&choix);
  462. return choix ;
  463. }
  464. int main()
  465. { Cellule *GINF1=NULL, *Res;
  466. int b;
  467. Etudiant E;
  468. char nom[20];
  469. int choix, pos;
  470. do
  471. {
  472. system("cls");
  473. choix=Menu();
  474. switch (choix) {
  475. case 1:
  476. E=Saisir();
  477. GINF1=AjoutDebut(GINF1,E);
  478. break;
  479. case 2:
  480. E=Saisir();
  481. GINF1=AjoutFin(GINF1,E);
  482. break;
  483. case 3:
  484. printf("le nom Avant lequel on va ajouter\n");
  485. scanf("%s",nom);
  486. GINF1=ajouterAvantNom(GINF1,nom);
  487. break;
  488. case 4:
  489. printf("le nom apres lequel on va ajouter\n");
  490. scanf("%s",nom);
  491. GINF1=ajouterApresNom(GINF1,nom);
  492. break;
  493. case 5:
  494. GINF1=DeleteFirst(GINF1);
  495. break;
  496. case 6:
  497. GINF1=NULL;
  498. break;
  499. case 7:
  500. AfficherListe(GINF1);
  501. break;
  502. case 8:
  503. printf("la postiton svp\n");
  504. scanf("%d\n",&pos );
  505. Res= Position(GINF1,pos);
  506. if(Res!=NULL)
  507. {
  508. Afficher(Res->Etu);
  509. }else
  510. {
  511. puts("ceci n'existe pas");
  512. }
  513. break;
  514.  
  515. case 9:
  516. printf("La position s'il vois plait \n");
  517. scanf("%d\n",pos );
  518. Res=Position(GINF1,pos);
  519. if(Res!=NULL)
  520. {
  521. InsererPosition(Res,pos);
  522. }else
  523. {
  524. puts("ceci n'existe pas");
  525. }
  526. break;
  527. case 10:
  528. GINF1=InsererCroissant(GINF1);
  529. break;
  530. case 11:
  531. GINF1=TriCroissant(GINF1);
  532. break;
  533. case 12:
  534. GINF1=TriDecroissant(GINF1);
  535. break;
  536. case 13:
  537. GINF1=Renverser(GINF1);
  538. break;
  539. default :
  540. printf("ce chois n est pas valide\n");
  541. break;
  542. }
  543. printf("voulez vous continuer ??\n1.oui 2.non\n Choix : ");
  544. scanf("%d",&b);
  545. }while(b!=2);
  546. return 0 ;
  547. }
  548.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c:4:10: fatal error: windows.h: No such file or directory
 #include <windows.h>
          ^~~~~~~~~~~
compilation terminated.
stdout
Standard output is empty