(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.