Mikä tässä nyt on vielä vikana 2/4 pistettä sain oikein mutta haluaisin 4/4
https://tmc.mooc.fi/paste/lmqsqfGGyRAZ0K2vQuzcGA
src/main/java/Kassapaate.java public class Kassapaate { private double rahaa; // kassassa olevan käteisen määrä private int edulliset; // myytyjen edullisten lounaiden määrä private int maukkaat; // myytyjen maukkaiden lounaiden määrä public Kassapaate() { this.rahaa = 1000; // kassassa on aluksi 1000 euroa rahaa } public double syoEdullisesti(double maksu) { // edullinen lounas maksaa 2.50 euroa. if (maksu >= 2.5) { this.edulliset++; this.rahaa = this.rahaa + 2.50; return maksu - 2.50; } // päivitetään kassan rahamäärää lounaan hinnalla ja palautetaan vaihtorahat // jos parametrina annettu maksu ei ole riittävän suuri, ei lounasta myydä ja metodi palauttaa koko summan return maksu; } public double syoMaukkaasti(double maksu) { // maukas lounas maksaa 4.30 euroa. // päivitetään kassan rahamäärää lounaan hinnalla ja palautetaan vaihtorahat // jos parametrina annettu maksu ei ole riittävän suuri, ei lounasta myydä ja metodi palauttaa koko summan if (maksu >= 4.3) { this.maukkaat++; this.rahaa = this.rahaa + 4.3; return maksu - 4.3; } return maksu; } @Override public String toString() { return "kassassa rahaa " + rahaa + " edullisia lounaita myyty " + edulliset + " maukkaita lounaita myyty " + maukkaat; } } src/main/java/Maksukortti.java public class Maksukortti { private double saldo; public Maksukortti(double saldo) { this.saldo = saldo; } public double saldo() { return this.saldo; } public void lataaRahaa(double lisays) { this.saldo += lisays; } public boolean otaRahaa(double maara) { return false; } } src/main/java/Paaohjelma.java public class Paaohjelma { public static void main(String[] args) { Maksukortti pekanKortti = new Maksukortti(10); System.out.println("rahaa " + pekanKortti.saldo()); boolean onnistuiko = pekanKortti.otaRahaa(8); System.out.println("onnistuiko otto: " + onnistuiko); System.out.println("rahaa " + pekanKortti.saldo()); onnistuiko = pekanKortti.otaRahaa(4); System.out.println("onnistuiko otto: " + onnistuiko); System.out.println("rahaa " + pekanKortti.saldo()); } }
MOOC varmaan kertoo, mikä on vikana. Täältä voi olla vaikea saada vastausta, kun ei ole edes tehtävä tiedossa. Linkki vaatii kirjautumista.
Eikös tuohon viereen tulostu aika tarkkaan mitä sinun tulee vielä ohjelmoida. Sinun pitäisi luoda Kassapätteen syö* metodeit ottamaan vastaan parametrina maksukortti. OtaRahaa metodi palauttaa vakiosti aina false. Pieniä mutta oleellisia virheitä. Uskoisin että aika helpot virheet korjata.
mooc kirjoitti:
Ohjelmointitehtävä:
Maksukortti ja Kassapääte (4 osaa)"Tyhmä" Maksukortti
Teimme edellisessä osassa luokan Maksukortti. Kortilla oli metodit edullisesti ja maukkaasti syömistä sekä rahan lataamista varten.Edellisen osan tyylillä tehdyssä Maksukortti-luokassa oli kuitenkin ongelma. Kortti tiesi lounaiden hinnan ja osasi sen ansiosta vähentää saldoa oikean määrän. Entä kun hinnat nousevat? Tai jos myyntivalikoimaan tulee uusia tuotteita? Hintojen muuttaminen tarkoittaisi, että kaikki jo käytössä olevat kortit pitäisi korvata uusilla, uudet hinnat tuntevilla korteilla.
Parempi ratkaisu on tehdä kortit "tyhmiksi", hinnoista ja myytävistä tuotteista tietämättömiksi pelkän saldon säilyttäjiksi. Kaikki äly kannattaakin laittaa erillisiin olioihin, kassapäätteisiin.
Toteutetaan ensin Maksukortista "tyhmä" versio. Kortilla on ainoastaan metodit saldon kysymiseen, rahan lataamiseen ja rahan ottamiseen. Täydennä alla (ja tehtäväpohjassa) olevaan luokkaan metodin public boolean otaRahaa(double maara) ohjeen mukaan:
public class Maksukortti { private double saldo; public Maksukortti(double saldo) { this.saldo = saldo; } public double saldo() { return this.saldo; } public void lataaRahaa(double lisays) { this.saldo = this.saldo + lisays; } public boolean otaRahaa(double maara) { // toteuta metodi siten että se ottaa kortilta rahaa vain jos saldo on vähintään maara // onnistuessaan metodi palauttaa true ja muuten false } }Testipääohjelma:
public class Paaohjelma { public static void main(String[] args) { Maksukortti pekanKortti = new Maksukortti(10); System.out.println("rahaa " + pekanKortti.saldo()); boolean onnistuiko = pekanKortti.otaRahaa(8); System.out.println("onnistuiko otto: " + onnistuiko); System.out.println("rahaa " + pekanKortti.saldo()); onnistuiko = pekanKortti.otaRahaa(4); System.out.println("onnistuiko otto: " + onnistuiko); System.out.println("rahaa " + pekanKortti.saldo()); } }Tulostuksen kuuluisi olla seuraavanlainen
Esimerkkitulostus rahaa 10.0 onnistuiko otto: true rahaa 2.0 onnistuiko otto: false rahaa 2.0Kassapääte ja käteiskauppa
Unicafessa asioidessa asiakas maksaa joko käteisellä tai maksukortilla. Myyjä käyttää kassapäätettä kortin velottamiseen ja käteismaksujen hoitamiseen. Tehdään ensin kassapäätteestä käteismaksuihin sopiva versio.Kassapäätteen runko. Metodien kommentit kertovat halutun toiminnallisuuden:
public class Kassapaate { private double rahaa; // kassassa olevan käteisen määrä private int edulliset; // myytyjen edullisten lounaiden määrä private int maukkaat; // myytyjen maukkaiden lounaiden määrä public Kassapaate() { // kassassa on aluksi 1000 euroa rahaa } public double syoEdullisesti(double maksu) { // edullinen lounas maksaa 2.50 euroa. // kasvatetaan kassan rahamäärää edullisen lounaan hinnalla ja palautetaan vaihtorahat // jos parametrina annettu maksu ei ole riittävän suuri, ei lounasta myydä ja metodi palauttaa koko summan } public double syoMaukkaasti(double maksu) { // maukas lounas maksaa 4.30 euroa. // kasvatetaan kassan rahamäärää maukkaan lounaan hinnalla ja palautetaan vaihtorahat // jos parametrina annettu maksu ei ole riittävän suuri, ei lounasta myydä ja metodi palauttaa koko summan } public String toString() { return "kassassa rahaa " + rahaa + " edullisia lounaita myyty " + edulliset + " maukkaita lounaita myyty " + maukkaat; } }Kassapäätteessä on aluksi rahaa 1000 euroa. Toteuta yllä olevan rungon metodit ohjeen ja alla olevan pääohjelman esimerkkitulosteen mukaan toimiviksi.
public class Paaohjelma { public static void main(String[] args) { Kassapaate unicafeExactum = new Kassapaate(); double vaihtorahaa = unicafeExactum.syoEdullisesti(10); System.out.println("vaihtorahaa jäi " + vaihtorahaa); vaihtorahaa = unicafeExactum.syoEdullisesti(5); System.out.println("vaihtorahaa jäi " + vaihtorahaa); vaihtorahaa = unicafeExactum.syoMaukkaasti(4.3); System.out.println("vaihtorahaa jäi " + vaihtorahaa); System.out.println(unicafeExactum); } }Esimerkkitulostus
vaihtorahaa jäi 7.5 vaihtorahaa jäi 2.5 vaihtorahaa jäi 0.0 kassassa rahaa 1009.3 edullisia lounaita myyty 2 maukkaita lounaita myyty 1Kortilla maksaminen
Laajennetaan kassapäätettä siten että myös kortilla voi maksaa. Teemme kassapäätteelle siis metodit joiden parametrina kassapääte saa maksukortin jolta se vähentää valitun lounaan hinnan. Seuraavassa uusien metodien rungot ja ohje niiden toteuttamiseksi:public class Kassapaate { // ... public boolean syoEdullisesti(Maksukortti kortti) { // edullinen lounas maksaa 2.50 euroa. // jos kortilla on tarpeeksi rahaa, vähennetään hinta kortilta ja palautetaan true // muuten palautetaan false } public boolean syoMaukkaasti(Maksukortti kortti) { // maukas lounas maksaa 4.30 euroa. // jos kortilla on tarpeeksi rahaa, vähennetään hinta kortilta ja palautetaan true // muuten palautetaan false } // ... }Huom: kortilla maksaminen ei lisää kassapäätteessä olevan käteisen määrää.
Seuraavassa testipääohjelma ja haluttu tulostus:
public class Paaohjelma { public static void main(String[] args) { Kassapaate unicafeExactum = new Kassapaate(); double vaihtorahaa = unicafeExactum.syoEdullisesti(10); System.out.println("vaihtorahaa jäi " + vaihtorahaa); Maksukortti antinKortti = new Maksukortti(7); boolean onnistuiko = unicafeExactum.syoMaukkaasti(antinKortti); System.out.println("riittikö raha: " + onnistuiko); onnistuiko = unicafeExactum.syoMaukkaasti(antinKortti); System.out.println("riittikö raha: " + onnistuiko); onnistuiko = unicafeExactum.syoEdullisesti(antinKortti); System.out.println("riittikö raha: " + onnistuiko); System.out.println(unicafeExactum); } }Esimerkkitulostus
vaihtorahaa jäi 7.5 riittikö raha: true riittikö raha: false riittikö raha: true kassassa rahaa 1002.5 edullisia lounaita myyty 2 maukkaita lounaita myyty 1Rahan lataaminen
Lisätään vielä kassapäätteelle metodi jonka avulla kortille voidaan ladata lisää rahaa. Muista, että rahan lataamisen yhteydessä ladattava summa viedään kassapäätteeseen. Metodin runko:public void lataaRahaaKortille(Maksukortti kortti, double summa) { // ... }Testipääohjelma ja esimerkkisyöte:
public class Paaohjelma { public static void main(String[] args) { Kassapaate unicafeExactum = new Kassapaate(); System.out.println(unicafeExactum); Maksukortti antinKortti = new Maksukortti(2); System.out.println("kortilla rahaa " + antinKortti.saldo() + " euroa"); boolean onnistuiko = unicafeExactum.syoMaukkaasti(antinKortti); System.out.println("riittikö raha: " + onnistuiko); unicafeExactum.lataaRahaaKortille(antinKortti, 100); onnistuiko = unicafeExactum.syoMaukkaasti(antinKortti); System.out.println("riittikö raha: " + onnistuiko); System.out.println("kortilla rahaa " + antinKortti.saldo() + " euroa"); System.out.println(unicafeExactum); } }Esimerkkitulostus
kassassa rahaa 1000.0 edullisia lounaita myyty 0 maukkaita lounaita myyty 0 kortilla rahaa 2.0 euroa riittikö raha: false riittikö raha: true kortilla rahaa 97.7 euroa kassassa rahaa 1100.0 edullisia lounaita myyty 0 maukkaita lounaita myyty 1
Tuhat internetiä jos joku auttaisi, alkaa tulemaan kiire päästä osioon 6 ja 7 ja tehdä siellä tarvittavat tehtävät että kerkeää osallistumaan kokeeseen vielä tänään koska seuraava koe vasta 2.10
Aihe on jo aika vanha, joten et voi enää vastata siihen.