24. cvičení

Zápočtové úkoly

Blíží se konec fiskálního roku, což ve firmách a zejména státních institucích znamená nekonečné vyplňování výkazů, psaní závěrečných zpráv, a provádění podobných administrativních činností. Protože ve vašem týmu zaměstnanců umíte nejlépe programovat, navrhnete ostatním, že připravíte program, který celému týmu usnadní vyplňování a opravování seznamů pro centrální kontrolu svěřeného majetku.

Inventární seznamy jsou ukládány v souborech v následujícím formátu (jednotlivé sloupce jsou odděleny středníky (;), hlavička začíná znakem #):

# Nazev polozky   ; Typ polozky ; Inventarni cislo ; Odpovedna osoba ; Datum kontroly ; Kontrolujici osoba ; Stav polozky
kancelarska zidle ; nabytek     ; Z8-12345678/111  ; Jan Novak       ; 1.12.2019      ; Josef Kozel        ; OK
stul              ; nabytek     ; Z8-12345679/111  ; Jan Novak       ; 1.12.2019      ; Josef Kozel        ; poskozeno
dvere             ; nabytek     ; Z8-12345680/110  ; Jan Novak       ; 1.12.2019      ; Josef Kozel        ; nenalezeno
schodiste         ; stavebni    ; Z8-12345681/110  ; Jan Novak       ; 1.12.2019      ; Josef Kozel        ; chybi

Soubor je potřeba přečíst a položky vložit do databáze (spojového seznamu), aby byly připraveny k dalšímu zpracování. Před vložením položky do databáze je potřeba důsledně zkontrolovat platnost všech údajů, protože vaši spolupracovníci a kontrolující osoby jsou obecně velmi nespolehliví a nepořádní lidé. Zkontrolujte tedy:

  1. Počet údajů na každém řádku – datum kontroly, kontrolující osoba a stav položky mohou v seznamu chybět, pokud kontrola ještě neproběhla.
  2. Inventární čísla musí být v uvedeném formátu.
  3. Datum kontroly, pokud je zadáno, musí být platné datum.

Pokud jste v průběhu semestru splnili všechny domácí úkoly a v rámci dobrovolného úkolu nakreslili \(k\) různě pojmenovaných křivek, stačí provést \(\max(0, 3 - k)\) kontrol. Můžete si vybrat, které kontroly vynecháte.

Po načtení souboru se program podívá do vytvořené databáze a začne skutečně pomáhat:

  1. Seznam je potřeba seřadit dle inventárního čísla, protože toto pořadí vyžaduje účetní oddělení, kam se seznam bude posílat.
  2. Seřazený seznam se uloží do nového souboru ve stejném formátu, jako vstupní soubor.
  3. Dále program vypíše položky, u kterých kontrola zatím neproběhla, nebo jejichž stav není „OK“.

Pokud jste během semestru nezvládli vypracovat některé domácí úkoly, dostanete navíc odpovídající počet dodatečných úkolů, které se dozvíte po vypracování a odevzdání základního zápočtového úkolu.

Poznámky k implementaci

  1. Pro přečtení textového řetězce mezi dvěma středníky na daném řádku není úplně šikovné použít funkci sscanf, protože symbol "%s" skončí načítání po nalezení mezery, takže bychom získali pouze první slovo. Spolehlivý, ale pracnější přístup je najít pozice dvou středníků a zkopírovat znaky mezi těmito pozicemi (kromě mezer na začátku a na konci).
  2. Pro lexikografické porovnání textových řetězců existuje funkce strcmp.
  3. Při řazení spojového seznamu stačí přehazovat ukazatele na data, není potřeba měnit ukazatele na následující prvky.

Odevzdávání zápočtových úkolů

Úkoly vypracovávejte samostatně. Neopisujte od kolegů, neboť zamaskovat opisování by vás stálo více práce, než samostatné vypracování úkolu.

Vypracované programy je potřeba předvést na osobní konzultaci, předtím mi pošlete vypracované programy na emailovou adresu pro kontrolu (posílejte pouze zdrojový kód a vlastní soubor s testovacími daty, nikoliv zkompilovaný program).

Po dobu zkouškového období budu k dispozici pro konzultace, kdybyste potřebovali něco vysvětlit nebo jste narazili na „neřešitelný“ problém (termín si můžete domluvit emailem).