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