Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "vezbanje.h"
- void formiranjeDatoteke(char** Naziv)
- {
- printf("\n=========================================");
- printf("\n FORMIRANJE DATOTEKE ");
- printf("\n=========================================\n");
- printf("\nUnesite putanju datoteke: ");
- scanf("%s", *Naziv);
- FILE *f;
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- f = fopen(*Naziv, "wb+");
- kreirajPrazanBlok(blok);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- fclose(f);
- }
- //-------------------------------------------------------
- void odabirDatoteke(char** Naziv)
- {
- printf("\n=========================================");
- printf("\n ODABIR DATOTEKE ");
- printf("\n=========================================\n");
- printf("\nUnesite putanju datoteke: ");
- scanf("%s", *Naziv);
- FILE *f;
- if ((f = fopen(*Naziv, "rb+")) == NULL)
- {
- printf("\nNe postoji datoteka sa unetim nazivom!\n");
- strcpy(*Naziv, "");
- return;
- }
- fclose(f);
- }
- //-------------------------------------------------------
- void prikazNazivaDatoteke(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n PRIKAZ NAZIVA DATOTEKE ");
- printf("\n=========================================\n");
- printf("\n Naziv datoteke: %s", Naziv);
- }
- //-------------------------------------------------------
- void upisNovogSloga(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n UPIS NOVOG SLOGA ");
- printf("\n=========================================\n");
- FILE *f;
- f = fopen(Naziv, "rb+");
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- Slog *slog = (Slog*) malloc(sizeof(Slog));
- Slog *temp = (Slog*) malloc(sizeof(Slog));
- kreirajSlog(slog);
- kreirajPrazanSlog(temp);
- int i, j, flag = -1;
- while(flag == -1)
- {
- fread(blok, sizeof(Blok), 1, f);
- for (i = 0; i < FAKTOR; i++)
- {
- if(blok->slog[i].poziv.evidencioniBroj == slog->poziv.evidencioniBroj)
- {
- printf("\nVec postoji slog sa unetim evidencionim brojem.\n");
- return;
- }
- if(blok->slog[i].poziv.evidencioniBroj > slog->poziv.evidencioniBroj)
- {
- flag = i;
- break;
- }
- }
- }
- while (flag != -1)
- {
- for (j = flag; j < FAKTOR; j++)
- {
- if(slog->stanje == 2)
- {
- flag = -1;
- break;
- }
- memcpy(temp, slog, sizeof(Slog));
- memcpy(slog, &(blok->slog[j]), sizeof(Slog));
- memcpy(&(blok->slog[j]), temp, sizeof(Slog));
- flag = 0;
- fseek(f, -sizeof(Blok), SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- fread(blok, sizeof(Blok), 1, f);
- }
- }
- fseek(f, -sizeof(Blok), SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- if(blok->slog[FAKTOR -1].stanje != 2)
- {
- kreirajPrazanBlok(blok);
- fseek(f, 0, SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- }
- fclose(f);
- }
- //-------------------------------------------------------
- void prikazSvihSlogova(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n PRIKAZ SVIH SLOGOVA ");
- printf("\n=========================================\n");
- FILE *f;
- f = fopen(Naziv, "rb+");
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- int i, brojac = 0;
- while (fread(blok, sizeof(Blok), 1, f) != 0)
- {
- brojac++;
- for(i = 0; i < FAKTOR; i++)
- {
- prikaziJedanSlog(&(blok->slog[i]), brojac, i+1);
- }
- }
- fclose(f);
- }
- //-------------------------------------------------------
- void fizickoBrisanjeSloga(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n FIZICKO BRISANJE SLOGA ");
- printf("\n=========================================\n");
- int evidencioniBroj;
- printf("Unesite evidencioni broj sloga koji zelite da obrisete: ");
- scanf("%d", &evidencioniBroj);
- FILE *f;
- char* datumVreme;
- f = fopen(Naziv, "rb+");
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- Blok *blok2 = (Blok*) malloc(sizeof(Blok));
- Slog *slog = (Slog*) malloc(sizeof(Slog));
- int i, j, brojac = 0, flag = -1;
- while (flag == -1){
- if (fread(blok, sizeof(Blok), 1, f) == 0)
- {
- fclose(f);
- break;
- }
- brojac++;
- for (i = 0; i < FAKTOR; i++){
- if (blok->slog[i].poziv.evidencioniBroj > evidencioniBroj && blok->slog[i].stanje == 0)
- break;
- if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
- flag = i;
- break;
- }
- }
- }
- if (flag == -1)
- {
- printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
- return;
- }
- while(1)
- {
- for (j = flag; j < FAKTOR - 1; j++)
- {
- memcpy(slog, &(blok->slog[j]), sizeof(Slog));
- memcpy(&(blok->slog[j]), &(blok->slog[j+1]), sizeof(Slog));
- memcpy(&(blok->slog[j+1]), slog, sizeof(Slog));
- }
- if (fread(blok2, sizeof(Blok),1,f) == 0)
- break;
- memcpy(slog, &(blok->slog[FAKTOR-1]), sizeof(Slog));
- memcpy(&(blok->slog[FAKTOR-1]), &(blok2->slog[0]), sizeof(Slog));
- memcpy(&(blok2->slog[0]), slog, sizeof(Slog));
- fseek(f, -2*sizeof(Blok), SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- fseek(f, sizeof(Blok), SEEK_CUR);
- blok = blok2;
- flag = 0;
- }
- kreirajPrazanSlog(slog);
- memcpy(&(blok->slog[FAKTOR-1]), slog, sizeof(Slog));
- fseek(f, -sizeof(Blok), SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- fclose(f);
- }
- //-------------------------------------------------------
- void trazenjeSloga(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n TRAZENJE SLOGA ");
- printf("\n=========================================\n");
- int evidencioniBroj;
- printf("Unesite evidencioni broj sloga koji pretrazujete: ");
- scanf("%d", &evidencioniBroj);
- FILE *f;
- f = fopen(Naziv, "rb+");
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- int i, brojac = 0, flag = -1;
- while (flag == -1){
- if (fread(blok, sizeof(Blok), 1, f) == 0)
- {
- fclose(f);
- break;
- }
- brojac++;
- for (i = 0; i < FAKTOR; i++){
- if (blok->slog[i].poziv.evidencioniBroj > evidencioniBroj && blok->slog[i].stanje == 0)
- {
- fclose(f);
- break;
- }
- if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
- flag = i;
- fclose(f);
- }
- }
- }
- if (flag != -1)
- {
- prikaziJedanSlog(&(blok->slog[flag]), brojac, flag);
- }
- else
- {
- printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
- }
- }
- //-------------------------------------------------------
- void izmenaSloga(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n IZMENA SLOGA ");
- printf("\n=========================================\n");
- int evidencioniBroj;
- printf("Unesite evidencioni broj sloga koji zelite da izmenite: ");
- scanf("%d", &evidencioniBroj);
- FILE *f;
- char* datumVreme = (char*) malloc(18);
- f = fopen(Naziv, "rb+");
- Blok *blok = (Blok*) malloc(sizeof(Blok));
- int i, brojac = 0, flag = -1;
- while (flag == -1){
- if (fread(blok, sizeof(Blok), 1, f) == 0)
- {
- fclose(f);
- break;
- }
- brojac++;
- for (i = 0; i < FAKTOR; i++){
- if (blok->slog[i].poziv.evidencioniBroj > evidencioniBroj && blok->slog[i].stanje == 0)
- {
- fclose(f);
- break;
- }
- if (blok->slog[i].poziv.evidencioniBroj == evidencioniBroj && blok->slog[i].stanje == 0){
- flag = i;
- printf("Unesite novi datum i vreme: ");
- scanf("%s", datumVreme);
- strcpy(blok->slog[i].poziv.datumVreme, datumVreme);
- fseek(f, -1*sizeof(Blok), SEEK_CUR);
- fwrite(blok, sizeof(Blok), 1, f);
- fflush(f);
- fclose(f);
- break;
- }
- }
- }
- if (flag == -1)
- {
- printf("\nNe postoji slog sa unetim evidencionim brojem!\n");
- }
- }
- //-------------------------------------------------------
- void prikazMaksDatum(char* Naziv)
- {
- printf("\n=========================================");
- printf("\n PRIKAZ SLOGA SA NAJBOLJIM DATUMOM ");
- printf("\n=========================================\n");
- }
- //=======================================================
- void kreirajSlog(Slog* slog)
- {
- printf("Evidencioni broj: \n");
- scanf("%d", &(slog->poziv.evidencioniBroj));
- printf("Telefonski broj pozivaoca: \n");
- scanf("%s", slog->poziv.telefonskiBrojPozivaoca);
- printf("Datum i vreme poziva: \n");
- scanf("%s", slog->poziv.datumVreme);
- printf("Priroda poziva: \n");
- scanf("%s", slog->poziv.oznakaPrirode);
- printf("Trajanje u minutima: \n");
- scanf("%d", &(slog->poziv.duzinaPoziva));
- slog->stanje = 0;
- }
- //-------------------------------------------------------
- void kreirajPrazanSlog(Slog* slog)
- {
- Poziv *p = (Poziv*) malloc(sizeof(Poziv));
- p->evidencioniBroj = INT_MAX;
- strcpy(p->datumVreme,"");
- strcpy(p->oznakaPrirode, "");
- strcpy(p->telefonskiBrojPozivaoca, "");
- p->duzinaPoziva = 0;
- memcpy(&(slog->poziv), p, sizeof(Poziv));
- slog->stanje = 2;
- }
- //-------------------------------------------------------
- void kreirajPrazanBlok(Blok* blok)
- {
- int i;
- for (i = 0; i < FAKTOR; i++){
- kreirajPrazanSlog(&(blok->slog[i]));
- }
- }
- //-------------------------------------------------------
- void prikaziJedanSlog(Slog* slog, int brb, int brs)
- {
- printf("\n-----------------------------------------");
- printf("\n Blok: %d, Slog: %d\n", brb, brs);
- 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);
- }
- //-------------------------------------------------------
- void menu(char** Naziv)
- {
- printf("\n=========================================");
- printf("\n CALL CENTER - Preduzece Grad ");
- printf("\n=========================================\n");
- printf(" 1 - Formiranje prazne datoteke");
- printf("\n 2 - Izbor aktivne datoteke");
- printf("\n 3 - Prikaz naziva aktivne datoteke");
- printf("\n 4 - Upis novog sloga u aktivnu datoteku");
- printf("\n 5 - Prikaz svih slogova aktivne datoteke");
- printf("\n 6 - Fizicko brisanje sloga iz aktivne datoteke");
- printf("\n 7 - Trazenje sloga u aktivnoj datoteci");
- printf("\n 8 - Promena obelezja Datum u zadatom slogu");
- printf("\n 9 - Prikaz datuma sa najvecim brojem poziva");
- printf("\n 0 - Izlaz iz programa");
- printf("\n Vas izbor >> ");
- int komanda;
- scanf("%d", &komanda);
- switch(komanda){
- case 1:
- formiranjeDatoteke(Naziv);
- break;
- case 2:
- odabirDatoteke(Naziv);
- break;
- case 3:
- prikazNazivaDatoteke(*Naziv);
- break;
- case 4:
- upisNovogSloga(*Naziv);
- break;
- case 5:
- prikazSvihSlogova(*Naziv);
- break;
- case 6:
- fizickoBrisanjeSloga(*Naziv);
- break;
- case 7:
- trazenjeSloga(*Naziv);
- break;
- case 8:
- izmenaSloga(*Naziv);
- break;
- case 9:
- prikazMaksDatum(*Naziv);
- break;
- default:
- printf("\n=========================================");
- printf("\n DOVIDjENjA!!! ");
- printf("\n=========================================\n");
- exit(0);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement