trebam pomoc oko zadatka koji glasi ovako:
Jednostavna datoteka s podacima o studentima (s fiksnom veličinom zapisa; zapis sadrži matični broj, prezime i ime studenta i broj položenih ispita). Ponuditi korisniku izbornik s osnovnim operacijama (kreiranje datoteke, unos podataka, ispis podataka, pretraživanje zapisa, ispis vremena pretraživanja). Kod pretraživanja izmjeriti vrijeme pronalaženja podatka u datoteci i smjestiti podatak o tome u odgovarajuće polje (svaki element polja odnosi se na odgovarajući zapis u datoteci; prije ulaska u glavni izbornik svi elementi polja trebaju se inicijalizirati nulama).
Kod ispisa vremena pretraživanja uz svako izmjereno vrijeme ispisati odgovarajući zapis u datoteci (ispisuju se samo izmjerena vremena; ne početne nule). Koristiti biblioteku za mjerenje vremena proširenu funkcijom za unos znakovnih nizova.
napravio sam nest, sluzeci se primjerima s predavanja, iako mi neki postupci nisu jasni.
treba mi preinaka programa, koja ce nakon kreiranja datoteke koristiti istu tu datoteku za citanje/upis podataka. isto tako treba mi i petlja koja provjerava da li je datoteka kreirana, a ako nije, ne izbacuje error, vec daje obavijest da datoteka nije kreirana...
Code:
#include <iostream>
#include <fstream>
#include "vrijeme.cpp"
using namespace std;
struct tstudent{
int mat_br;
char prez_ime[35];
int g_stu;
int brispita;
};
tstudent student;
fstream dat;
char naziv_datoteke[40];
void kreiranje_datoteke(){
cout << "Unesite naziv datoteke u koju cete spremati podatke:";
cin >> naziv_datoteke;
dat.open(naziv_datoteke,ios::in | ios::binary);
if (!dat){
dat.open(naziv_datoteke,ios::out | ios::binary);
dat.close();
} else {
cout << "Datoteka " << naziv_datoteke << " vec postoji na disku."<<endl;
dat.close();
}
dat.clear();
};
void unos_podataka(){
char dalje;
dat.open(naziv_datoteke, ios::out | ios::app | ios::binary);
do{
dat.seekg(0,ios::end);
cout << "Maticni broj:";
cin >> student.mat_br;
cout << "Prezime i ime:";
unos (student.prez_ime);
cout << "Godina studija:";
cin >> student.g_stu;
cout << "Broj polozenih ispita:";
cin >> student.brispita;
dat.write((char *) &student,sizeof(student));
cout << "Dalje? (d/n)";
cin >> dalje;
} while (dalje=='d');
dat.close();
dat.clear();
};
void ispis_podataka(){
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
}
dat.close();
dat.clear();
};
void trazi(double *polje){
int mb=0;
int brojac=0;
cout <<"Maticni broj studenta: "; cin >> mb;
vrijeme_pocetak();
dat.open(naziv_datoteke, ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
if (student.mat_br==mb){
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
vrijeme_kraj();
polje[brojac]= vrijeme_proteklo();
}
brojac++;
}
if (brojac==0)
cout << "Student s maticnim brojem " << mb << " nije nadjen u datoteci."<<endl;
dat.close();
dat.clear();
};
void ispis_vremena(double *polje){
int brojac=0;
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
if (polje[brojac] != -1) {
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
cout << "Vremena proslo: " << polje[brojac] << endl;
}
brojac++;
}
dat.close();
dat.clear();
};
int main(){
int izbor;
int n = 9999;
double *polje = new double[n];
for (int i=0; i<=n; i++) polje[i] = -1;
do{ cout <<"Izaberite :" <<endl<<endl;
cout <<"1. Kreiranje datoteke"<<endl;
cout <<"2. Unos podataka u datoteku"<<endl;
cout <<"3. Ispis svih zapisa iz datoteke"<<endl;
cout <<"4. Ispis podataka o zadanom studentu"<<endl;
cout <<"5. Ispis o vremenu"<<endl;
cout <<"9. Izlaz iz programa"<<endl;
cin >> izbor;
switch (izbor){
case 1:kreiranje_datoteke();break;
case 2:unos_podataka();break;
case 3:ispis_podataka();break;
case 4:trazi(polje); break;
case 5:ispis_vremena(polje);break;
}
} while (izbor != 9);
return 1;
}
#include <iostream>
#include <fstream>
#include "vrijeme.cpp"
using namespace std;
struct tstudent{
int mat_br;
char prez_ime[35];
int g_stu;
int brispita;
};
tstudent student;
fstream dat;
char naziv_datoteke[40];
void kreiranje_datoteke(){
cout << "Unesite naziv datoteke u koju cete spremati podatke:";
cin >> naziv_datoteke;
dat.open(naziv_datoteke,ios::in | ios::binary);
if (!dat){
dat.open(naziv_datoteke,ios::out | ios::binary);
dat.close();
} else {
cout << "Datoteka " << naziv_datoteke << " vec postoji na disku."<<endl;
dat.close();
}
dat.clear();
};
void unos_podataka(){
char dalje;
dat.open(naziv_datoteke, ios::out | ios::app | ios::binary);
do{
dat.seekg(0,ios::end);
cout << "Maticni broj:";
cin >> student.mat_br;
cout << "Prezime i ime:";
unos (student.prez_ime);
cout << "Godina studija:";
cin >> student.g_stu;
cout << "Broj polozenih ispita:";
cin >> student.brispita;
dat.write((char *) &student,sizeof(student));
cout << "Dalje? (d/n)";
cin >> dalje;
} while (dalje=='d');
dat.close();
dat.clear();
};
void ispis_podataka(){
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
}
dat.close();
dat.clear();
};
void trazi(double *polje){
int mb=0;
int brojac=0;
cout <<"Maticni broj studenta: "; cin >> mb;
vrijeme_pocetak();
dat.open(naziv_datoteke, ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
if (student.mat_br==mb){
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
vrijeme_kraj();
polje[brojac]= vrijeme_proteklo();
}
brojac++;
}
if (brojac==0)
cout << "Student s maticnim brojem " << mb << " nije nadjen u datoteci."<<endl;
dat.close();
dat.clear();
};
void ispis_vremena(double *polje){
int brojac=0;
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
if (polje[brojac] != -1) {
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
cout << "Broj polozenih ispita: " << student.brispita << endl;
cout << "Vremena proslo: " << polje[brojac] << endl;
}
brojac++;
}
dat.close();
dat.clear();
};
int main(){
int izbor;
int n = 9999;
double *polje = new double[n];
for (int i=0; i<=n; i++) polje[i] = -1;
do{ cout <<"Izaberite :" <<endl<<endl;
cout <<"1. Kreiranje datoteke"<<endl;
cout <<"2. Unos podataka u datoteku"<<endl;
cout <<"3. Ispis svih zapisa iz datoteke"<<endl;
cout <<"4. Ispis podataka o zadanom studentu"<<endl;
cout <<"5. Ispis o vremenu"<<endl;
cout <<"9. Izlaz iz programa"<<endl;
cin >> izbor;
switch (izbor){
case 1:kreiranje_datoteke();break;
case 2:unos_podataka();break;
case 3:ispis_podataka();break;
case 4:trazi(polje); break;
case 5:ispis_vremena(polje);break;
}
} while (izbor != 9);
return 1;
}
hvala unaprijed na pomoci