Rezervační systém
Rezervační systém pro autobusy

Obsah

Programování v C++, zimní semestr 2013/2014 - zápočtový program

Petr Stefan

Zadání

Vytvoření jednoduchého systému pro rezervace sedadel v autobusech. Sestává z řešení tří okruhů:

Systém by měl umožňovat přidávat a rušit autobusové spoje, vyhledávat autobusy podle trasy, získávat informace o obsazených sedadlech, vystavovat (případně i rušit) rezervace sedadel zákazníky na klientských terminálech. Při tom musí být zajištěna konzistence dat v každém okamžiku.

Struktura a rozsah ukládaných dat mohou být pevně určeny. Uživatelské rozhraní na straně klienta i serveru lze implementovat jako konzolové, bylo by však vhodné na klientské straně neuzavřít si cestu k pozdějšímu začlěnění grafického interaktivního rozhraní. Za zvážení stojí modulární návrh celého systému, který by umožnil v budoucnu přidat další druh transportu pro meziprocesovou komunikaci nebo odlišnou realizaci uložení dat (např. externí databáze).

Řešení se předpokládá na operačním systému Microsoft Windows pomocí standardních knihoven C++ (včetně STL) a Windows API.

Vypracování

Rezervační systém pro autobusy je z principu systémem typu klient-server, jak je ostatně zmíněno i v zadání. Pomocí prostředků objektově orientovaného programování bylo snahou řešit problém modulárně, což bylo přínosem již v průběhu vypracovávání úkolu, mělo by však být výhodou i v případě případných budoucích modifikací či rozšiřování.

Základní stavební bloky systému, jejich uspořádání a vzájemnou interakci se snaží postihnout následující obrázek.

General.png
Obecné schéma rezervačního systému

Serverová aplikace zajišťuje centrální uložení veškerých dat v databázi. Veškeré operace s daty se prováději přes pevně definované rozhraní. Spojení s klienty zajišťují vícevláknové moduly, každý pro konkrétní způsob transportu požadavků od klienta. Server má jednoduchou správcovskou konzoli, která kromě spuštění a zastavení umožňuje i provedení zálohy celé databáze. Další oddíl popisuje uspořádání serveru podrobněji a uvádí i návod ke konfiguraci a řízení činnosti serveru.

Jádrem každé klientské aplikace je blok označený jako logika klienta. Ten přijímá od uživatelského rozhraní požadavky, zpracovává je pomocí "atomických" operací nad databázovým rozhraním a výsledky předává zpět k zobrazení. K předávání příkazů serveru používá komunikační modul. O detailech implementace, použití a konfiguraci je pojednáno v tomto oddíle.

Podstatnou částí systému je meziprocesová komunikace (IPC). Zahrnuje jednak části, kterými se integruje do serverové i klientské aplikace, jednak části, které jsou specifické pro jednotlivé použité druhy transportu dat - což jsou v současnosti síťový protokol TCP a zprávy operačního systému Windows. Více informací lze najít zde. Pro zajištění dostatečné průchodnosti při větším počtu připojených klientů jsou servery pro příjem obou druhů transportu implementovány jako vícevláknové.

Největší pozornost byla věnována návrhu a provedení databáze a řešení komunikace mezi procesy. Při tom jsem se snažil co nejvíce zohlednit hledisko výkonnosti a případné rozšiřitelnosti. Provedení klientské aplikace v konzolové variantě dnes může působit jako anachronismus, ale přesto může mít své dobré opodstatnění (např. dávkové zpracování skriptů jako hromadné přidání autobusových spojů na další týden činnosti apod.). V každém případě by mělo přinejmenším demonstrovat funkčnost celého systému. Nahrazení modulu uživatelského rozhraní jiným, uživatelsky přívětivým a s dech beroucí grafikou je docela dobře možné.

Modularita a relativní samostatnost jednotlivých částí byly výhodou i během vývoje. Umožnily totiž vývoj, ladění a testování důležitých komponent samostatně, jmenovitě se jednalo o databázi (s využitím přímo připojeného klienta), zámků pro vícenásobný přístup, transportní a posléze i relační vrstvy meziprocesové komunikace s navázáním na vícevláknový server.

Oddíl o přenositelnosti kódu se snaží diskutovat některé aspekty související s použitím systému na jiných platformách, než pro které byl přímo vyvíjen.

Dokumentace k programu vznikala v průběhu celého období vývoje. Snažil jsem se být důsledný v tom, aby byla aktuální a konzistentní. To na jedné straně vyžadovalo jisté úsilí, na straně druhé jsem ji sám v průběhu prací poměrně často využíval. Rozhodl jsem se pro použití systému Doxygen, který se mi poměrně osvědčil mj. díky možnostem vkládání obrazové informace a hypertextových odkazů.

Závěr

V souladu s okřídlenými tvrzeními typu "Žádný program není nikdy hotov." či "Jakmile je program dokončen, je nejvyšší čas přepsat jej zcela od začátku." si jsem vědom řady možností, jak rezervační systém doplnit o další funkce, jak jej vylepšit či upravit. Některé náměty jsou uvedeny na této stránce.

Při pohledu o několik měsíců zpět, do doby začátku prací na implementaci, jsem docela překvapen různorodostí problémů a úloh, které bylo potřeba vyřešit. Alespoň částečně jsem nahlédl do řady pro mě nových oblastí a subjektivně jsem se mnohému naučil. Výsledek svého snažení nyní překládám ke zhodnocení.