Kierros 9, tehtävä 1
Olioiden luonti ja käyttö (150 p)
Tässä tehtävässä
harjoitellaan erityisesti seuraavia asioita:
- olion luonti
- olion luokan metodien kutsuminen
Opetusmonisteen ja luentojen lisäksi voit tutustua aiheeseen
katsomalla olio-ohjelmointia käsitteleviä videoita
sivulla
http://www.cse.hut.fi/fi/opetusmateriaali/videoprojekti/python.html
Tutustu alla kuvattuun luokkaan
Tyontekija. Tee Eclipseen uusi projekti,
jonka nimi on
tehtava9_1. Luo
sitten tähän projektiin moduuli tyontekija ja kopioi siihen annettu
Tyontekija-luokan koodi.
Sinun ei siis tarvitse
kirjoittaa luokkaa itse. Sinä et myöskään saa tehdä Tyontekija-luokaan
mitään muutoksia tai lisäyksiä.
Luokka Tyontekija sisältää seuraavat metodit
- __init__(self, annettu_nimi, annettu_palkka)
- Metodi, jonka avulla luodaan uusi Tyontekija-olio.
Metodille annetaan parametrina luotavan työntekijän nimi
ja tuntipalkka.
Luodun työntekijän työtunnit ovat 0.0.
- kerro_nimi(self)
- Metodi palauttaa työntekijän nimen.
- kerro_tuntipalkka(self)
- Metodi palauttaa työntekijän tuntipalkan.
- kerro_tyotunnit(self)
- Metodi palauttaa työntekijän tekemät työtunnit.
- muuta_tuntipalkka(self, uusi_palkka)
- Metodi muuttaa työntekijän tuntipalkan. Uusi tuntipalkka
annetaan parametrina. Jos parametri on negatiivinen, metodi ei tee
mitään.
- lisaa_tyotunteja(self, tunnit)
- Metodi lisää työntekijän työtunteja parametrina annetulla
määrällä, jos parametri on positiivinen. Jos parametri ei ole
positiivinen, metodi ei tee mitään.
- laske_kokonaispalkka(self)
- Metodi laskee ja palauttaa työntekijän kokonaispalkan.
- __str__(self)
- Metodi palauttaa merkkijonon, joka sisaltaa tyontekijan nimen,
tuntipalkan ja tyotunnit.
Luo samaan projektiin (tehtava9_1) moduuli tyontekijoita ja kirjoita siihen
pääohjelma, joka tekee seuraavat asiat (samassa järjestyksessä kuin
alla):
- Luo uuden Tyontekija-olion, jonka nimi on Matti Virtanen ja tuntipalkka
14.50 euroa.
- Lisää tälle Tyontekija-oliolle 18.0 työtuntia.
- Tulostaa tämän Tyontekija-olion kokonaispalkan kahden desimaalin
tarkkuudella käyttämällä
hyväksi laske_kokonaispalkka-metodia.
- Pyytää ja lukee käyttäjältä toisen työntekijän nimen.
- Pyytää ja lukee käyttäjältä toisen työntekijän tuntipalkan.
- Luo uuden Tyontekija-olion, jolla on käyttäjän antama nimi ja
tuntipalkka.
- Pyytää ja lukee käyttäjältä toisen työntekijän työtunnit.
- Lisää toiselle Tyontekija-oliolle käyttäjän antamat työtunnit.
- Tulostaa toisen Tyontekija-olion kokonaispalkan kahden desimaalin
tarkkuudella käyttämällä
hyväksi laske_kokonaispalkka-metodia.
- Pyytää ja lukee käyttäjältä ensimmäiselle Tyontekija-oliolle
lisättävät työtunnit.
- Lisää ensimmäiselle Tyontekija-oliolle käyttäjän antamat työtunnit.
- Tulostaa ensimmäisen Tyontekija-olion kokonaispalkan kahden desimaalin
tarkkuudella käyttämällä
hyväksi laske_kokonaispalkka-metodia.
- Tulostaa molempien luotujen tyontekijoiden tiedot käyttämällä hyväksi
Tyontekija-luokan __str__-metodia.
Ole tarkka siitä, että ohjelmasi tulostus on täsmälleen (välimerkkejä
myöten) alla olevan mallin mukainen.
Voit olettaa, että käyttäjän antama
syöte on virheetöntä (käyttäjä antaa desimaalilukuja silloin, kun
häneltä pyydetään palkkoja tai työtunteja). Ohjelmasi ei tarvitse
huomauttaa mitään, vaikka käyttäjä antaisi ei-järkeviä arvoja (esim.
negatiivisia työtunteja). Luokan Tyontekija metodit pitävät huolen siitä,
että negatiivisia arvoja ei käytetä väärin.
Palauta Gobliniin tiedosto tyontekijoita.py
Esimerkki ohjelman suorituksesta:
[ohjelman suoritus alkaa]
Matin kokonaispalkka on 261.00 euroa.
Anna toisen tyontekijan nimi.
Minna Lahtinen
Anna toisen tyontekijan tuntipalkka.
15.48
Anna toisen tyontekijan tyotunnit.
34.0
Uuden tyontekijan kokonaispalkka on 526.32 euroa.
Anna Matille lisattavat tyotunnit.
16.5
Matin kokonaispalkka on nyt 500.25 euroa.
Tyontekijoiden tiedot nyt:
Matti Virtanen, tuntipalkka 14.5 eur / h, tyotunnit 34.5 h.
Minna Lahtinen, tuntipalkka 15.48 eur / h, tyotunnit 34.0 h.
[ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta