diff --git a/Asiakas.java b/Asiakas.java index c6a659e64cec6a5224bd78130ddd7cab4075d3d3..9178818a942b30fad8ecdd3d2931f10a2d844d9a 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 6cfeaae2dc0c3b3ae2f61ec39622753f8dbffe7c..7ece477638f92dfbe4305629740365af1bf4c584 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 Binary files a/out/production/oop-demo4-esimerkit/Asiakas.class and b/out/production/oop-demo4-esimerkit/Asiakas.class differ diff --git a/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class b/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class index 900e0521212ee65fa1f8a84dfb34ad262b402a2f..e98deee2fbc1fe5ead5f5bd6b4dcc83bc26bb4f3 100644 Binary files a/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class and b/out/production/oop-demo4-esimerkit/VerkkokauppaIO.class differ diff --git a/out/production/oop-demo4-esimerkit/asiakkaat.csv b/out/production/oop-demo4-esimerkit/asiakkaat.csv new file mode 100644 index 0000000000000000000000000000000000000000..84638ea1e5440e9c67f7d85b95a0631fe8b34b0e --- /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