Našla sam već 1 ovakav sličan projekat, ali nažalost, ništa korisno jer nema koda koji bih mogla uklopiti. Projekat glasi:
Napisati C program koji će omogućiti rad sa podacima o evidentiranim prolascima kroz naplatnu
rampu kod mesta Grad. Za svaki prolazak se beleži evidencioni broj (8 cifara), registarska oznaka
vozila (najviše 10 karaktera), datum i vreme prolaska, oznaka naplatne rampe (tačno 4 karaktera) i
plaćeni iznos (do 100 000).
Svi podaci moraju biti smešteni u binarnu datoteku sa statičkom rasutom organizacijom i serijskom
zonom prekoračenja.
Program treba da ponudi sledeće funkcionalnosti kroz formu tekstualnog korisničkog menija:
o formiranje prazne datoteke (sa B baketa i b faktorom baketiranja) pri čemu korisnik
zadaje naziv nove datoteke (2,5*)
o izbor aktivne datoteke zadavanjem njenog naziva (1,5*)
o prikaz naziva aktivne datoteke (1,5*)
o upis novog sloga u aktivnu datoteku, uz proveru postojanja vrednosti identifikatora u
datoteci, direktnim unosom podataka u realnom vremenu (3,5*)
o traženje sloga u aktivnoj datoteci i njegov prikaz zajedno sa adresom baketa (ili
oznakom zone) i rednim brojem sloga u baketu (3,5**)
o prikaz svih slogova aktivne datoteke zajedno sa adresom baketa (ili oznakom zone) i
rednim brojem sloga u baketu (2,5**)
o logičko brisanje aktuelnog sloga iz aktivne datoteke (2***)
o promenu vrednosti obeležja plaćeni iznos u zadatom slogu iz aktivne datoteke
(3***)
Pripremiti posebnu test datoteku sa podacima koja će sadržati bar 10 aktuelnih slogova i primer bar
dva sloga prekoračioca. (3***)
Poštovati sledeća ograničenja:
o vrednost faktora baketiranja b je 3
o broj baketa B je 7
o za probabilističku transformaciju identifikatora sloga u adresu baketa koristiti
metodu centralnih cifara kvadrata ključa (2*)
o prilikom rada nad datotekom, dozvoliti preuzimanje i upis isključivo čitavih baketa
o prisustvo statusnog polja u slogu
o upotrebu isključivo ASCII karaktera za tekstualni sadržaj
Evo i pokušaja mog koda, koji doduše i ne radi, pokušala sam da uklapam kodove sa vežbi, ali neuspešno:
Code:
//Rampa.h
/*#ifndef RAMPA_H_INCLUDED
#define RAMPA_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLOCK_FACTOR 3
typedef struct rampa {
long int evidencioniBr[8];
char registarskaOznaka[10];
char oznakaNP[4];
int iznos;
/*int vreme;
int datum;*/ //nisam sigurna
/*} NRampa;
typedef struct block
{ //blokiranje datoteke vrsi se putem niza sa zadatim faktorom blokiranja
NRampa rampa[BLOCK_FACTOR];
} Block;
typedef struct position
{ //struktura koja prikazuje poziciju sloga u datoteci (poziciju bloka + poziciju sloga unutar tog bloka)
int positionBlock;
int positionRecord;
bool flag; //indikator da li je posmatrana pozicija kraj datoteke (za potrebe upisa novog sloga)
} TPosition;
void createNewHeap();
void chooseActiveFile();
void showActiveFile();
void addRecord();
void showAllRecords();
void showRecord(long int regBr);
void deleteRecord(long int regBr);
TPosition findRecord(long int regBr);
NRampa populateRecord();
long int brojUnos();
void printRecord(NRampa rampa);
#endif // RAMPA_H_INCLUDED*/
//Rampa.cpp
#include "Rampa.h"
char activeFile[30] = ""; //promenljova koja sadrzi naziv aktivne datoteke
void createNewHeap()
{ //funkcija zaduzena za kreiranje nove datoteke koja sadrzi slog za kraj datoteke
NRampa finalRecord;
finalRecord.statusRecord = '*'; //inicijalni slog koji sadrzi znak za kraj datoteke
Block block;
block.rampa[0] = finalRecord;
char fileName[30] = "";
printf("\nIme datoteke: ");
scanf(" %s", fileName);
FILE* file = NULL;
if( (file = fopen(fileName,"wb")) == NULL )
{ //kreira novu datoteku ili brise sadrzaj vec postojece datoteke
printf("\nKreiranje datoteke %s neuspesno!\n", fileName);
fclose(file);
return;
}
if(((fwrite(&block, sizeof(Block), 1, file)) != 1))
{ //upis bloka, a sad jedino ima slog za kraj datoteke
printf("\nGreska prilikom upisa inicijalnog bloka!");
}
fclose(file);
printf("\nKreiranje datoteke %s je uspesno!\n", fileName);
}
void chooseActiveFile()
{ //biranje aktivne, vec kreirane datoteke
char fileName[30] = "";
printf("\nIme datoteke: ");
scanf(" %s", fileName);
FILE* file = NULL;
if( (file = fopen(fileName,"rb")) == NULL ) {
printf("\nDatoteka %s ne postoji!\n", fileName);
fclose(file);
return;
}
fclose(file);
printf("\nDatoteka %s uspesno otvorena!\n", fileName);
strcpy(activeFile, fileName); //neophodno je postaviti vrednost aktivne datoteke u activeFile promenljivu
}
void showActiveFile()
{ //prikaz aktivne datoteke
if(!*activeFile)
{
printf("\nNe postoji aktivna datoteka!\n");
}
else
{
printf("\nAktivna datoteka : %s", activeFile);
}
}
void addRecord()
{ //dodavanje novog sloga u datoteci
if (!*activeFile)
{ // pre svake operacije nad aktivnom datotekom, vrsi se provera da li je ona prethodno odabrana
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
NRampa rampa = populateRecord(); //kreiranje novog sloga sloga
Block block;
TPosition pos = findRecord(rampa.registarskaOznaka);
if(pos.positionBlock == -1)
{
printf("\nGreska prilikom citanja bloka!");
return;
}else if(!pos.flag)
{ //ukoliko je vracena vrednost znaka za kraj datoteke, vrsi se upis sloga na tu poziciju. U suprotnom, slog sa datom vrednoscu kljuca vec postoji i vraca se poruka gresci
printf("\nVozilo sa registarkom oznakom %ld vec postoji!", rampa.regBr);
return;
}
populateOtherFields(&rampa); //nakon provere, vrsi se popunjavanje ostalih polja sloga
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom citanja bloka!");
}
fclose(file);
file = fopen(activeFile,"rb+"); //otvaranje datoteke za citanje ili pisanje, a da se pri tome ne uklone stare vrednosti datoteke
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
NRampa finalRecord = block.rampa[pos.positionRecord]; //slog kraja datoteke smesta se u pomocnu promenjivu jer se na njegovo mesto unosi nov slog
block.rampa[pos.positionRecord] = rampa;
if( pos.positionRecord < BLOCK_FACTOR-1)
{
block.rampa[pos.positionRecord+1] = finalRecord; //ukoliko nismo dosli do kraja bloka, slog za kraj datoteke se unosi na narednu poziciju bloka
if(((fwrite(&block, sizeof(Block), 1,file)) != 1) )
{
printf("\nGreska prilikom upisa bloka!");
}
}
else
{
if((fwrite(&block, sizeof(Block), 1, file) != 1))
{
printf("\nGreska prilikom upisa bloka!");
}
Block blockNew; //u slucaju da smo dosli do kraja datoteke, kreira se novi blok i u njega se unosi slog za kraj datoteke
blockNew.rampa[0] = finalRecord;
fseek(file,sizeof(Block)*(pos.positionBlock+1),SEEK_SET);
if((fwrite(&blockNew, sizeof(Block), 1, file)) != 1){ //provera za kraj
printf("\nGreska prilikom upisa bloka u datoteku!");
}
}
printf("\nVozilo sa registarkim brojem %ld je uspesno upisan u blok broj %d poziciju %d" , rampa.registarskaOznaka, pos.positionBlock, pos.positionRecord);
fclose(file);
}
TPosition findRecord(long int regBr)
{ //vraca poziciju trazenog sloga ili poziciju kraja datoteke
int i;
Block block;
TPosition pos;
int blockNum = 0;
FILE* file = fopen(activeFile,"rb");
while(1)
{ //dokle god se ne dodje do kraja datoteke ili trazenog sloga, vrsi se ucitavanje novog bloka
pos.positionBlock = blockNum;
fseek(file,sizeof(Block)*blockNum,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{ //ukoliko je citanje bloka neuspesno, pozicija bloka se postavlja na -1
pos.positionBlock = -1;
printf("\nGreska prilikom citanja bloka!");
fclose(file);
return pos;
}
for(i = 0; i < BLOCK_FACTOR; i++)
{
if((block.rampa[i].statusRecord == 'a' && block.rampa[i].regBr == regBr) || block.rampa[i].statusRecord == '*')
{ //ukoliko je ostvaren jedan od dva uslova, vraca se rezultat
pos.positionRecord = i;
pos.flag = block.rampa[i].statusRecord == '*'; //indikator da li se doslo do kraja datoteke ili se slog pronasao
fclose(file);
return pos;
}
}
blockNum++;
}
}
void deleteRecord(long int regBr) {
if (!*activeFile) {
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
TPosition pos = findRecord(regBr);
Block block;
if(pos.flag) { //vrsi se provera da li je pronadjen slog ili je pretraga vratila slog kraja datoteke
printf("Vozilo sa datim registarskim brojem nije pronadjeno!");
return;
}
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom ucitavanja bloka!");
}
fclose(file);
block.rampa[pos.positionRecord].statusRecord = 'n'; //vrsi se logicko brisanje
file = fopen(activeFile,"rb+"); //otvaranje datoteke za citanje ili pisanje, a da se pri tome ne uklone stare vrednosti datoteke
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if((fwrite(&block, sizeof(Block), 1, file)) != 1){ //prepise se student sa modifikovanim vrednostima
printf("\nGreska prilikom upisa bloka!");
}
fclose(file);
printf("\nVozilo sa registarskim brojem %ld je uspesno obrisan!", block.rampa[pos.positionRecord].registarskaOznaka);
}
void showAllRecords()
{ //prikaz svih slogova datoteke
if (!*activeFile) {
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
Block block;
int blockNum = 0;
FILE* file = fopen(activeFile,"rb");
bool isEmpty = true; //indikator da li je pronadjen makar jedan aktivan slog
while(1)
{
fseek(file,sizeof(Block)*blockNum,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{ //ukoliko je citanje bloka neuspesno
printf("\nGreska prilikom citanja bloka!");
fclose(file);
return;
}
for(int i = 0; i < BLOCK_FACTOR; i++) {
if(block.rampa[i].statusRecord == 'a') {
printf("\nBlok: %d Slog: %d", blockNum, i);
printRecord(block.rampa[i]);
if(isEmpty)
isEmpty = false;
}
else if (block.rampa[i].statusRecord == '*') {
if (isEmpty)
printf("\nDatoteka je prazna!");
fclose(file);
return;
}
}
blockNum++;
}
}
void showRecord(long int regBr)
{ //prikaz studenta sa zadatim brojem indeksa
if (!*activeFile)
{
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
TPosition pos = findRecord(regBr);
Block block;
if(pos.flag)
{ //vrsi se provera da li je pronadjen slog ili je pretraga vratila slog kraja datoteke
printf("Vozilo sa zadatim registarskim brojem nije pronadjen!");
return;
}
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom ucitavanja bloka!");
}
fclose(file);
printRecord(block.rampa[pos.positionRecord]);
}
void printRecord(NRampa rampa)
{
printf("\n\tRegistarska oznaka: %ld", rampa.regBr);
/*printf("\n\time: %s", student.ime);
printf("\n\tprezime: %s", student.prezime);
printf("\n\tgodina upisa: %d", student.godinaUpisa);*/
/*}
NRampa populateRecord()
{ //pomocna funkcija za kreiranje novog sloga
NRampa rampa;
printf("\nRegistarski broj: ");
rampa.regBr = brojUnos();
return rampa;
}
long int brojUnos() {
char s[10] = "";
char *errstr;
long val;
while (1) {
scanf (" %s", s);
val = strtol(s, &errstr, 10);
if (!*errstr)
return val;
else
printf("Tip vrednosti nije odgovarajuci. Unesite ponovo -> ");
}
}
//main.cpp
#include <iostream>
//#include "Rampa.h"
using namespace std;
int main()
{
//int x;
printf("\nIzaberite opciju: ");
printf("\n1. Kreiranje datoteke;");
printf("\n2. Izbor aktivne datoteke;");
printf("\n3. Prikaz naziva aktivne datoteke;");
printf("\n4. Dodavanje vozila;");
printf("\n5. Pretraga vozila;");
printf("\n6. Prikaz svih vozila;");
printf("\n7. Brisanje registarske oznake vozila;");
printf("\n8. Kraj\n");
/*do {
printf("\nVas izbor: ");
x = (int)brojUnos();
} while(x < 1 || x > 8);
return x;*/
}
/*nt main()
{
int odg;
long int regBr;
do
{
switch(odg)
{
case 1:
createNewHeap();
break;
case 2:
chooseActiveFile();
break;
case 3:
showActiveFile();
break;
case 4:
addRecord();
break;
case 5:
printf("\n Unesite registarski broj: ");
regBr = brojUnos();
showRecord(regBr);
break;
case 6:
showAllRecords();
break;
case 7:
printf("\n Unesite registarski broj: ");
regBr = brojUnos();
deleteRecord(regBr);
break;
}
} while(odg != 10);
return 0;
}
//Rampa.h
/*#ifndef RAMPA_H_INCLUDED
#define RAMPA_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLOCK_FACTOR 3
typedef struct rampa {
long int evidencioniBr[8];
char registarskaOznaka[10];
char oznakaNP[4];
int iznos;
/*int vreme;
int datum;*/ //nisam sigurna
/*} NRampa;
typedef struct block
{ //blokiranje datoteke vrsi se putem niza sa zadatim faktorom blokiranja
NRampa rampa[BLOCK_FACTOR];
} Block;
typedef struct position
{ //struktura koja prikazuje poziciju sloga u datoteci (poziciju bloka + poziciju sloga unutar tog bloka)
int positionBlock;
int positionRecord;
bool flag; //indikator da li je posmatrana pozicija kraj datoteke (za potrebe upisa novog sloga)
} TPosition;
void createNewHeap();
void chooseActiveFile();
void showActiveFile();
void addRecord();
void showAllRecords();
void showRecord(long int regBr);
void deleteRecord(long int regBr);
TPosition findRecord(long int regBr);
NRampa populateRecord();
long int brojUnos();
void printRecord(NRampa rampa);
#endif // RAMPA_H_INCLUDED*/
//Rampa.cpp
#include "Rampa.h"
char activeFile[30] = ""; //promenljova koja sadrzi naziv aktivne datoteke
void createNewHeap()
{ //funkcija zaduzena za kreiranje nove datoteke koja sadrzi slog za kraj datoteke
NRampa finalRecord;
finalRecord.statusRecord = '*'; //inicijalni slog koji sadrzi znak za kraj datoteke
Block block;
block.rampa[0] = finalRecord;
char fileName[30] = "";
printf("\nIme datoteke: ");
scanf(" %s", fileName);
FILE* file = NULL;
if( (file = fopen(fileName,"wb")) == NULL )
{ //kreira novu datoteku ili brise sadrzaj vec postojece datoteke
printf("\nKreiranje datoteke %s neuspesno!\n", fileName);
fclose(file);
return;
}
if(((fwrite(&block, sizeof(Block), 1, file)) != 1))
{ //upis bloka, a sad jedino ima slog za kraj datoteke
printf("\nGreska prilikom upisa inicijalnog bloka!");
}
fclose(file);
printf("\nKreiranje datoteke %s je uspesno!\n", fileName);
}
void chooseActiveFile()
{ //biranje aktivne, vec kreirane datoteke
char fileName[30] = "";
printf("\nIme datoteke: ");
scanf(" %s", fileName);
FILE* file = NULL;
if( (file = fopen(fileName,"rb")) == NULL ) {
printf("\nDatoteka %s ne postoji!\n", fileName);
fclose(file);
return;
}
fclose(file);
printf("\nDatoteka %s uspesno otvorena!\n", fileName);
strcpy(activeFile, fileName); //neophodno je postaviti vrednost aktivne datoteke u activeFile promenljivu
}
void showActiveFile()
{ //prikaz aktivne datoteke
if(!*activeFile)
{
printf("\nNe postoji aktivna datoteka!\n");
}
else
{
printf("\nAktivna datoteka : %s", activeFile);
}
}
void addRecord()
{ //dodavanje novog sloga u datoteci
if (!*activeFile)
{ // pre svake operacije nad aktivnom datotekom, vrsi se provera da li je ona prethodno odabrana
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
NRampa rampa = populateRecord(); //kreiranje novog sloga sloga
Block block;
TPosition pos = findRecord(rampa.registarskaOznaka);
if(pos.positionBlock == -1)
{
printf("\nGreska prilikom citanja bloka!");
return;
}else if(!pos.flag)
{ //ukoliko je vracena vrednost znaka za kraj datoteke, vrsi se upis sloga na tu poziciju. U suprotnom, slog sa datom vrednoscu kljuca vec postoji i vraca se poruka gresci
printf("\nVozilo sa registarkom oznakom %ld vec postoji!", rampa.regBr);
return;
}
populateOtherFields(&rampa); //nakon provere, vrsi se popunjavanje ostalih polja sloga
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom citanja bloka!");
}
fclose(file);
file = fopen(activeFile,"rb+"); //otvaranje datoteke za citanje ili pisanje, a da se pri tome ne uklone stare vrednosti datoteke
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
NRampa finalRecord = block.rampa[pos.positionRecord]; //slog kraja datoteke smesta se u pomocnu promenjivu jer se na njegovo mesto unosi nov slog
block.rampa[pos.positionRecord] = rampa;
if( pos.positionRecord < BLOCK_FACTOR-1)
{
block.rampa[pos.positionRecord+1] = finalRecord; //ukoliko nismo dosli do kraja bloka, slog za kraj datoteke se unosi na narednu poziciju bloka
if(((fwrite(&block, sizeof(Block), 1,file)) != 1) )
{
printf("\nGreska prilikom upisa bloka!");
}
}
else
{
if((fwrite(&block, sizeof(Block), 1, file) != 1))
{
printf("\nGreska prilikom upisa bloka!");
}
Block blockNew; //u slucaju da smo dosli do kraja datoteke, kreira se novi blok i u njega se unosi slog za kraj datoteke
blockNew.rampa[0] = finalRecord;
fseek(file,sizeof(Block)*(pos.positionBlock+1),SEEK_SET);
if((fwrite(&blockNew, sizeof(Block), 1, file)) != 1){ //provera za kraj
printf("\nGreska prilikom upisa bloka u datoteku!");
}
}
printf("\nVozilo sa registarkim brojem %ld je uspesno upisan u blok broj %d poziciju %d" , rampa.registarskaOznaka, pos.positionBlock, pos.positionRecord);
fclose(file);
}
TPosition findRecord(long int regBr)
{ //vraca poziciju trazenog sloga ili poziciju kraja datoteke
int i;
Block block;
TPosition pos;
int blockNum = 0;
FILE* file = fopen(activeFile,"rb");
while(1)
{ //dokle god se ne dodje do kraja datoteke ili trazenog sloga, vrsi se ucitavanje novog bloka
pos.positionBlock = blockNum;
fseek(file,sizeof(Block)*blockNum,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{ //ukoliko je citanje bloka neuspesno, pozicija bloka se postavlja na -1
pos.positionBlock = -1;
printf("\nGreska prilikom citanja bloka!");
fclose(file);
return pos;
}
for(i = 0; i < BLOCK_FACTOR; i++)
{
if((block.rampa[i].statusRecord == 'a' && block.rampa[i].regBr == regBr) || block.rampa[i].statusRecord == '*')
{ //ukoliko je ostvaren jedan od dva uslova, vraca se rezultat
pos.positionRecord = i;
pos.flag = block.rampa[i].statusRecord == '*'; //indikator da li se doslo do kraja datoteke ili se slog pronasao
fclose(file);
return pos;
}
}
blockNum++;
}
}
void deleteRecord(long int regBr) {
if (!*activeFile) {
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
TPosition pos = findRecord(regBr);
Block block;
if(pos.flag) { //vrsi se provera da li je pronadjen slog ili je pretraga vratila slog kraja datoteke
printf("Vozilo sa datim registarskim brojem nije pronadjeno!");
return;
}
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom ucitavanja bloka!");
}
fclose(file);
block.rampa[pos.positionRecord].statusRecord = 'n'; //vrsi se logicko brisanje
file = fopen(activeFile,"rb+"); //otvaranje datoteke za citanje ili pisanje, a da se pri tome ne uklone stare vrednosti datoteke
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if((fwrite(&block, sizeof(Block), 1, file)) != 1){ //prepise se student sa modifikovanim vrednostima
printf("\nGreska prilikom upisa bloka!");
}
fclose(file);
printf("\nVozilo sa registarskim brojem %ld je uspesno obrisan!", block.rampa[pos.positionRecord].registarskaOznaka);
}
void showAllRecords()
{ //prikaz svih slogova datoteke
if (!*activeFile) {
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
Block block;
int blockNum = 0;
FILE* file = fopen(activeFile,"rb");
bool isEmpty = true; //indikator da li je pronadjen makar jedan aktivan slog
while(1)
{
fseek(file,sizeof(Block)*blockNum,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{ //ukoliko je citanje bloka neuspesno
printf("\nGreska prilikom citanja bloka!");
fclose(file);
return;
}
for(int i = 0; i < BLOCK_FACTOR; i++) {
if(block.rampa[i].statusRecord == 'a') {
printf("\nBlok: %d Slog: %d", blockNum, i);
printRecord(block.rampa[i]);
if(isEmpty)
isEmpty = false;
}
else if (block.rampa[i].statusRecord == '*') {
if (isEmpty)
printf("\nDatoteka je prazna!");
fclose(file);
return;
}
}
blockNum++;
}
}
void showRecord(long int regBr)
{ //prikaz studenta sa zadatim brojem indeksa
if (!*activeFile)
{
printf("\nNeophodno je izabrati aktivnu datoteku pre koriscenja ove operacije!");
return;
}
TPosition pos = findRecord(regBr);
Block block;
if(pos.flag)
{ //vrsi se provera da li je pronadjen slog ili je pretraga vratila slog kraja datoteke
printf("Vozilo sa zadatim registarskim brojem nije pronadjen!");
return;
}
FILE* file = fopen(activeFile,"rb");
fseek(file,sizeof(Block)*pos.positionBlock,SEEK_SET);
if( (fread(&block,sizeof(Block),1,file)) != 1)
{
printf("\nGreska prilikom ucitavanja bloka!");
}
fclose(file);
printRecord(block.rampa[pos.positionRecord]);
}
void printRecord(NRampa rampa)
{
printf("\n\tRegistarska oznaka: %ld", rampa.regBr);
/*printf("\n\time: %s", student.ime);
printf("\n\tprezime: %s", student.prezime);
printf("\n\tgodina upisa: %d", student.godinaUpisa);*/
/*}
NRampa populateRecord()
{ //pomocna funkcija za kreiranje novog sloga
NRampa rampa;
printf("\nRegistarski broj: ");
rampa.regBr = brojUnos();
return rampa;
}
long int brojUnos() {
char s[10] = "";
char *errstr;
long val;
while (1) {
scanf (" %s", s);
val = strtol(s, &errstr, 10);
if (!*errstr)
return val;
else
printf("Tip vrednosti nije odgovarajuci. Unesite ponovo -> ");
}
}
//main.cpp
#include <iostream>
//#include "Rampa.h"
using namespace std;
int main()
{
//int x;
printf("\nIzaberite opciju: ");
printf("\n1. Kreiranje datoteke;");
printf("\n2. Izbor aktivne datoteke;");
printf("\n3. Prikaz naziva aktivne datoteke;");
printf("\n4. Dodavanje vozila;");
printf("\n5. Pretraga vozila;");
printf("\n6. Prikaz svih vozila;");
printf("\n7. Brisanje registarske oznake vozila;");
printf("\n8. Kraj\n");
/*do {
printf("\nVas izbor: ");
x = (int)brojUnos();
} while(x < 1 || x > 8);
return x;*/
}
/*nt main()
{
int odg;
long int regBr;
do
{
switch(odg)
{
case 1:
createNewHeap();
break;
case 2:
chooseActiveFile();
break;
case 3:
showActiveFile();
break;
case 4:
addRecord();
break;
case 5:
printf("\n Unesite registarski broj: ");
regBr = brojUnos();
showRecord(regBr);
break;
case 6:
showAllRecords();
break;
case 7:
printf("\n Unesite registarski broj: ");
regBr = brojUnos();
deleteRecord(regBr);
break;
}
} while(odg != 10);
return 0;
}
Unapred hvala. Ako je neko nekada imao nešto slično, volela bih da mi se javi i pomogne mi.
[Ovu poruku je menjao X Files dana 30.01.2016. u 15:03 GMT+1]