canezzy

SER

Jan 10th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.77 KB | None | 0 0
  1. #include "vezbanje.h"
  2.  
  3. void formiranjeDatoteke(char** Naziv)
  4. {
  5.     printf("\n=========================================");
  6.     printf("\n          FORMIRANJE DATOTEKE            ");
  7.     printf("\n=========================================\n");
  8.     printf("\nUnesite putanju datoteke: ");
  9.     scanf("%s", *Naziv);
  10.     FILE *f;
  11.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  12.     f = fopen(*Naziv, "wb+");
  13.     kreirajPrazanBlok(blok);
  14.     fwrite(blok, sizeof(Blok), 1, f);
  15.     fflush(f);
  16.     fclose(f);
  17. }
  18. //-------------------------------------------------------
  19. void odabirDatoteke(char** Naziv)
  20. {
  21.     printf("\n=========================================");
  22.     printf("\n              ODABIR DATOTEKE            ");
  23.     printf("\n=========================================\n");
  24.     printf("\nUnesite putanju datoteke: ");
  25.     scanf("%s", *Naziv);
  26.     FILE *f;
  27.     if ((f = fopen(*Naziv, "rb+")) == NULL)
  28.     {
  29.         printf("\nNe postoji datoteka sa unetim nazivom!\n");
  30.         strcpy(*Naziv, "");
  31.         return;
  32.     }
  33.     fclose(f);
  34. }
  35. //-------------------------------------------------------
  36. void prikazNazivaDatoteke(char* Naziv)
  37. {
  38.     printf("\n=========================================");
  39.     printf("\n        PRIKAZ NAZIVA DATOTEKE           ");
  40.     printf("\n=========================================\n");
  41.     printf("\n Naziv datoteke: %s", Naziv);
  42. }
  43. //-------------------------------------------------------
  44. void upisNovogSloga(char* Naziv)
  45. {
  46.     printf("\n=========================================");
  47.     printf("\n            UPIS NOVOG SLOGA             ");
  48.     printf("\n=========================================\n");
  49.     FILE *f;
  50.     f = fopen(Naziv, "rb+");
  51.     Slog *slog = (Slog*) malloc(sizeof(Slog));
  52.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  53.     Blok *blok2 = (Blok*) malloc(sizeof(Blok));
  54.     int i, flag = -1;
  55.     while (1){
  56.         if (fread(blok, sizeof(Blok), 1, f) == 0)
  57.             break;
  58.         for (i = 0; i < FAKTOR; i++){
  59.             if (blok->slog[i].poziv.evidencioniBroj == slog->poziv.evidencioniBroj && blok->slog[i].stanje == 0){
  60.                 printf("\nVec postoji slog sa unetim evidencionim brojem!\n");
  61.                 fclose(f);
  62.                 return;
  63.             }
  64.             if (blok->slog[i].stanje == 2){
  65.                 kreirajSlog(slog);
  66.                 memcpy(&(blok->slog[i]), slog, sizeof(Slog));
  67.                 fseek(f, -1*sizeof(Blok), SEEK_CUR);
  68.                 fwrite(blok, sizeof(Blok), 1, f);
  69.                 fflush(f);
  70.                 if ((fread(blok, sizeof(Blok), 1, f) == 0) && i == FAKTOR - 1)
  71.                 {
  72.                     kreirajPrazanBlok(blok2);
  73.                     fwrite(blok2,sizeof(Blok), 1,f);
  74.                     fflush(f);
  75.                 }
  76.                 fclose(f);
  77.                 return;
  78.             }
  79.         }
  80.     }
  81.  
  82. }
  83. //-------------------------------------------------------
  84. void prikazSvihSlogova(char* Naziv)
  85. {
  86.     printf("\n=========================================");
  87.     printf("\n          PRIKAZ SVIH SLOGOVA            ");
  88.     printf("\n=========================================\n");
  89.     FILE *f;
  90.     f = fopen(Naziv, "rb+");
  91.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  92.     int i, brojac = 0;
  93.     while (fread(blok, sizeof(Blok), 1, f) != 0)
  94.     {
  95.         brojac++;
  96.         for(i = 0; i < FAKTOR; i++)
  97.         {
  98.             prikaziJedanSlog(&(blok->slog[i]), brojac, i+1);
  99.         }
  100.     }
  101.     fclose(f);
  102. }
  103. //-------------------------------------------------------
  104. void fizickoBrisanjeSloga(char* Naziv)
  105. {
  106.     printf("\n=========================================");
  107.     printf("\n         FIZICKO BRISANJE SLOGA          ");
  108.     printf("\n=========================================\n");
  109.     int evidencioniBroj;
  110.     printf("Unesite evidencioni broj sloga koji zelite da obrisete: ");
  111.     scanf("%d", &evidencioniBroj);
  112.  
  113.     FILE *f;
  114.     char* datumVreme;
  115.     f = fopen(Naziv, "rb+");
  116.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  117.     Blok *blok2 = (Blok*) malloc(sizeof(Blok));
  118.     Slog *slog = (Slog*) malloc(sizeof(Slog));
  119.  
  120.     int i, j, brojac = 0, flag = -1;
  121.     while (flag == -1){
  122.         if (fread(blok, sizeof(Blok), 1, f) == 0)
  123.         {
  124.             fclose(f);
  125.             break;
  126.         }
  127.         brojac++;
  128.         for (i = 0; i < FAKTOR; i++){
  129.             if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
  130.                 flag = i;
  131.                 break;
  132.             }
  133.         }
  134.     }
  135.     if (flag == -1)
  136.     {
  137.         printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
  138.         return;
  139.     }
  140.  
  141.     while(1)
  142.     {
  143.         for (j = flag; j < FAKTOR - 1; j++)
  144.         {
  145.             memcpy(slog, &(blok->slog[j]), sizeof(Slog));
  146.             memcpy(&(blok->slog[j]), &(blok->slog[j+1]), sizeof(Slog));
  147.             memcpy(&(blok->slog[j+1]), slog, sizeof(Slog));
  148.         }
  149.         if (fread(blok2, sizeof(Blok),1,f) == 0)
  150.             break;
  151.         memcpy(slog, &(blok->slog[FAKTOR-1]), sizeof(Slog));
  152.         memcpy(&(blok->slog[FAKTOR-1]), &(blok2->slog[0]), sizeof(Slog));
  153.         memcpy(&(blok2->slog[0]), slog, sizeof(Slog));
  154.         fseek(f, -2*sizeof(Blok), SEEK_CUR);
  155.         fwrite(blok, sizeof(Blok), 1, f);
  156.         fflush(f);
  157.         fseek(f, sizeof(Blok), SEEK_CUR);
  158.         blok = blok2;
  159.         flag = 0;
  160.     }
  161.     kreirajPrazanSlog(slog);
  162.     memcpy(&(blok->slog[FAKTOR-1]), slog, sizeof(Slog));
  163.     fseek(f, -sizeof(Blok), SEEK_CUR);
  164.     fwrite(blok, sizeof(Blok), 1, f);
  165.     fflush(f);
  166.     fclose(f);
  167. }
  168.  
  169. //-------------------------------------------------------
  170. void trazenjeSloga(char* Naziv)
  171. {
  172.     printf("\n=========================================");
  173.     printf("\n             TRAZENJE SLOGA              ");
  174.     printf("\n=========================================\n");
  175.     int evidencioniBroj;
  176.     printf("Unesite evidencioni broj sloga koji pretrazujete: ");
  177.     scanf("%d", &evidencioniBroj);
  178.  
  179.     FILE *f;
  180.     f = fopen(Naziv, "rb+");
  181.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  182.     int i, brojac = 0, flag = -1;
  183.     while (flag == -1){
  184.         if (fread(blok, sizeof(Blok), 1, f) == 0)
  185.         {
  186.             fclose(f);
  187.             break;
  188.         }
  189.         brojac++;
  190.         for (i = 0; i < FAKTOR; i++){
  191.             if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
  192.                 flag = i;
  193.                 fclose(f);
  194.             }
  195.         }
  196.     }
  197.     if (flag != -1)
  198.     {
  199.         prikaziJedanSlog(&(blok->slog[flag]), brojac, flag);
  200.     }
  201.     else
  202.     {
  203.         printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
  204.     }
  205. }
  206. //-------------------------------------------------------
  207. void izmenaSloga(char* Naziv)
  208. {
  209.     printf("\n=========================================");
  210.     printf("\n              IZMENA SLOGA               ");
  211.     printf("\n=========================================\n");
  212.     int evidencioniBroj;
  213.     printf("Unesite evidencioni broj sloga koji zelite da izmenite: ");
  214.     scanf("%d", &evidencioniBroj);
  215.  
  216.     FILE *f;
  217.     char* datumVreme = (char*) malloc(18);
  218.     f = fopen(Naziv, "rb+");
  219.     Blok *blok = (Blok*) malloc(sizeof(Blok));
  220.     int i, brojac = 0, flag = -1;
  221.     while (flag == -1){
  222.         if (fread(blok, sizeof(Blok), 1, f) == 0)
  223.         {
  224.             fclose(f);
  225.             break;
  226.         }
  227.         brojac++;
  228.         for (i = 0; i < FAKTOR; i++){
  229.             if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
  230.                 flag = i;
  231.                 printf("Unesite novi datum i vreme: ");
  232.                 scanf("%s", datumVreme);
  233.                 strcpy(blok->slog[i].poziv.datumVreme, datumVreme);
  234.                 fseek(f, -1*sizeof(Blok), SEEK_CUR);
  235.                 fwrite(blok, sizeof(Blok), 1, f);
  236.                 fflush(f);
  237.                 fclose(f);
  238.                 break;
  239.             }
  240.         }
  241.     }
  242.     if (flag == -1)
  243.     {
  244.         printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
  245.     }
  246. }
  247. //-------------------------------------------------------
  248. void prikazMaksDatum(char* Naziv)
  249. {
  250.     printf("\n=========================================");
  251.     printf("\n     PRIKAZ SLOGA SA NAJVECIM DATUMOM    ");
  252.     printf("\n=========================================\n");
  253. }
  254. //=======================================================
  255. void kreirajSlog(Slog* slog)
  256. {
  257.     printf("Evidencioni broj: \n");
  258.     scanf("%d", &(slog->poziv.evidencioniBroj));
  259.     printf("Telefonski broj pozivaoca: \n");
  260.     scanf("%s", slog->poziv.telefonskiBrojPozivaoca);
  261.     printf("Datum i vreme poziva: \n");
  262.     scanf("%s", slog->poziv.datumVreme);
  263.     printf("Priroda poziva: \n");
  264.     scanf("%s", slog->poziv.oznakaPrirode);
  265.     printf("Trajanje u minutima: \n");
  266.     scanf("%d", &(slog->poziv.duzinaPoziva));
  267.     slog->stanje = 0;
  268. }
  269. //-------------------------------------------------------
  270. void kreirajPrazanSlog(Slog* slog)
  271. {
  272.     Poziv *p = (Poziv*) malloc(sizeof(Poziv));
  273.     p->evidencioniBroj = INT_MAX;
  274.     strcpy(p->datumVreme,"");
  275.     strcpy(p->oznakaPrirode, "");
  276.     strcpy(p->telefonskiBrojPozivaoca, "");
  277.     p->duzinaPoziva = 0;
  278.  
  279.     memcpy(&(slog->poziv), p, sizeof(Poziv));
  280.     slog->stanje = 2;
  281. }
  282. //-------------------------------------------------------
  283. void kreirajPrazanBlok(Blok* blok)
  284. {
  285.     int i;
  286.     for (i = 0; i < FAKTOR; i++){
  287.         kreirajPrazanSlog(&(blok->slog[i]));
  288.     }
  289. }
  290. //-------------------------------------------------------
  291. void prikaziJedanSlog(Slog* slog, int brb, int brs)
  292. {
  293.     printf("\n-----------------------------------------");
  294.     printf("\n          Blok: %d, Slog: %d\n", brb, brs);
  295.     printf("\nEvidencioni broj: %d,\nTelefonski broj: %s,\nDatum i vreme poziva: %s,\nOznaka prirode poziva: %s,\nDuzina poziva: %ds,\nStanje: %d\n", slog->poziv.evidencioniBroj, slog->poziv.telefonskiBrojPozivaoca, slog->poziv.datumVreme, slog->poziv.oznakaPrirode, slog->poziv.duzinaPoziva, slog->stanje);
  296.  
  297. }
  298. //-------------------------------------------------------
  299. void menu(char** Naziv)
  300. {
  301.     printf("\n=========================================");
  302.     printf("\n      CALL CENTER - Preduzece Grad       ");
  303.     printf("\n=========================================\n");
  304.     printf(" 1 - Formiranje prazne datoteke");
  305.     printf("\n 2 - Izbor aktivne datoteke");
  306.     printf("\n 3 - Prikaz naziva aktivne datoteke");
  307.     printf("\n 4 - Upis novog sloga u aktivnu datoteku");
  308.     printf("\n 5 - Prikaz svih slogova aktivne datoteke");
  309.     printf("\n 6 - Fizicko brisanje sloga iz aktivne datoteke");
  310.     printf("\n 7 - Trazenje sloga u aktivnoj datoteci");
  311.     printf("\n 8 - Promena obelezja Datum u zadatom slogu");
  312.     printf("\n 9 - Prikaz datuma sa najvecim brojem poziva");
  313.     printf("\n 0 - Izlaz iz programa");
  314.     printf("\n Vas izbor >> ");
  315.     int komanda;
  316.     scanf("%d", &komanda);
  317.  
  318.     switch(komanda){
  319.         case 1:
  320.             formiranjeDatoteke(Naziv);
  321.             break;
  322.         case 2:
  323.             odabirDatoteke(Naziv);
  324.             break;
  325.         case 3:
  326.             prikazNazivaDatoteke(*Naziv);
  327.             break;
  328.         case 4:
  329.             upisNovogSloga(*Naziv);
  330.             break;
  331.         case 5:
  332.             prikazSvihSlogova(*Naziv);
  333.             break;
  334.         case 6:
  335.             fizickoBrisanjeSloga(*Naziv);
  336.             break;
  337.         case 7:
  338.             trazenjeSloga(*Naziv);
  339.             break;
  340.         case 8:
  341.             izmenaSloga(*Naziv);
  342.             break;
  343.         case 9:
  344.             prikazMaksDatum(*Naziv);
  345.             break;
  346.         default:
  347.             printf("\n=========================================");
  348.             printf("\n               DOVIDjENjA!!!             ");
  349.             printf("\n=========================================\n");
  350.             exit(0);
  351.             break;
  352.  
  353.     }
  354.  
  355. }
Add Comment
Please, Sign In to add comment