(H) Opiskelijarekisteri

Tavoite: Opin käsittelemään osoittimia. Samalla kertaan myös tiedostojen käsittelyä sekä STL:n säiliöitä. Opin myös lukemaan toisen ohjelmoijan kirjoittamaa koodia.

Ohjeita: Hae ohjelmakoodipohja: templates/08/student_register/ -> student/08/student_register/.

Attention

Koodipohjan main.cpp-tiedostossa rivillä 77 lukee väärin kirjoitettu sana: Erroneuous. Jotta testit menisivät läpi, korjaa sana muotoon: Erroneous (poista ylimääräinen u-kirjain).

Ohjelmakoodipohjaa käytetään myös luentoesimerkkinä tämän kierroksen luennolla. Ohjelmakoodipohjassa esiintyy komennot new ja delete, mutta niistä ei tarvitse tässä vaiheessa välittää. Niihin pääset tarkemmin tutustumaan seuraavalla kierroksella.

Ohjelma lukee tiedoston, joka sisältää tietoja opiskelijoista (opiskelijanumero, käyttäjätunnus, nimi, puhelinnumero, sähköposti ja skype). Ohjelmassa on mahdollista tulostaa opiskelijoita sekä opiskelijanumeroiden että käyttäjätunnusten mukaisessa järjestyksessä.

Kumpaakin järjestystä varten ohjelmassa on oma map-rakenteensa. Kummankin map-rakenteen tietokenttänä on osoitin tietueeseen, joka sisältää edellä kerrotut tiedot opiskelijoista.

Tehtävänä on lisätä uusi toiminto, jolla opiskelijan puhelinnumeroa voidaan muuttaa. Toiminto muuttaa siis map-rakenteen sisältöä, mutta muutos pitää tehdä myös tiedostoon, josta opiskelijoiden tiedot luetaan ohjelman alussa.

Ohjelman tulee toimia seuraavasti:

Student file: data.txt
N                  = List ordered by student numbers
U                  = List ordered alphabetically by user ids
C <student_number> = Change the given student's phone number
Q                  = Quit

register> n
123456 ted
Ted Techie
040 123456
ted@tuni.fi
tom_92_

246810 archie
Archie Architect
050 987654
archie@tuni.fi


987654 mike
Mike Mechanic
050 123456
mike@tuni.fi
-Mike-M-

register> u
246810 archie
Archie Architect
050 987654
archie@tuni.fi


987654 mike
Mike Mechanic
050 123456
mike@tuni.fi
-Mike-M-

123456 ted
Ted Techie
040 123456
ted@tuni.fi
tom_92_

register> c 111111
There is no student with the given number!

register> c 123456
Enter a new phone number: 040 77777k

Erroneous phone number: 040 77777k

register> c 123456
Enter a new phone number: 040 777778

register> n
123456 ted
Ted Techie
040 777778
ted@tuni.fi
tom_92_

246810 archie
Archie Architect
050 987654
archie@tuni.fi


987654 mike
Mike Mechanic
050 123456
mike@tuni.fi
-Mike-M-

Yllä olevassa esimerkkiajossa näkyy myös mahdolliset virheilmoitukset.

Edellä näkyy muuttunut puhelinnumero, eli tieto on päivitetty map-rakenteeseen. Koska muutoskomennon parametrina on opiskelijanumero, niin tämä päivitys on luontevaa tehdä sen map-rakenteen kautta, joka on järjestetty opiskelijanumeroiden perusteella.

Koska puhelinnumero halutaan tallentaa pysyvästi, pelkkä map-rakenteen päivittäminen ei riitä, vaan muuttunut tieto pitää tallentaa myös tiedostoon, joka esimerkissä on data.txt. Kirjoita tallennettavat tiedot tiedostoon käyttäjätunnusten mukaisessa järjestyksessä.

Näiden toimenpiteiden jälkeen ohjelmalla on seuraava ominaisuus: Jos ohjelma ajetaan uudelleen ja sille annetaan tämä sama tiedosto, niin muuttunut tieto on heti näkyvissä, ennen kuin mitään uusia muutoksia on vielä tehty.

Vinkkejä tehtävän tekemiseen:

  • Tutustu ensimmäiseksi valmiina annettuun pääohjelmaan. Annetusta tietorakenteesta kannattaa piirtää kuva.
  • Muista, että tietorakenteen kenttiin viittaaminen vaihtelee sen mukaan, onko kenttänä osoitin vai ei.

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