diff --git a/VerkkokauppaUI.java b/VerkkokauppaUI.java new file mode 100644 index 0000000000000000000000000000000000000000..66ea3b2f2e93b455930dc0af9e1275f2164792fd --- /dev/null +++ b/VerkkokauppaUI.java @@ -0,0 +1,243 @@ +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; + } + } + } + +}