Advertisement
Elfik

Struktury i pliki

Jan 18th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5.     char imie[20];
  6.     char nazwisko[30];
  7.     int numer;
  8.     double oceny[6];
  9.     double srednia;
  10. } student;
  11.  
  12. student srednia(student);
  13. void dopisz();
  14. void drukuj(student);
  15. void drukuj_plik();
  16. double maksimum();
  17. double minimum();
  18. student* najlepsi(int*);
  19. int usun();
  20. void popraw();
  21.  
  22. main() {
  23.     char z;
  24.     int i = 0;
  25.     student* temp;
  26.  
  27.     while (1) {
  28.         printf("Wybierz akcje: \n");
  29.         printf("[a] dopisz \n");
  30.         printf("[d] drukuj plk \n");
  31.         printf("[m] maksimum \n");
  32.         printf("[z] minimum \n");
  33.         printf("[n] najlepsi \n");
  34.         printf("[p] popraw \n");
  35.         printf("[u] usun \n");
  36.         printf("[q] wyjdz \n");
  37.         printf("---------------- \n");
  38.  
  39.         fflush(stdin);
  40.         scanf("%c[^\n]", &z);
  41.         fflush(stdin);
  42.  
  43.         if (z == 'a') {
  44.             system("cls");
  45.             printf("Dodawanie studenta: \n");
  46.             dopisz();
  47.             system("cls");
  48.             printf("Akcja zakonczona pomyslnie! \n\n");
  49.         }
  50.         else if (z == 'd') {
  51.             system("cls");
  52.             drukuj_plik();
  53.         }
  54.         else if (z == 'm') {
  55.             system("cls");
  56.             printf("Najwyzsza srednia wynosi: %g", maksimum());
  57.             printf("\n\n");
  58.         }
  59.         else if (z == 'z') {
  60.             system("cls");
  61.             printf("Najnizsza srednia wynosi: %g", minimum());
  62.             printf("\n\n");
  63.         }
  64.         else if (z == 'n') {
  65.             system("cls");
  66.             printf("Najlepsi studenci: \n\n");
  67.             temp = najlepsi(&i);
  68.             printf("Jest %i takich studentow.", i);
  69.             printf("\n\n");
  70.             free(temp);
  71.         }
  72.         else if (z == 'p') {
  73.             system("cls");
  74.             drukuj_plik();
  75.             popraw();
  76.             system("cls");
  77.         }
  78.         else if (z == 'u') {
  79.             int i = usun();
  80.             system("cls");
  81.             printf("Liczba usunietych studentow: %i \n\n", i);
  82.         }
  83.         else if (z == 'q') {
  84.             break;
  85.         }
  86.         else {
  87.             system("cls");
  88.             printf("Wybrano zly znak! \n\n");
  89.         }
  90.  
  91.     }
  92.  
  93. }
  94.  
  95. student srednia(student temp) {
  96.     int i = 0;
  97.     for (i = 0; i < 6; i++) {
  98.         temp.srednia += temp.oceny[i];
  99.     }
  100.     temp.srednia /= 6;
  101.  
  102.     return temp;
  103. }
  104.  
  105. void dopisz() {
  106.     student temp;
  107.  
  108.     printf("Imie: ");
  109.     scanf("%s", temp.imie);
  110.     printf("Nazwisko: ");
  111.     scanf("%s", temp.nazwisko);
  112.     printf("Numer: ");
  113.     scanf("%i", &temp.numer);
  114.     printf("Oceny: ");
  115.     scanf("%lf %lf %lf %lf %lf %lf", &temp.oceny[0], &temp.oceny[1], &temp.oceny[2], &temp.oceny[3], &temp.oceny[4], &temp.oceny[5]);
  116.  
  117.     temp = srednia(temp);
  118.  
  119.     FILE* plik = fopen("st.txt", "a");
  120.     fwrite(&temp, sizeof(student), 1, plik);
  121.     fclose(plik);
  122. }
  123.  
  124. void drukuj(student temp) {
  125.     /*  printf("Imie: %s \n", temp.imie);
  126.     printf("Nazwisko: %s \n", temp.nazwisko);
  127.     printf("Numer: %i \n", temp.numer);
  128.     printf("Oceny: %g,%g,%g,%g,%g,%g",temp.oceny[0],temp.oceny[1],temp.oceny[2],temp.oceny[3],temp.oceny[4],temp.oceny[5]);
  129.     */
  130.     printf("%i %s %s %g", temp.numer, temp.imie, temp.nazwisko, temp.srednia);
  131. }
  132.  
  133. void drukuj_plik() {
  134.     student temp;
  135.     FILE* plik = fopen("st.txt", "r");
  136.  
  137.     while (fread(&temp, sizeof(student), 1, plik)) {
  138.         drukuj(temp);
  139.         printf("\n\n");
  140.     }
  141.     fclose(plik);
  142.  
  143.     return;
  144. }
  145.  
  146. double maksimum() {
  147.     double max = -1;
  148.     student temp;
  149.  
  150.     FILE* plik = fopen("st.txt", "r");
  151.     while (fread(&temp, sizeof(student), 1, plik)) {
  152.         if (temp.srednia > max)
  153.             max = temp.srednia;
  154.     }
  155.     fclose(plik);
  156.  
  157.     return max;
  158. }
  159.  
  160. double minimum() {
  161.     double min = 0;
  162.     student temp;
  163.  
  164.     FILE* plik = fopen("st.txt", "r");
  165.     while (fread(&temp, sizeof(student), 1, plik)) {
  166.         if (temp.srednia < min)
  167.             min = temp.srednia;
  168.         else if (min == 0)
  169.             min = temp.srednia;
  170.     }
  171.     fclose(plik);
  172.  
  173.     return min;
  174. }
  175.  
  176. student* najlepsi(int* ile) {
  177.     double max = maksimum();
  178.     student temp;
  179.     student* tab = 0;
  180.     *ile = 0;
  181.  
  182.     FILE* plik = fopen("st.txt", "r");
  183.     while (fread(&temp, sizeof(student), 1, plik)) {
  184.         if (temp.srednia == max) {
  185.             drukuj(temp);
  186.             printf("\n");
  187.             tab = (student*)realloc(tab, ++(*ile) * sizeof(student));
  188.             tab[(*ile) - 1] = temp;
  189.         }
  190.     }
  191.     fclose(plik);
  192.  
  193.     return tab;
  194. }
  195.  
  196. int usun() {
  197.     int i = 0;
  198.     int a = 0;
  199.     int ret = 0;
  200.     double min = minimum();
  201.     student temp;
  202.     student* tab = 0;
  203.  
  204.     FILE* plik = fopen("st.txt", "r");
  205.     while (fread(&temp, sizeof(student), 1, plik)) {
  206.         if (temp.srednia > min) {
  207.             printf("%g", min);
  208.             i++;
  209.             tab = (student*)realloc(tab, i * sizeof(student));
  210.             tab[i - 1] = temp;
  211.         }
  212.         else ret++;
  213.     }
  214.     fclose(plik);
  215.  
  216.     printf("AAA");
  217.  
  218.     remove("st.txt");
  219.  
  220.     plik = fopen("st.txt", "w");
  221.     for (a = 0; a < i; a++) {
  222.         temp = tab[a];
  223.         fwrite(&temp, sizeof(student), 1, plik);
  224.     }
  225.     fclose(plik);
  226.  
  227.     return ret;
  228. }
  229.  
  230. void popraw() {
  231.     int i = 0;
  232.     int a, b;
  233.     student temp;
  234.     student* tab = 0;
  235.  
  236.     printf("Podaj nr studenta do edycji: ");
  237.     scanf("%i", &b);
  238.  
  239.     FILE* plik = fopen("st.txt", "r");
  240.     while (fread(&temp, sizeof(student), 1, plik)) {
  241.         if (temp.numer != b) {
  242.             i++;
  243.             tab = (student*)realloc(tab, i * sizeof(student));
  244.             tab[i - 1] = temp;
  245.         }
  246.         else {
  247.             system("cls");
  248.             drukuj(temp);
  249.         }
  250.     }
  251.     fclose(plik);
  252.    
  253.     printf("\n\n");
  254.    
  255.     remove("st.txt");
  256.  
  257.     plik = fopen("st.txt", "w");
  258.     for (a = 0; a < i; a++) {
  259.         temp = tab[a];
  260.         fwrite(&temp, sizeof(student), 1, plik);
  261.     }
  262.     fclose(plik);
  263.     dopisz();
  264.  
  265.     return;
  266.  
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement