13. Must kast

Antud ülesanne on lihtsustatud versioon poes toimuvast kogutavatest andmetest ja nende võimalikust esitusest.

Lähtefailid

On antud 3 andmefaili ja päisefail

  • Failis “invoices” on kirjeldatud klientide ostukorrad.
  • Failis “items” on ostetud kaupade kirjeldused.
  • Failis “customers” on kliendi isikuandmed.
  • Failis “import.h” on kirjeldatud funktsioonid ja konstandid, mida tuleb kasutada programmi tööle saamiseks.

Ülesande kirjeldus ja hinnatavad punktid:

  1. Kõigis kolmes failis olevad andmed tuleb lugeda sisse ja kuvada. Selleks kasuta olemasolevat funktsiooni GetFileContents, mille prototüüp on import.h failis kirjeldatud. Kasuta olemasolevaid konstante. Pärast failist andmete lugemist kuva need ekraanil.
  2. Leida kogu andmebaasis talletatud müükide summa.
  3. Leia järgnev statistika:
    • Kõige kallim ostetud toode
    • Kõige odavam ostetud toode
  4. Trüki välja arved koos kliendi andmetega Seotud peavad olema andmed failist invoices ja customers.
  5. Trüki arvele ostetud tooted, ühe toote hind, kogus, rea summa ja kogumaksumus.

Kõikide alamülesannete puhul on paljud lähteandmed ja kasutatavad suurused kirjeldatud päisefailis „import.h“.

Kõik funktsioonid ja lahendused peavad olema võimelised töötama n-pikkuste andmefailidega

Failide struktuurid näiteandmetega:

„invoices“

invoiceID customerID time date
0 3 15:32:04 28.11.2013
1 1 22:13:03 28.11.2013

„items“

invoiceID name count price
0 Item1 1 12.99
0 Item2 1 22.99
1 Item3 2 1299.00

„customers“

customerID firstName lastName phone e-mail
0 John Smith +37251123123 john.smith@gmail.com
1 Jane Smith +37178787878 jane.smith@gmail.com
2 Jude Smith +37256666666 jude@outlook.com
3 Jeremy Smith +37065247 jeremy@live.com

 

Tabelite sidumine

mustkast_tabelid

Täiendavate päisefailide kasutamine

Tavapäraselt jagatakse programmid mitmete failide vahel. Lisaks koodifailidele on kasutusel ka päisefailid.

Päisefailidesse pannakse tüüpiliselt erinevad makrod (nt #define preprotsessori direktiivid), struktuuride kirjeldused (tutvume kevadel), funktsioonide prototüübid jne.

Enda loodud päisefaili saab programmi lisada, kui nendele viidata koodifaili alguses. Lisatav fail peab olema samas kaustas koodifailiga või siis peab viitama selleni faili rada. Lisamiseks kasutada järgmist rida:

Kus jutumärkide vahel on lisatava faili nimi jutumärkides. Kui faili asukoht on jutumärkide vahel, siis otsitakse seda koodifaili suhtelisest asukohast lähtuvalt.

Sedasi saame parendada koodi väljanägemist ja loetavust, muuta korduvkasutamist mugavamaks ning hõlpsamini teha grupitööd.

Tüübiteisendused

Teisendamaks tähemärkides olevaid numbreid kasutatavateks arvudeks on vaja lisada oma programmile teek <stdlib.h>

Nt: num = atof(stringiMassiiv[i])

Alternatiivina võid kasutada eelmisest tunnist tuttavat funktsiooni sscanf();

Kuidas alustada

KäsuridaMakefileCode::Blocks
  1. Salvesta kõik failid ühte kausta ning loo oma koodifail, kuhu kirjutad main() funktsiooni ja kõik enda tehtava koodi.
  2. Lisa enda kirjutatavasse faili käsk vajaliku teegifaili lisamiseks (import.h)
  3. Testimaks, kas kõik töötab õigesti, kirjuta järgmine rida oma main funktsiooni

printf(“%s”, checkStatus());

Vastuseks peaks ilmuma ekraanile tekst „Working like a charm“, mis viitab, et kõik ettevalmistused on läinud hästi. Võid alustada ülesannete lahendamist.

Kompileerida võid nt nii (kui soovid, võid teha makefile’i – nii saad veel kiiremini!):

Jätkamiseks võiksid nt tutvuda GetFileContents() funktsiooni vajaminevate parameetritega ja mõelda milliseid muutujaid ja andmeid sul vaja läheb selle kasutamiseks. GetFileContents() funktsioon on sinu eest juba valmis tehtud!

  1. Salvesta kõik failid ühte kausta ning loo oma koodifail, kuhu kirjutad main() funktsiooni ja kõik enda tehtava koodi.
  2. Lisa enda kirjutatavasse faili käsk vajaliku teegifaili lisamiseks (import.h)
  3. Testimaks, kas kõik töötab õigesti, kirjuta järgmine rida oma main funktsiooni

printf(“%s”, checkStatus());

Vastuseks peaks ilmuma ekraanile tekst „Working like a charm“, mis viitab, et kõik ettevalmistused on läinud hästi. Võid alustada ülesannete lahendamist.

Kui soovid enda elu äärmiseks lihtsaks teha kasutades Makefile’i, siis oled sunnitud ka selle endale ise selgeks tegema kuidas see töötab. Oskus iseenesest on väga kasulik. Inspiratsiooniks:

Jätkamiseks võiksid nt tutvuda GetFileContents() funktsiooni vajaminevate parameetritega ja mõelda milliseid muutujaid ja andmeid sul vaja läheb selle kasutamiseks. GetFileContents() funktsioon on sinu eest juba valmis tehtud!

  1. Loo Code::Blocksis uus projekt
    1. Projekti tüübiks on „Console application“.
    2. Projekti loomise käigus vali kasutatavaks keeleks C
    3. Määra ära projekti nimi ja asukoht
    4. Compileri konfiguratsiooni ära muuda!
  2. Programmi kompileerimiseks kasuta ainult kompileerimise nuppu! Kui vigu ega hoiatusi ei esinenud, siis võid käivitada.
    Kui kasutad compile and run nuppu, siis jäävad hoiatused märkamatuks ja võivad põhjustada vigu programmi töös.
  3. Projekti kohta käivad failid on paremas menüüs kaustapuu kujul. Alguses peaks olema näha ainult c, mis asub Sources kaustas.
    1. Sources – koodifailid
    2. Headers – päisefailid
    3. Other – andmefailid ja muud failid
  4. Kopeeri projekti kausta kaasaantud failid:
    1. import.h
    2. import.o
    3. customers
    4. items
    5. invoices
  5. Tee täiendav koopia failist import.o kausta „obj -> Debug“
  6. Lisa failid oma projekti valides projekti kaustapuust projekti nime peal paremklõpsuga „Add files..“
    NB! Kui küsitakse kuhu fail peaks kuuluma, siis jätta linnukesed ette „Debug“ ja „Release“ valikutele.
  7. Täienda main.c faili vajaliku teegi lisamisega (import.h)
  8. Testimaks, kas kõik töötab õigesti, kirjuta järgmine rida oma main funktsiooni

printf(“%s”, CheckStatus());

Vastuseks peaks ilmuma ekraanile tekst „Working like a charm“, mis viitab, et kõik ettevalmistused on läinud hästi. Võid alustada ülesannete lahendamist.

Jätkamiseks võiksid nt tutvuda GetFileContents() funktsiooni vajaminevate parameetritega ja mõelda milliseid muutujaid ja andmeid sul vaja läheb selle kasutamiseks. GetFileContents() funktsioon on sinu eest juba valmis tehtud!

Programmi töö näide: