Kierros 5, tehtävä 3

Osaston palkkakulut (200 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava5_3, ja tähän projektiin moduuli palkkalaskuri. Kirjoita moduuliin ohjelma, joka laskee erään osaston työntekijöiden yhteispalkan viikon ajalta, kun myös ylityökorvaukset otetaan huomioon.

Ohjelman pääohjelmassa kysytään ensin työntekijöiden lukumäärä. Tämän jälkeen pääohjelma kutsuu jokaiselle työntekijälle erikseen funktiota lue_ja_laske_tyontekijan_tiedot, joka kysyy työntekijän tuntipalkan ja sen jälkeen työntekijän työtunnit erikseen viideltä päivältä (oletetaan, että osaston työntekijät eivät työskentele viikonloppuisin). Kunkin työpäivän osalta funktio laskee työntekijän yhden päivän palkan käyttämällä apuna funktiota laske_paivapalkka. Päiväpalkan laskemisessa otetaan huomioon myös mahdolliset ylityökorvaukset. Funktio lue_ja_laske_tyontekijan_tiedot laskee eri päivien palkat yhteen. Funktioiden tarkemmat kuvaukset ovat alempana.

Kirjoita ohjelmaan seuraavat funktiot:

Vinkkejä tietojen lukemiseen

Raw_input-käskyn parametrina olevassa merkkijonossa (käyttäjälle tulostettava kehote) voi käyttää merkkijonon muotoilua ihan samalla tavalla kuin print-käskyssä. Tarvitset tätä, kun pyydät i:nnen työntekijän tuntipalkkaa.

Kun käyttäjältä pyydetään eri päivien tuntimääriä, voi niiden lukemiseen käyttää raw_input-käskyä ilman parametreja eli raw_input-käskyyn tulee tyhjät sulut. Näin käyttäjälle ei tulosteta mitään ennen kunkin päivän työtuntien lukemista. Käyttäjälle ennen ensimmäisen päivän työtuntien lukemista annettava kehote voidaan tulostaa print-käskyllä.

Tehtävän palautuksesta ja virheistä

Funktion lue_ja_laske_tyontekijan_tiedot on siis tarkistettava, että sille annetut työtunnit ovat oikealla välillä ja tuntipalkka vähintään 0, kuten funktion kuvauksessa on kerrottu (jos tarkistuksen toteuttaminen tuntuu vaikealta, voit ensin kirjoittaa ohjelman ilman tarkistusta ja lisätä tarkistuksen sitten, kun ohjelma toimii muuten oikein). Muuten voit olettaa, että käyttäjän antama syöte on järkevää ja oikeassa muodossa.

Testaa jälleen ohjelmaasi ajamalla sitä itse Eclipsessä useilla eri arvoilla ja tarkistamalla, että ohjelman tulostama kokonaispalkka on oikea. (Voit halutessasi lyhentää testiajoja pienentämällä väliaikaisesti viikonpäivien lukumäärää. Muuta kuitenkin muuttaa päivien lukumäärä takaisin oikeaksi, ennen kuin palautat ohjelmasi Gobliniin.) Kun ohjelmasi näyttää toimivan oikein, palauta Gobliniin palkkalaskuri.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Ohjelma laskee osaston tyontekijoiden palkkasumman.
Anna tyontekijoiden lukumaara.
2
Anna 1. tyontekijan tuntipalkka.
12.5
Anna tyontekijan eri paivien tyotunnit, kukin omalla rivillaan.
7.5
6.5
10.2
8.7
4.0
Anna 2. tyontekijan tuntipalkka.
10.0
Anna tyontekijan eri paivien tyotunnit, kukin omalla rivillaan.
7.5
3.5
2.5
4.5
10.0
Palkkasumma on 785.00 euroa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Ohjelma laskee osaston tyontekijoiden palkkasumman.
Anna tyontekijoiden lukumaara.
1
Anna 1. tyontekijan tuntipalkka.
10.0
Anna tyontekijan eri paivien tyotunnit, kukin omalla rivillaan.
7.5
-1.0
Virhe tyotunneissa, anna uudelleen!
27.5
Virhe tyotunneissa, anna uudelleen!
25.0
Virhe tyotunneissa, anna uudelleen!
5.0
0.0
8.0
6.5
Palkkasumma on 272.50 euroa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Ohjelma laskee osaston tyontekijoiden palkkasumman.
Anna tyontekijoiden lukumaara.
0
Palkkasumma on 0.00 euroa.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Ohjelma laskee osaston tyontekijoiden palkkasumman.
Anna tyontekijoiden lukumaara.
2
Anna 1. tyontekijan tuntipalkka.
-12.0
Virhe tuntipalkassa, anna uudelleen!
-1.0
Virhe tuntipalkassa, anna uudelleen!
11.7
Anna tyontekijan eri paivien tyotunnit, kukin omalla rivillaan.
4.5
2.5
6.5
7.7
2.1
Anna 2. tyontekijan tuntipalkka.
-2.0
Virhe tuntipalkassa, anna uudelleen!
0.0
Anna tyontekijan eri paivien tyotunnit, kukin omalla rivillaan.
7.5
7.5
7.5
7.5
7.5
Palkkasumma on 273.78 euroa.
[ohjelman suoritus päättyy]

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