Západočeská univerzita Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky
Programovací techniky Samostatná práce N19. Květinářství
Vedoucí práce: Ing. Pavel Mautner Ph.D. Student: Tomáš Pospíšil, A09B0109K únor 2012
Stránka 1
Obecné pokyny k semestrální práci
Zadání je vždy určeno pro jednoho studenta Práce se skládá ze dvou částí – vytvoření funkčního programu a napsání dokumentace Než začnete programovat, zamyslete se nad zadaným problémem, jaká data budete uchovávat, jaké operace s nimi budete dělat, jaké vstupy a výstupy by požadoval uživatel vašeho softwaru atd. (tvořivost a schopnost analýzy je významnou součástí vašeho hodnocení) Úkolem v programové části je vždy o analyzovat problémovou oblast, o vytvořit 1 či více datových souborů (obyčejný textový soubor, HTML soubor, XML soubor…) s alespoň 20 záznamy, které odpovídají analýze problému, o datový soubor umět programově zpracovávat (číst, přepisovat – vkládat, editovat a rušit záznamy), o implementovat základní datovou strukturou jako AVL strom, B strom, nebo tabulku (implementace zahrnuje přidání, odebrání a editaci záznamu) – vylosujete si při výběru zadání, o vyhledávat alespoň podle dvou položek záznamu (tj. i vytvořit např. invertovaný seznam) o umožnit fulltextové vyhledání položky záznamu, o vytvořit smysluplné výstupy do HTML, vhodné pak i na obrazovku, o vytvořit prostředí pro snadnou obsluhu programu (menu, ošetření vstupů,…) – nemusí být grafické, o vytvořit dokumentační komentáře ve zdrojovém textu programu a vygenerovat programovou dokumentaci (Javadoc) V rámci dokumentace nezapomenout na zadání, o popsat analýzu problému, o popsat návrh programu (např. jednoduchý UML), o vytvořit uživatelskou dokumentaci o zhodnotit práci a vytvořit závěr
N19. Květinářství - software pro vedení agendy květinářství, nabízených květin a dalšího zboží, jednotlivých prodejů a tržeb
Stránka 2
Analýza problému 1. Programovací jazyk: Volba jazyka je rozsáhlý problém, který je třeba řešit zvlášť pro každé nové zadání. Programovací jazyky se dají rozdělit podle mnoha kritérií. Ty nejzákladnější způsoby dělení jsou: programovací jazyky vyšší/nižší, interpretované/ kompilované a objektově orientované/strukturované. Samozřejmě, že to není veškeré dělení jazyků, ale pro řešení našeho problému to stačí.
A) Otázka: Vyšší nebo nižší programovací jazyk? Nižší programovací jazyky, jsou jazyky primitivní, jejichž instrukce odpovídají příkazům procesoru. Jsou závislé na svém procesoru a takřka nepřenositelné na jiný procesor. V praxi to vypadá tak, že je třeba kód upravovat zvlášť pro každý procesor. Struktura kódu je obecně složitější než struktura zdrojového kódu vyššího programovacího jazyka. Na druhou stranu má volba nižšího jazyka také jednu zásadní výhodu. Programátor má přístup i k funkcím a instrukcím počítačů, ke kterým se s vyšším programovacím jazykem nedostane. Vyšší programovací jazyky jsou srozumitelnější, struktura zdrojových kódu je pro většinu programátorů logičtější a nejsou závislé na strojových principech počítače. Odpověď: Jelikož se jedná o jednoduchou aplikaci, na kterou stačí možnosti vyšších programovacích jazyků a zároveň hledáme co nejjednodušší řešení, volíme jeden z vyšších programovacích jazyků.
B) Otázka: Interpretovaný nebo kompilovaný programovací jazyk? Interpretovaný jazyk je překládán až za běhu programu. Díky tomu jsou obecně pomalejší, ale nemají většinou tak velké formální požadavky na samotný zdrojový kód. Zásadní nevýhodou, která je zároveň i výhodou, je nezbytnost interpretru v počítači, na kterém je kód spouštěn. Avšak nám tato nevýhoda dává jedinečnou možnost napsat program, který lze spustit na různých platformách – operačních systémech. To znamená, že je nezávislý na architektuře zařízení, na kterém je spuštěn. Kompilované jazyky musejí být již před vlastním spuštěním přeloženy kompilátorem. Je zde zcela vynechán „mezikód“, který používají interpretované jazyky. Ve většině programů to zaručuje rychlejší práci aplikace, ale taky naprostou nemožnost mezi různými platformami. U robustních aplikací je takovéto urychlení zásadní. Odpověď: Jelikož neznáme platformu, na které bude aplikace spuštěna, a zároveň neřešíme rozsáhlý problém, je rozumnější volbou varianta interpretovaného jazyka.
C) Otázka: Objektově orientovaný nebo strukturovaný jazyk? Strukturované programování zpracovává samostatná data samostatnými funkcemi. Tyto funkce mají své vstupy a výstupy. Objektově orientované programování (OOP) nabízí možnost sdružování funkcí a dat do takzvaných objektů. Objekty mohou připomínat běžné objekty reálného světa (auto, student, dům, atd.). Tyto objekty, stejně jako v reálném světě, nesou o sobě informace, díky kterým je dokážeme od sebe rozlišit (rychlost, věk, počet podlaží, atd.). Zároveň objekty vykonávají různé činnosti (auto zatáčí, student píše test, dům hoří, atd.). Objektové Stránka 3
programování bývá pro méně zkušené programátory složitější a při samotném návrhu vyžaduje více času pro vytvoření správné struktury programu. Odpověď: Pro uchovávání záznamů v datových strukturách je dle mého názoru vhodnější použít OOP, neboť pomocí objektů se snáze sdružují informace, které si přejeme uchovávat. Pro výše uvedené důvody a pro největší zkušenosti jsem zvolil programovací jazyk Java.
2. Vývojové prostředí: Každý programátor má své oblíbené vývojové prostředí, na které ve většině případů nedá dopustit. Jedná se o jednoduché textové nástroje, jako jsou notepad, PSPad, vim-u, přes kvalitní freeware/ GNU GPL nástroje (Eclipse, netBeans, Dev-C++), až po profesionální prostředí (Microsoft Visual Studio). Mou volbou je freeware aplikace Eclipse IDE, pro svou jednoduchost, přehlednost, cenu a dobré debugové funkce.
3. Uživatelské rozhraní: Uživatelské rozhraní je jedním z klíčových faktorů, které ovlivňují úspěšnost a použitelnost dané aplikace. Při programování v programovacím jazyce Java bylo možné použít textové rozhraní CUI (character user interface) nebo grafické uživatelské rozhraní GUI (graphical user interface).
Zvolil jsem volbu GUI, díky jejímu přívětivějšímu rozhraní pro uživatele a pro její ne příliš složité programovací struktury.
4. Algoritmus (datová struktura): Mezi datovými strukturami jsem volil hashovací tabulku pro její rychlost vyhledávání, i když v nejhorších případech bývá na horší úrovni než jiné vyhledávací algoritmy. Druhým zásadním důvodem pro tuto volbu, byla snadná a přehledná implementace v jazyce Java.
Stránka 4
Stránka 5
STRUČNÝ POPIS PROGRAMU SPOUŠTĚNÍ PROGRAMU -
Kompilace do jar souboru: příkazem „jar cvfm pt_N19.jar manifest.mf SOUBORY_NEBO_ADRESÁŘ“ soubory či adresář musejí obsahovat všechny z níže uvedených (zdroj Source.zip): DialogBase.java LayoutBase.java manifest.mf MenuLayout.java MovLayout.java MovList.java MovReaList.java NoIntLayout.java NotItemMarked.java ProdLayout.java ProductIO.java Products.java ProductsList.java Reason.java Sales.java SalesHash.java SalesLayout.java SalesList.java SetupIO.java SetupLayout.java
-
Spuštění jar souboru: příkazem „java –jar pt_N19.jar“ obsah adresáře (zdroj výše uvedený postup nebo JAR.zip): ProductIO.dat – Nepovinný soubor. Program si jej v případě nepřítomnosti vytvoří. pt_N19.jar SetupIO.dat – Nepovinný soubor. Program si jej v případě nepřítomnosti vytvoří.
Stránka 6
OVLÁDÁNÍ PROGRAMU Uživatelské rozhraní programu je rozděleno do několika částí:
Main menu – rozcestník celého programu Sales – rozhraní pro uskutečnění vlastních prodejů Movements – rozhraní pro manuální vyskladnění/ naskladnění zboží Products – rozhraní pro přidání nového zboží/úpravu stávajícího zboží Setup – rozhraní pro přidání/úpravu důvodů k vyskladnění/naskladnění zboží
Pohyb v GUI rozhraní je možný pomocí směrových kláves + Enter a Tab nebo myši. Celé rozhraní je navrhnuto intuitivně a co možná nejjednodušeji pro použití neseznámeným uživatelem.
MAIN MENU
Main menu je rozcestníkem celého programu. Obsahuje tlačítka s odkazy na dalším rozhraní, jako jsou Sales (Prodeje), Movements(Pohyby), Products(Produkty), Setup (Nastavení), nebo umožňuje opustit aplikaci stlačením tlačítka Exit.
Stránka 7
SALES
Tlačítka: BACK – Návrat zpět do Main menu HELP – Nabídka zboží ADD – Přidání zboží do seznamu prodávaného zboží REMOVE – Odstranění zboží ze seznamu prodávaného zboží SALE – Uskutečnění prodeje/vyskladnění zboží Textová pole: Prod. – Pole pro číslo zboží – automaticky vyplněno pomocí nabídky zboží (Help) Description – Název zboží Qty – Množství prodávaného zboží Price – Cena za 1 kus zboží Total – Cena celkem za x kusů zboží Stock – Aktuální počet zboží ve skladě/prodejně PRICE – Celková cena za prodávané zboží DPH 20% - Celkové DPH za prodávané zboží PRICE WITH DPH – Celková cena s DPH za prodávané zboží Funkce rozhraní: Přidání požadované položky do seznamu prodávaného zboží provedete zadáním příslušného kódu zboží do pole Prod. buď přímo pomocí klávesnice (ručního skeneru barkódů) nebo pomocí tlačítka HELP a příslušné nabídky zboží, zadáním počtu požadovaných kusů do pole Qty a stačením tlačítka ADD. Odebrání požadované položky ze seznamu prodávaného zboží provedete označením této položky v seznamu prodávaného zboží a stačením tlačítka REMOVE. Uskutečnění prodeje provedete stlačením tlačítka SALE. Zboží ze seznamu prodávaného zboží bude vyskladněno.
Stránka 8
MOVEMENTS
Tlačítka: BACK – Návrat zpět do Main menu HELP – Nabídka zboží/důvodů SAVE – Potvrzení pohybu zboží Search – Vyhledání zboží Textová pole: PRODUCT – Pole pro číslo zboží – automaticky vyplněno pomocí nabídky zboží (Help) Product – Pole pro číslo zboží Description – Název zboží Reason – Pole pro důvod vyskladnění – automaticky vyplněno pomocí tlačítka (Help) Qty – Množství naskladňovaného/vyskladňovaného zboží Stock – Aktuální stav zboží Funkce rozhraní: Naskladnění/vyskladnění zboží se provede zadáním příslušného kódu zboží do pole PRODUCT buď přímo pomocí klávesnice (ručního skeneru barkódů) nebo pomocí tlačítka HELP a příslušné nabídky zboží, zadáním kódu důvodu vyskladnění/naskladnění do pole Reason buď přímo pomocí klávesnice (ručního skeneru barkódů) nebo pomocí tlačítka HELP a příslušné nabídky důvodů, zadáním množství zboží k vyskladnění/naskladnění do pole Qty a stlačením tlačítka SAVE. Pokud bude vše zadáno správně, aktuální stav zboží se navýší/sníží.
Stránka 9
PRODUCTS
Tlačítka: BACK – Návrat zpět do Main menu NEW – Vytvoření nového zboží HELP – Nabídka zboží SAVE – Uložení zboží do databáze Search – Vyhledání zboží Textová pole: PRODUCT – Pole pro číslo zboží – automaticky vyplněno pomocí nabídky zboží (Help) Product – Pole pro číslo zboží Description – Název zboží Price – Prodejní cena zboží Qty – Množství naskladňovaného/vyskladňovaného zboží Cost – Pořizovací cena zboží Type – Typ zboží (nářadí, květina) Stock – Aktuální stav zboží Width, Height, Length, Weight – Rozměry a hmotnost zboží
Stránka 10
SETUP
Tlačítka: BACK – Návrat zpět do Main menu add – Vytvoří nový důvod k vyskladnění/naskladnění zboží remove – Odebere položku z listu
Textová pole: Reason ID – Pole pro číslo důvodu k vyskladnění/ naskladnění Description – Název důvodu k vyskladnění/ naskladnění
Výběrové menu (Action): Load – Položka k naskladnění zboží Unload – Položka k vyskladnění zboží
Stránka 11
Závěr Program je konstruován ke snadnému uživatelskému ovládání a ke každodennímu použití. Má mnoho nedostatků, jako jsou chybějící algoritmy k uchování pohybů na skladě či prodejně a další funkcionality, které si dovedu v tomto programu představit. Pro programátora je snadná jeho konfigurace a zavedení dalších nezbytností k plně hodnotnému a uživatelsky přívětivému prostředí. Volba hashovací tabulky nebyla v tomto případě tou nejlepší, neboť její uchovávání v paměti počítače není řazeno dle zřejmých požadavků na zobrazování položek v listech či seznamech (abecední řazení zboží atd..). Toto řazení by se muselo dále řešit, nebo hashovací algoritmus nahradit jiným.
Stránka 12