Labori materjal
- Slaidid: struktuurid
- Täiendav koodinäidis: Struktuurimassiivi näide
Laboris lahendatakse kommenteeritult koos läbi failist struktuuridesse lugemise näide. Neile kes ei osale laboris on see avaldatud koodinäitena: Failist struktuurimassiivi lugemise näide
Laboriülesanded
Selles laboris on üks ülesanne, millele lisandub 4 edasijõudnute ülesannet.
Ülesanne [W03-1]: töötajate otsing
Selles programmis matkime töötajate andmebaasi, kust on võimalik filtreerida välja töötajate andmeid vastavalt etteantud otsinguparameetrile.
Andmefail
Lae alla testandmed järgnevalt lingilt: https://blue.pri.ee/ttu/files/iax0584/andmefailid/3_data_short.zip
Andmefail koosneb juhugeneraatoriga loodud andmetest.
Nõuded
- Loe failist ettevõtte töötajate andmed
- Failis on iga rea kohta üks kirje
- Iga andmeväli on eraldatud tühikuga. Andmeväljad on ühesõnalised.
- Andmete struktuur failis
<eID> <first_name> <last_name> <city>
- Programmis tuleb andmeid hoida struktuuridest koosnevas massiivis.
- Programm peab töötama olukorras kus andmete täpne arv pole teada ning see võib ajas muutuda (näiteks mõni rida lisatakse või kustutatakse).
- Loo programmile mõistlik limiit ning veendu, et sellest üle ei mindaks!
- Luba programmi kasutajal teostada otsingut linna nime järgi
- Programm väljastab kõik töötajad, kes sisestatud linnas elavad
- Näita mitu vastet mitmest leiti (nt [0 / 91])
- Otsingut peab saama sooritada korduvalt ilma programmist väljumata
- Baasülesandes väljasta kõik andmed – isikukood, perenimi, eesnimi, linn
- Kasutajal peab olema võimalus programm sulgeda, loo selle jaoks eraldi võimekus (näiteks sisestades kindel käsk)
- Korduv faili lugemine programmi sees ei ole lubatud.
- Struktuuri sisu ei pea olema üks-ühele faili sisuga! Väljade lisamine on kasulik eelkõige lisaülesannete lahendamisel.
Programmi näidisväljund
Järgnevalt on pakutud kaks väljundi näidist. Esimeses näidises kuvatud tulemused vastavad baasülesande nõuetele, teises näidises kuvatav väljund sisaldab kõigi nelja lisaülesande sisu.
Lisaülesanne 1 [W03-2]: struktuuride sorteerimine
Nõuded
- Leitud töötajate loetelu peab olema sorteeritud perekonnanime järgi tähestikulises järjekorras kasvavalt.
- Väljastuse nime formaat peab olema perenimi, eesnimi
Lisaülesanne 2 [W03-3]: linnade nimistu
Nõuded
- Kuva kasutajale kõik failis olevad linnad
- Linnade nimistu peab olema järjestatud tähestiku alusel
- Linnade nimekiri koostatakse programmi poolt töö ajal, vastavalt sisendfailis esinevatele linna nimedele
- Kasutaja peab saama linnade nimekirja kuvada sisestades selleks vastava käsu. Käsk tuleb lisada menüüsse
- Linnade nimekirja peab saama kuvada korduvalt
- Linnade nimekirja tohib koostada programmi töö vältel vaid ühe korra.
Lisaülesanne 3 [W03-4]: Mugavam otsing
Nõuded
- Otsing ei tohi olla tõstutundlik. Näiteks otsides otsides linna TALLINN või tallinn , tuleb kuvada kõik töötajad, kes elavad Tallinnas.
- Otsing peab toetama osalist vastet. Näiteks otsides all leitakse nii need, kes elavad Kallastel, kui ka need, kes elavad Tallinnas.
- Mõlemad peavad töötama ka korraga. St eelnev tulemus peab olema leitav ka otsides ALL või aLL
Lisaülesanne 4 [W03-5]: Töödeldud isikukood
Nõuded
- Ära kuva vastuste hulgas enam isikukoodi
- Kuva töötaja sünniaeg formaadiga d. MMMM yyyy
Isikukoodi formaadi kohta saad lugeda: https://www.riigiteataja.ee/akt/114022017005
Pärast seda tundi peaksid
- Teadma kuidas deklareerida uusi struktuure – st uus andmetüüp, milleks on struktuur
- Oskama valida struktuuri liikmeid
- Teadma mis on struktuuri polsterdamine ja joondamine ning kuidas see mõjutab struktuuri suurust mälus
- Teadma mis mõjutab struktuuri suurust
- Teadma millised operaatorid on kasutusel struktuuri liikmete poole pöördumiseks ja oskama kasutama punkt-operaatorit
- Teadma kuidas luua struktuuridest koosnevat massiivi ja lugeda andmeid failist struktuurimassiivi
- Teadma kuidas omistada terviklikku struktuuri
- Teadma kuidas defineerida andmetüüpe ümber, andes neile uue nime (typedef)
Täiendav materjal
- Structures in C
https://www.geeksforgeeks.org/structures-c/ - Structure Member Alignment, Padding and Data Packing
https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/ - Typedef in C
https://www.geeksforgeeks.org/typedef-in-c/ - Why to avoid typedefs with structs (by Linus Torvalds, author of Linux Kernel and Git)
https://yarchive.net/comp/linux/typedefs.html - Structure padding in C
https://www.scaler.com/topics/structure-padding-in-c/ - C structures
https://www.tutorialspoint.com/cprogramming/c_structures.htm - Comprehensive list of date and time formats used in .Net.
https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings