Rezervační systém
|
převod databázového dotazu do binární podoby ...
#include <ClientQuery.h>
Veřejné metody | |
CClientQuery (CClientConnection *cConnection) | |
konstruktor ... | |
virtual | ~CClientQuery () |
destruktor | |
virtual unsigned | AddCity (const char *pszName) |
přidání města ... | |
virtual bool | AddCityAlias (const char *pszName, unsigned uiId) |
přidání zkratky k nějakému existujícímu městu ... | |
virtual bool | DeleteCity (const char *pszName) |
smazání města podle jména ... | |
virtual unsigned | FindCity (const char *pszName) |
nalezení města podle názvu ... | |
virtual bool | CityInfo (unsigned uiCity, RCityInfo *prInfo, unsigned *puiLinesOut, unsigned *puiLinesIn) |
získání informací o městě ... | |
virtual unsigned | AddBusPlan (const char *pszName, unsigned uiSeats, const CBlobEx< std::string > *cData) |
přidání plánu autobusu ... | |
virtual bool | DeleteBusPlan (const char *pszName) |
smazání plánu autobusu ... | |
virtual unsigned | FindBusPlan (const char *pszName) |
nalezení plánu autobusu ... | |
virtual bool | BusPlanInfo (unsigned uiPlan, RPlanInfo *prInfo, unsigned *puiBuses, CBlobEx< std::string > *cData) |
získání informací o plánu ... | |
virtual unsigned | AddBus (const RBusInfo *prBus) |
přidání autobusu ... | |
virtual bool | DeleteBus (unsigned uiBus) |
smazání autobusu ... | |
virtual unsigned | FindBus (unsigned uiFrom, unsigned uiTo, time_t tLeaveTime) |
nalezení autobusu ... | |
virtual bool | BusInfo (unsigned uiBus, RBusInfo *prInfo, bool *pfEnabled, unsigned *puiSeats, std::list< unsigned > *cFreeSeats) |
získání informací o autobusu ... | |
virtual bool | EnableBus (unsigned uiBus) |
povolení autobusu ... | |
virtual bool | DisableBus (unsigned uiBus) |
zakázání autobusu ... | |
virtual unsigned | NewCustomer (void) |
unikátní ID pro nového zákazníka ... | |
virtual bool | AskSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer) |
dočasné zamluvení sedadel ... | |
virtual bool | LockSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer) |
trvalá rezervace sedadel ... | |
virtual bool | UnlockSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer) |
zrušení rezervace sedadel ... | |
virtual unsigned | NextBus (unsigned uiBus) |
nalezení dalšího autobusu v pořadí ... | |
virtual unsigned | NextCity (unsigned uiCity) |
nalezení dalšího města v pořadí ... | |
virtual unsigned | NextPlan (unsigned uiPlan) |
nalezení dalšího plánu v pořadí ... | |
virtual bool | ListCity (const char *pszFrom, std::string *strName) |
nalezení dalšího města v abecedním pořadí ... | |
virtual bool | ListAlias (const char *pszFrom, std::string *strAlias, std::string *strCity) |
nalezení dalšího aliasu města v abecedním pořadí ... | |
Veřejné metody dědí se z CQuery | |
virtual | ~CQuery ()=0 |
destruktor ... | |
převod databázového dotazu do binární podoby
Třída slouží jako zástupce databázového rozhraní CQuery na straně klienta. Implementuje všechny metody zmíněného rozhraní. Při jejich vyvolání však nekontaktuje databázi přímo, ale pomocí rozhraní CClientConnection je odesílá na server ke zpracování. Přebírá zpět návratové hodnoty a odevzdává je volajícímu.
Třída zabezpečuje převod všech volání do pole binárních dat třídy CCommand, které je následně pomocí meziprocesové komunikace odesláno na server. Po obdržení odpovědi nastává opačný proces - sestavení návratových hodnot z pole binárních dat. Je zřejmé, že kódování/dekódování dat musí probíhat konzistentně jak na straně klienta, tak na straně serveru, kde tuto činnost vykonává sesterská třída CServerQuery.
Třída CCommand kromě binárních dat přenáší i stavové slovo, které slouží ke kontrole komunikačního kanálu. Pokud dojde k nějakým problémům (např. nedostupný server), je takový chybový stav vyhodnocen a nadřízenému oznámen vyvoláním příslušné výjimky, která obsahuje i popis příčiny.
Problematikou meziprocesové komunikace se detailněji zabývá stránka Meziprocesová komunikace.
CClientQuery::CClientQuery | ( | CClientConnection * | cConnection | ) |
konstruktor
Vytvoření instance třídy s uložením ukazatele na rozhraní CClientConnection, které zajišťuje transport vytvořených zpráv (instancí CCommand) na server pomocí meziprocesové komunikace.
[in] | cConnection | ukazatel na komunikační třídu |
|
virtual |
přidání autobusu
Vytvoření autobusu s uvedenými daty a jeho přidání do databáze. Identifikační číslo (položka uiId
struktury RBusInfo
) nemusí být vyplněno, neboť dojde k jeho naplnění jedinečným číslem až při zpracování požadavku.
[in] | prBus | struktura RBusInfo s daty potřebnými k vytvoření nového autobusu, |
Implementuje CQuery.
|
virtual |
přidání plánu autobusu
[in] | pszName | název plánu/typu autobusu |
[in] | uiSeats | počet sedadel |
[in] | cData | binární data rozvržení sedadel |
Implementuje CQuery.
|
virtual |
přidání města
[in] | pszName | jméno města |
Implementuje CQuery.
|
virtual |
přidání zkratky k nějakému existujícímu městu
[in] | pszName | název zkratky či dalšího názvu |
[in] | uiId | ID existujícího města, se kterým chceme propojit tuto zkratku |
Implementuje CQuery.
|
virtual |
dočasné zamluvení sedadel
Dočasné zamluvení sedadel, které po určitém čase vyprší.
[in] | uiBus | ID autobusu |
[in,out] | cSeats | seznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu |
[in] | uiCustomer | ID zákazníka |
Implementuje CQuery.
|
virtual |
získání informací o autobusu
[in] | uiBus | ID autobusu |
[out] | prInfo | struktura RBusInfo, která bude naplněná daty |
[out] | pfEnabled | přepínač, zda jsou povoleny změny v autobusu |
[out] | puiSeats | počet sedadel autobusu |
[out] | cFreeSeats | seznam volných sedadel |
Implementuje CQuery.
|
virtual |
získání informací o plánu
[in] | uiPlan | ID plánu autobusu |
[out] | prInfo | struktura RPlanInfo naplněná daty |
[out] | puiBuses | počet autobusů využívajících tento plán |
[out] | cData | binární data s rozložením sedadel |
Implementuje CQuery.
|
virtual |
získání informací o městě
[in] | uiCity | ID města |
[out] | prInfo | struktura RCityInfo k vyplnění daty |
[out] | puiLinesOut | počet autobusů odjíždějících z tohoto města |
[out] | puiLinesIn | počet autobusů přijíždějících do tohoto města |
Implementuje CQuery.
|
virtual |
smazání autobusu
[in] | uiBus | ID autobusu určeného ke smazání |
Implementuje CQuery.
|
virtual |
smazání plánu autobusu
Vymazání plánu autobusu z kontajneru, může být provedeno pouze v případě, že neexistuje žádný autobus s tímto plánem.
[in] | pszName | název plánu autobusu |
Implementuje CQuery.
|
virtual |
smazání města podle jména
Provede smazání města z kontajneru a zároveň vymazání všech případných aliasů názvu města.
[in] | pszName | název či alias města |
Implementuje CQuery.
|
virtual |
zakázání autobusu
Zakáže provádět změny v rezervacích.
[in] | uiBus | ID autobusu |
Implementuje CQuery.
|
virtual |
povolení autobusu
Povolí provádět změny v rezervacích.
[in] | uiBus | ID autobusu |
Implementuje CQuery.
|
virtual |
nalezení autobusu
Funkce pro nalezení autobusu z města uiFrom do města uiTo a s časem odjezdu rovným nebo nejbližším větším času tLeaveTime.
[in] | uiFrom | ID výchozího města |
[in] | uiTo | ID cílového města |
[in] | tLeaveTime | čas, od kterého hledáme shodu (tj. dolní hranice času odjezdu) |
Implementuje CQuery.
|
virtual |
nalezení plánu autobusu
Hledání plánu autobusu podle zadaného jména.
[in] | pszName | název plánu autobusu |
Implementuje CQuery.
|
virtual |
nalezení města podle názvu
Hledání města probíhá nejprve v normálních názvech měst a v případě neúspěchu ve zkratkách (aliasech)
[in] | pszName | název či alias města |
Implementuje CQuery.
|
virtual |
nalezení dalšího aliasu města v abecedním pořadí
Najde další alias v abecedním pořadí.
[in] | pszFrom | alias, od kterého hledáme následující |
[out] | strAlias | alias dalšího města v pořadí |
[out] | strCity | jméno města odpovídající aliasu |
Implementuje CQuery.
|
virtual |
nalezení dalšího města v abecedním pořadí
Najde další město v abecedním pořadí.
[in] | pszFrom | název města, od kterého hledáme následující |
[out] | strName | jméno dalšího města v pořadí |
Implementuje CQuery.
|
virtual |
trvalá rezervace sedadel
[in] | uiBus | ID autobusu |
[in,out] | cSeats | seznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu |
[in] | uiCustomer | ID zákazníka |
Implementuje CQuery.
|
virtual |
unikátní ID pro nového zákazníka
Operace rezervace sedadel je vždy vázána na konkrétního zákazníka identifikovaného jedinečným číslem. Díky tomu pak může zákazník své rezervace dodatečně zrušit nebo potvrdit dočasnou rezervaci.
Implementuje CQuery.
|
virtual |
nalezení dalšího autobusu v pořadí
Najde další autobus podle ID.
[in] | uiBus | ID autobusu, od kterého hledáme následující |
Pomocí této metody je možné sekvenčně procházet kontajner autobusů (zapouzdřený ve třídě CBuses). Odpovídající kousek kódu může vypadat např. následovně
Metodu můžeme využít např. v situaci, kdy potřebujeme zakázat rezervace ve všech autobusech, které odjíždějí během následující hodiny (abychom mohli předat řidičům konečný seznam rezervovaných sedadel).
Implementuje CQuery.
|
virtual |
nalezení dalšího města v pořadí
Najde další město podle ID.
[in] | uiCity | ID města, od kterého hledáme následující |
Implementuje CQuery.
|
virtual |
nalezení dalšího plánu v pořadí
Najde další plán podle ID.
[in] | uiPlan | ID plánu, od kterého hledáme následující |
Implementuje CQuery.
|
virtual |
zrušení rezervace sedadel
[in] | uiBus | ID autobusu |
[in,out] | cSeats | seznam sedadel k uvolnění, neúspěšná sedadla budou smazána ze seznamu |
[in] | uiCustomer | ID zákazníka |
Implementuje CQuery.