Skip to content
Snippets Groups Projects
Commit 10216ec9 authored by Henry Koivula's avatar Henry Koivula
Browse files

Initial commit

parents
Branches main
No related tags found
No related merge requests found
public class KantaAsiakas extends Asiakas{
private int alennusprosentti;
public KantaAsiakas(String asiakasNumero, String nimi,
double ostojaTehty, int alennusprosentti) {
super(asiakasNumero, nimi, ostojaTehty);
this.alennusprosentti = alennusprosentti;
}
@Override
public int getAlennusprosentti() {
return super.getAlennusprosentti() + alennusprosentti;
}
public void setAlennusprosentti(int alennusprosentti) {
this.alennusprosentti = alennusprosentti;
}
@Override
public String getData(String erotinmerkki) {
String data = super.getData(erotinmerkki);
data += erotinmerkki + this.alennusprosentti;
return data;
}
@Override
public String toString() {
return super.toString() + ", alennusprosentti: " + alennusprosentti;
}
}
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) {
Asiakas asiakas1 = new Asiakas("1234", "Ukko", 120.0);
Asiakas asiakas2 = new KantaAsiakas("2345", "Tauno", 230.0, 5);
Asiakas asiakas3 = new Asiakas("3456", "Hessu", 666.0);
Asiakas asiakas4 = new KantaAsiakas("4567", "Pöllö", 7200.0, 15);
ArrayList<Asiakas> asiakkaat = new ArrayList<>();
asiakkaat.add(asiakas1);
asiakkaat.add(asiakas2);
asiakkaat.add(asiakas3);
asiakkaat.add(asiakas4);
kirjoitaAsiakkaat(asiakkaat, "asiakkaat.csv");
ArrayList<Asiakas> asiakkaatAgain = new ArrayList<>();
asiakkaatAgain = lueAsiakkaat("asiakkaat.csv");
kirjoitaAsiakkaat(asiakkaatAgain, "asiakkaatAgain.csv");
}
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);
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);
int koko = tiedot.length;
// Tässä vaiheessa tulee tietää tietojen järjestys
String asNro = tiedot[0];
String nimi = tiedot[1];
double ostot = Double.parseDouble(tiedot[2]);
if(koko > 3) {
int alennusprosentti = Integer.parseInt(tiedot[3]);
return new KantaAsiakas(asNro, nimi, ostot, alennusprosentti);
}
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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment