(N) 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/06/student_register/ -> student/06/student_register/.

Ohjelma lukee tiedoston, joka sisältää tietoja opiskelijoista (opiskelijanumero, käyttäjätunnus, nimi, puhelinnumero, sähköposti ja skype). Syötetiedoston sisältö voi olla esimerkiksi tällainen:

123456;ted;Ted Techie;040 123546;ted@tuni.fi;tom_92_
987654;mike;Mike Mechanic;050 123546;mike@tuni.fi;-Mike-M-
246810;archie;Archie Architect;050 987654;archie@tuni.fi;

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ä. Muuttuneen tiedoston sisältö näyttää tältä:

246810;archie;Archie Architect;050 987654;archie@tuni.fi;
987654;mike;Mike Mechanic;050 123546;mike@tuni.fi;-Mike-M-
123456;ted;Ted Techie;040 777778;ted@tuni.fi;tom_92_

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.

  • Muista sijoittaa syötetiedostot niin, että ohjelmasi löytää ne. Tämä on neuvottu tehtävässä Tiedoston rivien numerointi.

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