Ülesande püstitus
Selles ülesandes tutvud SQL keele ja SQLite failipõhiste andmebaaside liidestamisega C keeles. Sinu ülesandeks saab olema nii SQL kui ka C-keelse koodi kirjutamine ning sidumine. Lisaks pead ülesande käigus teostama ka väikese muudatuse andmebaasi struktuuris. Andmebaasi kasutamine ei vaja võrguühendust.
Variant
Ülesande sooritamine
- Lisa ülesande variandis nõutud tabel olemasolevasse andmebaasi struktuuri, tabelisse lisa vajalikud väljad kasutades sobilike andmetüüpe. Tabeli täpne sisu on sinu välja mõelda! Lisatabel tuleb luua vajaduspõhiselt sinu rakenduse käivitamise hetkel.
- Loo käsurea põhine andmebaasi kasutajaliides C keeles, millega saab
- Teha SELECT päringuid – ühest ja mitmest tabelist kasutades erinevaid JOIN operatsioone. Muuhulgas tuleb andmeid filtreerida kasutades WHERE või HAVING käske, järjestada ümber kasutades ORDER BY käsku jne.
- Andmeid muuta (INSERT, DELETE, UPDATE käsud)
- Tulemuste leidmine (SUM, AVG jne käsud)
- Dokumenteeri oma töö
Keskkond
- Peab kasutama SQLite3 andmebaasi ja libsqlite3-dev teeki.
- Peab töötama Linuxis ja kompileeruma kasutades GCCd
- Rakendus peab olema kirjutatud kas C90 või C99 standardina. Lisa Makefile nii, et “make all” retseptiga saaks rakenduse kompileerida.
Soovituslikud paketid:
- sqlite3 – andmebaasitarkvara
- libsqlite-dev – teek mille abil on võimalik C keelsetes rakendustes kasutada SQLite andmebaase.
- sqlitebrowser – graafilise kasutajaliidesega andmebaasirakendus, mille abil on võimalik tutvuda andmebaasiga ning testida käske enne rakenduses kasutusse võtmist.
Paigaldamiseks debian-põhistes süsteemides (nt Ubuntu, Kubuntu, Mint, …)
1 2 |
sudo apt update sudo apt install sqlite3 libsqlite3-dev sqlitebrowser |
Nõuded
- Rakenduses peab olema kasutusel käsureapõhine kasutajaliides. Kõik tegevused peavad olema korratavad kuniks kasutaja soovib rakenduse sulgeda.
- SQLi päringute ohutuks koostamiseks tuleb parameetrite lisamisel päringusse kasutada sqlite3_bind_ funktsioone
- Rakendus peab kontrollima iga käsu soorituse tulemust (kui on võimalik) ja raporteerima olukorrad, kus käsu sooritamine ebaõnnestub.
- UPDATE ja INSERT käskude korral pead esmalt kasutaja sisestust kontrollima enne kui neid andmebaasi suunas saadad!
- Kõik küsitud ressursid tuleb vabastada enne rakenduse sulgemist
- Rakendus peab olema kompileeritav kasutades Makefile’i, mille peab töö autor koostama ja lahendusega kaasa panema.
Dokumentatsioon
- Tiitelleht
- Autorideklaratsioon
- Lühendite ja mõistete sõnastik (vajadusel)
- Sisukord
- Jooniste ja tabelite loetelu (vajadusel)
- Ülesande püstitus
- Rakenduse kirjeldus
- Kõik SQL päringud peavad olema loetelud. Päringud peavad olema grupeeritud päringu tüübi järgi (nt INSERT, UPDATE, …). Kõik nõutavad eeltingimused peavad olema märgitud (nt õpilasele hinde lisamiseks peab vastava koodiga õpilane eksisteerima). Kõik päringud peavad olema lisatud kasutades koodi värvimist. Näiteks:
- Kõik SQL päringud peavad olema loetelud. Päringud peavad olema grupeeritud päringu tüübi järgi (nt INSERT, UPDATE, …). Kõik nõutavad eeltingimused peavad olema märgitud (nt õpilasele hinde lisamiseks peab vastava koodiga õpilane eksisteerima). Kõik päringud peavad olema lisatud kasutades koodi värvimist. Näiteks:
- Andmebaasi disaini selgitus
- Lisa andmebaasi disain joonisena (ülesande püstituses). Joonis peab olema viidatud ja loetletud kasutatud kirjanduses!
- Kirjelda kõik PK-FK suhted oma andmebaasis
Nt: Välisvõti students.student_code viitab primaarvõtmele grades.student_code. - Iga andmebaasitabeli kohta loo aruandes tabel, kus on kirjeldatud kõik atribuudid (tabeli tulbad). Iga atribuudi kohta peab olema kirjeldatud selle nimi, kõik selle omadused (nt PK, Not NULL, Unique), kirjeldus ja näide.
Näide: ühe atribuudi kirjeldus tudengite tabelis:
Atribuut | Kirjeldus | Omadused | Näidis |
student_code | Unikaalne tudengi tunnuskood, mis koosneb kuuenumbrilisest matriklinumbrist täisarvuna ja neljatähelisest õppekava koodist sõnena. | Ei ole NULL Unikaalne |
“123456MVEB” |
- Kokkuvõte
- Kirjuta mõni lause oma lähenemisest ülesandele ja tööprotsessi kohta.
- Kirjuta mõni lause ülesandest ja selle keerukusest sinu jaoks.
- Kui võimalik, hinda ülesande sooritamise ajalist mahtu.
- Kas soovitad ülesannet kasutada ka tulevikus? Kas ja mida muudaksid?
- Täiendavad kommentaarid, emotsioonid, mõtted.
- Ekraanitõmmised sinu rakendustest erinevates situatsioonidest
- Kasutatud kirjandus (vajadusel)
- Viitamiseks kasutatakse IEEE stiili
TalTechi juhend: https://haldus.taltech.ee/sites/default/files/2024-05/IEEE_stiilis_viitamine_2024%20%281%29.pdf
Ametlik juhend: https://journals.ieeeauthorcenter.ieee.org/wp-content/uploads/sites/7/IEEE_Reference_Guide.pdf - Kõik mis ei olnud kaetud selle õppeaine raames ja mida sa ei loonud iseseisvalt.
- Ka näiteks sõbra või kursusekaaslase abi tuleks viidata: https://libraryguides.vu.edu.au/ieeereferencing/personalcommunication
- Kui kasutasid tehisintellekti (nt ChatGPT), peab selle kasutus olema viidatud – mis ulatuses ja mille jaoks kasutasid
- Viited allikatele peavad olema täpsed. Näiteks viitena stackoverflow.com või google.com ei sobi. Viide peab olema konkreetsele leheküljele kust informatsioon pärineb.
- Viitamiseks kasutatakse IEEE stiili
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 René Pihlak (Kontakt: Ülikooli MS Teams).
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.
Esitada tuleb järgnevad failid:
- Aruanne (pdf dokument)
- Projekti failid .zip arhiivina (lähtekood, SQLite3 andmebaas, Makefile)
Juhendajal on õigus nõuda töö kaitsmist, sh kohapeal!