Kierros 8, tehtävä 2

Lukujen lukeminen tiedostosta (150 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava8_2, ja tähän projektiin moduuli valityspalkkiot. Kirjoita sitten moduuliin ohjelma, joka lukee tiedostosta osakekauppojen arvoja. Ohjelma laskee ja tulostaa kaupoista tulevat välityspalkkiot sekä välityspalkkioiden summan. Tarkempi selostus ohjelmasta on alla.

Eräs pankki perii välittämistään osakaupoista välityspalkkiona yleensä 0,25 prosenttia ostetun tai myydyn osake-erän kokonaishinnasta. Jos kuitenkin näin laskettu palkkio olisi pienempi kuin 10 euroa, pankki perii 10 euron välityspalkkion.

Kirjoita Python-ohjelma, joka lukee tiedostosta yksittäisten osakekauppojen arvot. Arvot on tallennettu tekstitiedostoon niin, että kukin arvo (yksi desimaaliluku) on omalla rivillään. Rivillä ei ole mitään muuta tietoa. Ohjelma laskee ja tulostaa jokaisesta kaupasta tulevan myyntipalkkion esimerkkiajon mukaisesti. Lopuksi ohjelma tulostaa myyntipalkkioiden summan. Voit katsoa mallia tiedostoston muodosta tiedostosta osakekaupat1.txt ja vähän virheellisestä tiedostosta osakekaupat2.txt. Tallenna nämä tiedostot samaan hakemistoon ohjelmakoodisi kanssa ohjelmasi testaamista varten. Oikea hakemisto on Unix-koneissa tyohakemisto/tehtava8_2/src/, missä tyohakemisto on Eclipsessä käyttämäsi työtilan (workspace) hakemisto.

Jos tiedoston lukemisessa tapahtuu virhe (esimerkiksi haluttua tiedostoa ei ole olemassa), ohjelma tulostaa, että tiedoston lukemisessa on tapahtunut virhe ja lopettaa toimintansa. Jos tiedoston jollain rivillä on jotain muuta kuin yksi desimaaliluku, ohjelma tulostaa ilmoituksen virheellisestä luvusta ja lopettaa toimintansa. Ohjelma kuitenkin tulostaa ennen virheellistä riviä olleiden arvojen välityspalkkiot normaalisti.

Jos tiedoston jollain rivillä on negatiivinen luku, ohjelma laskee tämän osakekaupan välityspalkkioksi normaalin minimipalkkion 10 euroa.

Ohjelman rakennetta ei ole tässä määrätty sen tarkemmin. Ohjelmaa ei ole pakko jakaa useampaan funktioon, vaan saat kirjoittaa koko koodin yhteen pääohjelmaan.

Tarkista, että ohjelmasi tulostus on esimerkkiajon mallin mukainen. Kaikki rahamäärät on tulostettu kahden desimaalin tarkkuudella 11 merkin levyisiin kenttiin. Kenttien välillä on lisäksi yksi välilyönti. Poikkeuksena on välityspalkkioiden summa, jonka tulostuskentän leveyttä ei ole määrätty. Testaa ohjelmaasi ajamalla sitä itse ja käyttämällä eri luettavia tiedostoja (voit tehdä niitä helposti myös itse) ennen ohjelman palautusta Gobliniin. Palauta Gobliniin tiedosto valityspalkkiot.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Mista tiedostosta osakekauppojen arvot luetaan?
osakekaupat1.txt
Kauppasumma valityspalkkio (eur)
    1500.00       10.00
   14000.00       35.00
    2800.00       10.00
    1750.48       10.00
    3989.00       10.00
    4010.10       10.03
   12500.00       31.25
Valityspalkkiot yhteensa 116.28 euroa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostossa virheitä]
Mista tiedostosta osakekauppojen arvot luetaan?
osakekaupat2.txt
Kauppasumma valityspalkkio (eur)
   15000.40       37.50
    1850.00       10.00
Virheellinen luku tiedostossa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa, tiedostoa ei löydy]
Mista tiedostosta osakekauppojen arvot luetaan?
kauppatiedosto.txt
Virhe tiedoston kauppatiedosto.txt lukemisessa. Ohjelma paattyy.
[ohjelman suoritus päättyy]

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