From 60a1bdc1a9d79c3aca858319346b890c30c263f9 Mon Sep 17 00:00:00 2001
From: Erkki Kaila <ertaka@utu.fi>
Date: Wed, 22 Feb 2023 11:58:49 +0200
Subject: [PATCH] eka osuus

---
 Asiakas.java                                  |   5 ++
 VerkkokauppaIO.java                           |  70 ++++++++++++++++--
 .../oop-demo4-esimerkit/Asiakas.class         | Bin 2190 -> 2379 bytes
 .../oop-demo4-esimerkit/VerkkokauppaIO.class  | Bin 3016 -> 4284 bytes
 .../oop-demo4-esimerkit/asiakkaat.csv         |   3 +
 5 files changed, 71 insertions(+), 7 deletions(-)
 create mode 100644 out/production/oop-demo4-esimerkit/asiakkaat.csv

diff --git a/Asiakas.java b/Asiakas.java
index c6a659e..9178818 100644
--- a/Asiakas.java
+++ b/Asiakas.java
@@ -67,4 +67,9 @@ public class Asiakas {
 
         return data;
     }
+
+    @Override
+    public String toString() {
+        return nimi + " (" + asiakasNumero + "), ostoja tehty: " + ostojaTehty;
+    }
 }
diff --git a/VerkkokauppaIO.java b/VerkkokauppaIO.java
index 6cfeaae..7ece477 100644
--- a/VerkkokauppaIO.java
+++ b/VerkkokauppaIO.java
@@ -1,6 +1,8 @@
+import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Scanner;
 
 /**
  * Luokkaa käytetään verkkokaupan tietojen tallentamiseen
@@ -11,24 +13,42 @@ import java.util.ArrayList;
 public class VerkkokauppaIO {
 
     public static void main(String[] args) {
-        ArrayList<Asiakas> al = new ArrayList<>();
-        al.add(new Asiakas("12345", "Antti Asiakas", 10));
-        al.add(new Asiakas("54321", "Anna Asiakas", 55.50));
-        al.add(new Asiakas("99999", "Keijo Keksitty", 1000));
-        kirjoitaAsiakkaat(al, "asiakkaat.csv");
+        ArrayList<Asiakas> al = lueAsiakkaat("asiakkaat.csv");
+        for (Asiakas as : al) {
+            System.out.println(as);
+        }
     }
 
     private static final String EROTIN = ";";
 
-    public static void kirjoitaTiedosto(String tiedostonimi,
+    public static void kirjoitaTiedosto(String tiedostonNimi,
                                         String sisalto) {
-        try (PrintWriter tiedosto = new PrintWriter(tiedostonimi)){
+        try (PrintWriter tiedosto = new PrintWriter(tiedostonNimi)) {
             tiedosto.write(sisalto);
         } catch (FileNotFoundException e) {
             System.out.println("Tapahtui virhe: " + e);
         }
     }
 
+    /**
+     * Lukee annetun nimisen tiedoston sisällön ja palauttaa sen listassa.
+     * Jokainen listan alkio vastaa yhtä tiedoston riviä
+     *
+     * @param tiedostonNimi luettavan tiedoston nimi
+     * @return tiedoston sisällön listana
+     */
+    public static ArrayList<String> lueTiedosto(String tiedostonNimi) {
+        ArrayList<String> data = new ArrayList<>();
+        try (Scanner lukija = new Scanner(new File(tiedostonNimi))) {
+            while (lukija.hasNextLine()) {
+                data.add(lukija.nextLine());
+            }
+        } catch (FileNotFoundException e) {
+            System.out.println("Tapahtui virhe: " + e);
+        }
+        return data;
+    }
+
     public static void kirjoitaAsiakkaat(ArrayList<Asiakas> asiakasLista,
                                          String tiedostonNimi) {
         String data = "";
@@ -42,4 +62,40 @@ public class VerkkokauppaIO {
         }
         kirjoitaTiedosto(tiedostonNimi, data);
     }
+
+    /**
+     * Palauttaa uuden asiakasolion annetun datarivin perusteella.
+     * Rivillä tulee olla asiakasnumero, nimi ja tehdyt ostot tässä
+     * järjestyksessä erotettuna merkillä
+     * <code>VerkkokauppaIO.EROTIN</code>
+     *
+     * @param data datarivi, josta tiedot parsitaan
+     * @return uuden Asiakas-olion dataan perustuen
+     */
+    public static Asiakas parsiAsiakas(String data) {
+        String[] tiedot = data.split(VerkkokauppaIO.EROTIN);
+        // Tässä vaiheessa tulee tietää tietojen järjestys
+        String asNro = tiedot[0];
+        String nimi = tiedot[1];
+        double ostot = Double.parseDouble(tiedot[2]);
+
+        return new Asiakas(asNro, nimi, ostot);
+    }
+
+    /**
+     * Metodi lukee asiakkaat annetun nimisestä tiedostosta ja
+     * palauttaa sisällön mukaisen listan Asiakas-olioita.
+     *
+     * @param tiedostonNimi luettavan tiedoston nimi
+     * @return tiedostosta luetut asiakasoliot listana
+     */
+    public static ArrayList<Asiakas> lueAsiakkaat(String tiedostonNimi) {
+        ArrayList<Asiakas> asiakkaat = new ArrayList<>();
+        ArrayList<String> data = lueTiedosto(tiedostonNimi);
+        for (String adata : data) {
+            Asiakas as = parsiAsiakas(adata);
+            asiakkaat.add(as);
+        }
+        return asiakkaat;
+    }
 }
diff --git a/out/production/oop-demo4-esimerkit/Asiakas.class b/out/production/oop-demo4-esimerkit/Asiakas.class
index 8d66874338bf10573804c188c2075e9e02d7a5a5..85d16ee117f6acd78e9dd398a8cb9a14530169c8 100644
GIT binary patch
delta 961
zcmeAZJT1g^>ff$?3=9nR3}G9&<}&gLF)%Tx@-WCSs4+5FYD~6aRM|Y4aWNw&M@fEg
zNl|8A`eYMkBR*Fy1~&$Gb_NfSO3%q9%tsu&85x)u895ky85x)vK@5LJ1~Enj4Mt5J
zh5X`@{H#QUlGKcnN-G6MMg|_wyu8#R=bXgi;?!bxh9E`;)yWH(RoU1XLKqq3CNE%?
zo4k}ohnt&$k%5&#oq>@-WAYsqRc%cM1_m((Rt5$Jb_Ny(4hBvJP6j>(E(T!+ZU!v|
z1_mt#76t|e5e97royj_^%JsSodLX?F3=H}Vj0}tn3=FJVTNv0kFfcGMF@OwX0}Jwj
zHS>VktRT${3=E76`V0n8&2|h-3``6R3~XB3TN&6l!gX_jMTHnx8HB+mh=KWRP!kv!
z1lbt489>G|G8jT!GWkBMSUtjGF|am}3I+y*#YWgI=0&$yih-3u8f*f(#cT}xP<xFT
zOrW07XJCSOuwH8mgTQ*YCm=x}2Q~-YC8i8!P~CwHEDX#H3=BN#eA8z$aA>J-We@<l
zhZ!7<d|){x1~vv|25tsbuvri{@xTLvhe3!zn1PYOT#$i*fti636t@--^Cz>gD>;Ee
z1!9f{0~>=Tg8+jzk~xBKa|9VIA?84g5ny0suwt+VIdgIbyA7k}<fZJ&YM{gb@r*W9
zqd6$@8JKx_co`TOY#4088s4#+f@4DnoNgQ#xEUN7#2K6zlo(vVb}NAWr2;jAfkB1A
z4jiuB43Z4?3_Rcvb%4Yy0|SE%0}D8Wg|xOX@Pg8r))oeVT?{G=4Co2Y6Kp!zfi?_6
uP~({y9Kn&|#NZ50#LNsX42%q3VA2On`Y{ABFfed2Ffs%(1T%y(NCE%{s#&7|

delta 773
zcmX>t)F;Sw>ff$?3=9nR3;`Rt<}z-6%h=C2xt-a7&ykD4iNTqj!G(uGhQW36QRX8m
z?u-mfjEo!%o{S94jEszo3_PBBd8tLtIf=!^sm1IJK8y^ilRq-6GP5)IP5#K@%gx2W
z$iT{=!T=KYWL0HUo1D)o&9BbDz@Wvz!oa{F!l1#RIe8|lvWpgjHb@l%1A{&TBLgD?
z0|Tqp76$eW3=9lR3~CGv3~XRQJ_e9x9x$5~q?v(%fssLnK^LTX5}SBENGTTs69WT-
z5CbcNFj%=5n9l}P4l;_H0b~RtgC15}dC_eZ0~-U<!oYyARUcw20|SE{0~5pwt$OXP
z47?lRj)u5Iih-3u8f*lnOZcHKF<>wRc>(NyCW!a6wlD~+hZ_a)zZ}>Ybe9-07(+G3
z1TwHNFf%YP@Tl`mpUuFbrM{Ix0OTHKa3J!5<&+rM7?c^f8C1cBLEOXx4;>x`AqHUv
zMg|iG1_ovZMs5a122+UnlMC6EoIn8#F-C)djX{$^fI%C{7(uu(f(&NJ#t1MlGMF=1
zfSft`D!UD%+GHUPWi>=(YC|=GY-MF&=H=mKU}UglumWp{<}hVcn>>+2JQ$=w0qhAC
zs0IcG6$Wc?AaXNEGT1QiFfcJNGuVQ|&5psIfq{XKfr-I^fsw%tOnNYQF)%QI5~eqU
JFM~gWBmnQ3L{I<#

diff --git a/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class b/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class
index 900e0521212ee65fa1f8a84dfb34ad262b402a2f..e98deee2fbc1fe5ead5f5bd6b4dcc83bc26bb4f3 100644
GIT binary patch
delta 2530
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
X<WYv>3=9lh42%pX7)~*qVUPp>?=|*x

delta 1406
zcmdm^ctV`()W2Q(7#JAr8P-nZ(r065;9z7Bo;Xq1jf;Vuftj6wn~{Otu{bj^JF%F9
zftQhi)zHY;#FT@9pOJyrF|VW~QvoW==Agm=23!nW48lANtPCQI3>uRaS%oLBV-@FM
zXAt9I5ND8>{GM5^o`XS(k%86J#MsD?gF%LofyXf~FA-so_W`g$91IGK46K$Qz`>xz
z$iU~Fnwgca;GLRXoLN#*$>z}S09B{P$iSNja%6U5Vu@aIaTynb27@L$gBA~iHiHf$
z17BEbQFeBIc4BEkL87PsWG4>C$=4V!@NzOZGB~j_IP);LFt|=mU^M1-XYgQW@Z@3e
zV(^~4naPXImxsZR!GAI{vnzKXLl8SdFb_irgW=?Pj0yrA3}K8644`0&;9-blh?;mp
zjXQ=RmYpGvhasLJVd779ju?g{9)@Iwl*t;5avB^AX^aev)}Y|Y;9<yQ@MmOTPfsmz
zNi0beVqj#*2HBLu$Y22tGNFn6?2~g?1XO&v7~C21c^C>93K<#La#HisOEMT4m^Cy#
zK@!D03?&SulNYe4b7(M>^DtB}R8Bt6Vmn!cZN}uiY-N+3**)udN-|SZ@{3FI^D=WY
z85!7%Gm8^*O7a;Qc!Nt4le2vj3qlf;a#9%?*ujCASj@=4=>v^cYeohhsHjh7aY-U0
z125b(Kd^BuDTyFq&fv`Syu^~yqEto(Qw^W2#Ii*F(vr*^eaFeN>>`s7aEMKI<uvD;
z!^JR{VIDife2{k+Ozz@5!nkO%KbIKi5=I6lMn(>XWs~!`#8_4`GN?{|&nZ56K9>OF
z>d70pbd@z2m>3us7#XA(su-#n7#V697#NrsQW;nn7#Ua@*cccYYA11v)z>jFfH@2d
z+zj;$3=BLBj0_A6tPBkdjSLJ7oD5A2%^;-=3=E4H*uh46>}Ft(+|I!1qrIDfD^iF@
zh);w;U^|1*HU`mfh>)a^v<QPNijcgJq6mXBOh`y|2ZQ=X1_lP^2nLV?q!`#37#R2%
zI2iaDq!|Pl^cVyg92tZd+!=(yjuL}d%+SKn%D}+D!QjBq#?a2d$j||GFhr!2fsug|
z6r&&qPkzB|$?KrAgTZYVgAW74Him%7dOUJq?<z5HFfcGkGH^0TG4L@+Gl()sGN?1i
zGH5YKGiWo&Fjz6jfo;`dU}4~7kYng#=w@JI&}QIg=wavuyTqEIkD(fznXDQ5!J#{W
zfq}t<f$cwoD5w;0XJ>F{XV7I}WM{DW&%n;W0_MB3Gt}#{GgyFy*?%%HI<Yg@@iTCO
zG93dGLoEXX!yN_|237_J24A62U#)En;eNV18KM~(W-_Sh?qo=0WH`XUWyPW+$s&}x
zjUjy(Lly&rug)%pTm}Z;<^QkiY-7lq$H1?{3}UdPY-1?$)z;a;PzDNU7H~ML)iZE1
zFfb@FFf%AK$S|ldXfdcV7&53am@sHCSTkrcxHD)o_%P_ey)VNc$}o{(5(5j!O$?J6
z+QFXoWtal?G&6%2!&HW91}1n!FfjNsOlIh0U|;|R2tNb!Uj`1a-(!9;XbUk+vjQi=
v=?u&aGr+8w46_&*7(^JD8D=vuGAsm>i^1elhUE;P;)0Q31;Z+aH4Ksf`LzbQ

diff --git a/out/production/oop-demo4-esimerkit/asiakkaat.csv b/out/production/oop-demo4-esimerkit/asiakkaat.csv
new file mode 100644
index 0000000..84638ea
--- /dev/null
+++ b/out/production/oop-demo4-esimerkit/asiakkaat.csv
@@ -0,0 +1,3 @@
+12345;Antti Asiakas;10.0
+54321;Anna Asiakas;55.5
+99999;Keijo Keksitty;1000.0
\ No newline at end of file
-- 
GitLab