Johdanto Kurssin tavoitteena oli luoda tietokantaa käyttävä websovellus Java EE ohjelmointikielellä, sekä hyödyntää muun muassa servlettejä sekä JSP sivuja ja muita tekniikoita monipuolisesti. Webserverinä toimii Apache Tomcat. on sovellus, jota kirjasto voi käyttää. Sivuilla voi selata kirjoja, joita kirjaston asiakkaat voivat myös lainata. Kirjojen palautus tapahtuu paikallisesti kirjastossa, jossa asiakas palauttaa kirjan kirjaston työntekijälle. Kirjaston työntekijät voivat lisätä ja muokata kirjoja, lainoja, asiakkaita sekä työntekijöitä tietokantaan. Tietokanta Tietokanta on perinteinen MySQL tietokanta, joka toimii XAMPP ohjelmalla ja jota voi ylläpitää ja tarkastella XAMPPin kautta phpmyadminilla. Tietokanta koostuu seitsemästä taulusta, joissa ovat 1. kirjat, 2. kirjailijat, 3. asiakkaat, 4. työntekijät, 5. lainat, 6. lainatut kirjat ja 7. estetyt asiakkaat (asiakkaat, jotka ovat palauttaneet aineistoa myöhässä ja lainaaminen on kielletty). Kirjat (library_books) taulu: - Koostuu viidestä kentästä (id, nimi, vuosi, lajityyppi, lainassa) - Uniikki id kaikille kirjoille (jos kirjastolla on useampi kappale samaa kirjaa, jokainen on omana kenttänään tietokannan taulussa) - Huomioitavaa: book_loaned kenttä ei ole välttämätön, sillä library_loaned_books taulu sisältää saman tiedon Kirjailijat (library_books_authors) taulu: - Koostuu kahdesta kentästä (kirjan id, kirjailijan nimi)
- Samalla kirjalla voi olla useampi kirjoittaja, tällainen taulu helpottaa usean kirjailijan lisäämistä yhdelle kirjalle Asiakkaat (library_customers) taulu: - Koostuu kuudesta kentästä (asiakkaan id, kirjastokortin numero, salasana, etunimi, sukunimi, syntymäaika) - Salasana on tallennettu tietokanaan MD5 salauksella, mutta oikeissa projekteissa tulisi hyödyntää paljon turvallisempaa salausta, esimerkiksi generoida uniikki useampimerkkinen salt käyttäjän salasanalle, liittää se käyttäjän salasanan perään ja hashata salasana esimerkiksi sha-512 salauksella, jonka jälkeen tallentaa sekä generoitu salt että hash omiin kenttiinsä käyttäjän tiedoissa Työntekijät (library_employees) taulu: - Koostuu kuudesta kentästä (työntekijän id, salasana, työnimike, etunimi, sukunimi, syntymäaika) - Salasana on tallennettu MD5 salauksella Lainat (library_loans) taulu: - Koostuu neljästä kentästä (lainan id, kirjastokortin id, alkamispäivämäärä, loppumispäivämäärä) Lainatut kirjat (library_loaned_books) taulu: - Koostuu kolmesta kentästä (id, lainan id, kirjan id) - Mahdollistaa useamman kirjan kuulumisen samaan lainaan
Estetyt asiakkaat (library_seized_customers) taulu: - Koostuu neljästä kentästä (id, asiakkaan id, päivämäärä, syy) - Taulun tarkoituksena listata käyttäjät, jotka ovat palauttaneet lainan myöhässä eivätkä maksaneet korvaussummaa, jonka vuoksi nämä on estetty lainaamasta lisää kirjoja
Asiakkaan toiminnot Saapuessaan kirjaston sivulle, käyttäjälle aukeaa seuraavanlainen näkymä: Vasemmasta yläkulmasta lähtien näkyy kirjojen hakupalkki, hakuvaihtoehdot (otsikko, kirjailija, vuosi), sekä hakunappi. Oikeassa yläkulmassa on linkki käyttäjän kirjautumisikkunaan (Login), linkki työntekijän kirjautumisikkunaan (Admin Login), sekä linkki koriin, johon käyttäjä voi lisätä kirjoja joita aikoo lainata (Cart). Huom: käyttäjän ei ole pakko kirjautua sisään halutessaan selata kirjoja, mutta lainaamista varten tulee käyttäjällä olla tunnukset joilla kirjautua sisään. Selatessa kirjoja käyttäjä kirjoittaa joko koko kirjan nimen, tai vain osan kirjan nimestä. Tässä tulisi kuitenkin huomioida, että kirjoittaessa vain yksi tai kaksi merkkiä hakuun, SQL hakulause etsii tietokannasta vain ne kirjat, joiden nimi on juuri nämä merkit, kun taas kirjoitettaessa kolme tai useampi merkkiä, hakee SQL kaikki kirjat joissa on nämä merkit (SQL LIKE). Kun käyttäjä ei ole kirjautunut, kuten yllä olevasta kuvasta näkyy, pyydetään käyttäjää kirjautumaan sisään jos tämä haluaa lainata kyseisen kirjan. Huomioitavaa: admin käyttäjät (työntekijät) eivät voi lainata kirjoja.
Käyttäjän kirjautuessa sisään (joko oikealla yläkulmassa olevasta Login painikkeesta, tai kirjaa etsiessä Log in to loan this book! linkkiä painamalla), aukeaa seuraava näkymä: Käyttäjä tarvitsee sisään kirjautuakseen kirjastonkortin numeron, sekä salasanan. Jos käyttäjä syöttää väärän kortin tai salasanan, ilmoitetaan käyttäjälle siitä samalla sivulla: Kun käyttäjä kirjautuu sisään, pääsee hän omalle käyttäjäsivulleen, josta hän näkee suoraan kuinka monta lainaa hänellä on: Samalla kun käyttäjä on kirjautuneena sivustolle, oikea yläpalkki on muuttunut. Siellä on linkki käyttäjäsivulle (My Profile), kirjaudu ulos nappi (Logout), sekä linkki koriin (Cart, tämä on kuitenkin sama kuin ennenkin). Kun haetaan samaa kirjaa kuin aikaisemmin, on kirjautumispyynnön tilalla painike, jolla voi lisätä halutun kirjan koriin:
Kun kyseistä nappia painetaan, lisätään kirja koriin ja ohjataan käyttäjä näkemään korin sisältö: Täällä käyttäjä voi poistaa yksittäisen kirjan korista (Remove), tyhjentää koko korin (Empty cart) tai lainata korissa olevat kirjat (Loan). Painettaessa Loan nappia, lisätään laina tietokantaan ja ilmoitetaan siitä käyttäjälle. Jos tapahtuu jokin virhe, ilmoitetaan siitäkin käyttäjälle (esimerkiksi käyttäjän ollessa liian kauan poissa sivustolta, sessio vanhenee ja käyttäjä kirjautuu itsestään ulos). Tämän jälkeen käyttäjä voi painaa Back linkkiä, joka ohjaa käyttäjän takaisin etusivulle.
Työntekijän toiminnot Työntekijä näkee saapuessaan sivustolle saman näkymän kuin asiakaskin. Kuitenkin kirjautuakseen sisään tulee työntekijän käyttää Admin Login painiketta Login painikkeen sijasta. Siellä työntekijälle aukeaa seuraava näkymä: Työntekijä tarvitsee kirjautuakseen sisään oman tunnuksensa (Admin ID), sekä salasanan. Tämän jälkeen työntekijälle aukeaa oma sivu, jossa hän pääsee muokkaamaan kirjoja, lainoja, asiakkaita sekä työntekijöitä: Otetaan esimerkiksi lainan lisääminen sekä muokkaaminen, muut menevät saman kaavan mukaan: Admin area sivustolla painettaessa Loans nappia, päästään yllä olevalle sivulle, jossa voi sekä lisätä lainoja että muokata lainoja. Huomioitavaa: asiakkaan tullessa kirjastoon palauttamaan kirjoja, poistaa työntekijä lainat juuri tällä sivulla. Lainan lisääminen vaatii asiakkaan kirjastokortin numeron, sekä niiden kirjojen ID:t jotka halutaan lainata. Lisätään esimerkin vuoksi käyttäjälle Pekka Pouta (kirjastokortin numero on 1) kirja Algebra
Know-It-All (kirjan ID on 2) Tämän jälkeen painetaan Add painiketta, jonka jälkeen ilmoitetaan onnistuiko lainaus: Halutessa muokata lainoja tai poistaa niitä, palataan takaisin lainojen muokkaus sivulle. Jos esimerkiksi halutaan muokata äsken lisätyn lainan tietoja, tiedetään käyttäjän Pekka Pouta kirjastokortin numero (1), ja muokataan sen tietoja: Tämän jälkeen aukeaa seuraava ikkuna, jossa nähdään käyttäjän tämän hetkiset lainat: Kuten nähdään, käyttäjällä on kaksi lainaa, joista toinen on äsken lisäämämme Algebra Know-It- All. Tällä sivulla voimme muokata joko yksittäistä tai useampaa tietoa. Jos halutaan muuttaa esimerkiksi lainan alkamispäivää, voidaan täyttää kyseinen kenttä (tässä tapauksessa keskimmäinen tekstikenttä) ja painaa update nappia. Tämä toimii myös muun muassa kirjoissa. Tämän lisäksi voidaan poistaa lainoja. Huomioitavaa: jos lainaan kuuluu esimerkiksi kolme kirjaa, ei yksittäistä kirjaa voida palauttaa vaan täytyy asiakkaan tuoda kaikki kirjat palautettavaksi yhtä aikaa. Tämä on kuitenkin suhteellisen helppo korjata, mutta valitettavasti tähän työhön kyseistä muutosta ei ehditty tekemään. Lainojen poistaminen tapahtuu valitsemalla laina joka halutaan poistaa, ja painamalla delete
painiketta. Tämän jälkeen työntekijä ohjataan sivulle, jossa kerrotaan onnistuiko lainan poistaminen: Käytännössä ainoat poikkeukset tietojen muokkaamisissa on asiakkaiden (customer) sekä työntekijöiden (employee) salasanojen muokkaamisissa, joissa täytyy tietää käyttäjän entinen salasana ennen kuin voi muokata sitä. Huomioitavaa: sovellukseen ei ole lisätty salasanan uudelleengenerointia esimerkiksi sitä varten, että käyttäjä sattuisi unohtamaan salasanansa.