Advertisement
canezzy

SEKV

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