Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define K 10
  5. #define ST 20
  6. struct student
  7. {
  8. int nr_legitymacji;
  9. struct student *nast;
  10. };
  11. typedef struct student STUDENT;
  12. typedef STUDENT *ADRESSTUDENT;
  13. struct zapisani
  14. {
  15. ADRESSTUDENT zapisany;
  16. struct zapisani *nast;
  17. };
  18. typedef struct zapisani ZAPISANI;
  19. typedef ZAPISANI *ADRESZAPISANI;
  20. typedef struct
  21. {
  22. char nazwa_kategorii[30];
  23. char nazwa_kursu[30];
  24. int liczba_godzin;
  25. ADRESZAPISANI first;
  26. }kursy;
  27.  
  28. ADRESSTUDENT czytanie_indeksow(FILE *plik)
  29. { int indeks;
  30. ADRESSTUDENT pierwszy=NULL,ostatni=NULL;
  31. while(fscanf(plik,"%d",&indeks)!=0 && indeks!=0)
  32. {
  33. if(pierwszy==NULL)
  34. {
  35. pierwszy=(ADRESSTUDENT)malloc(sizeof(STUDENT));
  36. pierwszy->nr_legitymacji=indeks;
  37. ostatni=pierwszy;
  38. }
  39. else
  40. {
  41. ostatni->nast=(ADRESSTUDENT)malloc(sizeof(STUDENT));
  42. ostatni=ostatni->nast;
  43. ostatni->nr_legitymacji=indeks;
  44. ostatni->nast=NULL;
  45. }
  46. }
  47. return pierwszy;
  48. }
  49. void wypisanie_indeksow(ADRESSTUDENT pierwszy)
  50. {
  51. ADRESSTUDENT pom=pierwszy;
  52. while(pom)
  53. {
  54. printf("%d\n",pom->nr_legitymacji);
  55. pom=pom->nast;
  56. }
  57. }
  58. ADRESSTUDENT szukaj(ADRESSTUDENT pierwszy,int indeks)
  59. {
  60. ADRESSTUDENT pom = pierwszy;
  61. while(pom->nr_legitymacji!=indeks)
  62. {
  63. pom=pom->nast;
  64. }
  65. return pom;
  66. }
  67. void wczytywanie_kurs(ADRESSTUDENT pierwszy, kursy tab[],FILE *plik)
  68. {
  69. int indeks;
  70. int i=0;
  71. while(!feof(plik))
  72. {
  73. fscanf(plik,"%s",tab[i].nazwa_kategorii);
  74. fscanf(plik,"%s",tab[i].nazwa_kursu);
  75. fscanf(plik,"%d",&tab[i].liczba_godzin);
  76. ADRESZAPISANI ostatni=NULL;
  77. tab[i].first=NULL;
  78. while(fscanf(plik,"%d",&indeks)!=0 && indeks!=0)
  79. {
  80. ADRESSTUDENT pom=pierwszy;
  81. if(tab[i].first==NULL)
  82. {
  83. tab[i].first=(ADRESZAPISANI)malloc(sizeof(ZAPISANI));
  84. tab[i].first->zapisany=szukaj(pierwszy,indeks);
  85. tab[i].first->nast=NULL;
  86. ostatni=tab[i].first;
  87. }
  88. else
  89. {
  90. ostatni->nast=(ADRESZAPISANI)malloc(sizeof(ZAPISANI));
  91. ostatni=ostatni->nast;
  92. ostatni->zapisany=szukaj(pierwszy,indeks);
  93. ostatni->nast=NULL;
  94. }
  95.  
  96. }
  97. i++;
  98. }
  99. }
  100. void wypisywanie_kurs(kursy tab[])
  101. {
  102. int i;
  103. ADRESZAPISANI pom;
  104. for(i=0;i<20;i++)
  105. {
  106. printf("%s\n",tab[i].nazwa_kategorii);
  107. printf("%s\n",tab[i].nazwa_kursu);
  108. printf("%d\n",tab[i].liczba_godzin);
  109. pom=tab[i].first;
  110. while(pom!=NULL)
  111. {
  112. printf("%d\n",pom->zapisany->nr_legitymacji);
  113. pom=pom->nast;
  114. }
  115. }
  116. }
  117. void a(kursy tab [], ADRESSTUDENT pierwszy)
  118. {
  119. ADRESSTUDENT temp = pierwszy;
  120. ADRESZAPISANI pom=NULL;
  121. FILE *plik=fopen("a.txt","wt");
  122. int i;
  123. while(temp)
  124. {
  125. fprintf(plik,"%d\n",temp->nr_legitymacji);
  126. for(i=0;i<20;i++)
  127. {
  128. pom=tab[i].first;
  129. while(pom)
  130. {
  131. if(pom->zapisany==temp)
  132. {
  133. fprintf(plik,"%s\n",tab[i].nazwa_kursu);
  134. break;
  135. }
  136. pom=pom->nast;
  137. }
  138. }
  139. temp=temp->nast;
  140. }
  141. fclose(plik);
  142. }
  143. void b(kursy tab[])
  144. {
  145. FILE *plik = fopen("b.txt","wt");
  146. int i;
  147. ADRESZAPISANI temp;
  148. for(i=0;i<20;i++)
  149. {
  150. fprintf(plik,"%s\n",tab[i].nazwa_kursu);
  151. temp = tab[i].first;
  152. while(temp)
  153. {
  154. fprintf(plik,"%d\n",temp->zapisany->nr_legitymacji);
  155. temp=temp->nast;
  156. }
  157. }
  158. fclose(plik);
  159. }
  160. void c(kursy tab[])
  161. {
  162. FILE *plik=fopen("c.txt","wt");
  163. ADRESZAPISANI pom=NULL;
  164. float srednia=0;
  165. int ile_studentow=0, ile_godzin=0,ile_studentow_kurs=0;
  166. int i;
  167. for(i=0;i<20;i++)
  168. {
  169. pom=tab[i].first;
  170. ile_studentow_kurs=0;
  171. while(pom)
  172. {
  173. ile_studentow++;
  174. ile_studentow_kurs++;
  175. pom=pom->nast;
  176. }
  177. ile_godzin += ile_studentow_kurs*tab[i].liczba_godzin;
  178. }
  179. srednia =(float)ile_godzin/ile_studentow;
  180. fprintf(plik,"%f\n",srednia);
  181. fclose(plik);
  182. }
  183. void d(kursy tab[])
  184. {
  185. FILE *plik = fopen("d.txt","wt");
  186. int max=0, ile=0,i;
  187. ADRESZAPISANI pom=NULL;
  188. for(i=0;i<20;i++)
  189. {
  190. pom=tab[i].first;
  191. ile=0;
  192. while(pom)
  193. {
  194. ile++;
  195. pom=pom->nast;
  196. }
  197. if(ile>max)
  198. {
  199. max=ile;
  200. }
  201. }
  202. for(i=0;i<20;i++)
  203. {
  204. pom=tab[i].first;
  205. ile=0;
  206. while(pom)
  207. {
  208. ile++;
  209. pom=pom->nast;
  210. }
  211. if(ile==max)
  212. {
  213. fprintf(plik,"%s\n",tab[i].nazwa_kursu);
  214. }
  215. }
  216. fclose(plik);
  217. }
  218. void e(kursy tab[], ADRESSTUDENT pierwszy)
  219. {
  220. FILE *plik = fopen("e.txt","wt");
  221. ADRESSTUDENT temp = pierwszy;
  222. ADRESZAPISANI pom = NULL;
  223. int i=0,ile=0,max=0,j;
  224. while(temp)
  225. {
  226. ile++;
  227. temp=temp->nast;
  228. }
  229. int tablica[ile][2];
  230. temp = pierwszy;
  231. while(temp)
  232. {
  233. tablica[i][0]=temp->nr_legitymacji;
  234. i++;
  235. temp=temp->nast;
  236. }
  237. for(i=0;i<20;i++)
  238. {
  239. pom=tab[i].first;
  240. while(pom)
  241. {
  242. for(j=0;j<ile;j++)
  243. {
  244. if(pom->zapisany->nr_legitymacji==tablica[i][0])
  245. {
  246. tablica[i++][1];
  247. break;
  248. }
  249. }
  250. pom=pom->nast;
  251. }
  252. }
  253. for(i=0;i<ile;i++)
  254. {
  255. if(tablica[i][1]>max)
  256. {
  257. max=tablica[i][1];
  258. }
  259. }
  260. for(i=0;i<ile;i++)
  261. {
  262. if(tablica[i][1]==max)
  263. {
  264. fprintf(plik,"%d\n",tablica[i][0]);
  265. }
  266. }
  267. fclose(plik);
  268. }
  269. void f(kursy tab[])
  270. {
  271. FILE *plik = fopen("f.txt","wt");
  272. int i, max=0,ile=0,j=0;
  273. ADRESZAPISANI pom;
  274. char kategorie [10][30];
  275. int liczba[10];
  276. strcpy(kategorie[0],tab[0].nazwa_kategorii);
  277. for(i=1;i<20;i++)
  278. {
  279. if(strcmp(kategorie[j],tab[i].nazwa_kategorii)!=0)
  280. {
  281. strcpy(kategorie[j+1],tab[i].nazwa_kategorii);
  282. j++;
  283. }
  284. }
  285. for(i=0;i<20;i++)
  286. {
  287. ile=0;
  288. pom=tab[i].first;
  289. while(pom)
  290. {
  291. ile++;
  292. pom=pom->nast;
  293. }
  294. for(j=0;strcmp(kategorie[j],tab[i].nazwa_kategorii);j++)
  295. {
  296. }
  297. liczba[j]+=ile;
  298. }
  299. for (i=0;i<10;i++)
  300. {
  301. if(liczba[i]>max)
  302. {
  303. max=liczba[i];
  304. }
  305. }
  306. for(i=0;i<10;i++)
  307. {
  308. if(liczba[i]==max)
  309. {
  310. fprintf(plik,"%s\n",kategorie[i]);
  311. }
  312. }
  313. fclose(plik);
  314. }
  315. void g (kursy tab[],ADRESSTUDENT pierwszy)
  316. {
  317. FILE *plik =fopen("g.txt","wt");
  318. int i;
  319. char usuwanie[30];
  320. printf("Kursy:\n");
  321. for(i=0;i<20;i++)
  322. printf("%s\n",tab[i].nazwa_kursu);
  323. printf("Co chcesz usunac\n");
  324. ADRESZAPISANI temp;
  325. ADRESSTUDENT pom=pierwszy;
  326. scanf("%s",usuwanie);
  327.  
  328. for(i=0;i<strlen(usuwanie);i++)
  329. {
  330. if(isupper(usuwanie[i]))usuwanie[i]=tolower(usuwanie[i]);
  331. }
  332.  
  333.  
  334. for(i=0;i<20;i++)
  335. { if(strcmp(tab[i].nazwa_kursu,usuwanie)==0)
  336. {strcpy(tab[i].nazwa_kategorii," ");
  337. strcpy(tab[i].nazwa_kursu," ");
  338. tab[i].liczba_godzin=0;
  339. while(tab[i].first)
  340. {
  341. temp=tab[i].first;
  342. tab[i].first = tab[i].first->nast;
  343. free(temp);
  344. }}}
  345. if(i==19)
  346. {
  347.  
  348. printf("Blad");return 0;}
  349. while(pom)
  350. {
  351. fprintf(plik,"%d\n",pom->nr_legitymacji);
  352. pom=pom->nast;
  353. }
  354. fprintf(plik,"%d\n",0);
  355. for(i=0;i<20;i++)
  356. {
  357. if(tab[i].first!=NULL)
  358. {
  359. fprintf(plik,"%s\n%s\n%d\n",tab[i].nazwa_kategorii,tab[i].nazwa_kursu,tab[i].liczba_godzin);
  360. temp=tab[i].first;
  361. while(temp)
  362. {
  363. fprintf(plik,"%d\n",temp->zapisany->nr_legitymacji);
  364. temp=temp->nast;
  365. }
  366. fprintf(plik,"%d\n",0);
  367. }
  368. }
  369. fclose(plik);
  370. }
  371. int main()
  372. {
  373.  
  374. FILE *plik=fopen("studenci.txt","rt");
  375. if(plik==NULL)
  376. {
  377. printf("Bład");
  378. return 0 ;
  379. }
  380. kursy tab[ST];
  381. ADRESSTUDENT pierwszy=czytanie_indeksow(plik);
  382. wczytywanie_kurs(pierwszy,tab,plik);
  383. printf("--------------------MENU---------------------\n");
  384. printf("a)Kursy studentow, na ktore sie zapisali\n");
  385. printf("b)Studenci, ktorzy zapisali sie na kursy\n");
  386. printf("c)Srednia liczba godzin spedzonych na kursach przez stastycznego studenta\n");
  387. printf("d)Kurs, na ktory zapisalo sie najwiecej studentow \n");
  388. printf("e)Student, ktory zapisal sie na najwiecej kursow\n");
  389. printf("f)Kategoria, ktora najczesciej wybierali studenci\n");
  390. printf("g)Usuwanie wszystkich informacji o podanym kursie\n");
  391. printf("h)Wykonanie wszystkich zadan\n");
  392.  
  393. char x;
  394. printf("Wybierz zadanie: \n");
  395. scanf("%c",&x);
  396. if(isupper(x)) x=tolower(x);
  397. fflush(stdin);
  398.  
  399. switch(x)
  400. {
  401. case 'a':a(tab,pierwszy);
  402. break;
  403. case 'b':b(tab);
  404. break;
  405. case 'c': c(tab);
  406. break;
  407. case 'd':d(tab);
  408. break;
  409. case 'e': e(tab,pierwszy);
  410. break;
  411. case 'f':f(tab);
  412. break;
  413. case 'g':g(tab,pierwszy);
  414. break;
  415. case 'h':
  416. {
  417. a(tab,pierwszy);
  418. b(tab);
  419. c(tab);
  420. d(tab);
  421. e(tab,pierwszy);
  422. f(tab);
  423. g(tab,pierwszy);
  424. break;
  425. }
  426. default: printf("Nie ma takiej opcji");
  427. }
  428. return 0;
  429. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement