Skip to content
Snippets Groups Projects

Muokattiin kirjoitaAsiakkaat ja lueAsiakkaat toimiviksi myös KantaAsiakkaiden...

Merged Henrik Koskinen requested to merge master into main
1 file
+ 155
0
Compare changes
  • Side-by-side
  • Inline
+ 155
0
 
import java.io.*;
 
import java.util.ArrayList;
 
import java.util.Scanner;
 
 
/**
 
* Luokkaa käytetään verkkokaupan tietojen tallentamiseen
 
* ja lataamiseen tietovarastosta.
 
*
 
* @author Erkki
 
*/
 
public class VerkkokauppaIO {
 
 
public static void main(String[] args) {
 
ArrayList<Asiakas> al = new ArrayList<>();
 
al.add(new Asiakas("12345","Timo Taulapää", 100));
 
al.add(new KantaAsiakas("11111","Henrik Henkkana",100,100));
 
kirjoitaAsiakkaat(al, "asiakkaat.csv");
 
ArrayList<Asiakas> alTesti = lueAsiakkaat("asiakkaat.csv");
 
for (Asiakas as : alTesti){
 
System.out.println(as);
 
}
 
}
 
 
private static final String EROTIN = ";";
 
 
public static void kirjoitaTiedosto(String tiedostonNimi,
 
String sisalto) {
 
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;
 
}
 
 
/**
 
* Kirjoittaa asiakaslistan annetun nimiseen tiedostoon.
 
*
 
* @param asiakasLista lista kirjoitettavista asiakkaista.
 
* @param tiedostonNimi kirjoitettavan tiedoston nimi
 
*/
 
public static void kirjoitaAsiakkaat(ArrayList<Asiakas> asiakasLista,
 
String tiedostonNimi) {
 
String data = "";
 
for (Asiakas asiakas : asiakasLista) {
 
data += asiakas.getData(VerkkokauppaIO.EROTIN);
 
if (asiakas instanceof KantaAsiakas){
 
data+=";"+ asiakas.getAlennusprosentti();
 
}
 
data += "\n";
 
 
}
 
// Poistetaan viimeinen "turha" rivinvaihto
 
if (data.length() > 0) {
 
data = data.substring(0, data.length() - 1);
 
}
 
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]);
 
try{
 
int alennusprosentti = Integer.parseInt(tiedot[3]);
 
return new KantaAsiakas(asNro, nimi, ostot, alennusprosentti);
 
}catch (ArrayIndexOutOfBoundsException e){
 
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;
 
}
 
 
/**
 
* Kirjoittaa tuotelistan annetun nimiseen tiedostoon.
 
*
 
* @param tuotelista lista tuotteista
 
* @param tiedostonNimi kirjoitettavan tiedoston nimi
 
*/
 
public static void kirjoitaTuotteet(ArrayList<Tuote> tuotelista, String tiedostonNimi) {
 
try (ObjectOutputStream oos =
 
new ObjectOutputStream(
 
new FileOutputStream(tiedostonNimi))) {
 
oos.writeObject(tuotelista);
 
} catch (IOException e) {
 
System.out.println("Tapahtui virhe: " + e);
 
}
 
}
 
 
/**
 
* Lukee tuotelistan tiedostosta
 
*
 
* @param tiedostonNimi tiedoston nimi
 
* @return listan tuotteita
 
*/
 
public static ArrayList<Tuote> lueTuotteet(String tiedostonNimi) {
 
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(tiedostonNimi))) {
 
ArrayList<Tuote> tlista = (ArrayList<Tuote>) ois.readObject();
 
return tlista;
 
} catch (IOException e) {
 
System.out.println("Tapahtui virhe: " + e);
 
} catch (ClassNotFoundException e) {
 
// Tämä virhe tulee, jos luettu tieto ei ole yhteensopiva
 
// sen luokan kanssa, jonka tyyppiseksi se yritetään muuntaa
 
System.out.println("Tapahtui virhe: " + e);
 
}
 
return null;
 
}
 
}
Loading