Zadanie zaliczeniowe z laboratorium Pascala i C. ZSI1. 00/01

Termin opublikowania: tydzien 8.01-12.01
Termin oddania: tydzien 22.01-26.01

Baza danych z indeksami (4 pkt)

Napisz program umozliwiajacy tworzenie bazy danych o osobach i wyszukiwanie
w niej informacji.
Dla kazdej osoby w bazie beda przechowywane nastepujace informacje:

- imie (napis max. 15 znakow)
- nazwisko (napis max. 40 znakow)
- plec (wartosc typu wyliczeniowego ze stalymi "kobieta" i "mezczyzna")
- rok urodzenia (liczba calkowita)

Program powinien umozliwiac wykonywanie nastepujacych operacji:

1. Otworzenie bazy danych o podanej nazwie lub stworzenie nowej (poczatkowo
   pustej) bazy.
2. Dodanie do bazy danych nowego rekordu
3. Wyszukanie wszystkich osob, ktorych nazwiska rozpoczynaja sie od
   wskazanego napisu (np. dla 'Kow' powinnismy odnalezc osoby o nazwiskach
   'Kowalski' i 'Kowalik').
4. Wyszukanie wszystkich osob urodzonych w podanym roku.
5. Zamkniecie bazy danych i zakonczenie pracy.

Baza danych powinna byc przechowywana w postaci pliku (nazwa z rozszerzeniem
.DAT) rekordow opisujacych poszczegolne osoby.

Dodatkowo, by usprawnic wyszukiwanie rekordow, nalezy utworzyc tzw. indeksy,
ktore beda przechowywane w plikach o nazwie takiej jak nazwa bazy danych i
rozszerzeniu .IXN (w przypadku indeksu ulatwiajacego wyszukiwanie wg
nazwiska) lub .IXU (w przypadku indeksu ulatwiajacego wyszukiwanie wg daty
urodzenia).

Indeks nazwisk bedzie plikiem numerow rekordow uporzadkowanym wg nazwisk
(leksykograficznie), indeks dat urodzenia bedzie przechowywal numery
rekordow w kolejnosci wyznaczonej przez daty urodzenia. Np. dla bazy
zawierajacej dane o nastepujacych osobach:

Michal Zalewski, mezczyzna, 1963
Jan Kowalski, mezczyzna, 1974
Stanislaw Nowak, mezczyzna, 1973
Piotr Nowak, nezczyzna, 1974

indeks nazwisk powinien miec postac: 1, 2, 3, 0 lub 1, 3, 2, 0
a indeks dat urodzenia: 0, 2, 1, 3 lub 0, 2, 3, 1

Kiedy uzytkownik poprosi o odnalezienie osob urodzonych w danym roku,
wyszukujemy w indeksie numery odpowiednich rekordow stosujac wyszukiwanie
binarne a nastepnie wypisujemy zawartosc tych rekordow. Analogicznie
postepujemy w przypadku pytania o nazwiska.

Operacja dodania rekordu do bazy danych wymaga oczywiscie takze modyfikacji
indeksow. Rekord jest dopisywany na koniec a jego numer we wlasciwe miejsca
wszystkich (obu) plikow indeksowych. Zakladamy, ze operacja ta bedzie
wykonywana bardzo rzadko, wiec jej nieefektywnosc (w przypadku
pesymistycznym - gdy numer indeksu mamy wstawic na poczatek - musimy
przepisac caly indeks) nie ma dla nas znaczenia.