From 82c1dbf82de61fb2ed3c633b2ee3f9e2b7fceb7d Mon Sep 17 00:00:00 2001 From: Roni Nousiainen <rmnous@utu.fi> Date: Sun, 7 May 2023 12:49:44 +0300 Subject: [PATCH] =?UTF-8?q?teht=C3=A4v=C3=A4=202=20jatkettu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fi/utu/tech/ooj/exercise2/Asiakas.java | 12 +++++- .../java/fi/utu/tech/ooj/exercise2/Lasku.java | 38 +++++++++++++++++++ .../fi/utu/tech/ooj/exercise2/LaskuRivi.java | 26 +++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java create mode 100644 src/main/java/fi/utu/tech/ooj/exercise2/LaskuRivi.java diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java index cdb1cd8..b1acc08 100644 --- a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java @@ -1,5 +1,9 @@ package fi.utu.tech.ooj.exercise2; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Date; + public class Asiakas { /** * Luokkainvariantti: Kaikilla Asiakas-olioilla tulee olla kaikki attribuutit (ei null). Postinumero tai puhelinnumero ei 0. Asiakasnumerot uniikkeja eri olioiden välillä @@ -128,11 +132,17 @@ public class Asiakas { this.postitoimipaikka = postitoimipaikka; this.puhelinnumero = puhelinnumero; } + + /** + * Alkuehto: tuotteet-lista ei tyhjä, päivämäärä juuri kyseinen päivä. + * Loppuehto: Luo uuden laskun kyseiselle asiakkaalle halutuista tuotteista. + */ + public void luoLasku(ArrayList<LaskuRivi> tuotteet, Date paivamaara) {} } /** * Perustelut: * Luokan käytön kannalta on järkevää, että kaikki tiedot asiakkaasta vaaditaan. Ei olisi mitään järkeä tallentaa asiakasta, jolla ei ole esimerkiksi nimeä. * Kaikille arvoille on getterit ja setterit kapseloinnin takia. Asiakasnumerolle pelkkä setteri, sen muuttaminen ei ole tarpeen ja pahimmassa tapauksessa voisi rikkoa luokkainvariantin. * Asiakasnumero ei ole tehtävänannossa vaadittu, mutta helpottaa asiakkaan tallennusta rekisteriin ja sieltä hakemista. Asiakasnumeron uniikkius varmistaa sen, että asiakkaat voidaan tallentaa myös sellaisiin tietojärjestelmiin, joissa jokaiselle oliolle vaaditaan jokin uniikki piirre, jolla ne voi löytää (esim hajautustaulu) - * + * luoLasku metodi on mielestäni järkevää tehdä juuri Asiakas-luokkaan, sillä lasku tehdään aina yhdelle tietylle asiakkaalle. */ \ No newline at end of file diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java b/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java new file mode 100644 index 0000000..9927735 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Lasku.java @@ -0,0 +1,38 @@ +package fi.utu.tech.ooj.exercise2; + +import java.util.ArrayList; +import java.util.Date; + +public class Lasku { + /** + * Luokkainvariantti: päivämääränä toimii tämänhetkinen päivämäärä, tuotteet-lista ei ole tyhjä. + */ + private ArrayList<LaskuRivi> tuotteet; + private Date paivamaara; + private Asiakas asiakas; + + /** + * Alkuehto: tuotteet-lista on olemassa ja sen sisältämät laskurivit täydellisiä + * Loppuehto: rutiini laskee laskun tuotteiden hinnan, mukaanlukien alennukset ja tuotteiden ALV:t + * @return laskun kokonaissumma liukulukuna + */ + double laskeSumma() { + return 0; + } + + /** + * Alkuehto: Asiakas on täydellinen asiakas joka on rekisterissä. + * Loppuehto: Luo uuden lasku-olion halutulle asiakkaalle. + * @param asiakas Haluttu asiakas. + * @param paivamaara Tämänhetkinen päivämäärä + * @param tuotteet Lista laskuriveistä + */ + public Lasku(ArrayList<LaskuRivi> tuotteet, Date paivamaara, Asiakas asiakas) {} +} + +/** + * Perustelut: + * Lasku-luokka ei vaadi paljoa rutiineja. Ajattelin mielessäni, että hyvä lasku vaatii seuraavat tiedot: Asiakas, päivämäärä, kaikki tuotteet ja kokonaissumma. + * Yksittäiset tuotteet ja niiden hinnat mallinnetaan LaskuRivi-luokassa, joten niitä ei tarvitse mallintaa tässä luokassa. Lasku muodostetaan lopullisesti Asiakas-luokassa jolloin määritetään laskun asiakas. + * Käytännössä tähän luokkaan jää siis vain päivämäärä ja kokonaissumma. Kokonaissumman laskee laskeSumma-rutiini, jota voidaan kutsua laskua muodostaessa Asiakas-luokassa. + */ diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/LaskuRivi.java b/src/main/java/fi/utu/tech/ooj/exercise2/LaskuRivi.java new file mode 100644 index 0000000..0e56b6a --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/LaskuRivi.java @@ -0,0 +1,26 @@ +package fi.utu.tech.ooj.exercise2; + +public class LaskuRivi { + /** + * Luokkainvariantti: Jokaisella laskurivillä on jokin tuote tuoteluettelosta, alennusprosentti voi olla 0 mutta ei yli 100. Määrä vähintään yksi. + */ + private Tuote tuote; + private double alennusProsentti; + private int maara; + + /** + * Alkuehto: Tuote täydellinen ja löytyy tuoteluettelosta, alennusprosentti ei-negatiivinen mutta <100, maara >0 + * Loppuehto: Luo uuden LaskuRivi olion jota voi käyttää laskun muodostamiseen ongelmitta + * @param tuote Haluttu tuote + * @param alennusProsentti Mahdollinen alennusprosentti + * @param maara Tuotteiden määrä + */ + public LaskuRivi(Tuote tuote, double alennusProsentti, int maara) { + /*toteutus ei tärkeä*/ + } +} +/** + * Perustelut: + * Tämä luokka kuvastaa yhtä riviä laskulla. Laskuriville tulee tuote ja sen sisältämät tiedot kuten nimi ja normaalihinta, alennusprosentti sekä tuotteiden määrä. Näitä olioita tulee laskulle monta. + * Tämä luokka ei tarvitse yhtään rutiineja konstruktorin lisäksi, sillä kaikki tarvittavat rutiinit löytyvät muista luokista. + */ \ No newline at end of file -- GitLab