niedziela, 2 czerwca 2013

Baza terra, konsola, pascal

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
Nazwa
Zmienne
pajak
id,typ,plec :byte;
nazwa,gatunek :string[30];
wielkosc,wylinka :string[8];
poprz,nast :pointer
gad
id,plec :byte;
nazwa,gatunek,rodzaj :string[30];
wielkosc,wiek :string[8];
poprz,nast :pointer
plaz
id,plec :byte;
nazwa:string[30];
wielkosc,wiek :string[8];
poprz,nast :pointer
owad
id :byte;
nazwa :string[30];
wielkosc,ilosc :string[8];
poprz,nast :pointer
adr_pajak
^pajak
adr_gad
^gad
adr_plaz
^plaz
adr_owad
^owad


4.2 Zmienne i stałe
Stałe:
Stała
Wartość
PAJAK_ID
1
GAD_ID
2
PLAZ_ID
3
OWAD_ID
4
SAMIEC
'samiec'
SAMICA
'samica'
NIEOKRESLONA
'nieokreslono'
PODZIEMNY
'podziemny'
NAZIEMNY
'naziemny'
NADRZEWNY
'nadrzewny'
INNY
'nieokreslony'
Zmienne:

Zmienna
Typ
Opis
menu
char
Zmienna do obsługi menu programu, jest pobierana dopóki użytkownik nie wybierze znaku 'q'
glowa
pointer
Zmienna przechowująca pierwszy element listy
ogon
pointer
Zmienna przechowująca ostatni element listy
pom
pointer
pomocnicza
pom1
pointer
pomocnicza
pom2
pointer
pomocnicza
p_paj
adr_pajak
Zmienna wskaźnikowa typu pająk
pom_p
adr_pajak
Pomocnicza zmienna wskaźnikowa typu pająk
p_gad
adr_gad
Zmienna wskaźnikowa typu gad
pom_g
adr_gad
Pomocnicza zmienna wskaźnikowa typu gad
p_pla
adr_plaz
Zmienna wskaźnikowa typu plaz
pom_pl
adr_plaz
Pomocnicza zmienna wskaźnikowa typu plaz
p_owa
adr_owad
Zmienna wskaźnikowa typu owad
pom_ow
adr_owad
Pomocnicza zmienna wskaźnikowa typu owad
glowa_id
byte
Zmienna posiadająca wartość identyfikatora pierwszego elementu listy
ogon_id
byte
Zmienna posiadająca wartość identyfikatora ostatniego elementu listy
nast_id
byte
Zmienna wskazująca identyfikator następnego rekordu
pom_id
byte
Pomocnicza identyfikatora
id
byte
Pomocnicza identyfikatora
id1
byte
Pomocnicza identyfikatora-przechowuje zwykle identyfikator poprzedniego elementu
id2
byte
Pomocnicza identyfikatora-przechowuje zwykle identyfikator następnego elementu
i
integer
Zmienna licząca ogólną ilość elementów listy
licznik
integer
Zmienna licząca ilość elementów listy, gdy będzie równa 4,zostanie wyzerowana.
licz_pajaki
integer
Zmienna licząca ilość następujących po sobie pająków na liście
licz_gady
integer
Zmienna licząca ilość następujących po sobie gadów na liście
licz_plazy
integer
Zmienna licząca ilość następujących po sobie płazów na liście
licz_owady
integer
Zmienna licząca ilość następujących po sobie owadów na liście
plik
file
Zmienna 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