Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define B 9
- #define STEP 1
- #define FAKTOR_BAKETIRANJA 5
- typedef struct Grad
- {
- int evBr;
- char adresaPo[50];
- char dateTime[30];
- char adresaPri[50];
- int cena;
- int kljuc;
- int active;
- }GRAD;
- typedef struct Bucket
- {
- GRAD gradovi[FAKTOR_BAKETIRANJA];
- }BUCKET;
- void kreirajDatoteku(char* naziv)
- {
- FILE* f = fopen(naziv,"wb+");
- BUCKET* b = calloc(B,sizeof(BUCKET));
- fseek(f,0,SEEK_SET);
- fwrite(b,sizeof(BUCKET),B,f);
- fclose(f);
- }
- FILE* otvoriDatoteku(char* naziv)
- {
- FILE* f = fopen(naziv,"rb+");
- if(f==NULL)
- {
- printf("Datoteka ne postoji\n");
- }
- else
- {
- printf("Datoteka uspesno otvorena\n");
- }
- return f;
- }
- void upisNovogSloga(GRAD grad, FILE* f)
- {
- fseek(f,grad.kljuc*sizeof(BUCKET),SEEK_SET);
- int c = grad.kljuc;
- int flag =0;
- BUCKET baket;
- while(fread(&baket,sizeof(BUCKET),1,f) && flag == 0 && c<B)
- {
- for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
- {
- if(baket.gradovi[i].active != 1)
- {
- printf("NASLI SMO MESTO ZA UPISIVANJE\n");
- baket.gradovi[i] = grad;
- fseek(f,-sizeof(BUCKET),SEEK_CUR);
- fwrite(&baket,sizeof(BUCKET),1,f);
- printf("Slog uspesno sacuvan\n");
- flag = 1;
- break;
- }
- if(i = FAKTOR_BAKETIRANJA -1)
- {
- printf("STIGLI SMO DO KRAJA BAKETA, PRELAZIMO NA SLEDECI\n");
- fseek(f,STEP*sizeof(BUCKET),SEEK_CUR);
- }
- }
- c++;
- }
- if(flag == 0)
- {
- printf("OVERFLOW\n");
- GRAD g;
- int slogCount = 0;
- FILE* of = fopen("overflow.bin","rb+");
- while(fread(&g,sizeof(GRAD),1,of))
- {
- printf("Slog broj: %d",slogCount+1);
- slogCount++;
- }
- fwrite(&grad,sizeof(GRAD),1,of);
- printf("Slog uspesno sacuvan u overflow\n");
- fclose(of);
- }
- }
- void ispisSvihSlogova(FILE* f)
- {
- BUCKET b;
- fseek(f,0,SEEK_SET);
- int bucketCount = 0;
- while(fread(&b,sizeof(BUCKET),1,f))
- {
- for(int i =0;i<FAKTOR_BAKETIRANJA;i++)
- {
- if(b.gradovi[i].active == 1)
- {
- printf("BAKET BROJ: %d, SLOG BROJ: %d\n",bucketCount+1,i+1);
- printf("Evidencioni broj:%d\tCena:%d\tAdresa posiljaoca:%s\tAdresa primaoca:%s\tDatum:%s\n",b.gradovi[i].evBr,b.gradovi[i].cena,b.gradovi[i].adresaPo,b.gradovi[i].adresaPri,b.gradovi[i].dateTime);
- }
- }
- bucketCount++;
- }
- }
- void azuriranjeSloga(FILE* f, int evBr)
- {
- int key = evBr%B;
- fseek(f,sizeof(BUCKET)*key,SEEK_SET);
- int flag = 0;
- BUCKET bucket;
- while(fread(&bucket,sizeof(BUCKET),1,f) && flag ==0)
- {
- for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
- {
- if(bucket.gradovi[i].evBr == evBr)
- {
- printf("Unesite novi datum\n");
- scanf("%s",bucket.gradovi[i].dateTime);
- fseek(f,-sizeof(BUCKET),SEEK_CUR);
- fwrite(&bucket,sizeof(BUCKET),1,f);
- flag=1;
- break;
- }
- }
- if(flag ==0)
- {
- printf("Slog sa takvom sifrom ne postoji\n");
- }
- }
- }
- void logickoBrisanje(FILE* f,int evBr)
- {
- int key = evBr%B;
- fseek(f,sizeof(BUCKET)*key,SEEK_SET);
- BUCKET baket;
- int flag =0;
- while(fread(&baket,sizeof(BUCKET),1,f) && flag ==0)
- {
- for(int i=0;i<FAKTOR_BAKETIRANJA;i++)
- {
- if(baket.gradovi[i].evBr==evBr)
- {
- baket.gradovi[i].active = 3;
- fseek(f,-sizeof(BUCKET),SEEK_CUR);
- fwrite(&baket,sizeof(BUCKET),1,f);
- flag = 1;
- break;
- }
- }
- }
- if(flag == 0)
- {
- printf("Slog sa tim evidencionim brojem ne postoji\n");
- }
- }
- int main()
- {
- FILE* f;
- char naziv[20];
- while(1)
- {
- printf("1.Otvaranje datoteke\n");
- printf("2.Kreiranje datoteke\n");
- printf("3.Naziv otvorene datoteke\n");
- printf("4.Dodavanje slogova u datoteku\n");
- printf("5.Ispis svih slogova\n");
- printf("6.Modifikacija sloga\n");
- printf("7.Logicko brisanje sloga\n");
- printf("8.Exit\n");
- int options;
- printf("Izaberite opciju\n");
- scanf(" %d",&options);
- switch(options)
- {
- case 1:
- {
- printf("Unesite naziv datoteke\n");
- scanf(" %s",naziv);
- f = otvoriDatoteku(naziv);
- break;
- }
- case 2:
- {
- printf("Unesite naziv datoteke\n");
- scanf(" %s",naziv);
- kreirajDatoteku(naziv);
- break;
- }
- case 3:
- {
- printf("Naziv datoteke: %s\n",naziv);
- break;
- }
- case 4:
- {
- GRAD grad;
- printf("Unesite adresu posiljaoca:\n");
- scanf(" %s", grad.adresaPo);
- printf("Unesite adresu primaoca:\n");
- scanf(" %s", grad.adresaPri);
- printf("Unesite cenu:\n");
- scanf(" %d", &grad.cena);
- printf("Unesite datum i vreme:\n");
- scanf(" %s", grad.dateTime);
- printf("Unesite evidencioni broj:\n");
- scanf(" %d", &grad.evBr);
- grad.active = 1;
- grad.kljuc = grad.evBr %B;
- upisNovogSloga(grad,f);
- break;
- }
- case 5:
- {
- ispisSvihSlogova(f);
- break;
- }
- case 6:
- {
- int evid;
- printf("Unesite evidencioni broj sloga koji zelite da promenite:\n");
- scanf("%d",&evid);
- azuriranjeSloga(f,evid);
- break;
- }
- case 7:
- {
- int evid;
- printf("Unesite evidencioni broj sloga koji zelite da obrisete:\n");
- scanf("%d",&evid);
- logickoBrisanje(f,evid);
- break;
- }
- case 8:
- {
- fclose(f);
- exit(0);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement