Osatehtävä 2: Verkkokauppa

Osatehtävässä 2 toteutetaan verkkokauppaan liittyviä luokkia. Osatehtävä 2 tehdään hakemistossa Harjoitus3/Osa2.

Osatehtävä 2.1: Tuotteet

Abstrakti luokka Tuote

Toteuta abstrakti luokka Tuote, joka esittää yksittäistä verkkokaupan myymää tuotetta. Luokalla on seuraavat ominaisuudet:

String tunnus
Tuotteen yksikäsitteinen tunniste, jota kauppa käyttää tuotteiden erottamiseen toisistaan.
String kuvaus
Tuotteen selväkielinen kuvaus, joka voidaan näyttää asiakkaalle.

Luokalla on seuraavat metodit:

Luontimetodi Tuote(String tunnus, String kuvaus)
Luo uuden tuotteen, jolla on parametrina annettu tunnus ja kuvaus.
String tunnus()
Palauttaa tuotteen tunnuksen.
String kuvaus()
Palauttaa tuotteen kuvauksen.

Luokka Kirja

Tee Tuote-luokan alaluokka Kirja. Luokalla on seuraavat ominaisuudet (Luokasta Tuote perittyjen lisäksi):

String isbn
Kirjan ISBN-numero.
String nimi
Kirjan nimi.
SortedSet kirjoittajat
Joukko, jossa on kirjan kirjoittajien nimet muodossa "Sukunimi, Etunimi". Nimet ovat aakkosjärjestyksessä.

Luokalla on seuraavat metodit:

Luontimetodi Kirja(String tunnus, String nimi, String[] kirjoittajat, String isbn)
Luo uuden kirjan, jolla on parametrina annettu tunnus, isbn-numero, nimi ja kirjoittajat. Kirjoittajat annetaan String-taulukossa. Luontimetodi muodostaa niistä järjestetyn joukon ja tallettaa ominaisuusmuuttujaan kirjoittajat. Tuotteen kuvausta ei anneta parametrina, vaan se muodostetaan luontimetodissa kirjan ja kirjoittajien nimistä sekä ISBN-numerosta.
String isbn()
Palauttaa kirjan isbn-numeron.
String nimi()
Palauttaa kirjan nimen.
SortedSet kirjoittajat()
Palauttaa kirjan kirjoittajat.
String toString()
Palauttaa kirjaa kuvaavan (lyhyen) merkkijonon. Voi muodostua esim. kirjan nimestä.

Luokka CD

Tee Tuote-luokan alaluokka CD. Sillä on Tuote-luokassa määriteltyjen attribuuttien lisäksi seuraavat ominaisuudet:

String nimi
Levyn nimi.
String esittäjä
Esittäjän nimi.

Luokalla on seuraavat metodit:

Luontimetodi CD(String tunnus, String nimi, String esittäjä)
Luo uuden CD:n, jolla on parametrina annettu tunnus, nimi ja esittäjä. Kuvausta ei tässäkään anneta parametrina, vaan se muodostetaan luontimetodissa CD:n ja esittäjän nimistä.
String nimi()
Levyn nimi.
String esittäjä()
Palauttaa esittäjän nimen.
String toString()
Palauttaa CD:tä kuvaavan (lyhyen) merkkijonon. Voi muodostua esim. CD:n nimestä.

Osatehtävä 2.2: Luokka Valikoima

Kirjoita luokka Valikoima, joka sisältää verkkokaupan tarjoamat tuotteet, jotka ovat siis kirjoja ja CD:itä. Luokalla on seuraavat ominaisuudet:

Map tuotteet
Sisältää valikoimaan kuuluvat tuotteet. Mapin avaimina ovat tuotteiden tunnukset ja avaimia vastaavina arvoina tuoteoliot.

Luokalla on seuraavat metodit:

Luontimetodi Valikoima()
Luo uuden tyhjän valikoimaolion.
void lisääTuote(Tuote uusi)
Lisää uuden tuotteen valikoimaan.
void poistaTuote(Tuote tuote)
Poistaa tuotteen valikoimasta.
Collection tuoteKokoelma()
Palauttaa valikoimaan kuuluvat tuotteet kokoelmana (siis ei Mapina).
Collection kirjaKokoelma()
Palauttaa valikoimaan kuuluvat kirjat kokoelmana.
Collection CDKokoelma()
Palauttaa valikoimaan kuuluvat CDt kokoelmana.
Tuote haeTuote(String tunnus)
Palauttaa tuotteen, jonka tunnus on tunnus. Jos sitä ei löydy, palauttaa arvon null.
Set haeTuotteet(String s)
Hakee valikoimasta kaikki tuotteet, joiden kuvaus sisältää merkkijonon s. Palauttaa tuloksen joukkona. Merkkijonon s etsiminen kuvauksesta tapahtuu String-luokan metodilla indexOf.
String toString()
Palauttaa lyhyen kuvauksen valikoimasta.

Osatehtävä 2.3: Luokka Ostoskori

Tee luokka Ostoskori, joka sisältää asiakkaan valitsemat tuotteet. Luokalla on seuraavat ominaisuudet:

String asiakas
Asiakkaan nimi (tai muu tunniste).
List ostokset
Asiakkaan valitsemat tuotteet. Huomaa, että sama tuote voi toistua useita kertoja.

Luokalla on seuraavat metodit:

Luontimetodi Ostoskori(String asiakas)
Luo uuden tyhjän ostoskorin.
String asiakas()
Palauttaa asiakkaan nimen.
void lisääTuote(Tuote uusi)
Lisää tuotteen ostoskoriin.
void poistaTuote(Tuote tuote)
Poistaa tuotteen ostoskorista.
List tuotteet
Palauttaa ostoskorin sisältämät tuotteet lajiteltuna tuotteen tunnuksen mukaisesti. Huom! Duplikaatteja ei poistetan.
String toString()
Ostoskorin lyhyt kuvaus.

Osatehtävä 2.4: Pääohjelmaluokka Verkkokauppa

Laadi pääohjelmaluokka, jolla voit testata verkkokauppaa.