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: 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
NB! Programmi väljund on näide lahendusest pärast kõigi nelja edasijõudnute ülesande lahendamist!
Edasijõudnute ülesanne 1: 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
Edasijõudnute ülesanne 2: linnade nimistu
Nõuded:
- Kuva kasutajale kõik failis olevad linnad
- 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.
Edasijõudnute ülesanne 3: 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
Edasijõudnute ülesanne 4: 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