Baza terra, konsola, pascal
Jest to program konsolowy który został napisany na zaliczenie
Laboratorium Programowania Komputerów. Program napisany w pascalu, z obsługą
listy dwukierunkowej zawierającej różne struktury danych.
Poniżej przykładowe screeny podczas działania programu. W
załączniku również specyfikacja programu z dokładnym opisem każdej
procedury.
1.Temat
„Baza
danych przechowująca dane o zwierzętach terrariowych”
2.Analiza,
projektowanie
Baza
danych powinna przechowywać dane różnego typu zdefiniowane na
rekordach. Każdy rekord powinien przechowywać własne specyficzne
dane. Całość powinna być zapisywana na liście i do pliku,
najlepiej do jednego. Tu pojawia się problem -jak zapisać rekordy
różnego typu, tak aby poprawnie zostały odczytane i
zinterpretowane przez program. Dobrym pomysłem okazało się
przyporządkowanie każdemu typowi dodatkowej zmiennej
-identyfikatora. Identyfikator określa jakiego typu jest dany
rekord, co okazuje się bardzo pomocne przy odczytywaniu z listy i
pliku, ponieważ w jednej liście można przechowywać rekordy kilku
typów. Zamiast pisania procedury sortowania, zmodyfikowana została
procedura wyświetlająca elementy listy, teraz to użytkownik
decyduje co chce zobaczyć, może zobaczyć zarówno wszystkie
elementy listy, jak i elementy jednego typu. W trybie edycji
użytkownik może przemieszczać się między kolejnymi elementami
listy mając możliwość edytowania lub usuwania elementów. Ogólnie
program ma wyjątek którego nie obsługuje:
-przy
zmianach w kodzie źródłowym i ponownej kompilacji, dane z pliku
starszej wersji programu nie mogą zostać odczytane, co powoduje
błąd i uniemożliwia uruchomienie programu. Należy wtedy usunąć
ręcznie plik 'dane'.
3.Specyfikacja
zewnętrzna
3.1
Obsługa programu i format danych wejściowych:
Użytkownik
przy dodawaniu nowego wpisu do bazy danych wpisuje dane typu
łańcuchowego.
Przy
poruszaniu się po menu użytkownik wprowadza dane typu znakowego
Zwykle
są to:
1-wywołaj
akcje 1,
2-wywołaj
akcje 2,
...
6-wywołaj
akcje 6,
q
-wyjście z programu(dostępne jest tylko z menu głównego)
z
-cofnięcie się do menu głównego(dostępne jest z podmenu)
Inne
klawisze niż opisane, naciśnięte w podmenu działają jak
cofnięcie się do menu głównego lub jak wywołanie bieżącej
procedury
Dodatkowo
przy dodawaniu danych do bazy użytkownik może zostać poproszony o
wybranie jakiejś opcji, wtedy warto pamiętać, że wybranie innego
znaku niż opisany w komunikacie powoduje takie samo działanie jak
ostatnia opcja w komunikacie(czyli jest to zwykle przypisanie
wartości 'nieokreślono')
3.2
Komunikaty
Menu
i podmenu:
'[1]-Dodaj,
[2]-Pokaz wszystko [3]-Pokaz wybrane [4]-tryb edycji [q]-Wyjscie'
'Co
dodac? [1]-Pajak, [2]-Gad, [3]-Plaz, [4]-Owad [q]-wyjscie'
'Co
pokazac? [1]-Pajak, [2]-Gad, [3]-Plaz, [4]-Owad [q]-wyjcie'
'[1]-Poprzedni
[2]-Nastepny [3]-Edycja [4]-Usun [z]-cofnij'
'Co
chcesz zmienic?'
'[1]-Nazwa
[2]-Gatunek [3]-Typ [4]-Plec [5]-Wielkosc [6]-Wylinka [z]-menu'
'[1]-Nazwa
[2]-Gatunek [3]-Plec [4]-Rodzaj [5]-Wielkosc [6]-Wiek [z]-menu'
'[1]-Nazwa
[2]-Plec [3]-Wielkosc [4]-Wiek [z]-menu'
'[1]-Nazwa
[2]-Wielkosc [3]-Ilosc [z]-menu'
'Wiecej
[ENTER]'
'Nacisnij
[Enter] aby kontynuowac'
'Koniec
programu, dziekuje za uzycie! [Enter]'
'[Edytuj
pajaka]'
'[Edytuj
gada]'
'[Edytuj
plaza]'
'[Edytuj
owada]'
Dodawanie
danych:
'Podaj
nazwe: '
'Podaj
gatunek: '
'Podaj
typ([1]-podziemny, [2]-naziemny, [3]-nadrzewny, [4]-inny): '
'Podaj
plec([1]-samiec, [2]-samica, [3]-nieokreslono): '
'Podaj
wielkosc: '
'Podaj
wylinke: '
'Podaj
ilosc: '
'Podaj
wiek: '
'Podaj
rodzaj: '
4.Specyfikacja
wewnętrzna
4.1
Typy zdefiniowane
- NazwaZmiennepajakid,typ,plec :byte;nazwa,gatunek :string[30];wielkosc,wylinka :string[8];poprz,nast :pointergadid,plec :byte;nazwa,gatunek,rodzaj :string[30];wielkosc,wiek :string[8];poprz,nast :pointerplazid,plec :byte;nazwa:string[30];wielkosc,wiek :string[8];poprz,nast :pointerowadid :byte;nazwa :string[30];wielkosc,ilosc :string[8];poprz,nast :pointeradr_pajak^pajakadr_gad^gadadr_plaz^plazadr_owad^owad
4.2
Zmienne i stałe
Stałe:
- StałaWartośćPAJAK_ID1GAD_ID2PLAZ_ID3OWAD_ID4SAMIEC'samiec'SAMICA'samica'NIEOKRESLONA'nieokreslono'PODZIEMNY'podziemny'NAZIEMNY'naziemny'NADRZEWNY'nadrzewny'INNY'nieokreslony'
Zmienne:
- ZmiennaTypOpismenucharZmienna do obsługi menu programu, jest pobierana dopóki użytkownik nie wybierze znaku 'q'glowapointerZmienna przechowująca pierwszy element listyogonpointerZmienna przechowująca ostatni element listypompointerpomocniczapom1pointerpomocniczapom2pointerpomocniczap_pajadr_pajakZmienna wskaźnikowa typu pająkpom_padr_pajakPomocnicza zmienna wskaźnikowa typu pająkp_gadadr_gadZmienna wskaźnikowa typu gadpom_gadr_gadPomocnicza zmienna wskaźnikowa typu gadp_plaadr_plazZmienna wskaźnikowa typu plazpom_pladr_plazPomocnicza zmienna wskaźnikowa typu plazp_owaadr_owadZmienna wskaźnikowa typu owadpom_owadr_owadPomocnicza zmienna wskaźnikowa typu owadglowa_idbyteZmienna posiadająca wartość identyfikatora pierwszego elementu listyogon_idbyteZmienna posiadająca wartość identyfikatora ostatniego elementu listynast_idbyteZmienna wskazująca identyfikator następnego rekordupom_idbytePomocnicza identyfikatoraidbytePomocnicza identyfikatoraid1bytePomocnicza identyfikatora-przechowuje zwykle identyfikator poprzedniego elementuid2bytePomocnicza identyfikatora-przechowuje zwykle identyfikator następnego elementuiintegerZmienna licząca ogólną ilość elementów listylicznikintegerZmienna licząca ilość elementów listy, gdy będzie równa 4,zostanie wyzerowana.licz_pajakiintegerZmienna licząca ilość następujących po sobie pająków na liścielicz_gadyintegerZmienna licząca ilość następujących po sobie gadów na liścielicz_plazyintegerZmienna licząca ilość następujących po sobie płazów na liścielicz_owadyintegerZmienna licząca ilość następujących po sobie owadów na liścieplikfileZmienna plikowa
4.3
Funkcje i procedury
Procedury:
- dopisz_poprzedni_adres(wsk :pointer; identyfikator :byte);Funkcja dopisuje adres nowego elementu do zmiennej nast elementu poprzedniego. Parametr wsk (np. p_paj, p_gad) jest to element dodawany do listy, a identyfikator wskazuje kierunek listy(koniec). W przypadku listy jednokierunkowej, gdy chcemy dodać element do końca listy, należy przypisać parametrowi identyfikator wartość glowa_id
- dodaj_gada(pobierz :boolean; tryb :byte);Dla tryb=0 dodaje typ gad i rezerwuje mu pamięć i zapisuje w liście. Parametr pobierz decyduje o tym czy mają być pobierane dane od użytkownika. Jeżeli ustawi się jako false – funkcja jest przydatna przy tworzeniu listy jeśli jej elementy są zczytywane z pliku. Jeżeli ustawi się pobierz jako true – to dane są pobierane od użytkownika(np nazwa, itp. Dla parametrów tryb=1 i pobierz=false pobierana jest tylko nazwa, dla tryb=2 i pobierz=false pobierany jest tylko gatunek itd.
- dodaj_pajaka(pobierz :boolean; tryb :byte);Dla tryb=0 dodaje typ pajak, rezerwuje mu pamięć i zapisuje w liście. Parametry działają tak samo jak w procedurze dodaj_gada;
- dodaj_owada(pobierz :boolean; tryb :byte);Dla tryb=0 dodaje typ owad, rezerwuje mu pamięć i zapisuje w liście. Parametry działają tak samo jak w procedurze dodaj_gada;
- dodaj_plaza(pobierz :boolean; tryb :byte);Dla tryb=0 dodaje typ plaz, rezerwuje mu pamięć i zapisuje w liście. Parametry działają tak samo jak w procedurze dodaj_gada;
- rozpoznaj(co,tryb :byte);Rozpoznaje pleć lub typ zwierzęcia w zależności od trybu jaki zostanie określony parametrem tryb. Dla parametru tryb = 1 procedura rozpoznaje plec, dla parametru tryb = 2, procedura rozpoznaje typ. Za parametr co należy wpisać zmienną która ma być rozpoznana. Przykładowe użycie. rozpoznaj(p_gad^.plec,1);
- pokaz_pajaka;Wyświetla informacje na temat pająka.
- pokaz_gada;Wyświetla informacje na temat gada.
- pokaz_plaza;Wyświetla informacje na temat plaza.
- pokaz_owada;Wyświetla informacje na temat owada.
- pokaz(co :byte);Procedura pokazująca elementy zapisane w liście. Parametr co określa tylko co ma być wyświetlane. Dla co = 0 pokazywane są wszystkie elementy listy, następnie dla wartości równych stałym: PAJAK_ID – same elementy typu pajak, GAD_ID -same elementy typu gad, OWAD_ID -same elementy typu owad, PLAZ_ID -same elementy typu plaz . Dodatkowo zawarty jest tu licznik który ogranicza ilość wyświetlanych elementów.
- zapisz_do_pliku;Procedura zapisująca do pliku elementy listy w niezmienionej kolejności. Dodatkowo zapisywane są glowa_id i każdy identyfikator następnego elementu listy.
- wczytaj_z_pliku;Procedura wczytująca z pliku i dodająca elementy różnych typów zapisanych w pliku do listy, w niezmienionej kolejności.
- wyczysc;Procedura zwalniająca pamięć, uruchamiana jest przy kończeniu pracy z programem.
- edytuj_pajaka;Procedura pozwalająca na edycję elementu listy gdy jest typu pająk
- edytuj_gada;Procedura pozwalająca na edycję elementu listy gdy jest typu gad
- edytuj_plaza;Procedura pozwalająca na edycję elementu listy gdy jest typu plaz
- edytuj_owada;Procedura pozwalająca na edycję elementu listy gdy jest typu owad
- dopisz(identyfikator, tryb :byte; wsk1,wsk2 :pointer);Procedura pozwalająca na dopisanie według zmiennej identyfikator i tryb=1 na przypisanie następnemu elementowi o identyfikatorze identyfikator i o adresie wsk1, wartość wsk1^.nast:=wsk2. Dla tryb=2 procedura przypisuje elementowi o identyfikatorze identyfikator i o adresie wsk2 wartość wsk1^.poprz:=wsk1
- edytor(co:byte);Procedura pozwala przeglądać pojedynczo elementy listy względem parametru co. Jeżeli parametr co=0 procedura pozwala na przejrzenie elementów rożnego typu. Dla co=PAJAK_ID/GAD_ID/PLAZ_ID/OWAD_ID można poruszać się tylko po wyznaczonych elementach określonych parametrem co. Dodatkowo można przy wyświetlonym elemencie używać opcji -usuń lub edytuj.Usuń -usuwa wybrany przez użytkownika obecny element, przypisuje za pomocą procedury dopisz łączy sąsiednie elementy z listą. Opcja edytuj pozwala na wprowadzanie zmian w zapisanych na liście elementach.
Brak komentarzy:
Prześlij komentarz