Witam wszystkich, mam problem z powrotnym wczytaniem pliku w konsoli mianowicie chciałem zrobić taką małą bazę danych ( korzystając z kursu na udemy c++ ) podczas dodawania osoby i wczytywaniem jej nie ma problemu również gdy zapisujemy ją w pliku. Problem tworzy się gdy zamykam konsole i włączam na nowo podczas wyboru wczytania danych z pliku.txt nie jest wyświetlana poprawnie lista osób dodanych do listy.
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <fstream>
using namespace std;
struct pracownik
{
string imie;
string nazwisko;
short wiek;
float stawka;
short godziny;
float wynagrodzenie;
};
short ileDodanoOsob;
pracownik pracownicy[100];
void enter();
void dodajOsobe();
void pokazOsoby();
void zapiszOsobyDoPliku();
void wczytajOsobyZPliku();
int main()
{
char tescior;
do
{
cout << "Menu" << endl;
cout << "Osob w bazie: " << ileDodanoOsob <<endl;
cout << "1.Dodaj osobe" << endl;
cout << "2.Pokaz osoby dodane" << endl;
cout << "3.Zapisz osoby do pliku" << endl;
cout << "4.Wczytaj osoby z pliku" << endl;
tescior = getch();
switch(tescior)
{
case '1':
dodajOsobe();
break;
case '2':
pokazOsoby();
break;
case '3':
zapiszOsobyDoPliku();
break;
case '4':
wczytajOsobyZPliku();
break;
}
enter();
system("cls");
}while(tescior != 27);
return 0;
}
void enter()
{
cout << "Nacisnij enter aby kontynuowac";
while(getch() != 13);
}
void dodajOsobe()
{
cout << "Podaj imie: ";
cin >> pracownicy[ileDodanoOsob].imie;
cout << "Podaj nazwisko: ";
cin >> pracownicy[ileDodanoOsob].nazwisko;
cout << "Podaj wiek: ";
cin >> pracownicy[ileDodanoOsob].wiek;
cout << "Podaj stawke: ";
cin >> pracownicy[ileDodanoOsob].stawka;
cout << "Podaj przepracowana liczbe godzin: ";
cin >> pracownicy[ileDodanoOsob].godziny;
pracownicy[ileDodanoOsob].wynagrodzenie = pracownicy[ileDodanoOsob].stawka*pracownicy[ileDodanoOsob].godziny;
ileDodanoOsob ++;
}
void pokazOsoby()
{
if (ileDodanoOsob > 0)
{
for (int j = 0; j < ileDodanoOsob; j++)
{
cout << "Osoba nr: " << (j+1) << endl;
cout <<"Imie: " << pracownicy[j].imie <<endl;
cout <<"Nazwisko: " << pracownicy[j].nazwisko <<endl;
cout <<"Wiek: " << pracownicy[j].wiek <<endl;
cout <<"Stawka: " << pracownicy[j].stawka <<endl;
cout << "Przepracowane godziny: " << pracownicy[j].godziny << endl;
cout <<"Wynagrodzenie: " << pracownicy[j].wynagrodzenie <<endl;
pracownicy[j].wynagrodzenie = pracownicy[j].stawka*pracownicy[j].godziny;
}
}
else
cout << "Baza jest pusta" << endl;
}
void zapiszOsobyDoPliku()
{
fstream file("baza.txt", ios::out);
if(file.is_open())
{
file << ileDodanoOsob << endl;
for(int j=0; j < ileDodanoOsob; j++)
{
file <<"Imie: " << pracownicy[j].imie <<endl;
file <<"Nazwisko: " << pracownicy[j].nazwisko <<endl;
file <<"Wiek: " << pracownicy[j].wiek <<endl;
file <<"Stawka: " << pracownicy[j].stawka <<endl;
file << "Godziny: " << pracownicy[j].godziny << endl;
file <<"Wynagrodzenie: " << pracownicy[j].wynagrodzenie <<endl;
pracownicy[j].wynagrodzenie = pracownicy[j].stawka*pracownicy[j].godziny;
}
file.close();
}
else
cout << "Plik nie zostal otwarty poprawnie" << endl;
}
void wczytajOsobyZPliku()
{
fstream file("baza.txt", ios::in);
if (file.is_open())
{
file >> ileDodanoOsob;
for (int j = 0; j < ileDodanoOsob; j++)
{
file >> pracownicy[j].imie;
file >> pracownicy[j].nazwisko;
file >> pracownicy[j].wiek;
file >> pracownicy[j].stawka;
file >> pracownicy[j].godziny;
file >> pracownicy[j].wynagrodzenie;
pracownicy[j].wynagrodzenie = pracownicy[j].stawka*pracownicy[j].godziny;
}
/*int i = 0;
do
{
file >> pracownicy[i].imie;
file >> pracownicy[i].nazwisko;
file >> pracownicy[i].wiek;
file >> pracownicy[i].stawka;
file >> pracownicy[i].wynagrodzenie;
i++;
}while(!file.eof()); */
file.close();
}
else
cout << "Nie udalo sie odtworzyc pliku" << endl;
}