PR2ET3: Struktuurid

Labori materjal

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!

Ava mind väljundi nägemiseks

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

Vajuta mind, et näha selgitusi kuupäeva ja kellaaja vormingu kohta

m – Minutid vahemikus 0 – 59.
mm – Minutid vahemikus 00 – 59. Minutitele 0 – 9 lisatakse ette number null.

h – Tunnid vahemikus 1 – 12.
hh – Tunnid vahemikus 01 to 12. Tundidele 1 – 9 lisatakse ette number null.
H – Tunnid vahemikus 0 – 23
HH – Tunnid vahemikus 00 – 23. Tundidele 0 . 9 lisatakse ette number null.

d – Päevad vahemikus 1 – 31
dd – Päevad vahemikus 01 – 31. Päevadele 1 – 9 lisatakse ette number null.
ddd – Päevad lühinimega ( E / Mon; T / Tue; K / Wed; …)
dddd – Päevad täispika nimega (esmaspäev / Monday; teisipäev / Tuesday; kolmapäev / Wednesday; …)

M – Kuud vahemikus 1 – 12
MM – Kuud vahemikus 01 – 12. Kuudele 1 – 9 lisatakse ette number null.
MMM – Kuu lühinimi (jaan / Jan; veebr / Feb; märts / Mar; apr / Apr; …)
MMMM – Kuu täispika nimega (jaanuar / January; veebruar / February; Märts / March; …)

y – Aasta vahemikus 0 – 99
yy – Aasta vahemikus 00 – 99
yyy – Aasta, minimaalselt kolme numbriga (1 -> 001; 15 -> 015; 145 -> 145; 1949 -> 1949)
yyyy – Aasta nelja numbriga

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