Funkcja wyszukująca w strukturach.

0

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;
}

0

Program wykonuje wszystkie operacje bezbłędnie, ale nie chce się skompilować? Ok.

0

Czy Tobie się wydaje, że to formatowanie jest przejrzyste?
Zobaczyłem tylko formatowanie oraz goto i stwierdziłem, że nie będę czytał tego kodu.

0

Podwójne opuszczenia linii przy kodzie mającym bez nich 500 linijek to lekkie przegięcie. Ponadto pisałem już w innym Twoim temacie o etykietach: zrób coś z tym.

Błędy kompilacji, które napotykasz to najprawdopodobniej

test.cpp:319:43: error: 'strcmp' was not declared in this scope
test.cpp:520:16: error: 'system' was not declared in this scope

To raczej wiadomo jak rozwiazać.

Twoje funkcje wyszukujące też rzucają błędem:
error: return-statement with no value, in function returning 'int'
Naprowadzić Cię na rozwiązanie może pomóc ten ochłap kodu:

int x()
{
	return;
}

Tak na marginesie, kompilatory same z siebie przestawiają się na japoński? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1