(P) Keikkakalenteri

Tavoite: Harjoittelen STL:n säiliöiden ja iteraattoreiden käyttämistä sekä tiedostojen hallintaa. Myös ohjelman jakamista osiin funktioita käyttäen on syytä pohtia. Erityisesti harjoittelen valitsemaan oikean tietorakenteen STL:n tietorakenteiden joukosta.

Ohjeita: Hae ohjelmakoodipohja: templates/04/gigs2/ -> student/04/gigs2/.

Koodipohjasta löytyy sellainen versio split-funktiosta, joka osaa käsitellä useasta sanasta koostuvat nimet oikein, kunhan sanat ovat lainausmerkkien sisällä. Koodipohjasta löytyy myös funktio is_valid_date, joka tarkistaa, onko annettu merkkijono mahdollinen päivämäärä.

Koodipohjan mahdollinen varoitus

Koodipohjan rivillä 78 saattaa joissakin Qt:n versioissa näkyä varoitus. Tämä ei haittaa, mutta jos haluat sen pois, niin korjaa rivi

if ( month < "01" or month > "12" )

tällaiseksi:

if ( (month < "01") or (month > "12") )

Toteuta ohjelma, joka käynnistyessään lukee artistien keikka-aikatauluihin liittyviä tietoja tiedostosta, tallentaa ne sopivaan tietorakenteeseen ja antaa käyttäjälle mahdollisuuden tehdä hakuja, lisäyksiä ja poistoja kyseiseen tietorakenteeseen.

Tärkeää

Ennen kuin aloitat, lue huolellisesti koko tehtävänanto. Huomaa erityisesti kohdat Ohjelman toteuttaminen osissa (vaaditut commitit) sekä Erityisvaatimukset.

Huomautus

Tämän projektin saa (mutta ei ole pakko) tehdä parityönä. Jos et ole vielä luonut ryhmää tai haluat vaihtaa työparia, niin pääset luomaan uuden ryhmän klikkaamalla vasemman reunan valikosta löytyvää linkkiä “Luo uusi ryhmä”. Ryhmän luomisen jälkeen sivun alaosan palautuslaatikkossa on näkyvissä kaksi vaihtoehtoa: “Palauta yksin” / “Palauta ryhmässä”. Ole tarkkana, että valitset oikean vaihtoehdon, koska valintaa ei voi myöhemmin perua. Palautuslaatikkoon tulee vain jommankumman jäsenen Git-repositorion osoite. Kirjoittakaa kooditiedoston kommentteihin molempien nimet ym. muut tiedot.

Ryhmää voi etsiä Kooditorion Discord-linkin kautta (ks. Aikataulu & linkit).

Alkukommentti ja palautteen kieli

Tiedoston main.cpp alkuun tulee kirjoittaa kommentti, josta käy ilmi ainakin seuraavat asiat:

  • ohjelman lyhyt kuvaus

  • tekijän nimi

  • opiskelijanumero

  • käyttäjätunnus (Git-repositorion hakemiston nimi)

  • sähköpostiosoite

  • lyhyt kuvaus käytetyistä STL-tietorakenteista

  • perusteluita toteutusvalinnoille (pakollinen).

Esimerkki alkukommentista:

/* Keikkakalenteri
*
* Ohjelman kuvaus:
* Ohjelma lukee tietoja syötetiedostosta, jossa luetellaan eri artistien
* keikkoja: esiintyjän nimi, päivämäärä, paikkakunta, esiintymispaikka.
*
* Ohjelman käyttö:
* Tiedostosta löytyvät tiedot kerätään [sopivaan tietorakenteeseen], joka
* koostuu STL:n säiliöistä ja tietueista. Tämän jälkeen käyttäjä voi tehdä
* hakuja tietorekenteeseen muutamalla komennolla. Komennoilla on eri
* määrä parametreja, ja ohjelma tarkistaa sekä parametrien määrän että
* niiden oikeellisuuden.
*
* Ohjelman kirjoittajatiedot: (Täydennä omasi!)
* Nimi: Teemu Teekkari
* Opiskelijanumero: 1234567
* Käyttäjänimi: teekkart
* Sähköposti: teemu.teekkari@tuni.fi
*
* Perusteluita toteutusvalinnoille: (Täydennä asiaankuuluvasti!)
*   (Valitsin tietorakenteeksi rakenteen X, jossa yhdistellään ...
*   Nämä kuvaavat ohjelmassa toimintoja X ....)
*
* Muita huomioita: (Täydennä tarvittaessa)
* - Käyttämäsi tekoälytyökalut (työkalu, käyttötarkoitus). Ole yksityiskohtainen!
* - Mahdollisia kysymyksiä jne.
*/

Lisää siis yllä olevan tapainen kommentti tiedoston main.cpp ihan alkuun. Tarkenna kuvausta kertomalla, mitä STL-rakenteita käytit.

Tässä tehtävässä on vain yksi kooditiedosto. Jos kooditiedostoja on useita (kuten todennäköisesti toisessa projektissa), opiskelijakohtaiset tiedot pitää olla niissä kaikissa. Kuvausosuutta ei tarvitse toistaa jokaisessa tiedostossa, riittää, että se on pääohjelmatiedostossa.

Voit kirjoittaa kommentin myös englanniksi (ks. englannikielinen tehtävänanto), mutta kirjoita kaikki kommentit samalla kielellä. Muista vaihtaa yllä olevaan kommenttiin omat henkilökohtaiset tietosi.

Kommentissa oleva kohta toteutusvalintojen perusteluista on pakollinen. Sen puuttumisesta sakotetaan.

Jos teette parityötä, muistakaa lisätä molempien henkilökohtaiset tiedot.

Palautteen kieli valitaan palautuslaatikossa (tämän sivun lopussa). Palautteen kielenä on oletuksena suomi, mutta voit vaihtaa sen, jos haluat assistenttien antaman palautteen englanniksi. Kielivalinta määräytyy sen perusteella, minkä kielivalinnan olet tehnyt viimeisimmän palautuksen palautuslaatikossa.

Ohjelman käsittelemä data

Ohjelmalle annetaan syötteenä tiedosto, jonka kullakin rivillä on neljä tietokenttää: esiintyjän nimi, päivämäärä, paikkakunta ja esiintymispaikka. Nämä on eroteltu puolipisteellä toisistaan. Ohjelma hyväksymä syötetiedosto on rakenteeltaan esimerkiksi seuraava:

Olavi Uusivirta;2026-05-08;Jyvaskyla;Tanssisalo Lutakko
Anssi Kela;2026-05-09;Turku;M/S Viking Grace
Dingo;2026-05-09;Helsinki;M/S Finlandia
Dingo;2026-05-15;Kuhmo;Hotelli Kainuu
Anssi Kela;2026-05-15;Vantaa;Tikkurilantori
Uniklubi;2026-05-16;Tuusula;Krapin Paja
Dingo;2026-05-22;Turku;M/S Viking Grace
Pete Parkkonen;2026-06-26;Tampere;Tavara-asema
Pete Parkkonen;2026-08-08;Helsinki;Allas Live
Anssi Kela;2026-08-27;Helsinki;Huvila-teltta
Samu Haber;2026-09-18;Helsinki;Kulttuuritalo
Eva Dahlgren;2026-09-24;Turku;Logomo
Eva Dahlgren;2026-09-25;Helsinki;Kulttuuritalo
Anssi Kela;2026-11-18;Turku;Logomo
Orion;2026-12-05;Tampere;Tavara-asema
Hector;2026-12-05;Helsinki;Veikkaus Arena

Tässä keikat on lueteltu peräkkäisillä riveillä aikajärjestyksessä, mutta yllä luetellut rivit voisivat olla missä järjestyksessä tahansa.

Sekä esiintyjien että esiintymispaikkojen nimissä voi olla useita sanoja. Jos näin on, kyselyissä pitää käyttää lainausmerkkejä, kuten on esitetty jäljempänä tulevissa esimerkeissä. Toisaalta ohjelmaa toteuttaessasi asiasta ei tarvitse sen suuremmin välittää, sillä annettu split-funktio osaa hoitaa asian oikein.

Annettujen päivämäärien pitää olla mahdollisia päivämääriä. Asia pitää tarkistaa, mikä onnistuu helposti koodipohjassa annetun funktion is_valid_date avulla.

Tiedoston käsittelyyn liittyvät virhetarkistukset

Kun ohjelma käynnistyy, se lukee käyttäjältä syötetiedoston nimen seuraavasti:

Give a name for input file: data.txt

Mikäli syötetiedostoa ei saa avattua luettavaksi, tulostetaan käyttäjälle teksti:

Error: File could not be read.

Tämän jälkeen ohjelman suoritus päättyy ilman mitään muita tulosteita paluuarvoon EXIT_FAILURE.

Mikäli syötetiedosto saadaan avattua, mutta tiedosto ei ole yllä esitetyn määrittelyn mukainen, tulostetaan virheilmoitus:

Error: Invalid format in file.

ja lopetetaan ohjelman suoritus paluuarvoon EXIT_FAILURE. Näin käy, jos esimerkiksi joltakin riviltä löytyy jotakin muuta kuin neljä tekstin pätkää puolipisteellä eroteltuna tai jos jokin tekstin pätkistä on tyhjä.

Kuitenkin jos päivämäärä on mahdoton, tulostetaan virheilmoitus:

Error: Invalid date.

Syötetiedostostosta tarkistetaan kaksoisbuukkaukset. Jos syötetiedoston perusteella jollakin artistilla olisi samaan aikaan useampi keikka (mahdollisesti eri paikoissa), tulostetaan virheilmoitus:

Error: Already exists.

Sama virheilmoitus tulostetaan, jos jossakin keikkapaikassa on useita keikkoja samaan aikaan (mahdollisesti eri artisteilla). Näissäkin tapauksissa ohjelman suoritus lopetetaan paluuarvoon EXIT_FAILURE.

Myös joihinkin komentoihin liittyy virheilmoituksia. Niistä kerrotaan kunkin komennon yhteydessä.

Yleistä komennoista ja virheilmoituksista

Ohjelma jäsentelee tiedostosta lukemansa rivit ja tallentaa tiedot artisteista ja heidän keikoistaan sopivaan sisäiseen tietorakenteeseen.

Kun tiedosto on luettu, ohjelma aloittaa varsinaisen suorituksensa. Aina kun käyttäjältä odotetaan syötettä, tulostetaan rivin alkuun kehote:

gigs>

johon ohjelman käyttäjä voi syöttää seuraavien kohtien komentoja.

Kullakin komennolla on 0-4 parametria. Jos parametreja on liian vähän, ohjelma antaa virheilmoituksen:

Error: Invalid input.

Jos parametreja on liikaa, ylimääräisistä parametreista ei välitetä. Niistä ei anneta virheilmoitusta, ne vain jätetään käyttämättä.

Parametrit ovat yleensä esiintyjiä ja/tai esiintymispaikkoja. Jos näistä halutaan esimerkiksi tulostaa jotakin, ohjelma tarkistaa, että kyseinen esiintyjä/paikka löytyy tietorakenteesta. Jos näin ei ole, ohjelma kertoo asiasta virheilmoituksella, joka näkyy kyseisten komentojen kohdalla vähän myöhemmin.

Jos taas komennolla lisätään uusi keikka, ohjelma tarkistaa, että lisäys on mahdollinen (ei kaksoisbuukkauksia), ja ilmoittaa tarvittaessa virheestä.

Jos käyttäjä antaa jonkin muun komennon, kuin luetellaan seuraavissa kohdissa, ohjelma tulostaa virheilmoituksen:

gigs> xyz
Error: Invalid input.
gigs>

Kun käyttäjän syöttämä komento on suoritettu, ohjelma tulostaa kehotteen uudelleen. Tätä jatketaan kunnes käyttäjä syöttää käskyn QUIT.

Komennoissa sallitaan sekä pienet että isot kirjaimet. (Tässä voit käyttää char-tyypin toupper-funktiota. Ennen kuin vertaat käyttäjän antamaa syötettä esim. sanaan QUIT, muuta syötteessä olevan komennon kaikki kirjaimet isoiksi.)

Toteutettavat komennot (virheilmoituksineen)

Kaikki tässä kohdassa luetellut komennnot pitää toteuttaa toimivasti, jotta saisit projektista pisteitä.

  • QUIT - Ohjelman suoritus päättyy paluuarvoon EXIT_SUCCESS ilman, että ohjelma tulostaa mitään.

  • ARTISTS - Komento tulostaa aakkosjärjestyksessä kaikki artistit allekkain. Esimerkiksi:

    gigs> ARTISTS
    All artists in alphabetical order:
    Anssi Kela
    Dingo
    Eva Dahlgren
    Hector
    Olavi Uusivirta
    Orion
    Pete Parkkonen
    Samu Haber
    Uniklubi
    gigs>
    

    Tässä aakkosjärjestyksellä tarkoitetaan ASCII-koodien mukaista järjestystä. Se on muuten kuten aakkosjärjestys, mutta kaikki isot kirjaimet edeltävät kaikkia pieniä kirjaimia. Esimerkiksi jos edellä Anssi Kela olisi kirjoitettu pienellä alkukirjaimella (anssi kela), se olisi tulostettu listan viimeiseksi.

  • ARTIST <esiintyjä> - Komento tulostaa annetun esiintyjän keikat aikajärjestyksessä allekkain. Esimerkiksi:

    gigs> ARTIST Dingo
    Artist Dingo has the following gigs in the order they are listed:
     - 2026-05-09 : Helsinki, M/S Finlandia
     - 2026-05-15 : Kuhmo, Hotelli Kainuu
     - 2026-05-22 : Turku, M/S Viking Grace
    gigs>
    

    Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan virheilmoitus:

    gigs> ARTIST
    Error: Invalid input.
    gigs>
    

    Jos parametriksi annetaan tuntematon artisti, ohjelma tulostaa virheilmoituksen:

    gigs> ARTIST xyz
    Error: Not found.
    gigs>
    

    Artistin nimi voi koostua useasta sanasta. Jotta tällainen nimi osattaisiin tulkita yhdeksi parametriksi, pitää käyttää lainausmerkkejä. Esimerkiksi:

    gigs> ARTIST "Anssi Kela"
    Artist Anssi Kela has the following gigs in the order they are listed:
     - 2026-05-09 : Turku, M/S Viking Grace
     - 2026-05-15 : Vantaa, Tikkurilantori
     - 2026-08-27 : Helsinki, Huvila-teltta
     - 2026-11-18 : Turku, Logomo
    gigs>
    

    Vaikka artistin nimessä olisi vain yksi sana, lainausmerkkejä saa silti käyttää. Esimerkiksi komennot ARTIST Dingo ja ARTIST "Dingo" tuottavat saman tuloksen.

  • STAGES - Komento tulostaa aakkosjärjestyksessä kaikki esiintymispaikat allekkain, ensin paikkakunta ja sitten esiintymispaikka pilkulla erotettuina. (Tässäkin käytetään ASCII-koodijärjestystä kuten komennossa ARTISTS.) Esimerkiksi:

    gigs> STAGES
    All gig places in alphabetical order:
    Helsinki, Allas Live
    Helsinki, Huvila-teltta
    Helsinki, Kulttuuritalo
    Helsinki, M/S Finlandia
    Helsinki, Veikkaus Arena
    Jyvaskyla, Tanssisalo Lutakko
    Kuhmo, Hotelli Kainuu
    Tampere, Tavara-asema
    Turku, Logomo
    Turku, M/S Viking Grace
    Tuusula, Krapin Paja
    Vantaa, Tikkurilantori
    gigs>
    

    Paikkakunnalla voi olla useita esiintymispaikkoja. Tällöin tulostetaan aakkosjärjestyksessä (ASCII-koodijärjestyksessä) ensin paikkakunnan mukaan ja sitten esiintymispaikan mukaan.

  • STAGE <esiintymispaikka> - Komento tulostaa allekkain ne esiintyjät, joilla on keikka annetulla esiintymispaikalla. Esiintyjät tulostetaan aakkosjärjestyksessä (ASCII-koodijärjestyksessä). Esimerkiksi:

    gigs> STAGE Kulttuuritalo
    Stage Kulttuuritalo has gigs of the following artists:
     - Eva Dahlgren
     - Samu Haber
    gigs>
    

    Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon ARTIST yhteydessä vastaavassa tilanteessa.

    Jos parametriksi annetaan tuntematon esiintymispaikka, tulostetaan sama virheilmoitus kuin komennon ARTIST yhteydessä vastaavassa tilanteessa.

    Esiintymispaikan nimi voi koostua useasta sanasta. Tällöin käytetään lainausmerkkejä vastaavalla tavalla, kuin kerrottiin komennon ARTIST kohdalla. Lainausmerkkejä saa käyttää myös yhden sanan nimissä.

  • ADD_GIG <esiintyjä> <pvm> <paikkakunta> <esiintymispaikka> - Komento lisää tietorakenteeseen annetulle artistille annetun keikan (päivämäärineen ja paikkoineen) ja tulostaa tekstin Gig added. Esimerkiksi:

    gigs> ARTIST Uniklubi
    Artist Uniklubi has the following gigs in the order they are listed:
     - 2026-05-16 : Tuusula, Krapin Paja
    gigs> ADD_GIG Uniklubi 2026-06-06 Huittinen Lautarokki
    Gig added.
    gigs> ARTIST Uniklubi
    Artist Uniklubi has the following gigs in the order they are listed:
     - 2026-05-16 : Tuusula, Krapin Paja
     - 2026-06-06 : Huittinen, Lautarokki
    gigs>
    

    Jos esiintyjä on ennestään tuntematon, komento tulostaa myös tekstin Artist added. Esimerkiksi:

    gigs> add_gig "Jannika B" 2026-06-06 Kouvola "Kouvolan Wiinijuhlat"
    Artist added.
    Gig added.
    gigs>
    

    Keikan lisääminen näkyy komentojen ARTIST ja STAGE tulostuksissa. Jos esiintyjä on uusi, se näkyy myös komennon ARTISTS tulostuksessa. Jos keikkapaikka on uusi, se näkyy myös komennon STAGES tulostuksessa.

    Komennolla pitää olla ainakin neljä parametria. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon ARTIST yhteydessä vastaavassa tilanteessa.

    Päivämäärän oikeellisuus pitää tarkistaa. Tämän voi tehdä kutsumalla koodipohjan funktiota is_valid_date. Jos käyttäjä antaa mahdottoman päivämäärän, ohjelma tulostaa virheilmoituksen:

    gigs> ADD_GIG Uniklubi 2027-02-29 Huittinen Lautarokki
    Error: Invalid date.
    gigs>
    

    Yllä annettu päivämäärä on mahdoton, koska vuosi 2027 ei ole karkausvuosi. Muita mahdottomia päivämääriä ovat esimerkiksi sellaiset, joissa kuukauden tai päivän numero on liian suuri tai joissa numeroiden tai väliviivan tilalla on joitakin muita merkkejä. Keikkoja voi varata vuoteen 2030 asti, eli tätä suurempia vuosilukuja ei sallita.

    Esiintyjällä ei voi olla useita keikkoja samana päivänä, eikä samassa esiintymispaikassa voi olla useita esiintyjiä samaan aikaan. Molemmissa tapauksissa tulostetaan sama virheilmoitus. Jos oletaan, että Uniklubille lisättiin edellä Lautarokin keikka päivämäärälle 2026-06-06, niin ohjelma antaa seuraavat virheilmoitukset:

    gigs> ADD_GIG Uniklubi 2026-06-06 x y
    Error: Already exists.
    gigs> ADD_GIG xy 2026-06-06 Huittinen Lautarokki
    Artist added.
    Error: Already exists.
    gigs>
    

    (Yllä olevan esimerkin jälkimmäisessä ADD_GIG-komennossa artisti xy on ennestään tuntematon, joten komento tulostaa tekstin "Artist added.", mutta tämän tulostuksen voi jättää poiskin, sillä keikkaahan ei tässä kuitenkaan pystytä lisäämään.)

    Huomaa, että ADD_GIG-komennossa tehdään aika lailla samoja asioita kuin silloin, kun syötetiedostoa luetaan ja sen sisältö tallennetaan tietorakenteeseen. Voitko siis hyödyntää aikaisemmin kirjoittamaasi koodia?

  • CANCEL <esiintyjä> <pvm> - Komento peruu annetun esiintyjän kaikki keikat annetusta päivämäärästä lähtien. Lisäksi komento tulostaa tekstin Artist's gigs from the given date on cancelled. Esimerkiksi:

    gigs> artist "Anssi Kela"
    Artist Anssi Kela has the following gigs in the order they are listed:
     - 2026-05-09 : Turku, M/S Viking Grace
     - 2026-05-15 : Vantaa, Tikkurilantori
     - 2026-08-27 : Helsinki, Huvila-teltta
     - 2026-11-18 : Turku, Logomo
    gigs> cancel "Anssi Kela" 2026-08-27
    Artist's gigs from the given date on cancelled.
    gigs> artist "Anssi Kela"
    Artist Anssi Kela has the following gigs in the order they are listed:
     - 2026-05-09 : Turku, M/S Viking Grace
     - 2026-05-15 : Vantaa, Tikkurilantori
    gigs>
    

    Artistilla ei välttämättä ole keikkaa annettuna päivänä, mutta kyseisen päivän jälkeiset keikat perutaan.

    Jos artistilla ei ole keikkoja annetun päivämäärän jälkeen eli ei ole mitään peruttavaa, ohjelma ilmoittaa asiasta. Esimerkiksi jos Anssi Kelan keikat peruttiin jo 2026-08-27 lähtien, ja yritetään samaa komentoa uudelleen, ohjelma tulostaa virheilmoituksen:

    gigs> CANCEL "Anssi Kela" 2026-08-27
    Error: No gigs after the given date.
    gigs>
    

    Komennolla pitää olla ainakin kaksi parametria. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon ARTIST yhteydessä vastaavassa tilanteessa.

    Jos poistettava esiintyjä on tuntematon, tulostetaan virheilmoitus:

    gigs> CANCEL xyz 2026-06-06
    Error: Not found.
    gigs>
    

    Jos annettu päivämäärä on mahdoton, annetaan sama virheilmoitus kuin komennon ADD_GIG kohdalla. Jos molemmat parametrit ovat virheellisiä (tuntematon artisti ja mahdoton päivämäärä), ilmoitetaan vain ensimmäisestä virheestä.

Edellä kuvatuissa lisäys- ja peruutuskomennoissa riittää tehdä muutos tietorakenteeseen. Vastaavaa muutosta ei tarvitse tehdä tiedostoon.

Vihjeitä

  • Voit käyttää syötetiedoston ja käyttäjän antamien syötteiden paloitteluun koodipohjan split-funktiota. Se osaa käsitellä syötteissä olevat lainausmerkit oikein.

  • Muistathan, että iteraattori muuttuu käyttökelvottamaksi, kun säiliöön lisätään alkioita tai niitä poistetaan.

  • Muista, että oletuksena ohjelma käännetään build-hakemistoon, ja oletuksena myös syötetiedostoa yritetään etsiä sieltä. Testaamista varten kannattaa siis siirtää syötetiedosto build-hakemistoon.

  • Testerin kääntäjän versio on c++17. Huomaa siis, että uudemmat ominaisuudet, esim. algoritmikirjaston transform-funktio, eivät toimi.

  • Ennen ohjelman toteuttamista, mieti huolellisesti, miten rakennat ohjelman niin, että pystyt vastaamaan annettuihin vaatimuksiin.

    • Voit joko valita sellaisen tietorakenteen, jossa haluttu järjestys on valmiina, tai voit aina halutessasi lajitella tietorakenteen alkiot sopivan kriteerin mukaan.

  • Mieti myös, miten ohjelma kannattaa jakaa osiin. Halutessasi voit käyttää luokkia, mutta niiden käyttämättä jättämisestä ei sakoteta. Oleellisempaa on, että osaat jakaa koodin sopivankokoisiin funktioihin.

  • Huomaa, että syötetiedostoa lukiessasi tallennat artistien ja keikkojen tietoja. Mieti, miten voisit hyödyntää samaa koodia toteuttaessa komennon ADD_GIG. Tämä on tärkeää välttääksesi toisteista koodia.

Ohjelman toteuttaminen osissa

Ohjelman toteutus muodostuu pääpiirteiltään kolmesta osasta:

  • tietorakenteen valinta ja tiedoston lukeminen tietorakenteeseen

  • käyttöliittymä

  • hakualgoritmit.

Mieti tarkasti, missä järjestyksessä nuo kannattaa toteuttaa, jotta voit toteuttaa ja testata ne yksi kerrallaan, ennen kuin siirryt seuraavaan vaiheeseen. Vähimmäisvaatimuksena versionhallinnan käyttämiselle on, että nämä kolme osaa on toteutettu omina committeinaan, mutta parempi tietenkin olisi että committeja olisi enemmän. Voit myös jakaa yllä olevia osia useampiin committeihin.

Erityisvaatimukset

Seuraavia vaatimuksia on noudatettava, mikäli haluaa työstä hyväksytyn arvosanan:

  • Syötetiedoston saa lukea vain kerran ohjelman suorituksen aikana.

    • Tästä syystä sinun pitää lukea tiedoston tiedot STL:n tietorakenteisiin. Sen jälkeen kaikki haut, lisäykset ja poistot pitää kohdistua valittuihin tietorakenteisiin (eikä siis syötetiedostoon).

  • Työssä pitää käyttää STL-kirjastoa, ei esimerkiksi Boost-kirjastoa.

Arviointi

Jotta työ päätyisi assistenttien arvioitavaksi, sen pitää ensin läpäistä automaattitestit. Automaattitestit eivät hyväksy ohjelmaa, jonka kääntäminen tuottaa varoituksia. Jos saat automaattitesteistä 0 pistettä, myös lopullinen pistemääräsi on 0, eikä työ mene assistenttien arvioitavaksi.

Assistentti arvioi ja pisteyttää automaattitestit läpäisseistä (= 1 p) sekä tehtävänannon erikoisvaatimukset täyttävistä töistä viimeisimmän Plussa-palautuksen, joka on tehty määräajan loppuun mennessä, seuraavien arviointikriteerien mukaan:

  • Ratkaisun yleisperiaate: 0-20 pistettä:

    • Tehtävän osaamistavoitteet on saavutettu.

    • Ohjelmakoodi on jaettu funktioita, luokkia ja/tai metodeita käyttäen loogisiksi kokonaisuuksiksi, jotka ovat sopivan pituisia.

    • Tietorakenne ei sisällä toisteista eikä turhaa tietoa. Valittuja tietorakenteita on käytetty järkevästi.

    • Ohjelmakoodi ei sisällä turhaa toisteisuutta eikä muutakaan turhaa.

    • Ohjelmakoodi ei sisällä tarpeettomia rajoitteita tai oletuksia tai muita väkinäisiä ratkaisuita.

    • Ohjelmarakenteet on toteutettu helposti ymmärrettäviksi.

    • Ohjelmakoodissa ei ole käytetty globaaleja muuttujia (globaalit const-vakiot ovat OK).

    • Ohjelman toimintaa ei lopeteta exit-funktiota käyttäen.

  • Ohjelmointityyli: 0-20 pistettä:

    • Huomaa tämän kierroksen luku Tyyliseikkoja.

    • Muuttujat ja funktiot nimetty selkeästi ja kuvaavasti. Nimeämisessä on käytetty vain yhtä kieltä, ei esim. suomea ja englantia sekaisin.

    • Ohjelmassa on käytetty nimettyjä vakioita taikalukujen sijasta.

    • Ohjelmakoodi on asemoitu siististi.

    • Koodirivien pituus on enintään 80 merkkiä.

    • Jokaisen itse kirjoittamasi/editoimasi tiedoston alussa on kommentti, josta käy ilmi tiedoston tarkoitus, työn tekijä(t) ja muut tarvittavat tiedot.

    • Jokaisen funktion/metodin alussa (otsikkotiedostossa jos sellainen on) on kommentti, joka kuvaa sen toiminnan, paluuarvon ja parametrit.

    • Kommentteja on muutenkin tarpeellisissa kohdissa.

    • Kommentit liittyvät toteutettuun ohjelmaan eivätkä johonkin sen aikaisempaan versioon.

    • Kaikki kommentit on kirjoitettu samalla kielellä (fi/en), mutta kommentoinnissa saa käyttää eri kieltä kuin muuttujien ym. nimissä.

    • Kaikki muuttujat on alustettu.

    • Kääntäjä ei anna koodia käännettäessä varoituksia.

  • Versionhallinnan käyttö: 0-10 pistettä:

    • Committeja on riittävä määrä.

    • Commit-viestien sisältö on selkeä ja kuvaava.

Huomautus arvioinnista

Automaattitesteillä tarkistetaan, toimiiko ohjelma. Assistentit taas kiinnittävät huomiota tyyliseikkoihin ym. yllä lueteltuihin kriteereihin. Periaatteessa on siis mahdollista, että täysin toimivasta ohjelmasta saa nolla pistettä, jos ohjelma ei täytä yllä lueteltuja vaatimuksia.

Erityisesti tyylivaatimuksista on kerrottu tämän kierroksen aikaisemmassa materiaaliosiossa.

Huomautus arvosteltavan työn versiosta

Arvosteluun otetaan ohjelman se versio, josta on tehty viimeisin onnistunut Plussa-palautus (määräaikaan mennessä). Onnistuneella palautuksella tarkoitetaan palautusta, joka on läpäissyt automaattitestit.

Ensimmäisen onnistuneen Plussa-palautuksen jälkeen haluat todennäköisesti vielä korjailla koodisi tyyliä (esim. lisätä kommentteja), jos vain palautusaikaa on vielä jäljellä.

Muista lopuksi kuitenkin tämä: Kun olet palauttanut viimeisen version Gittiin, palauta se vielä kerran Plussaan.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.