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

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
import java.util.ArrayList;
import java.util.HashMap;
public class Verkkokauppa {
private HashMap<String, Asiakas> asiakkaat;
private HashMap<String, Tuote> tuotteet;
private HashMap<String, Myyja> myyjat;
private ArrayList<Ostotapahtuma> tapahtumat;
public Verkkokauppa() {
asiakkaat = new HashMap<>();
tuotteet = new HashMap<>();
myyjat = new HashMap<>();
tapahtumat = new ArrayList<>();
}
public void lisaaAsiakas(Asiakas asiakas) {
asiakkaat.put(asiakas.getAsiakasNumero(), asiakas);
}
public void lisaaTuote(Tuote tuote) {
tuotteet.put(tuote.getNimi(), tuote);
}
public void lisaaMyyja(Myyja myyja) {
myyjat.put(myyja.getTunniste(), myyja);
}
public void lisaaTapahtuma(Ostotapahtuma tapahtuma) {
tapahtumat.add(tapahtuma);
}
public int annaTapahtumienMaara() {
return tapahtumat.size();
}
/**
* 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.containsValue(asiakas)) {
asiakkaat.remove(asiakas.getAsiakasNumero());
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.containsValue(tuote)) {
tuotteet.remove(tuote.getNimi());
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.containsValue(myyja)) {
myyjat.remove(myyja.getTunniste());
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.values()) {
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.values()) {
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.values()) {
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.values()) {
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.values()) {
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.values()) {
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.security.InvalidKeyException;
import java.security.KeyException;
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() {
int valinta = -1;
while (valinta != 0) {
System.out.println(verkkokauppa.listaaTapahtumat());
System.out.println();
System.out.println("1. Lisää ostotapahtuma");
System.out.println("2. Poista ostotapahtuma");
System.out.println("0. Poistu");
valinta = lueKokonaisluku(0, 2,"Anna valinta");
if(valinta == 1) {
System.out.println(verkkokauppa.listaaMyyjat());
String tunniste = lueMerkkijono("Myyjän tunniste");
Myyja myyja = verkkokauppa.annaMyyja(tunniste);
if(myyja == null) {
continue;
}
System.out.println(verkkokauppa.listaaTuotteet());
String nimi = lueMerkkijono("Tuotteen nimi");
Tuote tuote = verkkokauppa.annaTuote(nimi);
if(tuote == null) {
continue;
}
int nykyinenSaldo = tuote.getSaldo();
System.out.println(verkkokauppa.listaaAsiakkaat());
String asnro = lueMerkkijono("Asiakasnumero");
Asiakas asiakas = verkkokauppa.annaAsiakas(asnro);
if(asiakas == null) {
continue;
}
int maara = lueKokonaisluku(0, nykyinenSaldo, "Tuotteen maara");
Ostotapahtuma tapahtuma = new Ostotapahtuma(asiakas, myyja, tuote, maara);
double hinta = tapahtuma.getHinta();
asiakas.lisaaOsto(hinta);
myyja.lisaaProvisio(hinta / 10);
tuote.setSaldo(nykyinenSaldo - maara);
verkkokauppa.lisaaTapahtuma(tapahtuma);
}
else if(valinta == 2) {
int indeksi = lueKokonaisluku(1, verkkokauppa.annaTapahtumienMaara(), "Poistettava tapahtuma");
Ostotapahtuma tapahtuma = verkkokauppa.annaTapahtuma(indeksi - 1);
if (tapahtuma == null) {
continue;
}
verkkokauppa.poistaOstotapahtuma(tapahtuma);
System.out.println("Tapahtuma poistettu!");
// En ollut tässä kohtaa varma pitikö myös asiakkaan, myyjän ja tuotteiden tiedot
// palauttaa ostotapahtumaa edeltävään tilanteeseen. Jätin sen tekemättä, koska
// sitä ei erikseen pyydetty.
}
}
}
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;
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment