Středoškolská odborná činnost 2007/2008 Obor 18 Informatika Pokladní systém Autor: Radim Laga Gymnázium JAK Komenského 169 688 31, Uherský Brod Sexta Uherský Brod, 2008 Zlínský Kraj
Prohlašuji tímto, že jsem soutěžní práci vypracoval samostatně a uvedl v seznamu literatury veškerou použitou literaturu a další informační zdroje včetně internetu. V Uherském Brodě dne 17.3.2008 vlastnoruční podpis autora
Obsah Seznam použité literatury 3 1 Úvod 1 2 Hardware 1 2.1 ČtečkačárovýchkódůVIRTUOSMT-9062.... 1 2.1.1 Typyčárovýchkódů.... 2 2.2 Použitéčárovékódy... 2 2.3 TermálnítiskárnaEPSONTM T88II..... 3 3 Software 4 3.1 Popisfunkceprogramu.... 4 3.2 Popisprimárníhojádraprogramu... 4 4 Závěr 7 5 Ukázky použití programu 8
1 Úvod Přibližně před rokem jsem byl postaven před problém, zda bych dokázal vytvořit pokladní systém pro restaurační zařízení. Protože již čtvrtým rokem programuji v Delphi, rozhodl jsem se celý program napsat v tomto prostředí. Přestože je tato technologie relativně zastaralá, stále se jeví dostatečně výkoná pro menší aplikace. Byly dány tyto požadavky: Zákazníkbudemítsvoukartu Obsluhabudemítsvoukartu Vstup a ovládání programu přes čárové kódy Výstup na termotiskárnu Záznamvšechúčtůaprovizíkvyplacení Možnosteditacepoložekve skladu 1 První verze tohoto programu se objevila za pár měsíců intenzivního programování. Obsahovala přibližně 4000 řádků kódu a byla pomalá a poněkud nestabilní. Téměř okamžitě jsem začal psát důmyslnější, flexibilnější a hlavně jednoduší algoritmus. Přibližně za 3 měsíce jsem dokončil druhou verzi tohoto programu. Tato verze je dlouhá pouhých 1200 řádků, poskytuje lepší uživatelské prostředí a bezproblémový provoz. 2 Hardware 2.1 Čtečka čárových kódů VIRTUOS MT-9062 Výše zmiňovaná CCD čtečka používá jako zdroj světla LED diody, takže její životnost(vzhledem k LED diodám) je téměř neomezená. Přesto však po hardwarové stránce nevyhovuje její tlačítko, které slouží k aktivaci čtení kódu. Časem se stává méně citlivé, až nakonec dojde k jeho kompletní nefunkčnosti. Tuto čtečku v České republice distribuje firma Virtuos[5]. Obrázek 1: CCD čtečka čárového kódu MT-9062 Tato čtečka[3] se vyrábí ve dvou typech provedení. Tyto typy se od sebe liší způsobem komunikace s počítačem. První verze čtečky používá klasický sériový port(rs232), kdežto druhá verze emuluje funkci klávesnice na jejím portu(ps/2 nebo DIN). Vybral jsem si typ pro sériovou komunikaci skrz RS232, aby samotná klávesnice mohla býtpoužívánakjinýmúčelům.pokudbybylotřebačtečkupřipojitnausbport,takbystačilomezipočítačem a čtečkou vložit převodník U SB <=> RS232, který se ve Windows objeví jako sériový port RS232. Tento typ čtečky, ihned po dekódování patřičného čárového kódu, odešle jeho číselnou hodnotu přes sériový port. 1 aktuálníseznam,množstvíacenpoložek 1
2.1.1 Typy čárových kódů Čárový kód je prostředek pro automatizovaný sběr dat. Je tvořen černými vytištěnými pruhy(u některých novějších verzích kódu mozaikou) definované šířky, umožňující přečtení pomocí čteček či skenerů. Podle způsobu, jakým se konkrétní znak kóduje do skupiny pruhů se kódy dělí do skupin. Nejpoužívanější skupiny kódů jsou: Code2/5(rok1968) Codabar(rok 1972) UPC(rok1973) Code3/9(rok1974) EAN(rok1976) Code11(rok1978) Code128(rok1981) Code93(rok1982) Pro tento systém jsem vybral kódy typu EAN, konkrétně typ EAN-13. Tyto kódy jsou používány po celém světě, navíc svými rozměry perfektně vyhovují pro tisk na používané karty. Obrázek 2: Ukázka tří typů čárového kódu se stejným číslem 2.2 Použité čárové kódy Obrázek 3: Grafické zpracování používaných karet Výše uvedený obrázek je ukázka jak vypadají karty pro obsluhu a pro administrátora. Mají velikost 80x45mm. Na vrchní straně je barevný potisk(obsluha, zákazník, admin) a na druhé straně je černobílý čárkový kód pro danou kartu. Tyto karty jsou nakonec zataveny do plastové fólie a nařezány na potřebné rozměry. Po této úpravě se stávají vysoce trvanlivými kartami pro náročné podmínky. Karty pro zákazníky mají jedinečné logo společnosti na vrchní straně, které též obsahuje otevírací dobu a název příslušného podniku. 2
2.3 Termální tiskárna EPSON TM T88II Pro pokladní systémy se nejčastěji používají dva typy tiskáren jehličkové nebo termální tiskárny. Každá z nich má své výhody a nevýhody. Jehličkové tiskárny poskytují velký výkon, mají delší životnost a jejich případná oprava není tak drahá. Avšak při tisku vydávají značné množství hluku a jejich pořizovací cena je mnohdy dvakrát vyšší než u termálních tiskáren. Naopak termální tiskárny se podle typu tisku rozdělují do dvou skupin: přímé tisková hlava je tvořena malými odpory s malou tepelnou setrvačností výhodou je, že jediný spotřební materiál je papír, nevýhodou je vyšší cena papíru a malá stabilita tisku, často se používají v supermarketech, rychle a potichu tisknou. Tato metoda tisku se používala ve faxech(dnes již převážně nahrazeno laserovým tiskem). termosublimační jedná se vlastně o sublimační tisk, princip je stejný jako u přímého termálního tisku, jen mezi hlavou a papírem je speciální termotransferová fólie, ze které se barva teplem přenese na potiskované medium, kterým může být běžný papír. Tento typ tisku lze použít i pro více barev, proto se nejčastěji používá pro potisk štítků, karet nebo při tisku fotografií ve vysokém rozližení. Primárním problémem termálních tiskáren je omezená životnost tiskové hlavy. Vzhledem k tomu, že nová tisková hlava stojí přes polovinu ceny nové tiskárny, je lepší koupit přímo novou funkční tiskárnu. Současné pokladní tiskárny jsou již vybavovány automatickými střihači papíru, takže jediné o co se obsluha stará je podání vytištěného účtu zákazníkovi. Pro použití v tomto pokladním systému jsem se zaměřil především na množství hluku vydávaného tiskárnou. Proto jsem použil termální tiskárnu TM T88II od firmy Epson[4]. Obrázek 4: Termální tiskárna EPSON TM T88II v činnosti 3
3 Software 3.1 Popis funkce programu Program je napsán ve vývojovém prostředí Delphi 7. Práce s databází a výstup na tiskárnu je pomocí defaultních komponent Delphi; přístup na sériový port je realizován pomocí rozšiřující komponenty Async 32[2]. Pro přístup k databázi je použito jádro BDE(Borland Database Engine). Přes BDE má programátor možnost přistupovat k celé řadě databází. Pomocí tohoto jádra může programátor přistupovat k mnoha typům databází naprosto jednoduše. OvladačeBDE převedou databázovouoperacinasprávnourealizaciprokonkrétnídatabázovýsystém.propřístup k databázi jsem si zvolil jazyk SQL, protože jsem ho dříve používal ve spojení s databázemi MySQL na internetových stránkách. Funkce programu byly následujíci: Přijde nový zákazník, dostane klientskou kartu(po dobu pobytu v pohostinném zařízení). Pokud si chce objednat nějakou položku z nabídky, obsluha si půjčí jeho kartu. Pomocí čtečky první načte svou kartu(obsluha č. n), poté kartu zákazníka. Dále načte položky pomocí čárového kódu, který mají vedle počítače(obvykle několik A4 plných položek s čárovými kódy viz obrázek 9). Nakonec se obsluha odhlásí ze systému a nebo vytiskne účet zákazníkovi. Všechny příkazy, jak k přidávání položek nebo k ovládání programu(tisk účtu, odhlášení) probíhá přes čárové kódy. Je to mnohem rychlejší, nežli hledat příslušné tlačítka na klávesnici. Pokud nastane situace, že obsluha systému udělá chybu a zákazníkovi načte jinší položku, tak může poslední operaci vrátit pomocí tlačítka ESC. 3.2 Popis primárního jádra programu NAÈTE ID PØÍKAZ? PØÍKAZY POLO KA? ADMIN? ADMIN PRÁVA OBSLUHA PØIHLÁŠENA? ZÁKAZNÍK PØIHLÁŠEN ID!=<2,3> ID KARTY ID=<2,3>? KARTA NA PROVIZE? PROVIZE OK VYTVOØENÍ ÚÈTU ZÁKAZNÍKOVI OBSLUHA OK PØIDÁNÍ POLO KY NA ÚÈET PROVIZE Z POLO KY? PØIDÁNÍ POLO KY K PROVIZÍM KOC Obrázek 5: Vývojový diagram hlavní části celého programu 4
Celý pokladní systém používá celkem 4 tabulky v databázi: stock seznam,množstvíacenapoložek accounts seznam otevřených účtů bonus provizeproobsluhu case zde jsou uloženy jednotlivé tržby za každého zákazníka Komponenta pro obsluhu sériového portu je nastavena tak, aby se při každém dokončení přijetí datového balíčku spustilo přerušení s následujícím zpracování: procedure TForm1.VaComm1RxBuf(Sender: TObject; Data: PVaData; Count: Integer); var num_b, i: integer; begin num_b:=vabuffer1.bufused; VaBuffer1.Read(prijem,num_B); VaBuffer1.Clear; cislo:= ; inc(n); for i:=1 to num_b-3do // prevededata z pole na retezec begin cislo:=cislo+prijem[i]; end; Edit4.Text:=cislo; if n=2 then // pri druhem prijmu dat pokracovat begin Dalsi_zpracovani; n:=0; end; end; Procedura Dalsi zpracovani odpovídá algoritmu na obrázku 5. 5
4 Závěr Po celkových sedmi měsících vývoje softwaru, jeho ladění a úprav jsem nakonec dospěl k použitelnému výsledku. Současné verze 2.4 běží v jednom nejmenovaném baru již rok. Zatím nenastaly žádné komplikace, zamrzání softwaru nebo problémy se stabilitou databáze. Přestože je program poměrně jednoduchý(vzhledem k jeho délce) tak dosahuje velkých potenciálů při velké denní zátěži. Jediná věc, která se zatím pokazila, bylo nekvalitní tlačítko na čtečce čárových kódů, které časté mačkání příliš nevydrželo. Systém je velmi pohodlný na ovládání skrz čárové kódy. Vstup do administrace aplikace je chráněn kartou ADMIN a také heslem, které je třeba zadat po načtení karty, jinak vás systém nepustí k administraci. Pokud je člověk přihlášenjakoadministrátor,můžeměnitmnožstvípoložekna skladě,jejichcenyanázvy.nechybíanipoložka pro změnu hesla nebo tlačítko na vytištění celkové tržby za celý den. Administrativní rozhraní je už ovládáno přes klávesnici. Vytištěné účty pro zákazníky jsou v hlavičce vybaveny grafickým logem firmy(v monochromatickém rozlišení) akontaktemnani,popř.dalšívolitelnépoložky.totologolzeupravitjako logo.bmp souborvkořenovémadresáři programu. Na přiloženém CD je instalační soubor pro vyzkoušení demo verze. 6
5 Ukázky použití programu Obrázek 6: Vzhled programu ihned po spuštění Obrázek 7: Administrátorské rozhraní pro správu celého systému 7
Obrázek 8: Otevřený účet s účtem pro vyplácení provizí obsluze Obrázek 9: Ukázka části seznamu položek s jejich čárovými kódy 8
Seznam použité literatury [1] PÍSEK, Slavoj. Delphi: praktické příklady. Praha: Grada Publishing, 2002. 220 s. ISBN 80 247 0323 8. [2] VYKOPAL, Jan. Sériové rozhraní v Delphi [online]. www.builder.cz, 5.2.2007. URL: http://builder.cz/serial85.html [3] EZ One Shot CCD scanner : programovací příručka [online]. Virtuos, 2.11.2006. URL: http://www.virtuos.cz/download/mt9062.pdf [4] TM-T88II/T88III Technical reference guide[online]. Epson, 3.1.2007. URL: http://www.epson.com [5] Virtuos[online], 18.3.2008. URL: http://www.virtuos.cz 9