fstream og autoincremental id
Hej,Jeg sidder med et projekt her på datamatiker uddanelsen, som indebærer at det skal programmeres et sommerhusudlegnings-system.
Dette system skal fungere via fstream.
Gruppen sidder dog fast i programmeringen... hver ejer af sommerhuse skulle gerne have et unikt ID-nummer. Dette findes ved at tage den sidste record i filen, og lægge nummeret fra denne til 1. Det virker bare ikke :s Den giver det samme resultat hver gang (som om den tager det der nu ligger på det sted i rammen, og lægger 1 til...)
Jeg smider hele koden herunder. Projektet skal afleveres mandag, så jeg håber en eller anden kan hjælpe.
#include <iostream>
#include <conio>
#include <fstream>
struct ejertype
{
int ejerid;
int telefon_nr;
char navn[25];
char adresse[50];
};
struct hustype
{
int husid, ejerid, type;
char adresse[50];
};
void behandl_hus_opl();
void slet_hus();
void soeg_hus();
void behandl_ejer_opl();
void behandl_indskr_opl();
void indskriv_hus_opl(hustype);
void indskriv_ejer_opl(ejertype);
void main()
{
int valg;
do
{
clrscr();
cout << " Hovedmenu:\n\n"
<< "1: Opret ejer/hus\n"
<< "2: Søg/opdater hus\n"
<< "3: Søg/opdater ejer (I/T)\n"
<< "4: Afslut program\n";
cin >> valg;
switch(valg)
{
case 1:
behandl_indskr_opl();
break;
case 2:
// behandl_hus_opl();
break;
case 3:
cout << "Ikke tilgængelig\n\n";
getch();
break;
}
}while(valg!=4);
}
void behandl_indskr_opl()
{
int valg;
ejertype ejer;
hustype hus;
do
{
clrscr();
cout << " Opret ejer/hus:\n\n"
<< "1: Indskriv ejer\n"
<< "2: Indskriv hus\n"
<< "3: Tilbage til hovedmenuen\n";
cin >> valg;
clrscr();
fstream ejerkartotek;
switch(valg)
{
case 1:
//find det næste ejerid
ejerkartotek.open("ejerkartotek.dat", ios::in|ios::binary);
ejerkartotek.seekg(sizeof(ejer), ios::end); //find sidste record i fil
ejerkartotek.read((char*)&ejer, sizeof(ejer));
ejerkartotek.close();
ejer.ejerid++;
hus.ejerid = ejer.ejerid;
cout << " Indskriv ejer:\n\n";
cout << "Indtast ejerens navn: "; cin >> ejer.navn;
cout << "Indtast ejerens adresse: "; cin >> ejer.adresse;
cout << "Indtast ejerens telefon nr.: "; cin >> ejer.telefon_nr;
indskriv_ejer_opl(ejer);
clrscr();
cout << "Ejer oprettet.\nTryk en tast for at gå til indskriv hus";
getch();
clrscr();
case 2:
cout << " Indskriv hus:\n\n";
if(valg==2) //hvis ID'et ikke er indtastet
{
cout << "Indtast ejer ID: "; cin >> hus.ejerid;
}else
{
cout << "Indtast ejer ID: " << hus.ejerid << "\n";
}
cout << "Indtast husets adresse: "; cin >> hus.adresse;
cout << "Indtast husets type: "; cin >> hus.type;
//indskriv_hus_opl(hus);
cout << "\n\nHus oprettet.\nTryk en tast for at gå til opret ejer/hus";
getch();
clrscr();
break;
}
}while(valg!=3);
}
void indskriv_ejer_opl(ejertype ejer)
{
fstream ejerkartotek;
ejerkartotek.open("ejerkartotek.dat", ios::app | ios::binary);
ejerkartotek.write((char*)&ejer, sizeof(ejer));
ejerkartotek.close();
}