Witam
Mam do zrobienia projekt: Operacje na strukturach + zapis do pliku. Projekt jest już gotowy ale nie nie chce się skompilować. W załączniku dołączam plik z poleceniem. Program wykonuje wszystkie operacje bezbłędnie z wyjątkiem wyszukiwanie po nazwisku lekarza jego pacjentów w wieku poniżej 30 lat. Prosiłbym o wskazanie błędów.
Oto kod:
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
struct pacjent
{
int id;
char Imie[10];
char Nazwisko[20];
int Urodzony;
};
struct lekarz
{
int id;
char Imie[10];
char Nazwisko[20];
long int Nrtel;
};
struct porada
{
int idPacjent;
int idLekarz;
char data[10];
};
void NowyPacjent()
{
int m;
cout<<"Podaj liczbe pacjentow, ktorych chcesz dodac do bazy: ";
cin>>m;
pacjent *tablica = new pacjent[m];
ofstream file;
file.open("baza_pacjentow.dat",ios::out | ios::app | ios::binary);
for(int i = 0 ; i < m; i++)
{
cout<<"----------Wprowadzenie danych pacjentow.----------\n";
cout<<"ID: \n";
cin>>tablica[i].id;
cout<<"Imie: \n";
cin>>tablica[i].Imie;
cout<<"Nazwisko: \n";
cin>>tablica[i].Nazwisko;
cout<<"Data urodzenia: \n";
cin>>tablica[i].Urodzony;
file.write ((char*) &tablica[i], sizeof(pacjent));
}
file.close();
delete [] tablica;
}
void NowyLekarz()
{
int m;
cout<<"Podaj liczbe lekarzy, ktorych chcesz dodac do bazy: ";
cin >>m;
lekarz *tablica = new lekarz[m];
ofstream file;
file.open("baza_lekarzy.dat", ios::out | ios::app | ios::binary);
for(int i = 0; i < m; i++)
{
cout<<"----------Wprowadzenie danych lekarzy.----------\n";
cout<<"ID: \n";
cin>>tablica[i].id;
cout<<"Imie: \n";
cin>>tablica[i].Imie;
cout<<"Nazwisko: \n";
cin>>tablica[i].Nazwisko;
cout<<"Numer telefonu: \n";
cin>>tablica[i].Nrtel;
file.write((char*) &tablica[i], sizeof(lekarz));
}
file.close();
delete [] tablica;
}
void NowyPorada()
{
int m;
cout<<"Podaj liczbe porad, ktorych chcesz dodac do bazy: ";
cin >>m;
porada *tablica = new porada[m];
ofstream file;
file.open("baza_porad.dat", ios::out | ios::app | ios::binary);
for(int i = 0; i < m; i++)
{
cout<<"----------Wprowadzenie danych porady.----------\n";
cout<<"ID Pacjenta: \n";
cin>>tablica[i].idPacjent;
cout<<"ID Lekarza: \n";
cin>>tablica[i].idLekarz;
cout<<"Data konsultacji: \n";
cin>>tablica[i].data;
file.write((char*) &tablica[i], sizeof(porada));
}
file.close();
delete [] tablica;
}
void OdczytPacjent()
{
cout << "Wyswietlanie bazy pacjentow." << endl << endl ;
int m = 0;
ifstream file("baza_pacjentow.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(pacjent);
file.seekg(0, ios::beg);
pacjent *tablica = new pacjent[m];
for(int i = 0; i< m; i++)
{
file.read((char*) &tablica[i], sizeof(pacjent));
cout << "Id pacjenta: " << tablica[i].id << endl;
cout << "Imie: " << tablica[i].Imie << endl;
cout << "Nazwisko: " << tablica[i].Nazwisko << endl;
cout << "Data urodzenia: " << tablica[i].Urodzony << endl;
}
file.close();
delete [] tablica;
}
void OdczytLekarz()
{
cout << "Wyswietlanie bazy lekarzy." << endl << endl ;
int m = 0;
ifstream file("baza_lekarzy.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(lekarz);
file.seekg(0, ios::beg);
lekarz *tablica = new lekarz[m];
for(int i = 0; i< m; i++)
{
file.read((char*) &tablica[i], sizeof(lekarz));
cout << "Id pacjenta: " << tablica[i].id << endl;
cout << "Imie: " << tablica[i].Imie << endl;
cout << "Nazwisko: " << tablica[i].Nazwisko << endl;
cout << "Numer telefonu: " << tablica[i].Nrtel << endl;
}
file.close();
delete [] tablica;
}
void OdczytPorada()
{
cout << "Wyswietlanie bazy porad." << endl << endl ;
int m = 0;
ifstream file("baza_porad.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(porada);
file.seekg(0, ios::beg);
porada *tablica = new porada[m];
for(int i = 0; i< m; i++)
{
file.read((char*) &tablica[i], sizeof(porada));
cout << "Id pacjenta: " << tablica[i].idPacjent << endl;
cout << "Id lekarza: " << tablica[i].idLekarz << endl;
cout << "Data: " << tablica[i].data << endl;
}
file.close();
delete [] tablica;
}
void ModPacjent()
{
int irekord;
pacjent tablica;
cout << "*************Uaktualnianie danych pacjenta.************* "<< endl;
fstream file("baza_pacjentow.dat", ios::out | ios::in |ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
cout << "Wprowadz ktorego pacjenta dane chcesz edytowac: ";
cin >> irekord;
file.seekg(irekord * sizeof(pacjent));
file.read((char*) &tablica, sizeof(pacjent));
cout << "Wprowadz nowe dane dla pacjenta: " ;
cout<<"ID: \n";
cin>>tablica.id;
cout<<"Imie: \n";
cin>>tablica.Imie;
cout<<"Nazwisko: \n";
cin>>tablica.Nazwisko;
cout<<"Data urodzenia: \n";
cin>>tablica.Urodzony;
file.seekg(irekord * sizeof(pacjent));
file.write((char*) &tablica, sizeof(pacjent)) <<flush;
file.close();
}
void ModLekarz()
{
int irekord;
lekarz tablica;
cout << "*************Uaktualnianie danych lekarza.************* "<< endl;
fstream file("baza_lekarzy.dat", ios::out | ios::in |ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
cout << "Wprowadz ktorego lekarza dane chcesz edytowac: ";
cin >> irekord;
file.seekg(irekord * sizeof(lekarz));
file.read((char*) &tablica, sizeof(lekarz));
cout << "Wprowadz nowe dane dla pacjenta: " ;
cout<<"ID: \n";
cin>>tablica.id;
cout<<"Imie: \n";
cin>>tablica.Imie;
cout<<"Nazwisko: \n";
cin>>tablica.Nazwisko;
cout<<"Numer telefonu: \n";
cin>>tablica.Nrtel;
file.seekg(irekord * sizeof(lekarz));
file.write((char*) &tablica, sizeof(lekarz)) <<flush;
file.close();
}
void ModPorada()
{
int irekord;
porada tablica;
cout << "*************Uaktualnianie danych porady.************* "<< endl;
fstream file("baza_porad.dat", ios::out | ios::in |ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
cout << "Wprowadz ktorej porady dane chcesz edytowac: ";
cin >> irekord;
file.seekg(irekord * sizeof(porada));
file.read((char*) &tablica, sizeof(porada));
cout << "Wprowadz nowe dane dla pacjenta: " ;
cout<<"ID Pacjenta: \n";
cin>>tablica.idPacjent;
cout<<"ID Lekarza: \n";
cin>>tablica.idLekarz;
cout<<"Data konsultacji: \n";
cin>>tablica.data;
file.seekg(irekord * sizeof(porada));
file.write((char*) &tablica, sizeof(porada)) <<flush;
file.close();
}
void ResetPacjent()
{
ofstream file("baza_pacjentow.dat");
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.close();
cout << "Baza wyczyszczona. Przed ponownym odczytem wprowadz nowe wartosci.\n";
}
void ResetLekarz()
{
ofstream file("baza_lekarzy.dat");
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.close();
cout << "Baza wyczyszczona. Przed ponownym odczytem wprowadz nowe wartosci.\n";
}
void ResetPorada()
{
ofstream file("baza_porad.dat");
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.close();
cout << "Baza wyczyszczona. Przed ponownym odczytem wprowadz nowe wartosci.\n";
}
int wyszukiwanieIDLek()
{
char cNazwisko[20];
cout<<"*************************************************\n";
cout << "Podaj nazwisko lekarza dla ktorego chcesz wyszukac\npacjentow przed 30-tym rokiem zycia: ";
cin >> cNazwisko;
int idLek = 0, m = 0;
ifstream file("baza_lekarzy.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(lekarz);
file.seekg(0, ios::beg);
lekarz *tablica = new lekarz[m];
for(int i = 0; i< m; i++)
{
file.read((char*) &tablica[i], sizeof(lekarz));
if(strcmp(tablica[i].Nazwisko, cNazwisko) == 0)
{
idLek = tablica[i].id;
}
}
file.close();
delete [] tablica;
return idLek;
}
int wyszukiwanieidPacjent(int idLek)
{
int m = 0;
int idPacjent = 0;
ifstream file("baza_porad.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(porada);
file.seekg(0, ios::beg);
porada *tablica = new porada[m];
for(int i = 0; i < m; i++)
{
file.read((char*) &tablica[i], sizeof(porada));
if(tablica[i].idLekarz == idLek)
{
idPacjent = tablica[i].idPacjent;
}
}
file.close();
delete [] tablica;
return idPacjent;
}
int wyszukiwaniePacjent(int idPacjent)
{
int m = 0;
ifstream file("baza_pacjentow.dat",ios::in | ios::binary);
if(!file.is_open())
{
cerr << "Brak pliku z danymi przed odczytem lub modyfikacja dodaj nowe dane." << endl;
file.clear();
return;
}
file.seekg(0, ios::end);
m = file.tellg();
m = m / sizeof(pacjent);
file.seekg(0, ios::beg);
pacjent *tablica = new pacjent[m];
for(int i = 0; i< m; i++)
{
file.read((char*) &tablica[i], sizeof(pacjent));
if(tablica[i].id == idPacjent && tablica[i].Urodzony > 1982 )
{
cout << "Imie: " << tablica[i].Imie << endl;
cout << "Nazwisko: " << tablica[i].Nazwisko << endl;
cout << "Data urodzenia: " << tablica[i].Urodzony << endl;
}
}
file.close();
delete [] tablica;
}
int main ()
{
int n;
menu:
printf("***********Przetwarzanie danych pogrupowanych w struktury***********\n");
printf("Co chcesz zrobic:\n1. Zapisac dane do bazy.\n2. Odczytac dane z bazy.\n3. Zmodyfikowac baze.\n4. Czyszczenie zawartosci baz.\n5. Zabaczyc liste pacjentow podanego lekarza.\n6. Wyjscie z programu.\nTwoj wybor: ");
again:
scanf("%i", &n);
switch(n)
{
case 1:
{
int n;
cout<<"Co chcesz dodac?\n1.Pacjenta\n2.Lekarza\n3.Porade.\n4.Powrot\n" << "Twoj wybor: ";
again1:
cin>>n;
switch(n)
{
case 1:
NowyPacjent();
goto menu;
break;
case 2:
NowyLekarz();
goto menu;
break;
case 3:
NowyPorada();
goto menu;
break;
case 4:
goto menu;
break;
default:
cout<<"Wybrano nieistniejaca opcje wybierz ponownie";
goto again1;
}
break;
}
case 2:
{
int n;
cout<<"Ktora baze danych chcesz odczytac?\n1.Pacjentow\n2.Lekarzy\n3.Porad.\n4.Powrot\n" << "Twoj wybor: ";
again2:
cin>>n;
switch(n)
{
case 1:
OdczytPacjent();
goto menu;
break;
case 2:
OdczytLekarz();
goto menu;
break;
case 3:
OdczytPorada();
goto menu;
break;
case 4:
goto menu;
break;
default:
cout<<"Wybrano nieistniejaca opcje wybierz ponownie";
goto again2;
}
break;
}
case 3:
{
int n;
cout<<"Ktora baze danych chcesz zmodyfikowac?\n1.Pacjentow\n2.Lekarzy\n3.Porad.\n4.Powrot" << "Twoj wybor: ";
again3:
cin>>n;
switch(n)
{
case 1:
ModPacjent();
goto menu;
break;
case 2:
ModLekarz();
goto menu;
break;
case 3:
ModPorada();
goto menu;
break;
case 4:
goto menu;
break;
default:
cout<<"Wybrano nieistniejaca opcje wybierz ponownie";
goto again3;
}
break;
}
case 4:
{
int n;
cout<<"Ktora baze danych chcesz wyczyscic?\n1.Pacjentow\n2.Lekarzy\n3.Porad.\n4.Powrot\n" << "Twoj wybor: ";
again4:
cin>>n;
switch(n)
{
case 1:
ResetPacjent();
goto menu;
break;
case 2:
ResetLekarz();
goto menu;
break;
case 3:
ResetPorada();
goto menu;
break;
case 4:
goto menu;
break;
default:
cout<<"Wybrano nieistniejaca opcje wybierz ponownie";
goto again4;
}
break;
}
case 5:
wyszukiwaniePacjent(wyszukiwanieidPacjent(wyszukiwanieIDLek()));
break;
case 6:
return 0;
break;
default:
printf("Wybrano nieistniejaca opcje wybierz ponownie:");
goto again;
}
system("pause");
return 0;
}