From 0df9da499465712dc6d11d5b7f0dd7026705ecf4 Mon Sep 17 00:00:00 2001 From: Veritorakka <eemeli302@gmail.com> Date: Wed, 3 May 2023 15:05:00 +0300 Subject: [PATCH] =?UTF-8?q?Tein=20teht=C3=A4v=C3=A4n=201=20kohdan=20A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fi/utu/tech/ooj/exercise2/Asiakas.java | 144 ++++++++++++++++++ .../tech/ooj/exercise2/Asiakasrekisteri.java | 63 ++++++++ 2 files changed, 207 insertions(+) create mode 100644 src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java create mode 100644 src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.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 new file mode 100644 index 0000000..f3d1489 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakas.java @@ -0,0 +1,144 @@ +package fi.utu.tech.ooj.exercise2; +/** + * Asiakas-luokka sisältää tiedot yksittäisestä asiakkaasta. + */ +public class Asiakas { + private String nimi; + private String katuosoite; + private String postinumero; + private String postitoimipaikka; + private String puhelinnumero; + + /** + * Luo uuden asiakkaan annetuilla tiedoilla. + * @param nimi Asiakkaan nimi. + * @param katuosoite Asiakkaan katuosoite. + * @param postinumero Asiakkaan postinumero. + * @param postitoimipaikka Asiakkaan postitoimipaikka. + * @param puhelinnumero Asiakkaan puhelinnumero. + */ + public Asiakas(String nimi, String katuosoite, String postinumero, String postitoimipaikka, String puhelinnumero) { + this.nimi = nimi; + this.katuosoite = katuosoite; + this.postinumero = postinumero; + this.postitoimipaikka = postitoimipaikka; + this.puhelinnumero = puhelinnumero; + } + + /** + * Palauttaa asiakkaan nimen. + * @return Asiakkaan nimi. + */ + public String getNimi() { + return nimi; + } + + /** + * Palauttaa asiakkaan katuosoitteen. + * @return Asiakkaan katuosoite. + */ + public String getKatuosoite() { + return katuosoite; + } + + /** + * Palauttaa asiakkaan postinumeron. + * @return Asiakkaan postinumero. + */ + public String getPostinumero() { + return postinumero; + } + + /** + * Palauttaa asiakkaan postitoimipaikan. + * @return Asiakkaan postitoimipaikka. + */ + public String getPostitoimipaikka() { + return postitoimipaikka; + } + + /** + * Palauttaa asiakkaan puhelinnumeron. + * @return Asiakkaan puhelinnumero. + */ + public String getPuhelinnumero() { + return puhelinnumero; + } + + /** + * Asettaa asiakkaan nimen. + * Nimen tulee olla vähintään yhden merkin mittainen. + * + * @param nimi asiakkaan nimi + * @throws IllegalArgumentException jos nimi on null tai tyhjä merkkijono + */ + public void setNimi(String nimi) { + if (nimi == null || nimi.isEmpty()) { + throw new IllegalArgumentException("Nimi ei voi olla null tai tyhjä merkkijono."); + } + this.nimi = nimi; + } + + /** + * Asettaa asiakkaan katuosoitteen. + * Katuosoitteen tulee olla vähintään yhden merkin mittainen. + * + * @param katuosoite asiakkaan katuosoite + * @throws IllegalArgumentException jos katuosoite on null tai tyhjä merkkijono + */ + public void setKatuosoite(String katuosoite) { + if (katuosoite == null || katuosoite.isEmpty()) { + throw new IllegalArgumentException("Katuosoite ei voi olla null tai tyhjä merkkijono."); + } + this.katuosoite = katuosoite; + } + + /** + * Asettaa asiakkaan postinumeron. Postinumeron tulee olla tarkalleen viisi numeroa pitkä. + * + * @param postinumero Asiakkaan postinumero + * @throws IllegalArgumentException jos postinumero ei ole tarkalleen viisi numeroa pitkä + */ + public void setPostinumero(String postinumero) { + if (postinumero == null || postinumero.length() != 5 || !postinumero.matches("[0-9]+")) { + throw new IllegalArgumentException("Postinumeron tulee olla tarkalleen viisi numeroa pitkä."); + } + this.postinumero = postinumero; + } + + /** + * Asettaa asiakkaan postitoimipaikan. + * @param postitoimipaikka Asiakkaan postitoimipaikka + */ + public void setPostitoimipaikka(String postitoimipaikka) { + this.postitoimipaikka = postitoimipaikka; + } + + /** + * Asettaa asiakkaan puhelinnumeron + * @param puhelinnumero asiakkaan puhelinnumero, esim. "+358 12 3456789" tai "0123456789" + * @throws IllegalArgumentException jos annettu puhelinnumero ei ole kelvollinen suomalainen puhelinnumero + */ + public void setPuhelinnumero(String puhelinnumero) throws IllegalArgumentException { + // poistetaan välilyönnit ja muut erikoismerkit numerosta + String numero = puhelinnumero.replaceAll("[^0-9+]", ""); + int pituus = numero.length(); + if (pituus == 10 && numero.charAt(0) == '0') { + // jos puhelinnumero on suomalaisessa muodossa + this.puhelinnumero = numero; + } else if (pituus == 13 && numero.startsWith("+358")) { + // jos puhelinnumero on kansainvälisessä muodossa, muutetaan suuntanumero +358 -> 0 + this.puhelinnumero = "0" + numero.substring(4); + } else { + throw new IllegalArgumentException("Virheellinen puhelinnumero: " + puhelinnumero); + } + } +} + +/* + * Perustelut + * Asiakkaan tietojen hallinnointi on olennainen osa laskutusohjelman toimintaa, joten erillinen Asiakas-luokka on tarpeellinen. + * Asiakas-luokka mahdollistaa asiakastietojen kapseloinnin yhteen paikkaan ja helpottaa niiden käyttöä eri osissa ohjelmaa. + * Asiakas-luokkaan voidaan lisätä erilaisia toiminnallisuuksia, kuten esimerkiksi asiakastietojen validointi ja tarkastaminen. + * + */ \ No newline at end of file diff --git a/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java new file mode 100644 index 0000000..179ce70 --- /dev/null +++ b/src/main/java/fi/utu/tech/ooj/exercise2/Asiakasrekisteri.java @@ -0,0 +1,63 @@ +package fi.utu.tech.ooj.exercise2; + +import java.util.ArrayList; + +/** + * Asiakasrekisteri-luokka ylläpitää listaa kaikista asiakkaista. + * Se mahdollistaa uusien asiakkaiden lisäämisen rekisteriin sekä + * olemassa olevien asiakkaiden hakemisen ja poistamisen rekisteristä. + */ +public class Asiakasrekisteri { + private ArrayList<Asiakas> asiakkaat; + + /** + * Konstruktori luo uuden Asiakasrekisteri-olion. + * Asiakaslista alustetaan tyhjäksi. + */ + public Asiakasrekisteri() { + this.asiakkaat = new ArrayList<>(); + } + + /** + * Metodi lisää uuden asiakkaan rekisteriin. + * + * @param asiakas Lisättävä asiakas. + */ + public void lisaaAsiakas(Asiakas asiakas) { + asiakkaat.add(asiakas); + } + + /** + * Metodi hakee asiakkaan annetun nimen perusteella. + * + * @param nimi Haettavan asiakkaan nimi. + * @return Asiakas-olio, jos asiakas löytyy. Muuten null. + */ + public Asiakas haeAsiakas(String nimi) { + for (Asiakas asiakas : asiakkaat) { + if (asiakas.getNimi().equals(nimi)) { + return asiakas; + } + } + return null; + } + + /** + * Metodi poistaa asiakkaan rekisteristä. + * + * @param asiakas Poistettava asiakas. + * @return true, jos poisto onnistui. Muuten false. + */ + public boolean poistaAsiakas(Asiakas asiakas) { + return asiakkaat.remove(asiakas); + } +} + + +/* + * Perustelut + * Asiakasrekisteri on tarpeellinen, jotta asiakastietoja voidaan hallinnoida tehokkaasti ja niitä voidaan käyttää helposti eri osissa ohjelmaa. + * Asiakasrekisteri-luokka mahdollistaa asiakastietojen kapseloinnin yhteen paikkaan ja helpottaa niiden käyttöä eri osissa ohjelmaa. + * Asiakasrekisteri-luokkaan voidaan lisätä erilaisia toiminnallisuuksia, kuten esimerkiksi asiakastietojen hakeminen ja muokkaaminen. + * + */ \ No newline at end of file -- GitLab