Skip to content
Snippets Groups Projects
Commit 4c0481a8 authored by Erkki Kaila's avatar Erkki Kaila
Browse files

eka versio

parents
No related branches found
No related tags found
No related merge requests found
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" project-jdk-name="19" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/oop-demo4-esimerkit.iml" filepath="$PROJECT_DIR$/oop-demo4-esimerkit.iml" />
</modules>
</component>
</project>
\ No newline at end of file
public class Asiakas {
private String asiakasNumero;
private String nimi;
private double ostojaTehty;
public Asiakas(String asiakasNumero, String nimi,
double ostojaTehty) {
this.asiakasNumero = asiakasNumero;
this.nimi = nimi;
this.ostojaTehty = ostojaTehty;
}
public String getAsiakasNumero() {
return asiakasNumero;
}
public void setAsiakasNumero(String asiakasNumero) {
this.asiakasNumero = asiakasNumero;
}
public String getNimi() {
return nimi;
}
public void setNimi(String nimi) {
this.nimi = nimi;
}
public double getOstojaTehty() {
return ostojaTehty;
}
public void setOstojaTehty(double ostojaTehty) {
if (ostojaTehty >= 0) {
this.ostojaTehty = ostojaTehty;
}
}
public void lisaaOsto(double hinta) {
if (hinta >= 0) {
this.ostojaTehty += hinta;
}
}
public int getAlennusprosentti() {
if (ostojaTehty <= 200) {
return 0;
} else if (ostojaTehty <= 1000) {
return 5;
} else if (ostojaTehty <= 2500) {
return 10;
} else {
return 15;
}
}
}
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;
}
}
public class Myyja {
private String tunniste;
private String nimi;
private double provisiot;
public Myyja(String tunniste, String nimi, double provisiot) {
this.tunniste = tunniste;
this.nimi = nimi;
this.provisiot = provisiot;
}
public String getTunniste() {
return tunniste;
}
public void setTunniste(String tunniste) {
this.tunniste = tunniste;
}
public String getNimi() {
return nimi;
}
public void setNimi(String nimi) {
this.nimi = nimi;
}
public double getProvisiot() {
return provisiot;
}
public void setProvisiot(double provisiot) {
if (provisiot >= 0) {
this.provisiot = provisiot;
}
}
public void lisaaProvisio(double provisio) {
if (provisio > 0) {
this.provisiot += provisio;
}
}
}
public class Ostotapahtuma {
private Asiakas asiakas;
private Myyja myyja;
private Tuote tuote;
private int maara;
private double hinta;
public Ostotapahtuma(Asiakas asiakas, Myyja myyja,
Tuote tuote, int maara) {
this.asiakas = asiakas;
this.myyja = myyja;
this.tuote = tuote;
this.maara = maara;
hinta = maara * tuote.getHinta();
// Vähennetään hinnasta vielä alennus
hinta = hinta - hinta * (asiakas.getAlennusprosentti() / 100);
}
public Asiakas getAsiakas() {
return asiakas;
}
public Myyja getMyyja() {
return myyja;
}
public Tuote getTuote() {
return tuote;
}
public int getMaara() {
return maara;
}
public double getHinta() {
return hinta;
}
}
public class Tuote {
private String nimi;
private int saldo;
private double hinta;
/**
* Yksittäisen tuotteen maksimihinta
*/
public static double MAKSIMIHINTA = 1000000;
/**
* Yksittäisen tuotteen maksimisaldo
*/
public static int MAKSIMISALDO = 10000;
public Tuote(String nimi, int saldo, double hinta) {
this.nimi = nimi;
this.saldo = saldo;
this.hinta = hinta;
}
public String getNimi() {
return nimi;
}
public void setNimi(String nimi) {
this.nimi = nimi;
}
public int getSaldo() {
return saldo;
}
public void setSaldo(int saldo) {
if (saldo >= 0) {
this.saldo = saldo;
}
}
public double getHinta() {
return hinta;
}
public void setHinta(double hinta) {
if (hinta >= 0)
this.hinta = hinta;
}
}
import java.util.ArrayList;
import java.util.HashMap;
public class Verkkokauppa {
private ArrayList<Asiakas> asiakkaat;
private ArrayList<Tuote> tuotteet;
private ArrayList<Myyja> myyjat;
private ArrayList<Ostotapahtuma> tapahtumat;
public Verkkokauppa() {
asiakkaat = new ArrayList<>();
tuotteet = new ArrayList<>();
myyjat = new ArrayList<>();
tapahtumat = new ArrayList<>();
}
public void lisaaAsiakas(Asiakas asiakas) {
asiakkaat.add(asiakas);
}
public void lisaaTuote(Tuote tuote) {
tuotteet.add(tuote);
}
public void lisaaMyyja(Myyja myyja) {
myyjat.add(myyja);
}
public void lisaaTapahtuma(Ostotapahtuma tapahtuma) {
tapahtumat.add(tapahtuma);
}
/**
* Yrittää poistaa annetun asiakkaan asiakalistasta.
*
* @param asiakas asiakas, jonka poistoa yritetään
* @return true, jos asiakas löytyi ja poistettiin, muuten false
*/
public boolean poistaAsiakas(Asiakas asiakas) {
if (asiakkaat.contains(asiakas)) {
asiakkaat.remove(asiakas);
return true;
}
return false;
}
/**
* Yrittää poistaa annetun tuotteen tuotelistasta.
*
* @param tuote tuote, jonka poistoa yritetään
* @return true, jos tuote löytyi ja poistettiin, muuten false
*/
public boolean poistaTuote(Tuote tuote) {
if (tuotteet.contains(tuote)) {
tuotteet.remove(tuote);
return true;
}
return false;
}
/**
* Yrittää poistaa annetun myyjän myyjalistasta.
*
* @param myyja myyja, jonka poistoa yritetään
* @return true, jos myyjä löytyi ja poistettiin, muuten false
*/
public boolean poistaMyyja(Myyja myyja) {
if (myyjat.contains(myyja)) {
myyjat.remove(myyja);
return true;
}
return false;
}
/**
* Yrittää poistaa annetun tapahtuman ostotapahtumalistasta.
*
* @param tapahtuma ostotapahtuma, jonka poistoa yritetään
* @return true, jos ostotapahtuma löytyi ja poistettiin, muuten false
*/
public boolean poistaOstotapahtuma(Ostotapahtuma tapahtuma) {
if (tapahtumat.contains(tapahtuma)) {
tapahtumat.remove(tapahtuma);
return true;
}
return false;
}
/**
* Palauttaa annetun asiakasnumeron mukaisen asiakkaan tai
* <code>null</code>, jos asiakasta ei löydy
*
* @param asiakasnumero halutun asiakkaan asiakasnumero
* @return pyydetyn asiakkaan tai null, jos asiakasta ei löydy
*/
public Asiakas annaAsiakas(String asiakasnumero) {
for (Asiakas asiakas : asiakkaat) {
if (asiakas.getAsiakasNumero().equals(asiakasnumero)) {
return asiakas;
}
}
return null;
}
/**
* Palauttaa annetun nimen mukaisen tuotteen tai
* <code>null</code>, jos tuotetta ei löydy
*
* @param nimi halutun tuotteen nimi
* @return pyydetyn tuotteen tai null, jos tuotetta ei löydy
*/
public Tuote annaTuote(String nimi) {
for (Tuote tuote : tuotteet) {
if (tuote.getNimi().equals(nimi)) {
return tuote;
}
}
return null;
}
/**
* Palauttaa annetun tunnisteen mukaisen myyjän tai
* <code>null</code>, jos myyjää ei löydy
*
* @param tunniste halutun myyjän tunniste
* @return pyydetyn myyjän tai null, jos myyjää ei löydy
*/
public Myyja annaMyyja(String tunniste) {
for (Myyja myyja : myyjat) {
if (myyja.getTunniste().equals(tunniste)) {
return myyja;
}
}
return null;
}
/**
* Palauttaa annetun indeksin mukaisen ostotapahtuman listasta.
* Huomaa, että indeksointi alkaa nollasta, mutta tapahtumien listaamisessa
* indeksit on ilmoitettu alkaen ykkösestä.
*
* @param indeksi indeksi jonka kohdalta tapahtuma palautetaan
* @return annetun indeksin mukaisen ostotapahtuman
*/
public Ostotapahtuma annaTapahtuma(int indeksi) {
if (tapahtumat.size() > indeksi) {
return tapahtumat.get(indeksi);
}
return null;
}
/**
* Palauttaa kaikki asiakkaat yhtenä merkkijonona.
*
* @return asiakalistan merkkijonona
*/
public String listaaAsiakkaat() {
// Tekee otsikkorivin
// \t on tabulaattori, joka tasaa tulosteen
// sarakkeisiin; \n tekee rivinvaihdon
StringBuilder s = new StringBuilder("Asiakasnumero\tNimi\t\t\tOstoja\tKanta-asiakas\n");
for (Asiakas asiakas : asiakkaat) {
s.append(asiakas.getAsiakasNumero() + "\t\t\t");
s.append(asiakas.getNimi() + "\t");
s.append(asiakas.getOstojaTehty() + "\t\t");
if (asiakas instanceof KantaAsiakas) {
s.append("On\n");
} else {
s.append("Ei\n");
}
}
return s.toString();
}
/**
* Palauttaa kaikki myyjät yhtenä merkkijonona
*
* @return myyjät merkkijonona
*/
public String listaaMyyjat() {
// Tekee otsikkorivin
// \t on tabulaattori, joka tasaa tulosteen
// sarakkeisiin; \n tekee rivinvaihdon
StringBuilder s = new StringBuilder("Tunniste\tNimi\t\t\tProvisiot\n");
for (Myyja myyja : myyjat) {
s.append(myyja.getTunniste() + "\t\t");
s.append(myyja.getNimi() + "\t\t");
s.append(myyja.getProvisiot() + "\n");
}
return s.toString();
}
/**
* Palautta kaikki tuotteet yhtenä merkkijonona.
*
* @return tuotteet merkkijonona
*/
public String listaaTuotteet() {
// Tekee otsikkorivin
// \t on tabulaattori, joka tasaa tulosteen
// sarakkeisiin; \n tekee rivinvaihdon
StringBuilder s = new StringBuilder("Nimi\tSaldo\t\t\tHinta\tVirtuaalinen\n");
for (Tuote tuote : tuotteet) {
s.append(tuote.getNimi() + "\t");
s.append(tuote.getSaldo() + "\t\t");
s.append(tuote.getHinta() + "\t");
if (tuote instanceof VirtuaalinenTuote) {
s.append("Kyllä\n");
} else {
s.append("Ei\n");
}
}
return s.toString();
}
/**
* Palauttaa kaikki tapahtumat yhtenä merkkijonona.
*
* @return tapahtumat merkkijonona
*/
public String listaaTapahtumat() {
StringBuilder s = new StringBuilder("Numero\tTuote\tAsiakas\tMyyjä\tKpl\tHinta\n");
int n = 1;
for (Ostotapahtuma tapahtuma : tapahtumat) {
s.append(n++ + "\t");
s.append(tapahtuma.getTuote().getNimi() + "\t");
s.append(tapahtuma.getAsiakas().getNimi() + "\t");
s.append(tapahtuma.getMyyja().getNimi() + "\t");
s.append(tapahtuma.getMaara() + "\t");
s.append(tapahtuma.getHinta() + "\n");
}
return s.toString();
}
}
import java.util.Scanner;
public class VerkkokauppaUI {
private Verkkokauppa verkkokauppa;
private Scanner lukija;
public static void main(String[] args) {
VerkkokauppaUI ui = new VerkkokauppaUI();
ui.aloita();
}
public VerkkokauppaUI() {
verkkokauppa = new Verkkokauppa();
lukija = new Scanner(System.in);
}
public void aloita() {
int valinta = -1; // joku muu kuin 0
while (valinta != 0) {
tulostaMenu();
valinta = lueKokonaisluku(0, 4, "Anna valinta");
if (valinta == 1) {
asiakasMenu();
} else if (valinta == 2) {
tuoteMenu();
} else if (valinta == 3) {
myyjaMenu();
} else if (valinta == 4) {
ostotapahtumaMenu(); // ei vielä toteutettu...
}
}
}
private void asiakasMenu() {
int valinta = -1;
while (valinta != 0) {
System.out.println(verkkokauppa.listaaAsiakkaat());
System.out.println();
System.out.println("1. Lisää asiakas");
System.out.println("2. Poista asiakas");
System.out.println("3. Muuta kanta-asiakkaaksi");
System.out.println("0. Poistu");
valinta = lueKokonaisluku(0, 3, "Anna valinta");
if (valinta == 1) {
String asnro = lueMerkkijono("Asiakasnumero");
String nimi = lueMerkkijono("Nimi");
verkkokauppa.lisaaAsiakas(new Asiakas(asnro, nimi, 0));
System.out.println("Asiakas lisätty!");
} else if (valinta == 2) {
String asnro = lueMerkkijono("Asiakasnumero");
Asiakas as = verkkokauppa.annaAsiakas(asnro);
if (as != null) {
verkkokauppa.poistaAsiakas(as);
System.out.println("Asiakas poistettu!");
} else {
System.out.println("Asiakasta ei löytynyt.");
}
} else if (valinta == 3) {
String asnro = lueMerkkijono("Asiakasnumero");
Asiakas as = verkkokauppa.annaAsiakas(asnro);
if (as != null) {
KantaAsiakas ka = new KantaAsiakas(as.getAsiakasNumero(),
as.getNimi(), as.getOstojaTehty(), 0);
verkkokauppa.poistaAsiakas(as);
verkkokauppa.lisaaAsiakas(ka);
System.out.println("Muutettu!");
} else {
System.out.println("Asiakasta ei löytynyt.");
}
}
}
}
private void tuoteMenu() {
int valinta = -1;
while (valinta != 0) {
System.out.println(verkkokauppa.listaaTuotteet());
System.out.println();
System.out.println("1. Lisää tuote");
System.out.println("2. Poista tuote");
System.out.println("3. Muuta saldoa");
System.out.println("4. Muuta hintaa");
System.out.println("0. Poistu");
valinta = lueKokonaisluku(0, 4,"Anna valinta");
if (valinta == 1) {
String nimi = lueMerkkijono("Nimi");
double hinta = lueDesimaaliluku(0, Tuote.MAKSIMIHINTA, "Anna hinta");
String virt = lueMerkkijono("Onko virtuaalinen tuote kyllä / ei");
if (virt.equals("kyllä")) {
verkkokauppa.lisaaTuote(new VirtuaalinenTuote(nimi, hinta));
} else {
int saldo = lueKokonaisluku(0, Tuote.MAKSIMISALDO, "Anna saldo");
verkkokauppa.lisaaTuote(new Tuote(nimi, saldo, hinta));
}
System.out.println("Tuote lisätty!");
} else if (valinta == 2) {
String nimi = lueMerkkijono("Nimi");
Tuote tuote = verkkokauppa.annaTuote(nimi);
if (tuote != null) {
verkkokauppa.poistaTuote(tuote);
System.out.println("Tuote poistettu!");
} else {
System.out.println("Tuotetta ei löytynyt.");
}
} else if (valinta == 3) {
String nimi = lueMerkkijono("Nimi");
Tuote tuote = verkkokauppa.annaTuote(nimi);
if (tuote != null) {
int saldo = lueKokonaisluku(0, Tuote.MAKSIMISALDO, "Anna uusi saldo");
tuote.setSaldo(saldo);
} else {
System.out.println("Tuotetta ei löytynyt.");
}
} else if (valinta == 4) {
String nimi = lueMerkkijono("Nimi");
Tuote tuote = verkkokauppa.annaTuote(nimi);
if (tuote != null) {
double hinta = lueDesimaaliluku(0, Tuote.MAKSIMIHINTA, "Anna uusi hinta");
tuote.setHinta(hinta);
} else {
System.out.println("Tuotetta ei löytynyt.");
}
}
}
}
private void myyjaMenu() {
int valinta = -1;
while (valinta != 0) {
System.out.println(verkkokauppa.listaaMyyjat());
System.out.println();
System.out.println("1. Lisää myyjä");
System.out.println("2. Poista myyjä");
System.out.println("0. Poistu");
valinta = lueKokonaisluku(0, 2, "Anna valinta");
if (valinta == 1) {
String tunniste = lueMerkkijono("Tunniste");
String nimi = lueMerkkijono("Nimi");
verkkokauppa.lisaaMyyja(new Myyja(tunniste, nimi, 0));
System.out.println("Myyjä lisätty!");
} else if (valinta == 2) {
String tunniste = lueMerkkijono("Tunniste");
Myyja m = verkkokauppa.annaMyyja(tunniste);
if (m != null) {
verkkokauppa.poistaMyyja(m);
System.out.println("Myyjä poistettu!");
} else {
System.out.println("Myyjää ei löytynyt.");
}
}
}
}
/**
* TODO: Toteuta tämä demojen 2. tehtävänä - katso demosta tarkemmat ohjeet
*/
private void ostotapahtumaMenu() {
}
private void tulostaMenu() {
System.out.println("1. Asiakkaat");
System.out.println("2. Tuotteet");
System.out.println("3. Myyjät");
System.out.println("4. Ostotapahtumat");
System.out.println("0. Poistu");
}
/**
* Lukee käyttäjältä syötteen ja palauttaa sen kokonaislukuna.
* Kokonaisluvun tulee olla annetun minimi ja maksimiarvon välissä.
*
* @param minimi pienin sallittu arvo
* @param maksimi suurin sallittu arvo
* @param kehote käyttäjälle näytetty kehote
* @return käyttäjän syötteen kokonaislukuna
*/
private int lueKokonaisluku(int minimi, int maksimi, String kehote) {
while (true) {
System.out.print(kehote + ": ");
try {
int arvo = Integer.parseInt(lukija.nextLine());
if (arvo >= minimi && arvo <= maksimi) {
return arvo;
}
System.out.println("Arvon pitää olla väliltä " +
minimi + " - " + maksimi);
} catch (NumberFormatException nfe) {
System.out.println("Anna arvo numerona!");
}
}
}
/**
* Lukee käyttäjältä syötteen ja palauttaa sen liukulukuna.
* Luvun tulee olla annetun minimi ja maksimiarvon välissä.
*
* @param minimi pienin sallittu arvo
* @param maksimi suurin sallittu arvo
* @param kehote käyttäjälle näytetty kehote
* @return käyttäjän syötteen liukulukuna
*/
private double lueDesimaaliluku(double minimi, double maksimi, String kehote) {
while (true) {
System.out.print(kehote + ": ");
try {
double arvo = Double.parseDouble(lukija.nextLine());
if (arvo >= minimi && arvo <= maksimi) {
return arvo;
}
System.out.println("Luvun pitää olla väliltä " +
minimi + " - " + maksimi);
} catch (NumberFormatException nfe) {
System.out.println("Anna luku numerona!");
}
}
}
/**
* Apumetodi, joka näyttää käyttäjälle annetun kehotteen ja lukee
* sitten tältä merkkijonon. Annettu jono ei voi olla tyhjä.
*
* @param kehote käyttäjälle näytettävä kehote
* @return käyttäjän syöttämän ei-tyhjän merkkijonon
*/
private String lueMerkkijono(String kehote) {
while (true) {
System.out.print(kehote + ": ");
String arvo = lukija.nextLine();
if (!arvo.equals("")) {
return arvo;
}
}
}
}
public class VirtuaalinenTuote extends Tuote {
public VirtuaalinenTuote(String nimi, double hinta) {
super(nimi, -1, hinta);
}
@Override
public int getSaldo() {
// Palauttaa aina luvun 1000, koska tuotetta on
// aina varastossa riittävästi mihin tahansa
// tilaukseen
return 1000;
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment