Ülesande kirjeldus
See kodutöö variant põhineb sinu kodutöö 2 variandil. Lisaks kodutöö 2 raames tehtule tuleb andmemudel ümber kujundada kasutades abstraktseid andmestruktuure ning lisada täiendav funktsionaalsus.
Nõuded loodavale rakendusele
Loodav rakendus peab jälgima kõiki parimaid praktikaid, mida on tutvustatud Programmeerimine 1 ning Programmeerimine 2 aines.
Keerukamad lahendused ning õppeaines katmata teemade rakendamine on lubatud, kui need on korrektselt dokumenteeritud ning aruandes on põhjendatud motivatsioon nende kasutamiseks sedasi, et lugejale on ilmne töö autori kompetents nende teemade valdamises.
Nõuded koodimisstandardile ja keskkonnale
Loodav programm peab olema kirjutad C programmeerimiskeeles. Kasutada tohib C90 ja C99 koodistandardeid. Kokkuleppel tohib kasutada ka uuemaid standardeid (nt C11, C17, C23).
Lisaks C standardteekidele tohid kasutada ka C POSIX ja GNU C teeke. Teiste teekide kasutamine väljaspool eelmainituid tuleb eelnevalt kokku leppida õppejõuga!
Esitatud lahendus kompileeritakse ja testitakse laboris oleva Linux seadistusega võrdväärses keskkonnas (nt OpenSUSE SLED-15 SP5 ja GCC-12) või soovitusliku koduse seadistusega (Ubuntu Linux 24.04 ja GCC-13). Ühilduvus teiste operatsioonisüsteemidega (Windows, MacOS) ei ole vajalik.
Nõuded rakendusele
Kõik kodutöö 2 raames esitatud nõuded rakendusele ja dokumentatsioonile jäävad kehtima.
Olemasolevat rakendust tuleb täiendada järgnevalt
- Kõik kasutaja sisestused peavad olema kontrollitud. Ebasobival kujul olev sisestus peab andma veateate ning rakendus peab sisendit uuesti küsima (see sisaldab ka vales formaadis sisestust – nt numbri asemel sisestatakse sõna).
- Igast alammenüüst ja -tegevusest peab olema võimalik tagasi liikuda, st katkestada praegune tegevus (näiteks kui kasutaja ekslikult valib andmete muutmise, peab ta saama taganeda tegevusest minnes tagasi eelnevasse menüüsse).
- Kood peab olema tükeldatud rohkemaks kui üheks koodifailiks (.c fail) ning koodi kompileerimiseks peab olema esitatud Makefile, mis kõik koodifailid korrektselt kokku kompileerib.
- Andmeväljad andmefailides peavad olema CSV formaadis ehk komaga esitatud. Formaat peab toetama ka eraldajat välja sees (nt koma eraldise puhul peab ka välja sees olema toetatud koma).
- Andmed esimesest failist (kus oli vaid primaarvõti – nt filmid, raamatud, telefoni mudelid, kontod) tuleb lugeda ahelloendisse, mis sisaldab endas viitasid nii eelmisele kui järgmisele elemendile (doubly linked list). Lubatud on kasutada ka näiteks erinevat liiki kahendpuid ahelloendi asemel, kui see annab sinu rakendusele eelise – sellisel juhul peab olema eelis põhjendatud dokumentatsioonis.
- Teises andmefailis olevad andmed võid lugeda enda valitud andmestruktuuri (peab sobima ülesande üldise püstitusega, toetama ülesandes püstitatud eesmärke). On nõutud, et andmete vaheline PK-FK suhe on lahendatud kasutades viitasid! St olles valinud välja kirje esimesest andmestruktuurist pead saama viita kasutades otse seotud elementide poole pöörduda. Sidumine on soovitav teha andmete mällu lugemise ajal.
- Vajadusel võid kombineerida erinevaid meetodeid andmete poole pöördumiseks.
- Mõned ideed:
- Viit uuele ahelloendile
- Viit puule
- Viit Viit dünaamilisele massiivile
- Viit räsitabelile
- …
- Andmeid peab saama kustutada mõlemast andmestruktuurist
- Eemaldamine peab koheselt kehtima ilma rakendust taaskäivitamata (st andmestruktuurist peab need koheselt eemaldama)
- Failidest tuleb andmed samuti eemaldada. Seda võib teha kas koheselt või rakenduse sulgemise ajal.
- Eemaldamiseks kasuta unikaalset ID väärtust.
- Andmete terviklikkus peab olema jõustatud
St sa ei tohi kustutada ära esimesest andmestruktuurist andmeid kui teises andmestruktuuris on veel sellele viitavaid andmeid – nt sa ei tohi kustutada ära filmi, millel on veel hinnanguid (pärast hinnangute eemaldamist võib ka filmi eemaldada)
- Andmeid peab saama lisada mõlemasse andmestruktuuri
- Sisendina peab rakendus toetama mitmest sõnast koosnevat sisendit. Sisendi korrektsus tuleb valideerida.
- Andmete lisamine peab koheselt kehtima ilma rakendust taaskäivitamata (st need tuleb kohe pärast lisamist ka rakenduses kasutusele võtta)
- Rakenduse abil lisatavad kirjed tuleb salvestada ka andmefailidesse. Seda võib teha kas koheselt või rakenduse sulgemise ajal.
- Andmete terviklikkus peab olema jõustatud (nt ei saa lisada arvustust filmile, mida ei eksisteeri).
- Lisamisel genereeritud ID väärtus peab olema unikaalne (tavapäraselt järjestikused väärtused). Alternatiivina võib väärtust küsida kasutajalt käsitsi, kui selleks võtmeks kasutatakse levinud unikaalseid väärtusi (nt ISBN kood raamatule, Eesti isikukood inimestele, IBAN number pangakontole jne).
- Täiendav funktsionaalsus tuleb lisada menüüsse
Dokumentatsioon
- Kogu kodutöö 2 raames kehtinud dokumentatsiooninõuded kehtivad ka siin. Laienda oma senist dokumentatsiooni, et see oleksid kajastatud kodutöö 3 tehtud muudatused ja täiendused.
- Visualiseeri oma failides olev andmestruktuur
- Kasuta kas UML klassidiagrammi või ERD diagrammi (olemi-suhte diagramm).
- Näita kindlasti andmetüüpe, primaarvõtmeid ja PK-FK suhet
- Visualiseeri rakenduses kasutatav andmestruktuuri
NB! Funktsioonide dokumenteerimine on osa dokumentatsioonist. Funktsioonid tuleb dokumenteerida koodis. Iga funktsiooni kohta kirjelda selle eesmärki, parameetreid, nõudeid parameetritele tagastavat väärtust ja kõrvalmõjusid.
Töö esitamine
Kõigi kodutöö 3 variantide tähtaeg on 8. juuni 2025.
Töö juhendajaks on Eeva-Maria Tšernova (Mattermost: @eeva).
Kodutöö esitamine käib kahes etapis:
- Lae üles oma lahendus Moodlesse: https://moodle.taltech.ee/mod/assign/view.php?id=499816
- Kirjuta töö juhendajale andmaks teada, et lahendus on esitatud. Täiendavalt on soovitav lahendus saata ka talle otse tema eelistatud suhtlusvahendi kaudu.
Kodutöö raames tuleb esitada kaks faili:
- Aruanne (pdf fail)
- Projekti kompileerimiseks vajalikud failid kokkupakituna .zip arhiivis (lähtekood, andmefailid, Makefile. Vajadusel ka seadefailid jms).
Juhendajal on õigus nõuda töö kaitsmist kohapeal!