[ Pobierz całość w formacie PDF ]
.Przy wywo³aniudvd_disk_return informacja o wypo¿yczeniu jest usuwana.int dvd_reserve_title(const char *date, const int title_id, const int member_id);int dvd_reserve_title_cancel(const int member_id);Druga rezerwacja dokonana przez klienta spowoduje anulowanie jego poprzedniejrezerwacji.Dane na temat ostatniego ¿¹dania rezerwacji dla danego klienta mog¹ byæuzyskane za pomoc¹ wywo³ania dvd_reserve_title_query_by_member:int dvd_reserve_title_query_by_member(const int member_id, int *title_id);Dodatkowe funkcje, które nie wystêpuj¹ w przyk³adowej aplikacji, lecz nadal s¹przedmiotem naszego zainteresowania, s¹ nastêpuj¹ce:int dvd_reserve_title_query_by_titledate(const int title_id, const char *date, int *member_ids[])Funkcja ta zwraca listê cz³onków, którzy zarezerwowali podany tytu³ na danydzieñ.Data o wartoœci NULL oznacza dowoln¹ datê:int dvd_overdue_disks(const char *date1, const char *date2, int *disk_ids[], int *count)Powy¿sza funkcja przegl¹da tabelê wypo¿yczeñ szukaj¹c p³yt, dla których datawypo¿yczenia zawiera siê miêdzy date1 a date2.Wartoœci NULL dla tych datoznaczaj¹ odpowiednio pocz¹tek odliczania czasu (czyli 1 stycznia 1970 r.) idzieñ jutrzejszy.Przyk³adowa aplikacjaPrzy aplikacji podzielonej na kilka wspó³dzia³aj¹cych ze sob¹ sk³adników,takiej jak nasza, bardzo przydaje siê dodatkowe utworzenie aplikacjiprzyk³adowej (ang.reference implementation) dla okreœlonego interfejsu.Wnaszym przypadku zosta³ utworzony taki prawie kompletny, chocia¿ nieefektywnyprodukt, który uniezale¿ni twórców interfejsu graficznego od bazy danych.Bêd¹oni wówczas mogli utworzyæ dzia³aj¹cy program i uzyskiwaæ np.sensowne wynikiprzeszukiwania itp.Dla obs³ugi wypo¿yczalni DVD utworzyliœmy aplikacjê wykorzystuj¹c¹ wszystkiezdefiniowane API wspó³pracuj¹ce z prostym plikiem tekstowym (ang.flat file), anie z pe³n¹ baz¹ danych.Kod programu nie jest skomplikowany, ale ca³kowiciewystarcza on do sprawdzenia, czy zdefiniowany zestaw API pozwoli utworzyækoñcow¹, w pe³ni funkcjonaln¹ aplikacjê.Kod ten nie jest te¿ zoptymalizowany iprawdopodobnie bêdzie dzia³a³ zbyt wolno przy wiêkszej liczbie p³yt DVD.Kodmusi byæ poprawny, a nie „szybki”, aby mo¿na by³o go sprawdzaæ i œledziæ jegodzia³anie.Praca z takim w³aœnie przyk³adowym kodem jest znacznie bardziejefektywna i umo¿liwia tworzenie interfejsu graficznego — w przeciwieñstwie dopracy z kodem roboczym, gdy w³aœciwa baza danych nie jest jeszcze zbudowana.Takie podejœcie umo¿liwia równie¿ porównanie bazy danych z dzia³aj¹c¹ wersj¹robocz¹.U¿ycie aplikacji przyk³adowej mo¿e wprowadzaæ pewne ograniczenia zwi¹zane np.zrozmiarem bazy danych.W naszym przypadku we wszelkich operacjach wyszukiwaniauwzglêdniana jest wielkoœæ liter, a wiêc zalecamy wymuszon¹ zmianê w danychwejœciowych wszystkich liter na wielkie i dok³adne podawanie wyszukiwanychnapisów.Opracowaliœmy tak¿e program testuj¹cy uruchamiany z wiersza poleceñ, którys³u¿y do sprawdzenia pliku tekstowego przechowuj¹cego dane.Program ten omówimyszczegó³owo w rozdziale 11.Materia³y Ÿród³owePolecamy lekturê podanych ni¿ej pozycji zwi¹zanych programowaniem iprojektowaniem systemów:Rapid Development, Steve McConnell, Microsoft Press (ISBN 1-55615-900-5)eXtreme Programming Explained, Kent Beck, Addison Wesley (ISBN 0-201-61641-6)Clouds to Code, Jesse Liberty, Wrox Press (ISBN 1-861000952)The Cathedral and The Bazaar, Eric S.Raymond, O’Reilly & Associates (ISBN1-56592-724-9) http://www.tuxedo.org/~esr/writings/cathedral-bazaarInstant UML, Pierre-Alain Muller, Wrox Press (ISBN 1-861000871)Object-Oriented Systems Analysis and Design, Bennet, McRobb & Farmer, McGrawHill (ISBN 0-07-709497-2)PodsumowanieW tym rozdziale krótko omówiliœmy pierwsze kroki na drodze do utworzeniaaplikacji w sposób strukturalny.Korzystaj¹c z przyk³adu wypo¿yczalni p³yt DVD,o którym bardzo du¿o bêdziemy pisaæ w dalszych czêœciach ksi¹¿ki, pokazaliœmysposób definiowania specyfikacji i projektowania szkieletu u¿ytecznegosystemu.Rozpatrzyliœmy ró¿nego rodzaju wymagania i zwi¹zane z nimi problemy.Pokazaliœmy te¿ iteracyjny model produkcji planowanego kodu.Ustaliliœmy, ¿e struktura systemu bêdzie zawieraæ interfejs u¿ytkownikaoddzielony od g³Ã³wnej czêœci aplikacji.Na zakoñczenie zdefiniowaliœmyszczegó³y interfejsu ³¹cz¹cego te dwa sk³adniki systemu.Od tego momentu mo¿emy ju¿ przyst¹piæ do tworzenia kodu
[ Pobierz całość w formacie PDF ]