Cześć wszystkim ;).
Mam do napisania bazę danych przechowująca dane o pracownikach i umożliwiającą min. sortowanie wg wybranych pól struktury z tym, że mają być 2 algorytmy sortowania do wyboru. Pod spodem mój program:
#include <iostream>
using namespace std;
struct T_dane_pracownika
{
short lp;
char imie[15];
char nazwisko[30];
char adres_zamieszkania[80];
char NIP[15];
char PESEL[15];
};
void WCZYTAJ(T_dane_pracownika *wsk, int ilosc)
{
for(int i=0; i<ilosc; i++)
{
cout << "Podaj dane " << i+1 << ". pracownika: " << endl;
wsk[i].lp=i+1;
cout << "Imie: "; cin >> wsk[i].imie; cout << endl;
cout << "Nazwisko: "; cin >> wsk[i].nazwisko; cout << endl;
cin.ignore();
cout << "Adres zamieszkania: "; cin.getline(wsk[i].adres_zamieszkania, 80); cout << endl;
cout << "NIP: "; cin >> wsk[i].NIP; cout << endl;
cout << "PESEL: "; cin >> wsk[i].PESEL; cout << endl;
}
}
void WYSWIELT_P(T_dane_pracownika *wsk, int numer) //funkcja wyswietlajaca dane wybranego pracownika
{
{
cout << "Dane pracownika nr " << numer << ": " << endl;
cout << "L.p.: " << wsk[numer-1].lp << endl;
cout << "Imie: " << wsk[numer-1].imie << endl;
cout << "nazwisko: " << wsk[numer-1].nazwisko << endl;
cout << "Adres zamieszkania: " << wsk[numer-1].adres_zamieszkania << endl;
cout << "NIP: " << wsk[numer-1].NIP << endl;
cout << "PESEL: " << wsk[numer-1].PESEL << endl;
}
}
void WYSWIELT_W(T_dane_pracownika *wsk, int ilosc) //funkcja wyswietlajaca dane wszystkich pracownikow
{
for(int i=0; i<ilosc; i++)
{
wsk[i].lp=i+1;
cout << "L.p.: " << wsk[i].lp << endl;
cout << "Dane pracownika nr " << i+1 << ": " << endl;
cout << "Imie: " << wsk[i].imie << endl;
cout << "nazwisko: " << wsk[i].nazwisko << endl;
cout << "Adres zamieszkania: " << wsk[i].adres_zamieszkania << endl;
cout << "NIP: " << wsk[i].NIP << endl;
cout << "PESEL: " << wsk[i].PESEL << endl;
}
}
//funkcje porownujace dla qsort
int wedlug_nazwisk( const void *wsk_1, const void *wsk_2)
{
struct T_dane_pracownika *osoba_1=(struct T_dane_pracownika*)wsk_1;
struct T_dane_pracownika *osoba_2=(struct T_dane_pracownika*)wsk_2;
return (strcmp(osoba_1->nazwisko, osoba_2->nazwisko));
}
int wedlug_imion( const void *wsk_1, const void *wsk_2)
{
struct T_dane_pracownika *osoba_1=(struct T_dane_pracownika*)wsk_1;
struct T_dane_pracownika *osoba_2=(struct T_dane_pracownika*)wsk_2;
return (strcmp(osoba_1->imie, osoba_2->imie));
}
int wedlug_NIP( const void *wsk_1, const void *wsk_2)
{
struct T_dane_pracownika *osoba_1=(struct T_dane_pracownika*)wsk_1;
struct T_dane_pracownika *osoba_2=(struct T_dane_pracownika*)wsk_2;
return (strcmp(osoba_1->NIP, osoba_2->NIP));
}
int wedlug_PESEL( const void *wsk_1, const void *wsk_2)
{
struct T_dane_pracownika *osoba_1=(struct T_dane_pracownika*)wsk_1;
struct T_dane_pracownika *osoba_2=(struct T_dane_pracownika*)wsk_2;
return (strcmp(osoba_1->PESEL, osoba_2->PESEL));
}
//funkcje dla sortowania babelkowego
void B_wedlug_imienia(T_dane_pracownika *wsk, int ilosc)
{
for(int i=0; i<ilosc; i++)
{
if (wsk[i].imie[0] > wsk[i+1].imie[0])
{
cout << "JESTESMYYY TUUUU!!!";
char *temp_imie=0, *temp_nazwisko=0, *temp_adres_zamieszkania=0, *temp_NIP=0, *temp_PESEL=0;
//dalej nie wiem, jak przechowywac tymczasowo zawartosci pol struktur, jak to przypisywac itd
}
}
}
int main()
{
int rozmiar;
do {
cout << "Podaj liczbe pracownikow (maks. 100): ";
cin >> rozmiar;
}
while(rozmiar>100);
T_dane_pracownika *wbaza = new T_dane_pracownika[rozmiar];
WCZYTAJ(wbaza, rozmiar);
cout << "Czy chcesz dokonac sortowania? t/n";
char pytanie1;
cin >> pytanie1;
if(pytanie1=='t') //sortowanie
{
cout << "Wedlug czego chcesz sortowac? 1 - imie, 2 - nazwisko, 3 - PESEL, 4 - NIP";
int pytanie2;
cin >> pytanie2;
if(pytanie2==1) //sortowanie wg imienia
{
cout << "Wybierz algorytm sortowania: 1 - szybkie (qsort), 2 - babelkowe: ";
int rodzaj_sort;
cin >> rodzaj_sort;
if(rodzaj_sort==1) //qsort wg imienia
{
qsort(wbaza, rozmiar, sizeof(struct T_dane_pracownika), wedlug_imion);
}
if(rodzaj_sort==2) //babelkowe wg imienia
{
//do zrobienia
}
}
if(pytanie2==2) //sortowanie wg nazwiska
{
cout << "Wybierz algorytm sortowania: 1 - szybkie (qsort), 2 - babelkowe: ";
int rodzaj_sort;
cin >> rodzaj_sort;
if(rodzaj_sort==1) //qsort wg nazwiska
{
qsort(wbaza, rozmiar, sizeof(struct T_dane_pracownika), wedlug_nazwisk);
}
if(rodzaj_sort==2) //babelkowe wg nazwiska
{
//do zrobienia
}
}
if(pytanie2==3) //sortowanie wg PESELU
{
cout << "Wybierz algorytm sortowania: 1 - szybkie (qsort), 2 - babelkowe: ";
int rodzaj_sort;
cin >> rodzaj_sort;
if(rodzaj_sort==1) //qsort wg PESELu
{
qsort(wbaza, rozmiar, sizeof(struct T_dane_pracownika), wedlug_PESEL);
}
if(rodzaj_sort==2) //babelkowe wg PESELu
{
//do zrobienia
}
}
if(pytanie2==4) //sortowanie wg NIPU
{
cout << "Wybierz algorytm sortowania: 1 - szybkie (qsort), 2 - babelkowe: ";
int rodzaj_sort;
cin >> rodzaj_sort;
if(rodzaj_sort==1) //qsort wg NIPU
{
qsort(wbaza, rozmiar, sizeof(struct T_dane_pracownika), wedlug_NIP);
}
if(rodzaj_sort==2) //babelkowe wg NIPU
{
//do zrobienia
}
}
}
if(pytanie1=='t') {cout << "Sortowanie zakonczone. " << endl << endl;}
cout << "Podaj nr pracownika, ktorego dane chcesz wyswietlic (0 - wyswietlenie wszystkich): ";
int nr;
cin >> nr;
cout << endl;
if(nr!=0) WYSWIELT_P(wbaza, nr);
if(nr==0) WYSWIELT_W(wbaza, rozmiar);
cin.ignore();
cin.get();
}
Szybkie sortowanie (qsort) już sobie ogarnąłem i działa (możecie sprawdzić), mam natomiast problem z napisaniem sortowania bąbelkowego. Wybrałem ten algorytm, bo jest prosty, zresztą to bez większej różnicy. Ma sortować tak, jak qsort (czyli wg imienia, nazwiska, NIPu lub PESELU). Widzicie w programie funkcję B_wedlug_imienia - próbowałem tam zacząć pisać to sortowanie bąbelkowe, jednak nie wiem, jak zapamiętać w tymczasowych zmiennych wskaźnikowych (o ile to w ogóle prawidłowy typ) wartości poszczególnych pól struktur, a potem podstawić ich do innych pól struktury.
Jeżeli ktoś jest w stanie mi pomóc, będę wdzięczny ;).