Labori materjal
- Slaidid: Struktuurid 2 + lihtne päisefail
- Täiendav näide: struktuurimassiiv viitadega (Seotud laboriülesandega)
- Täiendav näide: struktuuri tagastamine
- Täiendav näide: struktuur struktuuris
- Täiendav näide: Struktuuriviit kui struktuuri liige
Laboriülesanded
Selleks laboriks on ülesanne mis on jaotatud kahte ossa.
Laboriülesande 1. osa: Seostatud andmete väljastamine
Selles osas trükime välja failidest loetud andmed. Selleks on oluline õigel hetkel teha vajalikud seostamised kahe struktuuri vahel.
Andmefailid
Andmed on sulle antud kahes eraldi failis, mille kirjeldamiseks kasutame olemi-suhte diagrammi (ERD ehk entity-relationship diagram).
NB! Selliseid suhteid näidatakse sageli ka UMLi klassidiagrammina. Vaata all viidet selle kohta!
Olemi-suhte diagrammi kardinaalsus
- Ühel isikul võib olla 0 või enam sõidukit
- Iga sõiduk peab kuuluma täpselt ühele isikule
Andmed kahes failis on seostatud Eesti isikukoodi (person_id) abil.
Lae andmefailid alla siit: https://blue.pri.ee/ttu/files/iax0584/andmefailid/4_data.zip
Nõuded
- Kasuta programmi programmis päisefaili. Paiguta sinna struktuuride deklaratsioonid, makrod ja funktsioonide prototüübid, vajadusel ka loendid.
- Loe kahest antud failist andmed eraldiseisvatesse struktuurimassiividesse.
- Väldi keerukaid lahendusi (pesastatud struktuurid või struktuuriviidad) selle laboriülesande lahendamisel.
- Isikukoodi pead hoiustama 64-bitise täisarvuna. Sedasi vähendad protsessoritsüklite arvu mis kulub väljade võrdlemiseks!
Use inttypes.h !
- Harjuta viidaaritmeetikat
- Kasuta nooleoperaatorit (->) struktuuri liikmete poole pöördumiseks
- Väldi nurksulgude [] kasutamist massiivide indekseerimisel.
- Sorteeri isikute andmed eesnime alusel tähestikulises järjekorras kasvavalt.
- Trüki välja isikuandmed, millele järgnevad kõik nendega seotud sõidukid.
- Omaniku andmed tohid trükkida ühekordselt.
- Omaniku info järel loetle kõik nendega seotud sõidukid
- Kui isikul puuduvad sõidukid, anna sellekohane teavitus.
Soovituslikud funktsioonid
NB! Tegu on soovitusliku loeteluga. Sinu loodavad funktsioonid ning nende parameetrid võivad sellest erineda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
1. Isikute andmefaili lugemine Parameeter: viit isikute struktuurimassiivile Parameeter: maksimaalne loetav isikute arv (massiivi deklareeritud pikkus) Tagastus: isikute koguarv Märkus: Sellele funktsioonile võib lisada faili nime kolmanda parameetrina! 2. Sõidukite andmefaili lugemine Parameeter: viit sõidukute struktuurimassiivile Parameeter: maksimaalne loetav sõidukite arv (massiivi deklareeritud pikkus) Tagastus: sõidukite koguarv Märkus: Sellele funktsioonile võib lisada faili nime kolmanda parameetrina! 3. Inimeste nime alusel sorteerimine Parameeter: viit isikute struktuurimassiivile Parameeter: isikute arv massiivis Tagastus: puudub 4. Andmete kuvamine Parameeter: viit isikute struktuurimassiivile Parameeter: isikute arv massiivis Parameeter: viit sõidukute struktuurimassiivile Parameeter: sõidukite arv massiivis Tagastus: puudub |
Testimine
Järgnev on ülesande esimese osa oodatav väljund
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
30610072188 Andres Siid (income: 0.00) car 1: 931NTM (tax: 319.00) 49112012007 Anne Saar (income: 42510.00) car 1: 994MBP (tax: 552.00) car 2: 552PND (tax: 391.00) car 3: 553PND (tax: 391.00) 68604152911 Dolores Vilipuu (income: 45000.00) car 1: 002XA (tax: 300.00) 44801231278 Jan Karu (income: 0.00) *** No registered cars *** 55506211816 Marko Rebane (income: 15000.00) car 1: VANITY1 (tax: 2500.00) car 2: 050AAC (tax: 925.00) 49011162694 Sten-Oliver Vallassaar (income: 20000.00) car 1: 001ABC (tax: 400.00) 60210031677 Toomas Luik (income: 30000.00) *** No registered cars *** |
Laboriülesande 2. osa: Maksude arvutamine
Teises osas kirjutame laienduse esimesele osale. Kõik esimeses osas olnud nõuded kehtivad ka siin.
Nõuded
- Leia ja kuva palju iga omanik makse maksma peab
- Kuvada tuleb nii summa kui protsendina sissetulekust
- Lisa hoiatus kui maksud ületavad 10% isiku aastasest sissetulekust.
- Väljasta veateade kui inimesel puuduvad sissetuleku kohta andmed.
- NB! Meenuta, et funktsioonid peaksid vaid ühte asja tegema. Ära pane arvutamist samase funktsiooni kus andmeid väljastad või faile loed! Tee eraldi funktsioon maksude leidmiseks.
- Vihje: Lisa struktuuri täiendav liige või liikmed, et saaksid hoiustada ja kuvada maksuandmeid. Struktuuri liikmed ei pea olema 1:1 vastavuses sellega mis on hoiustatud failis, täiendavate väljade lisamine või isegi andmete töötlemine ja teises formaadis hoidmine mälus on OK.
Soovituslikud funktsioonid
NB! Tegu on soovitusliku loeteluga. Sinu loodavad funktsioonid ning nende parameetrid võivad sellest erineda.
1 2 3 4 5 6 7 8 9 10 11 |
1. Maksude arvutamine Parameeter: viit sõidukute struktuurimassiivile Parameeter: sõidukite koguarv Parameeter: viit isikute struktuurimassiivile Parameeter: isikute koguarv Tagastus: puudub 2. Maksude ja hoiatuste väljastamine Parameeter: viit sõidukute struktuurimassiivile Parameeter: sõidukite koguarv Tagastus: puudub |
Testimine
Järgnev on ülesande teise osa oodatav väljund
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
30610072188 Andres Siid (income: 0.00) car 1: 931NTM (tax: 319.00) 49112012007 Anne Saar (income: 42510.00) car 1: 994MBP (tax: 552.00) car 2: 552PND (tax: 391.00) car 3: 553PND (tax: 391.00) 68604152911 Dolores Vilipuu (income: 45000.00) car 1: 002XA (tax: 300.00) 44801231278 Jan Karu (income: 0.00) *** No registered cars *** 55506211816 Marko Rebane (income: 15000.00) car 1: VANITY1 (tax: 2500.00) car 2: 050AAC (tax: 925.00) 49011162694 Sten-Oliver Vallassaar (income: 20000.00) car 1: 001ABC (tax: 400.00) 60210031677 Toomas Luik (income: 30000.00) *** No registered cars *** Name: Andres Siid ------------------ Income: 0.00 EUR Tax: 319.00 EUR Tax pcnt: 0.00 % ERROR: Missing income Name: Anne Saar ---------------- Income: 42510.00 EUR Tax: 1334.00 EUR Tax pcnt: 3.14 % Name: Dolores Vilipuu ---------------------- Income: 45000.00 EUR Tax: 300.00 EUR Tax pcnt: 0.67 % Name: Jan Karu --------------- Income: 0.00 EUR Tax: 0.00 EUR Tax pcnt: 0.00 % ERROR: Missing income Name: Marko Rebane ------------------- Income: 15000.00 EUR Tax: 3425.00 EUR Tax pcnt: 22.83 % WARNING! Tax > 10% Name: Sten-Oliver Vallassaar ----------------------------- Income: 20000.00 EUR Tax: 400.00 EUR Tax pcnt: 2.00 % Name: Toomas Luik ------------------ Income: 30000.00 EUR Tax: 0.00 EUR Tax pcnt: 0.00 % |
Pärast seda tundi peaksid
- Oskama luua ja seostada päisefaili oma koodifailiga
- Teadma mida pannakse ja mida ei panda päisefaili sisse
- Teadma tüüpilisi kasutusjuhte päisefailidesse
- Teadma erinevaid mis vahet on noolsulgudel ja ümarsulgudel päisefaili lisamisel ning kust siis neid faile otsima hakatakse
- Teadma kuidas makrotena luua tingimuslauseid eelprotsessori jaoks
- Teadma miks on vajalikud ning oskama kasutada kaitseid päisefailidel
- Oskama silumislauseid koodi põimida erinevatel viisidel
- Oskama algväärtustada struktuure
- Oskama struktuure pesastada (st ühe struktuuri liikmeks on teine struktuur või struktuuri viit)
- Oskama struktuure tagastada
- Oskama kasutada struktuuri ligipääsuoperaatorina noolt ning teadma millal seda teha tuleb
- Oskama viidaaritmeetikat kasutada struktuurimassiivide peal
- Oskama lugeda lihtsamaid ERD diagramme ja teadma, et neid kasutatakse andmemudelite modelleerimiseks.
- Teadma, et UMLis on ka olemas klassidiagrammid ning klassidiagramme kasutatakse andmemudelite modelleerimiseks.
Täiendav materjal
- C Header Files
https://www.tutorialspoint.com/cprogramming/c_header_files.htm - ERD – Entity Relationship Diagram
https://www.visual-paradigm.com/guide/data-modeling/what-is-entity-relationship-diagram/ - Data models using UML class diagrams (alternative to ERD)
https://sparxsystems.com/resources/tutorials/uml/datamodel.html - Cardinality rules in data modelling
https://en.wikipedia.org/wiki/Cardinality_(data_modeling)