Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<math.h>
- #define C (BLOK/sizeof(zapis)) //9
- #define N 10000
- #define M (int)( (double)N*1.20/C) //1333
- #define BLOK 512
- typedef struct{
- int ID_klijenta;
- char prezime[20+1];
- char ime[20+1];
- float stanje_na_racunu;
- }zapis;
- zapis podaci;
- //typedef int tip;
- struct at {
- int element;
- struct at *sljed;
- };
- typedef struct at atom;
- int dodaj (atom **glavap, int element) {
- atom *novi, *p;
- if ((novi = (atom *) malloc(sizeof(atom))) == NULL)
- return 0;
- novi->element = element;
- if (*glavap == NULL || (*glavap)->element >= element) {
- // Dodavanje na pocetak liste
- novi->sljed = *glavap;
- *glavap = novi;
- } else {
- // Dodavanje iza postojeceg elementa kad:
- // a) postojeæi atom nema sljedeæeg
- // b) element u sljedecem cvoru je veci ili jednak novome
- for (p = *glavap; p->sljed && (p->sljed)->element < element; p = p->sljed);
- novi->sljed = p->sljed;
- p->sljed = novi;
- }
- return 1;
- }
- /*
- Trazi- funkcija koja vraca poziciju trazenog elementa u listi
- */
- int trazi (atom *glava, int element) {
- atom *p;
- int pozicija=0;
- for (p = glava; p != NULL; p = p->sljed) {
- pozicija++;
- if (p ->element == element) return pozicija-1;
- }
- printf("Fatal error!");
- exit (-5);
- }
- int main(void){
- int element;
- int korak;
- FILE *fu=NULL;
- FILE *fi=NULL;
- FILE *ft=NULL;
- atom *glava=NULL;
- fu=fopen("podaci.dat","r");
- if(fu==NULL){
- printf("Otvaranje datoteke \"podaci.dat\" nije uspjelo. Prekidam.\n");
- exit (-1);
- }
- fi=fopen("podaci.bin","wb+");
- if(fi==NULL){
- printf("Stvaranje ili otvaranje datoteke \"podaci.bin\" nije uspjelo. Prekidam.\n");
- exit (-2);
- }
- ft=fopen("sortirano.dat","w");
- if(ft==NULL){
- printf("Stvaranje ili otvaranje datoteke \"sortirano.dat\" nije uspjelo. Prekidam.\n");
- exit (-3);
- }
- /* Zapisujem sve podatke u strukturu podaci[N];
- */
- int i;
- char charID[100]; //jer kad citam mi spremi kao char,a meni u podaci.ID_klijenta mora bit int
- fseek(fu,0L,SEEK_SET);
- fseek(fi,0L,SEEK_SET);
- for(i=0;i<N;i++){
- fscanf(fu,"%[^\;];%[^\;];%[^\;];%f",charID,&podaci.ime,&podaci.prezime,&podaci.stanje_na_racunu);
- podaci.ID_klijenta=atoi(charID);
- /*
- Trenutno citam redak po redak iz tekstualne datoteke "podaci.dat". (Odnosno podatak o svakoj osobi- 1 po 1)
- */
- /*
- Sada slijedi prepis iz "podaci.dat" u "podaci.bin",za svaku osobu- 1 po 1
- */
- fwrite(&podaci,sizeof(podaci),1,fi);
- /*
- puni listu
- */
- korak=dodaj(&glava, podaci.ID_klijenta);
- if(korak==0){
- printf("Prilikom upisa podataka u listu ponestalo je memorije na disku. Prekidam...\n");
- exit (-4);
- }
- }
- /*
- Ako smo uspjeli doci do ovdje znaci da su elementi uspjesno prepisani iz "podaci.dat" u "podaci.bin",te da je lista napunjena.
- Sada se u njoj nalaze svi ID-ovi klijenata, ali uzlazno sortirani.
- */
- /*
- Sljedece...
- Citati ID po ID iz liste (usput prazniti listu), te ga pronaci u binarnoj datoteci "podaci.bin",
- potom podatke o toj osobi staviti u strukturu, te ih zapisati u "sortirano.dat".
- */
- fseek(fu,0L,SEEK_SET);
- fseek(fi,0L,SEEK_SET);
- int pozicija=0;
- for(i=0;i<N;i++){
- fscanf(fu,"%[^\;];%[^\;];%[^\;];%f",charID,&podaci.ime,&podaci.prezime,&podaci.stanje_na_racunu);
- podaci.ID_klijenta=atoi(charID);
- pozicija=trazi(glava,podaci.ID_klijenta);
- // printf("\n%d\n\n",pozicija);
- fseek(fi,pozicija*sizeof(podaci),SEEK_SET);
- fwrite(&podaci,sizeof(podaci),1,fi);
- //fprintf(ft,"%d;%s;%s;%f\n",podaci.ID_klijenta,&podaci.ime,&podaci.prezime,podaci.stanje_na_racunu);
- }
- fseek(ft,0L,SEEK_SET);
- fseek(fi,0L,SEEK_SET);
- for(i=0;i<N;i++){
- fread(&podaci,sizeof(podaci),1,fi);
- fprintf(ft,"%d;%s;%s;%.2f\n",podaci.ID_klijenta,podaci.ime,podaci.prezime,podaci.stanje_na_racunu);
- }
- printf("sve OK");
- fclose(fu);
- fclose(fi);
- fclose(ft);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement