Advertisement
Guest User

Programiranje

a guest
Apr 21st, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.11 KB | None | 0 0
  1. //1. zadatak
  2. //program.c
  3.  
  4. /* Kako bi autograder mogao uspjesno upisati strukturu u datoteku
  5. morate koristiti ovako definirane strukture
  6.  
  7.  
  8. struct podaci
  9. {      
  10.     char prezime[20];
  11.     char ime[20];
  12.     int sifra;
  13.     char adresa[100];
  14.     int br_tel;
  15. };
  16.  
  17. */
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20.  
  21. typedef struct {
  22.     char prezime[20];
  23.     char ime[20];
  24.     int sifra;
  25.     char adresa[100];
  26.     int br_tel;
  27. } podaci;
  28.  
  29. FILE *fp;
  30.  
  31. podaci *clanovi = NULL;
  32. int brclanova = 0;
  33.  
  34. void makeClanovi() {
  35.     fp = fopen("clanovi.txt", "ab+");
  36.     if (NULL == fp) {
  37.         printf("GRESKA_MAKECLANOVI");
  38.         exit(EXIT_FAILURE);
  39.     }
  40.     return;
  41. }
  42.  
  43. void readClanovi() {
  44.     fseek(fp, 0L, SEEK_END);
  45.     brclanova = ftell(fp)/sizeof(podaci);
  46.     rewind(fp);
  47.  
  48.     clanovi = (podaci*) calloc(brclanova, sizeof(podaci));
  49.     if (NULL == clanovi) {
  50.         printf("GRESKA_MAKECLANOVI");
  51.         exit(EXIT_FAILURE);
  52.     }
  53.  
  54.     fread(clanovi, sizeof(podaci), brclanova, fp);
  55.     return;
  56. }
  57.  
  58. void appendClanovi() {
  59.     podaci *p = (podaci*) calloc(1, sizeof(podaci));
  60.  
  61.     scanf("%s", p->prezime);
  62.     scanf("%s", p->ime);
  63.     scanf("%d", &(p->sifra));
  64.     scanf(" %[^\n]", p->adresa);
  65.     scanf("%d", &(p->br_tel));
  66.  
  67.     fwrite(p, sizeof(podaci), 1, fp);
  68.     brclanova++;
  69.     clanovi = (podaci*) realloc(clanovi, brclanova * sizeof(podaci));
  70.     if (NULL == clanovi) {
  71.         printf("GRESKA_APPENDCLANOVI");
  72.         exit(EXIT_FAILURE);
  73.     }
  74.  
  75.     clanovi[brclanova - 1] = (podaci) {};
  76.     clanovi[brclanova - 1] = *p;
  77.     free(p);
  78. }
  79. void printMenu() {
  80.     int n = 0;
  81.     do {
  82.         printf("Odaberi opciju: \t");
  83.         scanf("%d", &n);
  84.         switch (n) {
  85.         case (1):
  86.             makeClanovi();
  87.             break;
  88.         case (2):
  89.             readClanovi();
  90.             break;
  91.         case (3):
  92.             appendClanovi();
  93.             break;
  94.         case (4):
  95.             fclose(fp);
  96.             free(clanovi);
  97.             exit(EXIT_SUCCESS);
  98.         }
  99.     } while (n != 4);
  100. }
  101. int main (void) {
  102.     setvbuf(stdout, NULL, _IONBF, 0);
  103.     printMenu();
  104.     return 0;
  105. }
  106.  
  107. //nekiheader.h
  108.  
  109. #include <stdio.h>
  110.  
  111. int suma(int n) {
  112.     if(n == 0) {
  113.         return 0;
  114.     } else {
  115.         return (n % 10 + suma(n / 10));
  116.     }
  117. }
  118.  
  119. int main(void) {
  120.     int n;
  121.     scanf("%d", &n);
  122.     FILE *fp = fopen("suma.txt","w");
  123.     if (NULL == fp) {
  124.         printf("Greska otvaranja file-a");
  125.         exit(EXIT_FAILURE);
  126.     }
  127.     fprintf(fp, "%d", suma(n));
  128.     fclose(fp);
  129.     return 0;
  130. }
  131.  
  132. //zadatak 2
  133. /* Kako bi autograder mogao uspjesno upisati strukturu u datoteku
  134. morate koristiti ovako definirane strukture
  135.  
  136.  
  137. struct podaci
  138. {      
  139.     char prezime[20];
  140.     char ime[20];
  141.     int sifra;
  142.     char adresa[100];
  143.     int br_tel;
  144. };
  145.    
  146. struct posudba{
  147.     char ime_filma[20];
  148.     int datum;
  149.     int sif;
  150. };
  151.  
  152. Ulazni podaci u program su zapisani ispod. Tekst poslije znaka # označava komentar
  153. linije i ne predstavlja ulaz u program:
  154. 1               # kreiranje filea
  155. 3               # upis podataka o clanu
  156. Peric                                                                  
  157. Pero                                                                      
  158. 1               #sifra clana                                                                  
  159. Osjecka 132     #adresa                                                        
  160. 12345           #br tel
  161. 4               #izbornik posudbe
  162. 2               #broj filmova za posudbu                                  
  163. 1               #sifra clana koji posudjuje film                                              
  164. Mrak film 1     #naziv filma
  165. 34              #dan posudbe
  166. Mrak film 2     #naziv filma
  167. 35              #dan posudbe
  168. 5               #zavrsetak rada programa
  169. */
  170.  
  171. #include <stdio.h>
  172. #include <stdlib.h>
  173.  
  174. #if defined(_WIN32) || defined(_WIN64) //zbog onih dosadnih VS2015 upozorenja
  175. #define _CRT_SECURE_NO_WARNINGS 1
  176. #pragma warning(disable:4996)
  177. #endif
  178.  
  179. typedef struct {
  180.     char prezime[20];
  181.     char ime[20];
  182.     int  sifra;
  183.     char adresa[100];
  184.     int  br_tel;
  185. } podaci;
  186.  
  187. typedef struct {
  188.     char ime_filma[20];
  189.     int  datum;
  190.     int  sif;
  191. } posudba;
  192.  
  193. podaci  *clanovi = NULL;
  194. posudba *filmovi = NULL;
  195.  
  196. int brClanova = 0;
  197. int brFilmova = 0;
  198.  
  199. int  brFilmovaClana(int);
  200. void izbornik      (void);
  201. void makeClanovi   (void);
  202. void makePosudba   (void);
  203. void readClanovi   (void);
  204. void readPosudba   (void);
  205. void appendClan    (void);
  206. void posudbaFilma  (void);
  207. void myMemset      (void*, int, int);
  208.  
  209. int main(void) {
  210.     izbornik();
  211.     return 0;
  212. }
  213.  
  214. void myMemset(void *b, int c, int l) { //jer je _STROGO_ zabranjen makar i SPOMEN stringa.h —\_(?)_/—
  215.     unsigned char *p = (unsigned char*)b;
  216.     while (l > 0) {
  217.         *p = c;
  218.         p++;
  219.         l--;
  220.     }
  221.     return;
  222. }
  223.  
  224. podaci getPodaci() { // vraca ociscenu strukturu podaci
  225.     podaci p;
  226.     myMemset(&p, 0, sizeof(podaci));
  227.     return p;
  228. }
  229.  
  230. posudba getPosudba() { // vraca ociscenu strukturu posudba
  231.     posudba p;
  232.     myMemset(&p, 0, sizeof(posudba));
  233.     return p;
  234. }
  235.  
  236. void izbornik() {
  237.     int n = 0;
  238.     puts("1- Kreiranje datoteke Clanovi.txt");
  239.     puts("2- Čitanje iz datoteke Clanovi.txt");
  240.     puts("3- Dodavanje novih članova u Clanovi.txt");
  241.     puts("4- Posudba filma");
  242.     puts("5- Završetak programa");
  243.     do {
  244.         printf("Odaberi opciju: ");
  245.         scanf("%d", &n);
  246.         switch (n) {
  247.         case (1):
  248.             makeClanovi();
  249.             makePosudba();
  250.             break;
  251.         case (2):
  252.             readClanovi();
  253.             readPosudba();
  254.             break;
  255.         case (3):
  256.             appendClan();
  257.             break;
  258.         case (4):
  259.             posudbaFilma();
  260.             break;
  261.         case (5):
  262.             fcloseall();
  263.             free(clanovi);
  264.             free(filmovi);
  265.             return;
  266.         }
  267.     } while (n != 5);
  268.     return;
  269. }
  270.  
  271. void makeClanovi() {
  272.     FILE *fp = fopen("clanovi.txt", "w");
  273.     if (NULL == fp) {
  274.         puts("Greska pravljenja clanovi.txt");
  275.         exit(EXIT_FAILURE);
  276.     }
  277.  
  278.     fclose(fp);
  279.  
  280.     return;
  281. }
  282.  
  283. void makePosudba() {
  284.     FILE *fp = fopen("posudba.txt", "wb");
  285.     if (NULL == fp) {
  286.         puts("Greska pravljenja posudba.txt");
  287.         exit(EXIT_FAILURE);
  288.     }
  289.  
  290.     fclose(fp);
  291.     fp = fopen("posudba", "wb");
  292.     fclose(fp);
  293.     return;
  294. }
  295.  
  296. void readClanovi() {
  297.     int result;
  298.  
  299.     FILE *fp = fopen("clanovi.txt", "rb");
  300.     if (NULL == fp) {
  301.         puts("Greska otvaranja clanovi.txt u \"rb\" modu");
  302.         exit(EXIT_FAILURE);
  303.     }
  304.  
  305.     fseek(fp, 0L, SEEK_END);
  306.     brClanova = ftell(fp) / sizeof(podaci);
  307.     fseek(fp, 0L, SEEK_SET);
  308.  
  309.     clanovi = (podaci*)calloc(brClanova, sizeof(podaci));
  310.     if (NULL == clanovi) {
  311.         puts("Greska pravljenja clanovi[]");
  312.         exit(EXIT_FAILURE);
  313.     }
  314.  
  315.     result = fread(clanovi, sizeof(podaci), brClanova, fp);
  316.     if (result != brClanova) {
  317.         puts("Greska citanja clanova");
  318.         exit(EXIT_FAILURE);
  319.     }
  320.  
  321.     fclose(fp);
  322.  
  323.     return;
  324. }
  325. void readPosudba() {
  326.     int result;
  327.  
  328.     FILE *fp = fopen("posudba.txt", "rb");
  329.     if (NULL == fp) {
  330.         puts("Greska otvaranja posudba.txt u \"rb\" modu");
  331.         exit(EXIT_FAILURE);
  332.     }
  333.  
  334.     fseek(fp, 0L, SEEK_END);
  335.     brFilmova = ftell(fp) / sizeof(posudba);
  336.     fseek(fp, 0L, SEEK_SET);
  337.  
  338.     filmovi = (posudba*)calloc(brFilmova, sizeof(posudba));
  339.     if (NULL == filmovi) {
  340.         puts("Greska pravljenja filmovi[]");
  341.         exit(EXIT_FAILURE);
  342.     }
  343.  
  344.     result = fread(filmovi, sizeof(posudba), brFilmova, fp);
  345.     if (result != brFilmova) {
  346.         puts("Greska citanja filmova");
  347.         exit(EXIT_FAILURE);
  348.     }
  349.  
  350.     fclose(fp);
  351.  
  352.     return;
  353. }
  354. void appendClan() {
  355.     int result;
  356.  
  357.     FILE *fp = fopen("clanovi.txt", "ab");
  358.     if (NULL == fp) {
  359.         puts("Greska otvaranja clanovi.txt u \"ab\" modu");
  360.         exit(EXIT_FAILURE);
  361.     }
  362.  
  363.     podaci p = getPodaci();
  364.     printf("Prezime: ");
  365.     scanf(" %[^\n]", p.prezime);
  366.     printf("Ime: ");
  367.     scanf(" %[^\n]", p.ime);
  368.     printf("Sifra: ");
  369.     scanf("%d", &p.sifra);
  370.     printf("Adresa: ");
  371.     scanf(" %[^\n]", p.adresa);
  372.     printf("Broj telefona: ");
  373.     scanf("%d", &p.br_tel);
  374.  
  375.     brClanova++;
  376.     clanovi = (podaci*)realloc(clanovi, brClanova * sizeof(podaci));
  377.     if (NULL == clanovi) {
  378.         puts("Greska prosirivanja clanova");
  379.         exit(EXIT_FAILURE);
  380.     }
  381.  
  382.     clanovi[brClanova - 1] = p;
  383.  
  384.     result = fwrite(&p, sizeof(podaci), 1, fp);
  385.     if (result != 1) {
  386.         puts("Greska pisanja clana");
  387.         exit(EXIT_FAILURE);
  388.     }
  389.  
  390.     fclose(fp);
  391. }
  392.  
  393. void posudbaFilma() {
  394.     int i, result, n, sif;
  395.     posudba p[4] = { getPosudba(), getPosudba(), getPosudba(), getPosudba() };
  396.  
  397.     FILE *fp = fopen("posudba.txt", "ab");
  398.     FILE *fp1 = fopen("posudba","ab");
  399.     if (NULL == fp) {
  400.         puts("Greska otvaranja posudba.txt u \"ab\" modu");
  401.         exit(EXIT_FAILURE);
  402.     }
  403.     printf("Broj filmova za posuditi: ");
  404.     scanf("%d", &n);
  405.     if (n > 4) {
  406.         printf("Previse filmova odabrano!");
  407.         return;
  408.     }
  409.     printf("Sifra clana: ");
  410.     scanf("%d", &sif);
  411.     if ((n + brFilmovaClana(sif)) > 4) {
  412.         printf("Clan ce imati previse filmova posudjeno!");
  413.         return;
  414.     }
  415.  
  416.     for (i = 0; i < n; i++) {
  417.         printf("Ime filma: ");
  418.         scanf(" %[^\n]", p[i].ime_filma);
  419.         printf("Datum: ");
  420.         scanf("%d", &p[i].datum);
  421.         p[i].sif = sif;
  422.  
  423.         result = fwrite(&p[i], sizeof(posudba), 1, fp);
  424.         result = fwrite(&p[i], sizeof(posudba), 1, fp1);
  425.         if (1 != result) {
  426.             puts("Greška zapisivanja posudbe");
  427.             exit(EXIT_FAILURE);
  428.         }
  429.     }
  430.  
  431.     brFilmova += n;
  432.     filmovi = (posudba*)realloc(filmovi, brFilmova * sizeof(posudba));
  433.  
  434.     if (NULL == filmovi) {
  435.         puts("Greska prosirivanja filmova");
  436.         exit(EXIT_FAILURE);
  437.     }
  438.  
  439.     for (i = 0; i < n; i++) {
  440.         filmovi[(brFilmova - 1) - (n - 1) + i] = p[i];
  441.     }
  442.  
  443.     fclose(fp);
  444. }
  445.  
  446. int brFilmovaClana(int sif) {
  447.     if (brFilmova == 0) {
  448.         return 0;
  449.     }
  450.  
  451.     int i, cnt = 0;
  452.     for (i = 0; i < brFilmova; i++) {
  453.         if (filmovi[i].sif == sif) {
  454.             cnt++;
  455.         }
  456.     }
  457.     return cnt;
  458. }
  459.  
  460.  
  461. //nekiheader mi je prazan u drugom
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement