Dynamiczna tablica danych - funkcja wyświetla dane tylko jednej osoby

0

Witam ! Przygodę z C++ rozpocząłem około 3 miesiące temu, więc bardzo przepraszam jeśli nie będę wyrażał się zbyt profesjonalne.
A zatem mam za zadanie stworzyć bazę danych specjalistów, gdzie między innymi muszę wykorzystać struktury dynamiczne. Każdego specjalistę cechuje id , imię , nazwisko, ośrodek itp. W program muszą być takie funkcje jak dodawanie i usuwanie lekarzy z bazy i tym podobne. Spędziłem już trochę czasu nad programem, rozpisałem sobie na kartce jak to może wyglądać. I tak utworzyłem już strukturę oraz menu programu. W main'ie zainicjowałem tablicę dynamiczną o nazwie LK, po to by na wstępie zapytać użytkownika jak dużą chce mieć bazę danych. Zrobiłem już również funkcję (aczkolwiek jeszcze niepełną) dodawania specjalistów (wiem, że muszę to jeszcze dopracować [mam na to pomysł). W tej chwili chciałem sprawdzić czy wszystkie wcześniej wpisane dane poprawnie się wyświetlają (void lista_calosc) i w tym momencie mam na razie problem. Funkcja wyświetla tylko dane pierwszej osoby. Prosiłbym o znalezienie błędu w kodzie, jestem świadom, że popełniam w pewnym momencie błąd w przekazywaniu tablicy dynamicznej do funkcji. Dziękuję i czekam na odpowiedzi , pomoc i wskazów. Pozdrawiam
Jestem świadom, że jest jeszcze bałagan w kodzie .

#include <iostream>
#include<iomanip>
#include<cstdlib>
#include <cstring>

using namespace std;

const int D_ID = 3;
const int D_IM = 10;
const int D_NAZ = 20;
const int D_OS = 40; // ??
const int D_SPEC = 20;
const int D_OPI = 255;


struct lekarz{
	char ID[D_ID];
	char imie[D_IM];
	char nazwisko[D_NAZ];
	char osrodek[D_OS];
	char specjalnosc[D_SPEC];
	int ilpacj;
};

struct opinie{
	char opinia[D_OPI];
	char imie_kom[D_IM];
	char naz_kom[D_NAZ];	
	
};

// --------------MENU---------------------
void menu(lekarz LK[] , int liczba_spec );
void menu_gl (int opcja);
void menu_szuk();
void menu_kasuj();

//-------------FUNKCJE GLOWNE------------

void dodaj_lekarza (lekarz LK[]);

// ------------LISTA---------------------

void lista_naglowek();
void lista_lekarz(lekarz LK[]);
void lista_calosc(lekarz LK[], const int liczba_spec);

//----------------------------------------


int main() {
	lekarz *LK;
	int liczba_spec;
	
	cout << "Podaj ilosc specjalistow (rezerwacja pamieci) : ";
	cin >> liczba_spec;
		
	LK = new lekarz[liczba_spec];
	
	menu(LK, liczba_spec);

	delete [] LK;

}

// ---------------------------------

//FUNKCJE ODPOWIADAJACE ZA MENU

void menu_gl(int opcja)
{
	switch(opcja)
	{
		case 1: {
			cout << endl;
			cout << "BAZA DANYCH SPECJALISTOW" << endl;
			cout << "------------------------" << endl;
			cout << "MENU GLOWNE :" << endl;
			cout << "------------------------" << endl;
			cout << "1 - Dodaj Lekarza" << endl;
			cout << "2 - Usun Lekarza" << endl;
			cout << "3 - Edytuj dane lekarza" << endl;
			cout << "4 - Wyszukaj lekarza" << endl;
			cout << "5 - Lista lekarzy" << endl;
			cout << "0 - Zakoncz prace" << endl;
			cout << ">>";
			break;
			}
		case 2: {
			cout << endl;
			cout << "MENU WYSZUKIWANIA : " << endl;
			cout << "------------------------" << endl;
			cout << "1 - Wyszukiwanie lekarza po nazwisku" << endl;
			cout << "2 - Wyszukiwanie lekarza po specjalizacji" << endl;
			cout << "3 - Wyszukiwanie po osrodku" << endl;
			cout << "4 - Wyszukiwanie specjalisty z najmniejsza kolejka" << endl;
			cout << "0 - Wyjdz do glownego menu" << endl;
			cout << ">>";
			break;
		}
		case 3: {
			cout << endl;
			cout << "MENU KASOWANIA : " << endl;
			cout << "------------------------" << endl;
			cout << "1 - Skasuj dane lekarza po nazwisku" << endl;
			cout << "2 - Skasuj dane lekarza po ID" << endl;
			cout << "0 - Wyjdz do glownego menu" << endl;
			cout << ">>";
			break;
		} 	
	}
}

void menu(lekarz LK[] , int liczba_spec )
{
	int opcja_menu;
	
	do{
		menu_gl(1);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: dodaj_lekarza(LK);
			break;
			case 2: menu_kasuj();
			break;
			//case 3: menu_edycja();
			//break;
			case 4: menu_szuk();
			break;
			case 5: lista_calosc(LK , liczba_spec);
			break;
		}
		
	}while(opcja_menu!=0);
}

void menu_szuk()
{
	int opcja_menu;
	do{
		menu_gl(2);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: ;
			break;
			case 2: ;
			break;
			case 3: ;
			break;
			case 4: ;
			break;
		}
	}while(opcja_menu !=0);
}

void menu_kasuj()
{
	int opcja_menu;
	do{
		menu_gl(3);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: ;
			break;
			case 2: ;
			break;
		}
	}while(opcja_menu !=0);
}

//-----------FUNKCJE GLOWNE---------------

void dodaj_lekarza (lekarz LK[])
{
	int n;
	cout << "Ilu chcesz dodac specjalistow ? (Podaj liczbe) : ";
	cin >> n;
	
	
	for(int i = 0 ; i < n ; i++)
	{
	
	cout << "ID : ";
	cin >> LK[i].ID;
	cout << "Imie : ";
	cin >> LK[i].imie;
	cout << "Nazwisko : ";
	cin >> LK[i].nazwisko;
	cout << "Osrodek : ";
	cin >> LK[i].osrodek;
	cout << "Specjalnosc : ";
	cin >> LK[i].specjalnosc;
	cout << "Ilosc pacjentow w kolejce : ";
	cin >> LK[i].ilpacj;
}
}

//---------------LISTA------------------------

void lista_naglowek()
{
	cout << endl;
	cout << "|ID |  IMIE   |  NAZWISKO  | OSRODEK |  SPECJALNOSC  | KOLEJKA | " << endl;
	cout << "_________________________________________________________________" << endl;
	
}

void lista_lekarz(lekarz LK[])
{
	cout << setw(10)  << LK->ID;
	cout << setw(15)  << LK->nazwisko;
	cout << setw(10)  << LK->osrodek;
	cout << setw(15)  << LK->specjalnosc;
	cout << setw(10)  << LK->ilpacj;
	cout << endl;
}

void lista_calosc( lekarz LK[] , const int liczba_spec)
{
	lista_naglowek();
	for ( int i = 0 ; i < liczba_spec ; i++)
	lista_lekarz(LK);
	cout << "________________________________________________________________" << endl;
	cout << "Ilosc lekarzy w bazie : " << liczba_spec << endl;
	cout << endl;
	
}

 
1
    for(int i = 0;i<liczba_spec;++i) lista_lekarz(LK+i);
0

Dziękuję to okazało się rozwiązaniem wyświetlania listy. Natomiast teraz stoję przed problem wyszukiwania w bazie danych ludzi po ich ID. Ta funkcja będzie mi potrzebna później w celu kasowania ludzi z bazy danych i wiele innych . Program kompiluje mi się, ale funkcja nigdy nie odnajduje mi wpisanych na wejściu ludzi po ID. Szukam gdzieś błędu i nie mogę się doszukać, konkretnie chodzi mi o funkcje szukaj_wg_ID1 i szukaj_wg_ID2 w ten sposób uczono mnie poszukiwania elementów o zadanym numerze ID, może znowu gdzieś się pogubiłem w przesyłaniu argumentów do funkcji ?
Oto kod:

#include <iostream>
#include<iomanip>
#include<cstdlib>
#include <cstring>

using namespace std;

const int D_ID = 3;
const int D_IM = 10;
const int D_NAZ = 20;
const int D_OS = 40; // ??
const int D_SPEC = 20;
const int D_OPI = 255;


struct lekarz{
	char ID[D_ID];
	char imie[D_IM];
	char nazwisko[D_NAZ];
	char osrodek[D_OS];
	char specjalnosc[D_SPEC];
	int ilpacj;
};

struct opinie{
	char opinia[D_OPI];
	char imie_kom[D_IM];
	char naz_kom[D_NAZ];	
	
};

// --------------MENU---------------------
void menu(lekarz LK[] , int liczba_spec );
void menu_gl (int opcja);
void menu_szuk(lekarz LK[], const int liczba_spec);
void menu_kasuj();

//-------------FUNKCJE DODAJ/USUN------------

void dodaj_lekarza (lekarz LK[], int &liczba_spec);
void kasuj_lekarza (lekarz LK[], int &liczba_spec);

//-------------EDYCJA DANYCH-----------------

//-------------WYSZUKIWANIE------------------

int szukaj_wg_ID1(lekarz LK[] , const int liczba_spec, char ID[]);
void szukaj_wg_ID2(lekarz LK[] , const int liczba_spec);

// ------------LISTA-------------------------

void lista_naglowek();
void lista_lekarz(lekarz LK[]);
void lista_calosc(lekarz LK[], const int liczba_spec);

//----------------------------------------


int main() {
	lekarz *LK;
	int liczba_spec, liczba_spec2;
	
	cout << "Podaj ilosc specjalistow (rezerwacja pamieci) : ";
	cin >> liczba_spec;
	liczba_spec2 = liczba_spec;
		
	LK = new lekarz[liczba_spec];
	
	menu(LK, liczba_spec);

	delete [] LK;

}

// ---------------------------------

//FUNKCJE ODPOWIADAJACE ZA MENU

void menu_gl(int opcja)
{
	switch(opcja)
	{
		case 1: {
			cout << endl;
			cout << "BAZA DANYCH SPECJALISTOW" << endl;
			cout << "------------------------" << endl;
			cout << "MENU GLOWNE :" << endl;
			cout << "------------------------" << endl;
			cout << "1 - Dodaj Lekarza" << endl;
			cout << "2 - Usun Lekarza" << endl;
			cout << "3 - Edytuj dane lekarza" << endl;
			cout << "4 - Wyszukaj lekarza" << endl;
			cout << "5 - Lista lekarzy" << endl;
			cout << "0 - Zakoncz prace" << endl;
			cout << ">>";
			break;
			}
		case 2: {
			cout << endl;
			cout << "MENU WYSZUKIWANIA : " << endl;
			cout << "------------------------" << endl;
			cout << "1 - Wyszukiwanie lekarza po nazwisku" << endl;
			cout << "2 - Wyszukiwanie lekarza po specjalizacji" << endl;
			cout << "3 - Wyszukiwanie po osrodku" << endl;
			cout << "4 - Wyszukiwanie specjalisty z najmniejsza kolejka" << endl;
			cout << "5 - Wyszukiwanie lekarza po ID" << endl;
			cout << "0 - Wyjdz do glownego menu" << endl;
			cout << ">>";
			break;
		}
		case 3: {
			cout << endl;
			cout << "MENU KASOWANIA : " << endl;
			cout << "------------------------" << endl;
			cout << "1 - Skasuj dane lekarza po ID" << endl;
			cout << "0 - Wyjdz do glownego menu" << endl;
			cout << ">>";
			break;
		} 	
	}
}

void menu(lekarz LK[] , int liczba_spec )
{
	int opcja_menu;
	
	do{
		menu_gl(1);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: dodaj_lekarza(LK , liczba_spec);
			break;
			case 2: menu_kasuj();
			break;
			//case 3: menu_edycja();
			//break;
			case 4: menu_szuk(LK , liczba_spec);
			break;
			case 5: lista_calosc(LK , liczba_spec);
			break;
		}
		
	}while(opcja_menu!=0);
}

void menu_szuk(lekarz LK[], const int liczba_spec)
{
	int opcja_menu;
	do{
		menu_gl(2);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: ;
			break;
			case 2: ;
			break;
			case 3: ;
			break;
			case 4: ;
			break;
			case 5: szukaj_wg_ID2(LK , liczba_spec);
			break;
		}
	}while(opcja_menu !=0);
}

void menu_kasuj()
{
	int opcja_menu;
	do{
		menu_gl(3);
		cin >> opcja_menu;
		switch(opcja_menu)
		{
			case 1: ;
			break;
			case 2: ;
			break;
		}
	}while(opcja_menu !=0);
}

//-----------FUNKCJE GLOWNE---------------

void dodaj_lekarza (lekarz LK[], int &liczba_spec)
{
	int n;
	cout << "Ilu chcesz dodac specjalistow ? (Podaj liczbe) : ";
	cin >> n;
	
	
	for(int i = 0 ; i < n ; i++)
	{
	
	cout << "ID : ";
	cin >> LK[i].ID;
	cout << "Imie : ";
	cin >> LK[i].imie;
	cout << "Nazwisko : ";
	cin >> LK[i].nazwisko;
	cout << "Osrodek (miasto) : ";
	cin >> LK[i].osrodek;
	cout << "Specjalnosc : ";
	cin >> LK[i].specjalnosc;
	cout << "Ilosc pacjentow w kolejce : ";
	cin >> LK[i].ilpacj;
}
}

//---------------WYSZUKIWANIE-----------------

int szukaj_wg_ID1(lekarz LK[] , const int liczba_spec, char ID[])
{
	for (int i = 0 ; i < liczba_spec ; i++)
		if(strcmp(LK[i].ID,ID) == 0 ) return(i);
		
	return(-1);
}

void szukaj_wg_ID2(lekarz LK[] , const int liczba_spec)
{
	char ID[D_ID];
	int ind;
	
	cout << "Podaj ID : ";
	cin >> ID;
	if((ind = szukaj_wg_ID1(LK , liczba_spec , ID)) != -1 )
	{
		lista_naglowek();
		lista_lekarz(LK+ind);
	}
	else
	{
		cout << "Nie ma osoby o podanym numerze ID " << ID << endl;
		system("pause");
	}
}


//---------------LISTA------------------------

void lista_naglowek()
{
	cout << endl;
	cout << "|ID |  IMIE   |  NAZWISKO  | OSRODEK |  SPECJALNOSC  | KOLEJKA | " << endl;
	cout << "_________________________________________________________________" << endl;
	
}

void lista_lekarz(lekarz LK[])
{
	cout << setw(10)  << LK->ID;
	cout << setw(15)  << LK->nazwisko;
	cout << setw(10)  << LK->osrodek;
	cout << setw(15)  << LK->specjalnosc;
	cout << setw(10)  << LK->ilpacj;
	cout << endl;
}

void lista_calosc( lekarz LK[] , const int liczba_spec)
{
	lista_naglowek();
	for ( int i = 0 ; i < liczba_spec ; i++)
	lista_lekarz(LK+i);
	cout << "________________________________________________________________" << endl;
	cout << "Ilosc lekarzy w bazie : " << liczba_spec << endl;
	cout << endl;
	
}

//------------------------------------------------------
 

Wydaje mi się, że to jakiś drobiazg tylko nie mogę go odnaleźć. Pozdrawiam

0

W dodaj_lekarza zapominasz zwiększyć liczba_spec

0

Nie do końca rozumiem, jeśli w pętli w funckji dodaj_lekarza dodam liczba_spec++ będę miał o 2 więcej osoby niż podałem na starcie. W dodatku to nie rozwiązuje problemu, wyszukiwanie po ID, które nie działa niestety dobrze i nie mogę w tej funkcji odnaleźć błędu : (

0

Żadnych sugestii ? Przepraszam za post pod postem.

0

Masz totalny bajzel z ilością wpisanych/szukanych/wyświetlanych rekordów - popraw ten bajzel.

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