BRS#
Rezervační systém pro autobusy

Table of Contents

Jazyk C# a platforma .NET, akademický rok 2014/2015 - zápočtový program

Petr Stefan

Zadání

Cílem projektu je vytvoření jednoduchého rezervačního systému, který umožňuje manipulaci s centrálně uloženými daty z více klientských terminálů současně. Modelovým příkladem použití může být místenkový systém pro autobusy: máme nějakou kolekci autobusových spojů definovanou počáteční a cílovou stanicí a časem odjezdu, každý z nich obsahuje daný počet sedadel (obecně různý v závislosti na typu autobusu). Cestující na různých terminálech dopravce získávají informace o obsazenosti spojů a provádějí si rezervace sedadel (případně mohou následně provedené rezervace rušit). Před odjezdem konkrétního autobusu se vytvoří seznam vyžádaných místenek pro řidiče. Analogicky může fungovat rezervace sedadel v kinech, divadlech apod.

Řešení sestává z tří částí:

  • server – zahrnuje vlastní výkonný modul, vhodně řešené úložiště dat a řídící terminál
  • klient – skládá se z uživatelského rozhraní a výkonného modulu
  • komunikace – kompatibilní dvojice (jedna část pro server a jedna pro klienta) zajišťující přenos informací mezi procesy

Serverový i klientský terminál budou mít konzolové rozhraní, komunikace serveru a klentů bude implementována pomocí TCP/IP. Data budou při běhu aplikace držena v paměti počítače, bude zajištěna jejich synchronizace s binárním souborem na disku.

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í. Každý klientský požadavek se zpracovává v samostatném vlákně. 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 - v současnosti pouze síťový protokol TCP. 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ů je server pro příjem TCP transportu implementován 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.

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í.