Kierros 7, tehtävä 2

Puhelinluettelo (220 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asoita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava7_2. Luo sitten tähän projektiin moduli puhelinluettelo ja kirjoita siihen ohjelma, jota käyttäjä voi käyttää puhelinluettelona.

Opetusmonisteessa on esimerkkejä siitä, miten puhelinluettelon voi toteuttaa Pythonin sanakirjarakenteen avulla. Opetusmonisteen esimerkissä puhelinluettelon tiedot on kuitenkin annettu suoraan käskyissä. Sinun tehtävänäsi on kirjoittaa ohjelma, jonka avulla käyttäjä voi syöttää puhelinluetteloon uusia numeroita, muuttaa ja poistaa niitä sekä hakea puhelinnumeroa nimen perusteella.

Ohjelman alussa luodaan puhelinluetteloa varten tyhjä sanakirjarakenne. Tämän jälkeen ohjelma pyytää käyttäjää valitsemaan toiminnon seuraavasta listasta:

1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
Käyttäjän valinnan mukaan ohjelma suorittaa halutun toiminnon, esimerkiksi lisää sanakirjaan uuden nimi - puhelinnumero -parin. Numeron voi lisätä luetteloon vain, jos samalla nimellä ei jo ole luettelossa numeroa. Vastaavasti numeron voi muuttaa, poistaa tai hakea vain, jos halutulla nimellä on jo luettelossa numero. Muussa tapauksessa ohjelma antaa virheilmoituksen. Katso esimerkkiajosta tarkemmin, millainen ohjelman tulosteen pitää olla eri tilanteissa. Jos käyttäjä antaa jonkun muun valinnan kuin 1 - 5, ohjelma vain tulostaa mahdolliset valinnat uudelleen. Kun käyttäjä valitsee ohjelman lopetuksen, ohjelma vielä tulostaa "Ohjelma paattyy." ja lopettaa toimintansa.

Käyttäjälle annettava valikko kannattaa tulostaa print-käskyllä. Tämän jälkeen käyttäjän valinta luetaan raw_input-käskyllä, jolle ei ole annettu lainkaan tulostettavaa kehotetta (ei edes rivinvaihtomerkkiä). Voit katsoa mallia esimerkiksi 4.2. pidetyn luennon luentokalvojen valikko-ohjelmaesimerkistä. (Tosin luettua valintaa ei tarvitse välttämättä muuttaa kokonaisluvuksi, kuten esimerkissä oli tehty, koska tuossa vaiheessa kurssilla ei oltu vielä opetettu merkkijonojen vertailua. Windows-koneissa luettujen merkkijonojen lopussa voi kuitenkin olla ylimääräistä "roskaa", joten kannattaa lukea tehtävässä 6.2 annettu kommentti, jos haluaa vertailla suoraan merkkijonoja.)

Ohjelma tallentaa nimet siinä muodossa kuin käyttäjä on ne antanut. Jos esimerkiksi käyttäjä on antanut nimen muodossa "pekka", niin sitä ei löydetä haettaessa nimeä "Pekka".

Ohjelman rakennetta ei ole tässä määrätty sen tarkemmin, vaan saat itse suunnitella, mitä funktioita kirjoitat ohjelmaasi. Älä kuitenkaan kirjoita koko ohjelmaa yhdeksi pääohjelmaksi, vaan käytä myös muita funktioita järkevästi. Esimerkiksi eri toimintoja (numeron lisäys, haku jne) varten kannattaa kirjoittaa omat funktionsa, jotka saavat parametrina käytettävän sanakirjarakenteen.

Palauta Gobliniin tiedosto puhelinluettelo.py.

Vinkki: testausvaiheessa ohjelmaan kannattaa lisätä ylimäräinen valinta, joka vain tulostaa puhelinluettelon sisällön yhdellä print-käskyllä. Tämän avulla on helpompi testata sitä, onko luettelon sisältö eri vaiheissa se, mikä sen pitäisi olla. Poista kuitenkin tämä valinta ennen kuin palautat ohjelman Gobliniin.

Huomautus: ohjelmasta tulee huomattavasti käyttökelpoisempi, jos puhelinluettelon tiedot luetaan ohjelman alussa jostain tiedostosta ja tallennetaan ohjelman päätyttyä tiedostoon. Näin tiedot säilyvät ohjelman eri suorituskertojen välillä. Tätä ei kuitenkaan vaadita tässä tehtävässä.

Esimerkki ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
1
Anna lisattava nimi.
Virtanen Maija
Anna lisattava numero.
050-9955221
Lisays tehty!
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
1
Anna lisattava nimi.
Aalto Matti
Anna lisattava numero.
09-663219
Lisays tehty!
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
1
Anna lisattava nimi.
Virtanen Maija
Nimi on jo luettelossa, ei voida lisata.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
1
Anna lisattava nimi.
Virta Veijo
Anna lisattava numero.
06-7349727
Lisays tehty!
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
2
Mihin nimeen liittyvaa numeroa muutetaan?
Malli Anna
Nimi ei ole luettelossa, numeroa ei voida muuttaa.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
2
Mihin nimeen liittyvaa numeroa muutetaan?
Virta Veijo
Anna uusi numero.
0400-123456
Muutos tehty!
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
4
Kenen numeron haluat hakea?
Virta Veijo
Numero on 0400-123456.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
4
Kenen numeron haluat hakea?
aalto maija
Nimi ei ole luettelossa.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
6
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
3
Mihin nimeen liittyva numero poistetaan?
aalto maija
Nimi ei ole luettelossa, numeroa ei voida poistaa.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
3
Mihin nimeen liittyva numero poistetaan?
Virtanen Maija
Numero poistettu!
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
4
Kenen numeron haluat hakea?
Virtanen Maija
Nimi ei ole luettelossa.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
4
Kenen numeron haluat hakea?
Aalto Matti
Numero on 09-663219.
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
-1
Puhelinluettelo - valitse toiminto:
1. Lisaa uusi numero
2. Muuta numero
3. Poista numero
4. Hae numero
5. Lopeta
5
Ohjelma paattyy.
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta