diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java b/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java new file mode 100644 index 0000000000000000000000000000000000000000..470ad554d419cd507e77132c104907a35bc0e05f --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Tuote.java @@ -0,0 +1,109 @@ +package fi.utu.tech.ooj.exercise2; + +/** + * Tuote-luokka kuvaa Oy Jekku Ab:n myymää tuotetta. + * Luokka sisältää tuotteen nimen, normaalihinnan ja ALV-prosentin. + */ +public class Tuote { + private String nimi; + private double normaalihinta; + private double alvProsentti; + + /** + * Konstruktori luo uuden Tuote-olion. + * + * @param nimi Tuotteen nimi. + * @param normaalihinta Tuotteen normaalihinta. + * @param alvProsentti Tuotteen ALV-prosentti. + */ + public Tuote(String nimi, double normaalihinta, double alvProsentti) { + this.nimi = nimi; + this.normaalihinta = normaalihinta; + this.alvProsentti = alvProsentti; + } + + /** + * Metodi palauttaa tuotteen nimen. + * + * @return Tuotteen nimi. + */ + public String getNimi() { + return nimi; + } + + /** + * Asettaa tuotteen nimen. + * Nimi ei saa olla null eikä tyhjä merkkijono. + * + * @param nimi Tuotteen nimi. + * @throws IllegalArgumentException jos nimi on null tai tyhjä merkkijono. + */ + public void setNimi(String nimi) { + if (nimi == null || nimi.isEmpty()) { + throw new IllegalArgumentException("Tuotteen nimi ei voi olla null tai tyhjä merkkijono."); + } + this.nimi = nimi; + } + + /** + * Metodi palauttaa tuotteen normaalihinnan. + * + * @return Tuotteen normaalihinta. + */ + public double getNormaalihinta() { + return normaalihinta; + } + + /** + * Asettaa tuotteen normaalihinnan. + * Normaalihinta ei saa olla negatiivinen. + * + * @param normaalihinta Tuotteen normaalihinta. + * @throws IllegalArgumentException jos normaalihinta on negatiivinen. + */ + public void setNormaalihinta(double normaalihinta) { + if (normaalihinta < 0) { + throw new IllegalArgumentException("Tuotteen normaalihinta ei voi olla negatiivinen."); + } + this.normaalihinta = normaalihinta; + } + + /** + * Metodi palauttaa tuotteen ALV-prosentin. + * + * @return Tuotteen ALV-prosentti. + */ + public double getAlvProsentti() { + return alvProsentti; + } + + /** + * Asettaa tuotteen ALV-prosentin. + * ALV-prosentti ei saa olla negatiivinen. + * + * @param alvProsentti Tuotteen ALV-prosentti. + * @throws IllegalArgumentException jos alvProsentti on negatiivinen. + */ + public void setAlvProsentti(double alvProsentti) { + if (alvProsentti < 0) { + throw new IllegalArgumentException("Tuotteen ALV-prosentti ei voi olla negatiivinen."); + } + this.alvProsentti = alvProsentti; + } + /** + * Metodi palauttaa tuotteen hinnan, johon on lisätty arvonlisäveron mukainen määrä. + * + * @return Tuotteen hinta arvonlisäveron kanssa. + */ + public double getHintaAlv() { + return normaalihinta * (1 + alvProsentti / 100); + } +} + +/* + * Perustelut + * Tämä luokka on toteutettu pitämään yllä yksittäistä tuotetta ja sen tietoja, kuten nimeä, normaalihintaa ja ALV-prosenttia. + * Setter-metodeilla varmistetaan, että asetetut arvot ovat kelvollisia ja getter-metodeilla voidaan palauttaa tallennetut tiedot. + * Konstruktori luo uuden Tuote-olion ja asettaa sille alkuarvot annettujen parametrien mukaan. + * Tämän toteutuksen ansiosta Tuote-luokka on helppo käyttää ja ylläpitää, ja siitä on hyötyä esimerkiksi kaupan kassajärjestelmässä, jossa tarvitaan tietoa yksittäisestä tuotteesta ja sen hinnoista. + */ \ No newline at end of file diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java b/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java new file mode 100644 index 0000000000000000000000000000000000000000..8c7098286d0cf7fe0046b0bf73f32b40fd3adc04 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Tuoteluettelo.java @@ -0,0 +1,89 @@ +package fi.utu.tech.ooj.exercise2; + +import java.util.ArrayList; + +public class Tuoteluettelo { + private ArrayList<Tuote> tuotteet; + + /** + * Konstruktori luo uuden tyhjän tuoteluettelon. + */ + public Tuoteluettelo() { + this.tuotteet = new ArrayList<Tuote>(); + } + + /** + * Metodi lisää tuotteen tuoteluetteloon. + * + * @param tuote Lisättävä tuote. + */ + public void lisaaTuote(Tuote tuote) { + this.tuotteet.add(tuote); + } + + /** + * Metodi poistaa tuotteen tuoteluettelosta. + * + * @param tuote Poistettava tuote. + */ + public void poistaTuote(Tuote tuote) { + this.tuotteet.remove(tuote); + } + + /** + * Metodi palauttaa tuoteluettelon tuotteiden lukumäärän. + * + * @return Tuotteiden lukumäärä. + */ + public int getTuotteidenLukumaara() { + return this.tuotteet.size(); + } + + /** + * Metodi palauttaa tuoteluettelon tuotteet. + * + * @return Tuoteluettelon tuotteet. + */ + public ArrayList<Tuote> getTuotteet() { + return this.tuotteet; + } + + /** + * Metodi palauttaa tuoteluettelon tuotteiden yhteishinnan. + * + * @return Tuotteiden yhteishinta. + */ + public double getYhteishinta() { + double yhteishinta = 0.0; + + for (Tuote tuote : this.tuotteet) { + yhteishinta += tuote.getHintaAlv(); + } + + return yhteishinta; + } + /** + * Etsii tuotteen Tuoteluettelosta nimen perusteella. + * + * @param nimi Etsittävän tuotteen nimi. + * @return Löydetty Tuote-olio, tai null jos tuotetta ei löydy. + */ + public Tuote haeTuote(String nimi) { + for (Tuote tuote : tuotteet) { + if (tuote.getNimi().equals(nimi)) { + return tuote; + } + } + return null; + } +} + +/* + * Perustelu + * Luokan Tuoteluettelo tarkoitus on hallita joukkoa Tuote-olioita eli tuotteiden tietoja, kuten nimeä, hintaa ja varastosaldoa. Luokka tarjoaa metodit tuotteiden lisäämiseen, poistamiseen ja hakemiseen sekä laskemaan tuotteiden yhteishinnan. + * Tämä tekee Tuoteluettelosta kätevän työkalun esimerkiksi kaupan tuotevalikoiman hallinnassa. + * Perusteena ArrayListin käytölle Tuoteluettelo-luokassa on sen joustavuus. + * ArrayList on dynaaminen tietorakenne, joka mahdollistaa tuoteluettelon sisällön helpomman muokkaamisen, kuten tuotteiden lisäämisen ja poistamisen. + * ArrayList mahdollistaa myös helpomman iteroinnin ja käsittelemisen kuin perinteinen taulukko, joka vaatii etukäteen tiedon taulukon koon määrittelemisestä. + * + */