Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2

Samankaltaiset tiedostot
Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2

Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2

Olio-ohjelmointi Javalla

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmointi 2 / 2010 Välikoe / 26.3

Suunnitteludokumentti

Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Määrittelydokumentti. ilpo-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin perusteet Y Python

Tietokannat II -kurssin harjoitustyö

Mikä yhteyssuhde on?

ehops Henkilökohtainen opintosuunnitelma

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä

A TIETORAKENTEET JA ALGORITMIT

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

8. Näppäimistöltä lukeminen 8.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Algoritmit 2. Luento 2 Ke Timo Männikkö

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Määrittelydokumentti. ilpo-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Lohtu-projekti. Testaussuunnitelma

Listarakenne (ArrayList-luokka)

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Algoritmit 2. Luento 2 To Timo Männikkö

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Javan perusteita. Janne Käki

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Action Request System

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Ohjelmoinnin perusteet Y Python

Taulukot. Jukka Harju, Jukka Juslin

Testivetoinen ohjelmistokehitys

Kuva: Ilpo Okkonen

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

opiskelijan ohje - kirjautuminen

12. Näppäimistöltä lukeminen 12.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

1 Tehtävän kuvaus ja analysointi

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

8. Näppäimistöltä lukeminen 8.1

18. Abstraktit tietotyypit 18.1

7. Oliot ja viitteet 7.1

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

5. HelloWorld-ohjelma 5.1

Interaktiivinen tarinankerronta

Ohjelmointi 1 Taulukot ja merkkijonot

4. Luokan testaus ja käyttö olion kautta 4.1

Java kahdessa tunnissa. Jyry Suvilehto

KYMP Webmail -palvelu

Testausdokumentti. Sivu: 1 / 10. Ohjelmistotuotantoprojekti Sheeple Helsingin yliopisto. Versiohistoria

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

20. Javan omat luokat 20.1

Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

9. Periytyminen Javassa 9.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Muuttujien määrittely

Opintokohteen Haku ja Käsittely

Opinto-oppaan tekeminen

13. Loogiset operaatiot 13.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, kurssikoe

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Käyttöohje. Versiohistoria: versio Mari Kommenttien perusteella korjattu versio

Opetustapahtumien hakeminen (Hae - Opetustapahtuma)

14. Poikkeukset 14.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Vianova Systems Finland Oy:n Novapoint käytön tuki

Luokan sisällä on lista

Sähköposti ja uutisryhmät

Java-kielen perusteita

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Java ja grafiikka. Ville Sundberg

Tietokannat II -kurssin harjoitustyö

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Transkriptio:

TIETOJENKÄSITTELYTIETEEN LAITOS Ohjelmistotuotantoprojekti 04.09.2006 Ilmoittautumisten profiloija (jatkoprojekti) Ilpo2 Suunnitteludokumentti 2.0 Hemminki Samuli Herranen Mikko Hinkkanen Tero Mäkelä Ari Piuva Tero Töyli Terhi

Ohjaaja Asiakas Sinerma Olli Taina Juha Tekninen yhteyshenkilö Taina Juha Vastuuhenkilö Verkamo Inkeri Versiohistoria Versio Päiväys Muutokset 0.1 10.07.2006 1. versio 0.2 12.07.2006 korjauksia 0.3 17.07.2006 korjauksia ja lisäyksiä 0.4 20.07.2006 korjauksia ja lisäyksiä 0.5 24.07.2006 pienet korjaukset 0.6 28.07.2006 korjauksia 0.7 20.08.2006 korjauksia 0.8 22.08.2006 korjauksia 0.9 27.08.2006 korjauksia ja luokkakaavioiden lisäys 0.91 29.08.2006 korjauksia 0.92 29.08.2006 lisätty liitteitä 0.93 29.08.2006 muokattu ulkoasua 0.94 29.08.2006 korjauksia 0.95 29.08.2006 lisätty lisätyt luokat 0.96 30.08.2006 korjauksia 0.97 31.08.2006 lisätty luokkakaavioselitykset 0.98 31.08.2006 korjauksia 0.99 01.09.2006 korjauksia 1.0 03.09.2006 lisätty Javadoc 1.1 03.09.2006 korjauksia, ulkonäön muokkausta, muutettu vähän versionumerointia 2.0 04.09.2006 jäädytetty versio

Sisältö 1 Johdanto... 1 1.1 Termit ja määritelmät... 1 2 Arkkitehtuurin kuvaus... 4 2.1 Yleisarkkitehtuuri... 4 2.2 Järjestelmän tekninen kuvaus... 4 3 Vaatimusten toteutus... 5 4 Luokkarakenne... 10 4.1 Model... 10 4.2 Control... 10 4.3 View... 10 4.4 IO... 10 5 Käyttöliittymä... 11 LIITE 1 Luokkakaaviot LIITE 2 Poistetut luokat LIITE 3 Lisätyt luokat LIITE 4 Toteutusehdotuksista poikkeavat toteutukset LIITE 5 Javadoc

1 Johdanto Ohjelmistotuotantoprojekti-kurssilla opiskelijat jaetaan pienryhmiin kurssille ilmoittautumisen yhteydessä annettujen taustatietojen ja ryhmätoiveiden mukaisesti. Tavoitteena ryhmäjaossa on muodostaa mahdollisimman tarkoituksenmukaisia, tasakokoisia ja täysiä ryhmiä ja toisaalta täyttää opiskelijoiden esittämiä toiveita mahdollisuuksien mukaan. Ohjelmistotuotantoprojekti-kurssilla samaan ryhmään on valittava eri tavoin suuntautuneita henkilöitä. Tällä hetkellä kurssin vastuuhenkilö tekee tämän jaottelun olemassa olevalla Ilpo-ohjelmalla. Tarkoitus on kehittää Ilpoohjelmaa versioon 2, joka helpottaa jaottelijan tehtävää entisestään. Suunnitteludokumentti esittää tulevan Ilpo2-ohjelman. 1.1 Termit ja määritelmät AWT: Javan matalan tason käyttöliittymäkirjasto, johon korkeamman tason alustariippumaton Swing perustuu. Asetustiedosto: Ohjelman käyttöasetukset sisältävä tiedosto Dialogi: Vuorovaikutteinen käyttöliittymäelementti, jonka avulla käyttäjälle annetaan tai häneltä pyydetään tietoa. Heuristiikka: Heuristiikka tarkoittaa keksimistaitoa. Näin ollen, heuristinen algoritmi on sellainen, joka saamastaan syötteestään osaa "päätellä" halutun lopputuloksen. Algoritmin tuottama lopputulos ei välttämättä ole optimaalinen, mutta se on riittävän hyvä jonkin kriteerin perusteella arvioituna. Ilmo (http://ilmo.cs.helsinki.fi/): Kurssi-ilmoittautumisjärjestelmä opiskelijoille. Järjestelmä on tarkoitettu tietojenkäsittelytieteen laitoksen kursseille ilmoittautumiseen. Ilmolla ilmoittaudutaan myös matematiikan kursseille, mutta sillä ei ole tämän projektin kannalta juuri mitään merkitystä. Ilmoittautujatiedosto: Tiedosto, joka pitää sisällään tiedot kurssille ilmoittautuneista opiskelijoista ja heidän antamista vastauksistaan Ilmo-järjestelmän esittämiin kysymyksiin. Ilpo: Ilpo-ryhmän keväällä 2005 tuottama ja myöhemmin Juha Tainan muokkaama ohjelma kurssi-ilmoittautumisten profilointiin Ilpo2: Ilpon pohjalta kesällä 2006 kehitettävä jatkoprojekti. JAR (Java Archive file format): JAR:n avulla voidaan pakata useita tiedostoja yhteen JAR-tiedostoon. Tyypillisesti JAR-tiedosto sisältää luokkatiedostoja sekä sovelluksiin ja sovelmiin liittyviä lisäresursseja. Järjestyskriteeri: Järjestyskriteerit ovat Ilmo-lomakkeen yksittäisiä vastauksia: esimerkiksi suuntautumislinja, kieli tai esitiedot. Kalenteri: Graafinen käyttöliittymäkomponentti, joka ilmaisee Ohjelmistotuotantoprojekti-kurssin ryhmien tapaamisajat 1

Kovakoodaus: Arvojen upottaminen ohjelman lähdekoodiin Kurssi: Kurssi on opintojakson ilmentymä. Kurssi määritellään erikseen kyseessä olevalle periodille, lukukaudelle ja -vuodelle. Käyttäjä: Ilpolla ja Ilpo2:lla ryhmittelyä suorittava henkilö. Lukitus: Yhden opiskelijan kiinnittäminen pysyvästi tiettyyn ryhmään siten, että opiskelija ei näy enää muissa ryhmissä. Oodi (http://www.helsinki.fi/weboodi/): Opiskelun ja opetuksen tuen tietojärjestelmä. Oodista löytyvät muun muassa opiskelijoiden opintosuoritukset. Opintojakso: Opintojakso määrittelee opetettavalle aihepiirille nimen ja laajuuden sekä muut yleiset luentokerrasta riippumattomat tiedot. Opiskelija: Kurssille ilmoittautunut henkilö, jota sijoitetaan Ilpolla ryhmiin. Opiskelijanäkymä: Ohjelmaikkunan vasemmanpuoleisen osan yläosa, jossa opiskelijat esitetään valitun järjestelyperusteen mukaan ryhmiteltyinä. Opiskelijapallo: Opiskelijaa kuvaava ympyränmuotoinen graafinen elementti Parsiminen: (tässä yhteydessä) Arvojen lukeminen ohjelman syötetiedostosta Prioriteetti: Tässä dokumentissa prioriteetilla ilmaistaan vaatimusten tärkeyttä ja järjestystä jolla ne toteutetaan. Dokumentissa käytettävät prioriteetit ovat seuraavat: matala, normaali ja korkea. Ryhmittely (Ryhmiin jako): Opiskelijoiden jakaminen ryhmiin. Ryhmä: Kokonaisuus mihin Ilpo-ohjelmalla siirretään opiskelijoita. Ryhmässä on opiskelijoita ja henkilökunnan jäseniä. Ryhmälukitus: Ryhmän lukitseminen siten, että kaikki ryhmässä olevat opiskelijat eivät enää näy muissa ryhmissä. Ryhmänäkymä: Ohjelmaikkunan oikeanpuoleinen osa, jossa projektiryhmät esitetään. Sarjallistuvuus: Sarjallistuvan Java-luokan ilmentymä osaa kirjoittaa oman sisäisen tilansa muodossa, joka soveltuu esimerkiksi levylle tallentamista varten. Sisäinen tietorakenne: Oliorakenne, joka on pelkästään Ilpon ja Ilpo2:n sisäisessä käytössä ja mihin on tallennettu tietoja. 2

Säännöllinen lauseke: Tietyn syntaksin mukainen merkkijono, joka määrittelee joukon merkkijonoja. Tietyn säännöllisen lausekkeen määrittelemien merkkijonojen sanotaan vastaavan tätä säännöllistä lauseketta. Säännöllisiä lausekkeita voidaan käyttää esimerkiksi löytämään kaikki tiettyä säännöllistä lauseketta vastaavat merkkijonoesiintymät tekstistä. Swing: Javan korkeamman tason käyttöliittymäkomponentteja sisältävä pakkaus Tavallinen TKTL:n pöytäkone: Käyttöjärjestelmänä Linux graafisella ikkunointiympäristöllä, näyttö 1280x1024 resoluutiolla sekä vähintään 1.5 GHz suoritin ja vähintään 512Mt keskusmuistia. Tietonäkymä: Ohjelmaikkunan vasemmanpuoleisen osan alaosa, jossa esitetään tietoja esimerkiksi valituista opiskelijoista. Tilapalkki: Käyttöliittymän graafinen elementti, josta suoritetut työvaiheet käyvät ilmi. TKTL: Helsingin yliopiston Tietojenkäsittelytieteen laitos. Tulosryhmä: Järjestyskriteerin mukaisesti tehty järjestely jakaa opiskelijat tulosryhmiin. 3

2 Arkkitehtuurin kuvaus Tässä luvussa kuvataan ohjelman sisäistä arkkitehtuuria. Sisäiset rakenteet ovat niitä, jotka luomme tai muutamme jo olemassa olevasta Ilpo-järjestelmästä. 2.1 Yleisarkkitehtuuri Ilpo2 on jaettu pakkauksiin siten, että fi.helsinki.cs.ilpo pakkauksessa on modelluokat, fi.helsinki.cs.ilpo.view pakkauksessa on view-luokat ja fi.helsinki.fi.control pakkauksessa on control-luokat. Luokkien välisiä yhteyksiä tarkastellaan liitteessä 1. Syy jaotteluun on ohjelmiston helpompi käsiteltävyys varsinkin päivitystilanteissa. Model vastaa kaikkia ydinosia, joilla muodostetaan muun muassa Opiskelija- ja Kurssioliot. Model:n luokilla on vastuullaan kaikki looginen toiminnallisuus. View:n luokilla luodaan käyttäjälle tarjottava käyttöliittymä. Control:n luokat huolehtivat käyttöliittymän toiminnallisuudesta. Haluttaessa käyttää ohjelmaa, Control käsittelee käyttäjän syötteet. IO:n luokat käsittelevät kaikki tulostuspyynnöt. Ilpo-järjestelmästä poistetut luokat ovat liitteessä 2 ja koodiin lisätyt uudet luokat ovat listattuina liitteessä 3. 2.2 Järjestelmän tekninen kuvaus Ohjelma toimii Java-sovelluksena graafisella käyttöliittymällä terästettynä. Laitteistovaatimuksina on, että sovellus toimii tavallisessa TKTL:n pöytäkoneessa. Ohjelma toimii sekä Linux että Windows käyttöjärjestelmissä. Vaadittava Java Runtime Environment -versio on 5.0. 4

3 Vaatimusten toteutus Seuraavassa on lueteltu joidenkin vaatimusten toteutusehdotuksia. Numerointi viittaa määrittelydokumentin vastaaviin kohtiin. Ehdotukset ovat alustavia, eivätkä välttämättä vastaa lopullista toteutusta. Ehdotuksista poikkeavat toteutukset on lueteltu liitteessä 4. Vaatimus 3.1.1 Tietorakenteet on alustettava uudelleen uutta kurssia luotaessa Luodaan fi.helsinki.cs.ilpo.kurssi-luokan uusi ilmentymä ja renderöidään käyttöliittymä uudelleen. Vaatimus 3.1.2 Tallenna-toiminto tulee tehdä Luokan Ilpo pitkähkössä konstruktorissa luodaan menuun "Tallenna"-valinta. Siitä voi ottaa mallia. Itse tallennus tehdään tällä hetkellä luokassa fi.helsinki.cs.ilpo.control:kurssintallennus. Vaatimus 3.1.3 Ohjelman asetuksia on pystyttävä muuttamaan asetustiedostosta Luodaan luokka io.asetustiedostolukija, joka lukee ja käsittelee xml-muotoisen asetustiedoston. Asetustiedostosta poimitut vastaukset tallennetaan staattisiin muuttujiin luokan sisälle. Niitä voidaan kysellä aksessorimetodeilla. Luokka sisältää myös järkevät oletusarvot kaikille asetuksille, joille sellaisten tallentaminen on järkevää. Vaatimus 3.1.4 Työvaiheiden tulee näkyä käyttäjälle Menujen sisältöä pitää muuttaa, kun työvaihetilanne muuttuu. Joko menujen sisältöä muutetaan samalla kun tehty työvaihe kirjataan tai sitten niitä muutetaan myöhemmin. Jos niitä muutetaan myöhemmin, niin tehdään joku tarkistamenut() tai vastaava metodi. Sitä kutsutaan joko aina jossakin tietyssä kohdassa tai sitten työvaiheita tehdessä sen ajaminen skeduloidaan myöhemmin tehtäväksi (javax.swing.swingutilities.invokelater()). Vaatimus 3.1.5 Ryhmätoiveen on näyttävä opiskelijapallossa Luokkaa Pallo muutetaan siten, että se piirtää palloon liitetyn opiskelijan tietojen perusteella opiskelijan ensimmäisen ryhmätoiveen pallon sisään. Kaikki symbolin '1' tai '+' sisältäneet pallokuvat poistetaan. Alkuperäisessä Ilpossa jokainen pallokuva on oma kuvatiedostonsa (esim. musta pallo, valittu musta pallo, symbolin '+' sisältävä musta pallo, symbolin '+' sisältävä valittu musta pallo, punainen pallo jne...) Kuvatiedostojen määrää vähennetään, ja kuvat tullaan piirtämään toistensa päälle kerroksittain. Ainoastaan valituista palloista jää edelleen omat kuvatiedostonsa. Pallon sisään piirrettävät numerot 0-9 ovat omina kuvatiedostoinaan. 10 ja suuremmat luvut muodostetaan yhdistelemällä kuvatiedostoja. Vaatimus 3.1.7 Usean opiskelijan yhtäaikainen siirtäminen Lisätään uusi luokka SiirtyvatKomponentit, joka sisältää tietoa siirtyvistä komponenteista (pallot, ryhmät, aihelaatikot). 5

Vaatimus 3.1.8 Opiskelijoita tulee pystyä lisäämään kurssin perustamisen jälkeen Toteutetaan kurssi-menussa oleva "lisää opiskelija". Kurssi-luokasta löytyy Collection opiskelijat. Ilpo-luokassa oleva metodi lisaaopiskelija() lisää opiskelijan tietorakenteisiin, ja KurssiLisaaOpiskelija toimii kutsuvana luokkana. Luokan sisällä lisätään opiskelijan ryhmätoiveet ja haetaan opintosuoritukset. Lopuksi lisätään opiskelijapallo opiskelijanäkymään. Vaatimus 3.1.9 Ryhmien tietojen käsittelyn tulee olla mahdollista Lisätään JInternalFrameen kontekstimenu ja tehdään dialogi. Luokka on nimeltään IlpoRyhma. Päivitetään ryhmän RyhmaNakyma mikäli se on tarpeellista. RyhmaNakyma on siis ryhmän graafinen esitys. Vaatimus 3.1.10 Esitiedot tulee varmistaa automaattisesti Poistetaan UupuvaOpintojakso-luokka ja luetaan esitietovaatimukset XML-tiedostosta. Jonkin verran asioita pitää kuitenkin pitää koodissa kovakoodattuina. Vaatimus 3.1.11 Projektiaiheita tulee pystyä lisäämään kurssin perustamisen jälkeen Lisätään aiheen lisääminen kurssimenuun ja päivitetään "Aiheet" -tab. Kurssi-luokan aihesort-olioon pitänee myös koskea. Vaatimus 3.1.12 Opiskelijoita tulee pystyä poistamaan Lisätään kurssi-menuun "Poista opiskelija" ja toteutetaan poistodialogi. Opiskelija pitää poistaa Kurssit, IlpoRyhmä ja Vastausvaihtoehto-olioista. Lisäksi opiskelijaa kuvaava opiskelijapallo poistetaan opiskelijanäkymästä ja tarvittaessa myös ryhmänäkymästä. Mikäli poistettava pallo oli valittuna, päivitetään tietonäkymän sisältö. Vaatimus 3.1.14 Ilmoittautumisjärjestelmän kysymykset tulee hakea asetustiedostosta Luokka control.kurssilisaaoppilaat pyytää ne io.asetustiedostolukijalta käsitellessään luokan io.ilmoittautujatiedostolukija antamat ilmoittautujatiedot. Vaatimus 3.1.15 Heuristiikka Opiskelijoiden jakamisen algoritmi toteutetaan heuristiikan omien ryhmä- ja opiskelijaluokkien sisällä. Vasta valmista jakoa sovelletaan Ilpon ryhmä- ja opiskelijaluokkiin. Ensimmäisenä heuristiikka selvittää järjestelmään kirjatut opiskelijat, jotka eivät ole vielä missään ryhmässä. Saaduista opiskelijoista tehdään heuristiikan opiskelijaluokan, HOpiskelija, ilmentymiä. Seuraavaksi selvitetään järjestelmän ryhmänäkymään luodut ryhmät ja tehdään näistä heuristiikan ryhmäluokan, HRyhmä, ilmentymiä. Mikäli ryhmänäkymässä ei ole yhtään ryhmää, luodaan ilmentymät kaikista järjestelmään kirjatuista aiheista. 6

Jokaisesta luodusta HOpiskelija ilmentymästä luodaan viitteet kolmeen opiskelijan ryhmätoiveiden perusteella saatuun HRyhmään. Mikäli opiskelijalla ei ole yhtään ryhmätoivetta, tai viitteiden tekeminen ei jostain syystä onnistu, luodaan HOpiskelijasta viitteet jokaiseen ryhmään. Saadut viitteet järjestetään kekoon HOpiskelijan arvon mukaan. Arvo lasketaan opiskelijan ilmo-vastauksista HRyhmä-luokan sisällä ja se on erillinen jokaiselle ryhmälle. Näin saadaan luotua jokaiselle Hryhmälle keko HRyhmään pyrkiviä HOpiskeljoita, järjestettynä HOpiskelijan arvon mukaan siten että korkeimman arvon omaava HOpiskelija on keon päällimmäisenä. Jokaisen HRyhmän keon päällimmäistä HOpiskelijaa verrataan keskenään ja näistä suuriman arvon omaava sijoitetaan sen viittaamaan ryhmään. Mikäli HOpiskelija on kertautuvat, eli se on jo sijoitettu johonkin ryhmään, poistetaan HOpiskelija keosta ja aloitetaan suoraan uusi vertailu. Kun jostain keosta on saatu lisättyä HOpiskelija johonkin HRyhmään, keko lukitaan ja aloitetaan uusi vertailu. Lukitusta keosta ei valita pyrkijää, ellei muut ryhmät ole joko tyhjiä tai lukittuja. Kun kaikki keot ovat tulleet lukituiksi, poistetaan lukot. Jokaisesta keosta valitaan siis yksi pyrkyri jokaisella kierroksella. Jakoa jatketaan, kunnes kaikki HOpiskelijat on jaettu HRyhmiin. Kun heuristiikka on tehnyt tehtävänsä, tehdään Ilpo2:ssa tarvittavat ryhmien luomiset ja jaetaan opiskelijat ryhmiin heuristiikan tuloksen mukaisesti. Heuristiikka määrittelee opiskelijan arvon seuraavasti: 1. Ohjelmointikokemuksesta (1-6): Kun ryhmän kokemus on alle 15: arvo +(kokemus-1)^2 *1 Kun ryhmän kokemus on yli 20, mutta alle 25: arvo +(kokemus-1)^2 *0.5 Kun ryhmän kokemus on yli 25: arvo +(kokemus-1)^2*0.2 2. Työtilanteesta (1-8) Kun ryhmän työmäärä on alle 10: ei pisteitä Kun ryhmän työmäärä on yli 10, mutta alle 20: arvo -(työtilanne*1.5) Kun ryhmän työmäärä on yli 20: arvo -(työtilanne*3) 3. Ryhmätoiveesta (1-3) Ensisijainen ryhmätoive: +15 Toinen ryhmätoive: +8 Kolmas ryhmätoive: +4 4. Ohtukiinnostuksesta (1-7) Jos ryhmässä ei ole vielä samasta aiheesta kiinnostunutta: +3 5. Ryhmätyöstä (1-6) Jokaisesta 1p. erosta opiskelijan ja jonkin toisen opiskelijan ryhmätoiveissa: -2. 7

Vaatimus 3.1.16 Hakutoimintoa pitää parantaa Hakutoimintoa parannetaan siten, että käyttäjä voi valita ne hakukentät joihin haku kohdistetaan. Hakutoiminnossa voidaan käyttää vertailuoperaattoreita. Erikseen hakukenttään ei tarvitse syöttää mitään kirjainta indikoimaan kenttää johon vertailu kohdistetaan. Suoritettaessa hakua ilmaistaan boolean-muuttujilla ne kentät joihin haku kohdistetaan. Vaatimus 3.1.17 Ohjelman tulee tulostaa raportteja Ohjelma tulostaa seuraavat raportit vaatimusmäärittelyssä kuvatun kaltaisina: ryhmäjako oppilaille, ryhmäjako ohjaajille, ilmoittautuneet, puuttuvat sopimukset ja puutteelliset esitiedot. Näistä kaikki muut raportit ovat TXT-muotoisia paitsi ryhmäjako oppilaille, joka on HTML-muotoinen. Vaatimus 3.2.1 Tallennusformaatin on oltava tekstipohjainen Etsitään javalle XML:ää serialisointiin käyttävä kirjasto, jonka lisenssi on GPLyhteensopiva. Jos sellaista ei löydy niin sitten täytyy tehdä jotain itse, mutta Effective XML -kirjassa on tästä esimerkki. Vaatimus 3.2.2 Ohjelman sen hetkinen tilanne on oltava tallennettavissa, vaikka sovellus kaatuisikin Laitetaan Ilpo.main(String[]):n sieppaamaan Exceptionin alaluokat ja ja catchiin laitetaan datan tallettaminen johonkin tiedostoon, jolla on eri nimi kuin työtiedostolla. Kun Ilpo käynnistetään seuraavan kerran niin ohjelma huomaa, että crash-kopio olemassa. Vaatimus 3.2.3 Raportit tulee tulostaa aakkosjärjestykseen Tämä toteutetaan siten, että IlpoRyhmä-collectionista luetaan raporttiin haluttavat tiedot String-taulukkoon, joka järjestetään ja tulostetaan raporttiin. Vaatimus 3.2.4 Tietonäkymä tulee lajitella aakkosjärjestykseen Järjestämätön opiskelijalista järjestetään ennen tulostusta luokassa view.henkilotietosolumonikko. Vaatimus 3.3.1 Koodin on oltava siistiä ja ylläpidettävää Ilpo-luokan erittäin pitkä konstruktori pienennetään hallittaviin private-metodeihin ja Ilpoon lisätään aliluokat, jotka perivät javax.swing.jmenubarin ja javax.swing.jtoolbarin. Lisäksi poistetaan turhia luokkia, siistitään import-lauseet ja poistetaan käyttämättömiä muuttujia. Vaatimus 3.3.2 Ohjelmassa ei saa olla turhia toimintoja Poistetaan valikoista toiminnot, joita ei ole toteutettu tai jotka ovat tarpeettomia Vaatimus 3.3.4 Ilmoittautujatiedoston parsijan korjaus [Kysymysnumeroiden yli 9 ymmärtäminen ja virheilmoitus tiedoston virheistä] Tainan parseri kirjoitetaan kokonaan uudelleen. Toiminnallisuus jaetaan kahteen eri luokkaan: io.ilmoittautujatiedostolukija ja control.kurssilisaaoppilaat. Näistä ensimmäinen lukee ja analysoi ilmoittautujatiedoston jälkimmäisen pyynnöstä ja välittää tiedot takaisin sille. 8

Ylimääräinen vaatimus: Opiskelijapallot näkyviin heti kun mahdollista Ilpo-luokan tekemä käyttöliittymäalustus pilkotaan pienempiin osiin, joita kutsutaan asianmukaisista paikoista. Metodin Ilpo.alustaKurssinKali() kutsu siirretään pois nykyisestä paikastaan. 9

4 Luokkarakenne Tässä luvussa kuvataan ohjelmiston luokkarakenne. Luokat on jaoteltu pakkauksiin ja pakkauksia on luotu neljä kappaletta. Luokkaryhmät, joita pakkaukset pitävät sisällään, ovat nimeltään Model, Control, View ja IO. Kaikki ryhmät käsitellään seuraavissa aliluvuissa. Tarkempi kuvaus jokaisesta pakkauksesta löytyy APIkirjastosta, joka on liitteessä 5 Javadoc muodossa. 4.1 Model Model-luokat sijaitsevat fi.helsinki.cs.ilpo pakkauksessa. Kyseessä on järjestelmän sisäiseen tietorakenteeseen liittyvät luokat, joissa on myös kaikki niihin liittyvä looginen toiminnallisuus. Kurssi ja Opiskelija luokat ovat ne millä pääsääntöisesti operoidaan. Niillä muodostetaan Kurssi, - Ilporyhmä, - ja Opiskelija olioita. Opiskelija-olioita sijoitellaan Ilporyhmä-olioihin. Muut luokat ovat avusteisia näille luokille. Ne liittyvät kursseihin, opiskelijoihin ja ryhmiin kuuluvien tietojen käsittelyyn. 4.2 Control Control- luokat sijaitsevat fi.helsinki.cs.ilpo.control pakkauksessa. Kyseessä on käyttäjän syötteiden prosessoinnin hoitavat luokat. 4.3 View View-luokat sijaitsevat fi.helsinki.cs.ilpo.view pakkauksessa. Kyseessä on graafisen käyttöliittymän komponentit sisältävät luokat. View-luokat muodostuvat kahdenlaisista luokista: valmiista Swing-komponenteista perittävistä luokista sekä puhtaasti grafiikalla tehtävistä luokista. 4.4 IO Tiedostoja käsittelevät luokat ovat omassa pakkauksessaan fi.helsinki.cs.ilpo.io. Pakkauksessa on luokat tulostiedostojen kirjoitusta vasten sekä työvälineet, joilla keskeneräisiä ryhmäjakoja voidaan tallentaa ja ladata. 10

5 Käyttöliittymä Tässä dokumentissa käsitellään käyttöliittymän toteutusta. Käyttöliittymä on suurilta osin jo toteutettu alkuperäisen Ilpon toimesta. Ilpo2 keskittyy toteuttamaan uudet toiminnot mahdollisimman käyttäjäystävällisesti ja siistii Ilpoon jääneitä epäjohdonmukaisuuksia ja turhia toimintoja. Käyttöliittymän fyysinen rakenne koostuu kolmesta osasta: vasemmalla ylhäällä olevasta opiskelijanäkymästä, vasemmalla alhaalla olevasta tietonäkymästä ja oikealla olevasta ryhmänäkymästä. Opiskelijanäkymä koostuu kolmesta tab-lehdestä: opiskelijat, aiheet ja rajausehdot. ja. Opiskelijanäkymä sisältää opiskelijapalloja, ja tässä pysytään Ilpon menetelmässä toteuttaa osio kokonaan grafiikalla. Tietonäkymässä on joko tarkkaa tietoa yhdestä valitusta opiskelijasta tai yleisempää tietoa useasta valitusta opiskelijasta. Nämä on toteutettu swing-komponenteilla. Ryhmänäkymä on toteutettu kokonaan grafiikalla. Se sisältää ryhmiä sekä opiskelijapalloja ja aiheita kuvaavia komponentteja. Käyttöliittymäsuunnittelun pohjalla on erityisesti alkuperäinen Ilpo ja tämän tulkinta model-view-control (MVC) ratkaisusta. MVC on suunnittelumalli, jonka idea on jakaa järjestelmän toiminnallisuus kolmeen osaan: model-osassa on järjestelmän looginen toiminnallisuus (sekä tietosisältö), view-osassa on käyttäjälle esitettävä osa (eli graafisen käyttöliittymän komponentit, kuten napit ja muut napiskuukkelit) ja control-osassa on käyttäjän syötteiden prosessointi. 11

LIITE 1 Luokkakaaviot Ilpo2 luokkakaavioissa kuvataan vain ohjelman tärkeimmät luokat sillä ohjelman kuvaaminen täydellisesti, niin että luokkakaaviot olisivat vielä ohjelmaa kuvaavia, on mahdotonta. 1/3 1 Ilpo 1 1 1 1 1 1 1 IlpoToolbar IlpoMenuBar OpiskelijaSolu RyhmaSolu 1 1 1 1 * * 1 1 ActionListener SoluMouseListener 1 1 1 1 OpiskelijaSortSoluMouseListener RyhmaSoluMouseListener Ilpo2:n käyttöliittymä kootaan Ilpo-luokassa. Sen aliluokat IlpoToolBar ja IlpoMenuBar kokoavat valikot ja työkalupalkin yhteen ja kytkevät niihin Actionit. Hiiren liikkeitä OpiskelijaSolussa ja RyhmäSolussa kuuntelevat OpiskelijaSortSoluMouseListener ja RyhmaSoluMouseListener yhdessä SoluMouseListenerin kanssa.

2/3 Ilpo 1 1 Kurssi 1 * IlpoRyhma 1 1 * Opiskelija * Ilpo-luokka kokoaa Ilpon tärkeimmät kontrolliluokat Kurssi, IlpoRyhma ja Opiskelija yhteen.

3/3 Ilpo 1 1 1 1 OpiskelijaSortSolu 1 RyhmaSolu 1 1 1 1 1 * * ValintaOsa SortOsa NakymaKomponentti Pallo NakymaRyhma KopioituvaPallo SiirtyvaPallo NakymaVanhaRyhma NakymaUusiRyhma OpiskelijaSortsolu toteuttaa Ilpo2:n opiskelijanäkymän ja Ryhmäsolu puolestaan ryhmänäkymän. OpiskelijaSortSolun ValintaOsa näyttää tiedot yhdestä tai useammasta opiskelijasta. RyhmaSoluun sijoitetaan opiskelijaryhmät NakymaKomponentin avulla. Nakymakomponentin perivät luokat Pallo, KopioituvaPallo, SiirtyvaPallo, NakymaRyhma, NakymaVanhaRyhma ja NakymaUusiRyhma.

LIITE 2 Poistetut luokat Listassa on lueteltuina kaikki ne luokat, jotka on poistettu alkuperäisestä Ilposta. AboutIkkuna AiheBoksiMouseListener AiheLaatikko AutentikointiIkkuna Henkilokuntalainen HKBoxiMouseListener HKLaatikko HKSortSolu HTMLKirjoitin HTMLKirjoitus HTMLKirjoitusikkuna IlmoRyhma IsoAiheBoksi IsoHKBoxi KeskeneraistenRyhmienKasittelija KurssiLueRyhmat KurssinLatausikkuna KurssinTallennusikkuna Kurssintuonti KurssinTuontiikkuna KurssinVienti KurssiUusiOhjaaja LisaaHenkilokuntalainenDialog LueOppilaatDialog LueRyhmatDialog OpiskelijanumeroTulostin PaivitaTiedot Parseri PieniHKBoxi Puukottaja RaporttiHenkilotunnukset SekoitaPuolukat Sivuaine SorttausPerusteSekoita SuoritettuSivuainekurssi TarkistaTallennusehdot TestHenkilokuntalainen TestIlmoRyhma TestIlpoRyhma TestKurssiLisaaOpintosuoritukset TestKurssiLisaaOppilaat TestKysymys TestOpintojakso TestOpiskelija TestOpiskelijaSortSolu TestSuoritettuOpintojakso TestUupuvaOpintojakso TestVapaakysymys TestVapaavastaus TestVastausvaihtoehto Tiedostokirjoittaja Tietokantakyselija Tietokantayhteys UupuvaOpintojakso Vapaakysymys

LIITE 3 Lisätyt luokat Listassa on lueteltuina kaikki ne luokat, jotka ovat uusia lisäyksiä Ilpo2:en AiheSortSoluMouseListener ApuDialogeja AsetustiedostoLukija AsetustiedostoLukijaTest EsitietojenTarkastaja FileUtilities Heuristiikka HeuristiikkaTest IlmoittautujatiedostoLukija IlmoOpiskelija IlpoGlassPane KurssiLueAiheet KurssinLatausDialog KurssinTallennusDialog KurssiPoistaOpiskelija LisaaAiheDialog LueAiheetDialog LueOpiskelijatDialog PoistaOpiskelijaDialog ProjektiAihe RajausSortSolu RaporttiPuutteellisetEsitiedot RaporttiPuuttuvatSopimukset SiirtyvatKomponentit SoluMouseListener TiedostonKasittelyVirhe

LIITE 4 Toteutusehdotuksista poikkeavat toteutukset Vaatimus 3.1.10 Esitiedot tulee varmistaa automaattisesti XML-pohjainen toteutus osoittautui tarpeettoman monimutkaiseksi ja esitiedot tarkistetaan nyt kovakoodatusti luokassa fi.helsinki.cs.ilpo.control.esitietojentarkastaja.

LIITE 5 Javadoc Tässä liitteessä Ilpo2 luokkien Javadoc:t ovat järjestettyinä pakkauksittain. Täydellinen Javadoc on tallennettu ohjelman CD:lle HTML-muodossa. 1. Pakkaus fi.helsinki.cs.ilpo Luokat Ilpo IlpoRyhma Kurssi Kysymys Opintojakso Opiskelija ProjektiAihe SuoritettuOpintojakso UupuvaOpintojakso Vapaavastaus Vastausvaihtoehto Ilpo-ohjelmiston graafisen ja rakenteellisen puolen ydin. Ilpon sisäisen ryhmäjaon ryhmät. Järjestelmän kannalta keskeinen tietorakenne, johon liittyy kaikki yhden kurssin ryhmittelyn kannalta olennainen tieto. Ilmon monivalintakysymys ilpossa. TKTL:n kurssi, jonka opiskelija on saattanut suorittaa. Edustaa yhtä kurssille ilmoittautunutta opiskelijaa. Yhtä projektiaihetta kuvaava luokka. Yhdistää opiskelijan ja tämän suorittaman tktl:n opintojakson toisiinsa. Kurssin esitietoihin kuuluva opintojakso, jota opiskelija ei ole suorittanut. Opiskelijan vastaus vapaakysymykseen. Vastausvaihtoehto sellaisen kysymyksen, johon on valmiit vastausvaihtoehdot.

1.1 Luokka Ilpo 1.1.1 Kuvaus public class Ilpo extends javax.swing.jframe Ilpo-ohjelmiston graafisen ja rakenteellisen puolen ydin. Ilpo-luokka toimii model- ja viewosat yhdistävänä komponenttina. 1.1.2 Konstruktorien tiedot public Ilpo() Konstruktorin ajamisen jälkeen, on ilpon graafinen puoli alustettu, jolloin tarvittava toiminnallisuus kurssien tai kurssijärjestelyjen suorittamiseen on kunnossa. Konstruktori huolehtii myös autentikoinnista 1.1.3 Metodien tiedot annahakuehtonimi public boolean annahakuehtonimi() annahakuehtohetu public boolean annahakuehtohetu() annahakuehtoopnro public boolean annahakuehtoopnro() annahakuehtoemail public boolean annahakuehtoemail() annahakuehtopaaaine public boolean annahakuehtopaaaine() annahakuehtokayttajatunnus public boolean annahakuehtokayttajatunnus() annahakuehtoopkaikki public boolean annahakuehtoopkaikki() annahakuehtooptktl public boolean annahakuehtooptktl() annahakuehtoika public boolean annahakuehtoika() annahakuehtosukupuoli public boolean annahakuehtosukupuoli() annahakuehtoaloitusvuosi public boolean annahakuehtoaloitusvuosi() enabloiryhmajakooppilaille public void enabloiryhmajakooppilaille()

enabloiryhmajakoohjaajille public void enabloiryhmajakoohjaajille() enabloiilmoittautuneet public void enabloiilmoittautuneet() enabloipuuttuvatsopimukset public void enabloipuuttuvatsopimukset() enabloipuutteellisetesitiedot public void enabloipuutteellisetesitiedot() alustakurssinkali public void alustakurssinkali() Kutsuttava uutta kurssia ladattaessa grafiikan luomiseksi. Siis kutsutaan sekä uuden kurssin haussa että vanhan ryhmittelyn tallennuksessa. lisaaopiskelija public void lisaaopiskelija(opiskelija o) lisaaprojektiaihe public void lisaaprojektiaihe(projektiaihe aihe) annaaiheidenlukum public int annaaiheidenlukum() asetajarjperusteetvalikkoon public void asetajarjperusteetvalikkoon() Asettaa järjestelyperusteet valikkoon. annakurssi public Kurssi annakurssi() Palauttaa kurssi-olion, joka on järjestelyn alaisena. Järjesteltävä kurssi. annaanimaatiosaie public AnimaatioSaie annaanimaatiosaie() Palauttaa ikkunoiden animoinnista huolehtivan animaatio-säikeen. AnimaatioSaie, joka animoi ikkunat. annaglasspane public java.awt.component annaglasspane() Palauttaa Ilpon JFramen GlassPanen. GlassPane. annaaihesortsolu public AiheSortSolu annaaihesortsolu() Palauttaa AiheSortSolun. AiheSortSolu.

annasolukuuntelija public SoluMouseListener annasolukuuntelija() poistavalinnat public void poistavalinnat() Poistaa kaikki opiskelijat valittujen opiskelijoiden listalta. asetavalittu public void asetavalittu(opiskelija opiskelija) Poistaa kaikki opiskelijat valittujen listalta ja asettaa annetun opiskelijan valituksi. opiskelija - Opiskelija, joka asetetaan ainoaksi valituksi. lisaavalittu public void lisaavalittu(opiskelija opiskelija) Lisää annetun opiskelijan valittujen listalle poistamatta aiemmin valittuina olleiden opiskelijoiden valintaa. opiskelija - Opiskelija, joka lisätään valituksi. setkurssi public void setkurssi(kurssi kurssi) Asettaa järjesteltävän kurssin. kurssi - Uusi, asetettava kurssi. tuhoakurssi public void tuhoakurssi() Kutsuttava mikäli jokin kurssi on olemassa, ja silti tuodaan uusi kurssi. Tällöin tietorakenne ja kaikki järjestelyyn liitettävät käyttöliittymäelementit tuhotaan. annaryhmasolu public RyhmaSolu annaryhmasolu() Palautta RyhmaSolun. RyhmaSolu. annasortsolu public OpiskelijaSortSolu annasortsolu() Palauttaa SortSolun. SortSolu. annaasetustiedosto public static java.lang.string annaasetustiedosto() Antaa asetustiedosto ja alustaa asetushakemiston hakemistorakenteen jos sitä ei ole. Asetustiedoston nimi polkuineen.

annapoikkeustalletustiedosto public static java.lang.string annapoikkeustalletustiedosto() main public static void main(java.lang.string[] args) poistaopiskelija public void poistaopiskelija(opiskelija o) Hoitaa poistettavan opiskelijan tietojen poistot kälistä. 1.2 Luokka IlpoRyhma 1.2.1 Kuvaus public class IlpoRyhma extends java.lang.object Ilpon sisäisen ryhmäjaon ryhmät. 1.2.2 Konstruktorien tiedot IlpoRyhma public IlpoRyhma() Luo uuden IlpoRyhma-olion 1.2.3 Metodien tiedot annanimi public java.lang.string annanimi() Palauttaa ryhmälle asetetun nimen. the value of nimi asetanimi public void asetanimi(java.lang.string uusinimi) Set the value of nimi lukittu public boolean lukittu() Jos ryhmä on lukossa. true - jos ryhmä on lukossa. lukitse public void lukitse() Asettaa IlpoRyhma-olion lukituksi. avaa public void avaa() Avaa IlpoRyhma-olion lukituksen. poistaprojektiaihe public void poistaprojektiaihe() Poistaa viitteen ProjektiAihe-olioon ja ProjektiAihe-oliossa olevan viitteen IlpoRyhma-olioon (jonka pitäisi olla tämä).

annaprojektiaihe public ProjektiAihe annaprojektiaihe() Palauttaa kannassa olevan ryhmän, joka kyseiseen ryhmään on liitetty. ProjektiAihe, joka on liitetty kyseiseen ryhmään. annaopiskelijat public java.util.linkedlist<opiskelija> annaopiskelijat() Palauttaa arvonaan ilporyhma:ssa olevat opiskelijat Opiskelija-oliota linkitetyssä listassa. voidaanpoistaa public boolean voidaanpoistaa() Palauttaa true, mikäli ryhmä ja kaikki sen opiskelijat ovat lukitsematta. liikaaopiskelijoita public boolean liikaaopiskelijoita() True, mikäli ryhmään on sijoitettu enemmän opiskelijoita kuin.kurssitiedostossa on määritelty siihen mahtuvaksi. liianvahanopiskelijoita public boolean liianvahanopiskelijoita() ture, mikäli ryhmässä on vähemmän opiskelijoita kuin.kurssi-tiedostossa on määritelty siihen tarvittavaksi lisaaopiskelija public boolean lisaaopiskelija(opiskelija lisattava) Lisää opiskelijan Ilporyhma-olioon, mikäli opiskelija ei ole jo valmiiksi kyseisessä ryhmässä. Lisäksi lisää opiskelijan ilporyhmä tietorakenteeseen itsensä. Opiskelijaa, joka on jollain lailla lukittu, ei voida lisätä. Päivittää myös yhteyden Opiskelijasta tähän IlpoRyhmaan. lisattava - Opiskelija, joka lisataan ryhmään True, mikäli lisäys onnistui poistaopiskelija public boolean poistaopiskelija(opiskelija poistettava) Poistaa opiskelijan IlpoRyhma:sta. poistettava - Opiskelija, josta halutaan eroon. True, jos poisto onnistui. poistaopiskelijat public void poistaopiskelijat() Poistaa kaikki IlpoRyhma:ssa olevat opiskelijat.

asetaprojektiaihe public void asetaprojektiaihe(projektiaihe aihe) Asettaa ProjektiAiheen. Rakentaa kaksisuuntaisen yhteyden myös ProjektiAiheesta kyseiseen IlpoRyhmaan. aihe - Asetettava ProjektiAihe. ok public boolean ok() Luokkainvariantti: tarkistaa ensinnäkin, onko yhteys ProjektiAiheeseen kunnossa. true - jos IlpoRyhma on oikeellisessa tilassa. ok public boolean ok(opiskelija opiskelija) Luokan Opiskelija käyttöön luokkine välisen yhteyden tarkastamiseksi tostring public java.lang.string tostring() Overrides: tostring in class java.lang.object 1.3 Luokka Kurssi 1.3.1 Kuvaus public class Kurssi extends java.lang.object Järjestelmän kannalta keskeinen tietorakenne, johon liittyy kaikki yhden kurssin ryhmittelyn kannalta olennainen tieto. 1.3.2 Konstruktorien tiedot Kurssi public Kurssi(java.lang.String kurssikoodi, java.lang.string kurssinimi, java.lang.string lukuvuosi, java.lang.string lukukausi) 1.3.3 Metodien tiedot annaopintojakso public Opintojakso annaopintojakso(java.lang.string kurssikoodi) annatallennustiedosto public java.io.file annatallennustiedosto() Tiedosto johon järjestetelytilanne talletetaan tai null jos sitä ei vielä ole. asetatallennustiedosto public void asetatallennustiedosto(java.io.file tiedosto) Asettaa tallennustiedoston.

tallenna public void tallenna(java.io.file tiedosto) Tallentaa kurssin XML:na kayttaen XStream-kirjastoa lataa public static Kurssi lataa(java.lang.string tiedosto) throws java.io.filenotfoundexception, java.io.ioexception, com.thoughtworks.xstream.io.streamexception XML-tiedostosta ladatun kurssin. Throws: java.io.filenotfoundexception java.io.ioexception com.thoughtworks.xstream.io.streamexception lisaaopiskelija public void lisaaopiskelija(opiskelija opiskelija) lisaaprojektiaihe public void lisaaprojektiaihe(projektiaihe aihe) poistaprojektiaiheet public void poistaprojektiaiheet() asetaopintojaksot public void asetaopintojaksot (java.util.hashtable<java.lang. String,Opintojakso> opintojaksot) annaopiskelijat public java.util.collection<opiskelija> annaopiskelijat() Palauttaa kaikki opiskelijat. Collection annaopiskelijat public java.util.collection<opiskelija> annaopiskelijat(java.lang.string syote, java.lang.boolean nimi, java.lang.boolean hetu, java.lang.boolean opnro, java.lang.boolean email, java.lang.boolean paaaine, java.lang.boolean kayttajatunnus, java.lang.boolean opkaikki, java.lang.boolean optktl, java.lang.boolean ika, java.lang.boolean sukupuoli, java.lang.boolean aloitusvuosi) Palauttaa kokoelmaolion, joka sisältää kaikki hakuehdon täyttävät opiskelijat. Kokoelma, jossa hakuehdot täyttävät opiskelijat. annanimi public java.lang.string annanimi() Palauttaa Kurssin nimen. kurssin nimi

annakurssikoodi public java.lang.string annakurssikoodi() Palauttaa ryhmiteltävän kurssin kurssikoodin Kurssikoodi merkkijonona annalukuvuosi public int annalukuvuosi() Palauttaa lukuvuoden, jolloin ryhmiteltävä kurssin pidetään. Lukuvuosi kokonaislukuna annalukukaudennimi public java.lang.string annalukukaudennimi() Palauttaa ryhmiteltävän kurssin lukukauden nimen suomeksi Merkkijono, joka on lukukauden nimi suomeksi annaprojektiaiheet public java.util.collection<projektiaihe> annaprojektiaiheet() Palauttaa kurssiin liittyvät ProjektiAihe-oliot. Kurssin ProjektiAihe-oliot. annakysymykset public java.util.collection<kysymys> annakysymykset() Palauttaa kokoelmaolion, joka koostuu kaikista kurssin kysymyksistä. kokoelma joka sisältää kysymys-olioita annakysymys public Kysymys annakysymys(int ilponumero) Palauttaa arvonaan sen Kysymys-olion, jossa on parametrin mukainen Ilpojärjestysnumero. ilponumero - Järjestelmän sisäinen järjestysnumero kysymykselle. Haluttu Kysymys-olio. annavapaakysymys public Kysymys annavapaakysymys(int ilponumero) Palauttaa sen vapaakysymyksen, jolla on haluttu Ilpo- järjestysnumero. ilponumero - Järjestelmän sisäinen järjestysnumero. Haluttu Kysymys-olio.

lisaakysymys public void lisaakysymys(kysymys uusikysymys) Lisää Kurssi-olioon kysymyksen, johon on olemassa valmiit vastausvaihtoehdot. uusikysymys - Vaihtoehdollinen kysymys. annailporyhmat public java.util.collection<ilporyhma> annailporyhmat() Palauttaa viitteen Ilpo-ryhmiin eli tehtyyn ryhmittelyyn Collection-olio, joka sisältää Ilpo-ryhmät lisaailporyhma public void lisaailporyhma(ilporyhma lisattava) Lisää IlpoRyhma-olion kurssin tietorakenteeseen. lisattava - Kurssin tietorakenteisiin lisätträvä IlpoRyhma-olio. annailporyhmienmaara public int annailporyhmienmaara() Palauttaa arvonaan luotujen IlpoRyhmien lukumäärän. IlpoRyhma-olioden määrä. poistailporyhma public boolean poistailporyhma(ilporyhma poistettava) Poistaa ryhmän ja kaikki viitteet siihen. Poisto onnistuu ainoastaan silloin, kun sitä ei ole lukittu ja sen opiskelijat eivät ole lukittu siihen. poistettava - Ryhmä josta halutaan eroon True, jos ryhmän poisto onnistui. poistaopiskelija public void poistaopiskelija(opiskelija o) Poistaa kurssilta opiskelijan. o - poistettava opiskelija ok public boolean ok() Luokkainvariantti. true - jos olio oli ehjä (ja on yhä sitä). 1.4 Luokka Kysymys 1.4.1 Kuvaus public class Kysymys extends java.lang.object Ilmon monivalintakysymys ilpossa.

1.4.2 Konstruktorien tiedot Kysymys public Kysymys(java.lang.String kysymys, int kysymysnumeroilpossa) Luo uuden monivalintakysymys-olion. kysymys - Kysymys tekstimuodosso. kysymysnumeroilpossa - Järjestelmän sisäinen ID kysymykselle. radiokysymys - Lippu, joka ilmoittaa onko kysymys radiobutton-tyyppinen. 1.4.3 Metodien tiedot annakysymys public java.lang.string annakysymys() Palauttaa arvonaan kysymyksen lyhenteen tekstinä Kysytty asia. annakysymysnumeroilpossa public int annakysymysnumeroilpossa() Palauttaa arvonaan kysymyksen järjestelmän sisäisen järjestysnumeron. Järjestysnumero yksilöi kysymyksen. Yksilöivä kysymyksen järjestysnumero. lisaavastausvaihtoehto public void lisaavastausvaihtoehto(vastausvaihtoehto vaihtoehto) TÄTÄ METODIA SAA KUTSUA AINOASTAAN LUOKASTA Vastausvaihtoehto, ja tarkemmin ottaen sen konstruktorista!!! vaihtoehto - vastausvaihtoehto, joka halutaan liittää tähän kysymykseen. annavastausvaihtoehto public Vastausvaihtoehto annavastausvaihtoehto(java.lang.string vastaus) Palauttaa vastauksen vastaus - tekstimuotainen vastaus vastausvaihtoehto annavastausnumerot public java.util.enumeration<java.lang.string> annavastausnumerot() Palauttaa vastausvaihtoehtojen numerot. Numerot tekstinä.

tostring public java.lang.string tostring() Palauttaa arvonaan kyseisen Opintojakson kurssikoodin tekstimuodossa. Overrides: tostring in class java.lang.object kurssikoodi. ok public boolean ok() Luokkainvariantti: true - jos olio on ehjä. 1.5 Luokka Opintojakso 1.5.1 Kuvaus public class Opintojakso extends java.lang.object TKTL:n kurssi, jonka opiskelija on saattanut suorittaa. 1.5.2 Konstruktorien tiedot Opintojakso public Opintojakso(java.lang.String nimi, java.lang.string kurssikoodi, double opintoviikot) Luo uuden opintojakso-olion nimi - Opintojakson nimi kurssikoodi - Opintojakson kurssikoodi opintoviikot - Opintojakson laajuus opintoviikoissa Opintojakso public Opintojakso(java.lang.String nimi, java.lang.string kurssikoodi) Luo uuden opintojakso-olion nimi - Opintojakson nimi kurssikoodi - Opintojakson kurssikoodi 1.5.3 Metodien tiedot annanimi public java.lang.string annanimi() Palauttaa arvonaan opintojakson suomenkieliesen nimen. Kurssin nimi suomeksi, peräisin Ilmo-kannasta.

annakurssikoodi public java.lang.string annakurssikoodi() Palauttaa arvonaan opintojakson kurssikoodin. kurssikoodi merkkijonona. annaopintoviikot public double annaopintoviikot() Palauttaa opintojaksosta myönnetyt opintoviikot. opintoviikkojen määrä. tostring public java.lang.string tostring() Palauttaa kirjallisen esityksen Opintojakso-oliosta. Overrides: tostring in class java.lang.object Merkkijono, muotoa "kurssikoodi nimi (X ov)" 1.6 Luokka Opiskelija 1.6.1 Kuvaus public class Opiskelija extends java.lang.object Edustaa yhtä kurssille ilmoittautunutta opiskelijaa. 1.6.2 Konstruktorien tiedot Opiskelija public Opiskelija(java.lang.String hetu, java.lang.string opiskelijanumero, java.lang.string nimi, java.lang.string sahkoposti, int aloitusvuosi, java.lang.string paaaine) Luo uuden Opiskelija-olion hetu - Opiskelijan henkilötunnus opiskelijanumero - Opiskelijan opiskelijanumero nimi - Opiskelijan nimi sahkoposti - Opiskelijan sähköpostiosoite aloitusvuosi - Vuosi, jolloin opiskelija on opintonsa aloittanut paaaine - Opiskelijan pääaineen lyhenne Opiskelija public Opiskelija(java.lang.String hetu, java.lang.string nimi) Opiskelija public Opiskelija(java.lang.String hetu, java.lang.string nimi, java.lang.string kayttajatunnus)

1.6.3 Metodien tiedot annavastausvaihtoehdot public java.util.collection<vastausvaihtoehto> annavastausvaihtoehdot() annavastausvaihtoehtokysymykseen public Vastausvaihtoehto annavastausvaihtoehtokysymykseen(int kysnro) Palauttaa opiskelijan vastausvaihtoehtovastauksen kysymysnumeron perusteella. kysnro - Kysymys, jonka vastaus palautetaan. Vastaus tai null, jos annetulla kysymysnumerolla ei löydy vastausta. annaryhmatoive public java.lang.string annaryhmatoive(int n) Palauttaa opiskelijan n:nnen ryhmätoiveen. n - Määrää monennellako sijalla oleva ryhmätoive halutaan. Ryhmätoive tai null, jos ei annettua n:ää vastaavaa toivetta. poistettukurssilta public boolean poistettukurssilta() Kertoo, onko opiskelija poistettu kurssilta. True jos poistettu, muuten false. asetapoistettukurssilta public void asetapoistettukurssilta(boolean poistettu) Asettaa opiskelijan kurssilta poistettu -tilan. poistettu - Opiskelijan tila. asetasopimus public void asetasopimus(boolean sopimus) onsopimus public boolean onsopimus() asetaarvosteltu public void asetaarvosteltu(boolean arvosteltu) arvosteltu public boolean arvosteltu() asetaopintopisteet_kaikki public void asetaopintopisteet_kaikki(double opintopisteet_kaikki) annaopintopisteet_kaikki public double annaopintopisteet_kaikki()

asetaopintopisteet_tktl public void asetaopintopisteet_tktl(double opintopisteet_tktl) annaopintopisteet_tktl public double annaopintopisteet_tktl() annasukupuoli public java.lang.string annasukupuoli() annaika public int annaika() asetaopiskelijanumero public void asetaopiskelijanumero(java.lang.string opiskelijanumero) asetaaloitusvuosi public void asetaaloitusvuosi(java.lang.string aloitusvuosi) asetapaaaine public void asetapaaaine(java.lang.string paaaine) asetasuoritetutopintojaksot public void asetasuoritetutopintojaksot(java.util.linkedlist<suoritettuopintojakso> suoritetutopintojaksot) annahetu public java.lang.string annahetu() Palauttaa arvonaan opiskelijan henkilötunnuksen Opiskelijan henkilötunnus annaopiskelijanumero public java.lang.string annaopiskelijanumero() Palauttaa arvonaan opiskelijan opiskelijanumeron. Opiskelijan opiskelijanumero annauupuvatopintojaksot public java.util.collection<uupuvaopintojakso> annauupuvatopintojaksot() Palauttaa opiskelijan uupuvat opintojaksot Collection, joka sisältää UupuvaOpintojakso-olioita annasuoritetutopintojaksot public java.util.collection<suoritettuopintojakso> annasuoritetutopintojaksot() Palauttaa opiskelijan suoritetut opintojaksot. Collection, joka sisältää SuoritettuOpintojakso-olioita

annakayttajatunnus public java.lang.string annakayttajatunnus() Palauttaa arvonaan opiskelijan käyttäjätunnuksen. Opiskelijan käyttäjätunnus sisaltaa public boolean sisaltaa(java.lang.string etsittava, java.lang.boolean bnimi, java.lang.boolean bhetu, java.lang.boolean bopnro, java.lang.boolean bemail, java.lang.boolean bpaaaine, java.lang.boolean bkayttajatunnus, java.lang.boolean bopkaikki, java.lang.boolean boptktl, java.lang.boolean bika, java.lang.boolean bsukupuoli, java.lang.boolean baloitusvuosi) Etsii, löytyykö opiskelijan tiedoista haluttua tietoa. Haku toimii andperiaatteella, eli annettu String pilkotaan yksittäisiksi sanoiksi välilyöntien kohdalta, ja suoritetaan näillä and-haku. etsittava - Etsittävä String-pätkä. true, jos etsittävä löytyi. annanimi public java.lang.string annanimi() Palauttaa opiskelijan nimen. nimi annasahkoposti public java.lang.string annasahkoposti() Palauttaa opiskelijan sähköpostiosoitteen. sähköpostiosoite. annaaloitusvuosi public int annaaloitusvuosi() Antaa opiskelijan aloitusvuoden. aloitusvuosi. annapaaaine public java.lang.string annapaaaine() Antaa opiskelijan pääaineen. pääaine.

annavapaateksti public java.lang.string annavapaateksti() Antaa opiskelijaan liitetyyn vapaan tekstin, elikä post-it-lapun sisällön. Syötetty vapaa luonnehdinta. annailporyhmienmaara public int annailporyhmienmaara() Antaa IlpoRyhmien, johon opiskelija parhaillaan on sijoitettuna, määrän. IlpoRyhmien määrä. onkovalittu public boolean onkovalittu() Tarkistaa onko käyttäjä valinnut opiskelijan hiirellään. true - jos on. valitse public void valitse() Valitsee tämän Opiskelijan kaikkien Opiskelijoiden joukosta. poistavalinta public void poistavalinta() Poistaa valinnan tästä opiskelijasta. peruutalukitus public void peruutalukitus() Mikäli Opiskelija-olio oli vain ryhmälukossa, poistaa ryhmälukon ja palauttaa Opiskelija-olion aktiiviseksi kaikkiin ryhmiin, joihin se on liitetty. Mikäli Opiskelija-olio oli sekä ryhmälukittu että omalukittu, poistaa vain ryhmälukon ja jättää omalukon päälle. Mikäli Opiskelija-olio oli vain omalukittu, poistaa omalukon ja palauttaa Opiskelija-olion aktiiviseksi kaikkiin ryhmiin, joihin se on liitetty. peruutalukitus public void peruutalukitus(ilporyhma r) Mikäli Opiskelija-olio oli vain ryhmälukossa, poistaa ryhmälukon ja palauttaa Opiskelija-olion aktiiviseksi kaikkiin ryhmiin, joihin se on liitetty. Mikäli Opiskelija-olio oli sekä ryhmälukittu että omalukittu, poistaa vain ryhmälukon ja jättää omalukon päälle. Mikäli Opiskelija-olio oli vain omalukittu, poistaa omalukon ja palauttaa Opiskelija-olion aktiiviseksi kaikkiin ryhmiin, joihin se on liitetty. r - IlpoRyhma, joka ei enää ole lukittuna. teeomalukko public void teeomalukko(ilporyhma i) Lukitsee Opiskelija-olion IlpoRyhma i:hin ja piilottaa opiskelijan muista ryhmistä, joihin hänet on liitetty. i - IlpoRyhma, johon opiskelija lukitaan.

teeryhmalukko public void teeryhmalukko(ilporyhma i) Lukitsee Opiskelija ryhmälukolla annettuun IlpoRyhma-olioon. i - Ilporyhmä, johon opiskelija lukitaan. Mikäli Opiskelija on jo omalukittu johonkin ryhmään, tämän IlpoRyhmän täytyy olla sama, mihin Opiskelija on omalukittu. lisaasuoritettuopintojakso public void lisaasuoritettuopintojakso(suoritettuopintojakso s) Lisää SuoritettuOpintojakso-olion Opiskelija-olion tietoihin. Päivittää myös yhteyden SuoritettuOpintojakso-oliosta tähän Opiskelijaan. s - SuoritettuOpintojakso-olio joka vastaa opiskelijan suoritusta. lisaavastausvaihtoehto public void lisaavastausvaihtoehto(vastausvaihtoehto v) Lisää uuden Vastausvaihtoehdot. Päivittää myös yhteyden toiseen suuntaan. v - Vastausvaihtoehto lisaavapaavastaus public void lisaavapaavastaus(vapaavastaus v) Lisää opiskelijan vastaaman vapaavastauksen. v - Vapaavastaus-olio onkominkaanlaisiapuutteita public boolean onkominkaanlaisiapuutteita() Palauttaa tiedon siitä, onko opiskelijalla puuttuvia opintosuorituksia (tämän palauttamaan arvoon ei vaikuta se, onko puutteet mahdollisesti ylenkatsottu). Tosi, jos on puutteita. onkopuutteita public boolean onkopuutteita() Palauttaa tiedon siitä, onko opiskelijalla puuttuvia opintosuorituksia (tämän palauttamaan arvoon vaikuttaa se, onko puutteet ylenkatsottu). Tosi, jos on puutteita. tarkastaonkopuutteita public void tarkastaonkopuutteita() Tätä pitäisi kutsua, kun opiskelijan opintosuorituksia päivitetään tai kun uupuvia opintosuorituksia ylenkatsotaan onkolukittu public boolean onkolukittu() Palauttaa arvonaan tiedon siitä, onko opiskelija lukittu mihinkään ryhmään. True, mikäli opiskelija on oma- tai ryhmälukittu.

onkoryhmalukittu public boolean onkoryhmalukittu(ilporyhma ryhma) Palauttaa arvonaan tiedon siitä, onko opiskleija lukittu joko oma tahi ryhmälukolla parametrinan annettavaan ryhmään. ryhma - IlpoRyhma-olio, jonka lukitusta testataan. True, mikäli opiskelija on jollain tavoin lukittu parametrien mukaiseen ryhmään. muokkaavapaatekstia public void muokkaavapaatekstia(java.lang.string uusiteksti) Muokkaa opiskelijassa olevaa hänen tilaansa kuvaavaa tekstiä. Jos lisättävä teksti on tyhjä merkkijono asetetaan arvoksi null; uusiteksti - Tekstihuomio, joka lisätään opiskelijaan lisaailporyhma public void lisaailporyhma(ilporyhma lisattava) TÄTÄ KUTSUTAAN AINOASTAAN ILPORYHMÄN lisaaopiskelija- METODISTA KÄSIN!! lisattava - IlpoRyhma, johon nykyään kuulutaan. poistailporyhmasta public void poistailporyhmasta(ilporyhma poistettava) TÄTÄ KUTSUTAAN AINOASTAAN ILPORYHMÄ:stä KÄSIN!! poistettava - IlpoRyhma, johon ei nykyään kuuluta. tostring public java.lang.string tostring() Tekstiesitys opiskelijasta Overrides: tostring in class java.lang.object nimi hetu/opnro/käyttäjätunnus annavapaavastaukset public java.util.collection<vapaavastaus> annavapaavastaukset() Palauttaa viitteen kokoelmaan, jossa Opiskelijan vapaasti mietiskellyt ilmovastaukset ovat. ilmovastaukset lisaakuuntelija public void lisaakuuntelija(opiskelijalistener kuuntelija) Lisää Opiskelija-oliolle tämän tilaa kuuntelevan kuuntelijan. kuuntelija - Lisättävä kuuntelija.

poistakuuntelija public void poistakuuntelija(opiskelijalistener kuuntelija) Poistaa Opiskelija-oliosta tämän tilaa kuuntelevat kuuntelijan, kuuntelija - Poistettava kuuntelija. ilmoitakuuntelijoille public void ilmoitakuuntelijoille() Ilmoittaa kaikille tämän Opiskelijan kuuntelijoille tilan muutoksesta. ok public boolean ok() Luokkainvariantti: true - jos luokka on ehjä. annailporyhma public IlpoRyhma annailporyhma() poistakurssilta public void poistakurssilta() Poistaa opiskelijan ryhmistä ja vastausvaihtoehdoista. 1.7 Luokka ProjektiAihe 1.7.1 Kuvaus public class ProjektiAihe extends java.lang.object Yhtä projektiaihetta kuvaava luokka. 1.7.2 Konstruktorien tiedot ProjektiAihe public ProjektiAihe(int aihenumero, java.lang.string aihenimi) 1.7.3 Metodien tiedot annaaihenumero public int annaaihenumero() Palauttaa aiheen numeron. Projektiaiheen numero. annaaihenimi public java.lang.string annaaihenimi() Palauttaa projektiaiheen nimen. Projektiaiheen nimi.