#include <iostream>
#include <string>
using namespace std;
/*
* Struktura obiektu
*/
struct TOsoba {
int id;
string imie;
string nazwisko;
};
/*
* Tworzenie nowego obiektu w pamiecu.
* zwraca wskaźnik do nowego elementu
*/
TOsoba * TworzOsobe(int id, string imie, string nazwisko) {
TOsoba *nowa_osoba = new TOsoba();
nowa_osoba->id = id;
nowa_osoba->imie = imie;
nowa_osoba->nazwisko = nazwisko;
return nowa_osoba;
}
/*
* Tworzy dynamiczną tablicę o wielkości "i"
*/
void TworzTablice(int i, TOsoba **&tab) {
tab = new TOsoba*[i];
}
/*
* Uwuwa całą tablicę osób. Pozostaje tylko pusty wskaźnik który można wypełnić nową tablicą
*/
void UsunTabliceOsob(TOsoba **&tab) {
delete[] tab;
}
/*
* Dodanie nowego elementu do zadaniej tablicy dynamicznej.
* Funkcja potrzebuje wskaźnik do obiektu w pamięciu typu TOsoba
*/
void DodajElementDoTablicy(TOsoba *obiekt, TOsoba **&tab) {
tab[obiekt->id] = obiekt;
}
/*
* Funckja wyświetlenia osoby o podanym id w tabeli.
* ID w tabeli musi być równe ID w tablicy dynaminczej! <-- założenie aplikacji!
*/
void WyswietlOsobe(int i, TOsoba **&tab) {
cout << "ID = " << tab[i]->id << " i:" << tab[i]->imie << " n:" << tab[i]->nazwisko << endl;
}
/*
* Funckje wyszukiwania w bazie po imieniu albo nazwisku
* zwaraca -1 jeżeli brak wyniku
*/
int ZnajdzOsobeBoImieniu(string imie, TOsoba **&tab, int wielkosc_tab) {
for (int i = 0; i < wielkosc_tab; i++) {
if (tab[i]->imie == imie) {
return i;
}
}
return -1;
}
int ZnajdzOsobePoNazwisku(string nazwisko, TOsoba **&tab, int wielkosc_tab) {
for (int i = 0; i < wielkosc_tab; i++) {
if (tab[i]->nazwisko == nazwisko) {
return i;
}
}
return -1;
}
/*
* Wykonanie aplikacji
*/
int main() {
// definicja bazy
TOsoba **baza;
// jak wielka baza
int wielksc_bazy = 5;
// stworzenie bazy
TworzTablice(wielksc_bazy, baza);
// dodanie elementow
DodajElementDoTablicy(TworzOsobe(0, "Andrzej", "Kowalski"), baza);
DodajElementDoTablicy(TworzOsobe(1, "Janusz", "Pacult"), baza);
DodajElementDoTablicy(TworzOsobe(2, "Kartofel", "Kowalska"), baza);
DodajElementDoTablicy(TworzOsobe(3, "Marchewka", "Mariacki"), baza);
DodajElementDoTablicy(TworzOsobe(4, "Sraczka", "Jagoda"), baza);
// wyswietlenie wszystkich wpisow z bazy
for (int i = 0; i < wielksc_bazy; i++) {
WyswietlOsobe(i, baza);
}
// operacje wyszukiwania
cout << endl << "Wyszukaj po imieniu Kartofel:" << endl;
int pozycja_w_db = ZnajdzOsobeBoImieniu("Kartofel", baza, wielksc_bazy);
if (pozycja_w_db >= 0) {
cout << "Znaleziono:";
WyswietlOsobe(pozycja_w_db, baza);
} else {
cout << "Nie znaleziono :/" << endl;
}
cout << endl << "Wyszukaj po imieniu Stanislaw:" << endl;
pozycja_w_db = ZnajdzOsobeBoImieniu("Stanislaw", baza, wielksc_bazy);
if (pozycja_w_db >= 0) {
cout << "Znaleziono:";
WyswietlOsobe(pozycja_w_db, baza);
} else {
cout << "Nie znaleziono :/" << endl;
}
cout << endl << "Wyszukaj po nazwisku Jagoda:" << endl;
pozycja_w_db = ZnajdzOsobePoNazwisku("Jagoda", baza, wielksc_bazy);
if (pozycja_w_db >= 0) {
cout << "Znaleziono:";
WyswietlOsobe(pozycja_w_db, baza);
} else {
cout << "Nie znaleziono :/" << endl;
}
cout << endl;
// przyklad usuniecia bazy
UsunTabliceOsob(baza);
cout << "nowe def." << endl;
// ponowne utworzenie bazy na starym wskaźniku w pamięci
wielksc_bazy = 2;
TworzTablice(wielksc_bazy, baza);
// dodanie przykladowych danych do bazy
for (int i = 0; i < wielksc_bazy; i++) {
DodajElementDoTablicy(TworzOsobe(i, "Andrzej", "Kowalski0"), baza);
}
// wyświetlenie przykładowych danych
for (int i = 0; i < wielksc_bazy; i++) {
WyswietlOsobe(i, baza);
}
return 0;
}
Comments