Harjoitukset kevät 2009

Viikko 3

KonsoliLotto

Goal: to learn to use arrays 

Task: In Finnish Lotto there is 39 numbers, and seven (7) numbers are drawn at randomly. Create a console application that drawn seven numbers out of 39 and shows numbers in order in the console. Example: 1, 10, 20, 21, 37, 38, 39. As a matter of course same number cannot occur. An user can select how many drawns will be made, default is one (1).
ExtraNote: If you are really interested about random numbers, look this "Computers are Lousy Random Number Generators"

Additional task: In Viking Lotto six (6) numbers are drawn from 48, in your national lotto is drawn 5 from 90 or like, create also possibility for that. An user can select which Lotto he will play.

Lotto with Class

Learning goal: to create classes, to use classes

Create a class named Lotto, where two types (tyyppi) of lotto drawns can be made, types are Suomi and VikingLotto. Suomi is original Finnish Lotto where seven numbers from 39 will be drawned, VikingLotto is played around Nordic Countries and there is six numbers from 48 drawned. Create a method ArvoRivi for the class. When Tyyppi is set, change SuurinNro and NumeroLkm to the right values.

Create a console application for testinng Lotto class.

Viikko 4

Oppimistavoite: tutustuminen Windows Forms käyttöön ja COM-komponenttien mahdollisuuksiin

Tehtävä: Tee oma MP3 soitin käyttämällä DirectX mukana tulevaa kirjastoa quartz.dll. Käyttöliittymä WinFormsilla ja mahdollisimman simppeli. Tarvittavat kontrollit: textbox johon käyttäjä voi kirjoittaa musiikkitiedoston nimen ja painikkeet: Browse, Play/pause, Stop sekä lisäksi tilarivi (statusbar).

Viikko 4

Oppimistavoite: Dynaamiset taulukot, Hashtable, serialisointi

Tehtävä: Tee konsolisovellus joka aluksi kysyy käyttäjältä n-määrän asiakkaitten nimiä ja yhteystietoja (osoite), lisää tiedot hashtableen ja serialisoi tiedot tiedostoksi; lopuksi ohjelma lukee asiakkaitten tiedot serialisoidusta tiedostosta, lajittelee ne aakkosjärjestykseen nimen perusteella ja näyttää näytöllä kukin asiakas omalla rivillään. Vuokaavio
   

Viikko 5

Oppimistavoite: Luokkien ja olioitten luonti ja käsittely C#:lla

Tehtävä:  
Oy Yritys Ab tarvitsee yksinkertaista ohjelmaa kuukausipalkkojen laskentaa varten. Yrityksellä on kolmenlaisia työntekijöitä:
1) vakituisia kuukausipalkkaisia
2) osa-aikaisia tuntipalkkaisia (tekevät kuukaudessa x tuntia)
3) "keikkamiehiä" (tekevät silloin tällöin urakkaluonteisesti, eli korvaus sovitaan)
Alustavan analyysin perusteella on päätetty luoda oheisen kuvan mukainen luokkarakenne (huom suunnitelma ei ole vielä täydellinen).

Tee olio-orientoitunut yksinkertainen konsolisovellus, joka laskee:
1) kunkin työntekijän kk-palkan
2) kuukauden koko palkkasumman

Verotusta ja ns. palkan sivukuluja ei tässä vaiheessa huomioida.

Sovelluksen tullaan myöhemmin lisäämään tietokanta, josta työntekijätiedot luetaan. Tee tässä vaiheessa testausta varten staattinen luokka dbYritys ja sille staattinen metodi HaeTyöntekijätTesti().
Mieti mikä olisi "järkevä" palautustyyppi metodille, helpon siirrettävyyden ja ylläpidettävyyden kannalta.

Sovellus on tarkoitus myöhemmin sovittaa Windows, Web ja mobiili-ympäristöihin, joten erota toiminnallisuus (ns business-logiikka) ja käyttöliittymä (UI) toisistaan eli noudata MVC-mallia.
Luokkakaavio

Viikko 6 & 7

Oy Yritys Ab Palkanlaskenta Windows-sovellus

Oppimistavoite: WinForms perusteet, tärkeimmät kontrollit, luokkien/olioiden käyttö

Palkanlaskenta Windows
 
Tee oheisen kaltainen käyttöliittymä yrityksen työntekijöitten palkanlaskentaa varten (kts edellinen harjoitus). Käytä siis edellisen harjoituksen luokkia, ja sovitaan että työntekijä on abstrakti-luokka joten käytetään vain Vakituinen, OsaAikainen ja Keikkamies-luokkia
Nimeä kontrollit käyttäen ns. unkarilaista notaatiota; eli esimerkiksi vasemmanpuoleisen ListBox-tyyppisen kontrollin nimi on lstTyöntekijät.
Toiminnallisuudesta:
- Listassa esitetään kaikkien työntekijöitten kokonimi ja ttnumero.
- Painikkeella Hae Työntekijät ohjelma hakee työntekijätiedot tässä vaiheessa koodista ja lisää työntekijöitten nimet listaan (myöhemmin haetaan tietokannasta)
- Kun käyttäjä napsauttaa listassa olevaa nimeä, työntekijän tiedot siirtyvät keskellä näkyviin tekstikenttiin.
- Lisää-painike lisää uuden työntekijän (pakollisia kenttiä etunimi, sukunimi, ttnumero ja työsuhteen tyyppi
- Päivitä-painikkeella muutetut arvot päivitetään vastaavaan olioon
- Poista poistaa ko. työntekijän, kysytään kuitenkin varmistus "Haluatko todella poistaa..."
- Laske palkkasumma laskee kuluvan kuukauden palkkasumman.
 

Viikko 7

Koronlaskenta-sovellus

Oppimistavoite: DLL- kirjaston luominen ja sen hyödyntäminen

Tehtävä: luo Windows-sovellus jolla loppukäyttäjä Pankkiiri voi laskea asuntolainan korot ja lyhennykset. Pankkiiri syöttää seuraavat tiedot: lainapääoma euroina, laina-aika vuosina ja vuosikorko esim 2,225%. Sovellus laskee lainan kuukausimaksun, joka koostuu lyhennyksestä ja korosta.
Lainapääomaa lyhennettään kuukausittain lyhennyksellä. Lyhennys lasketaan jakamalla lainasumma kuukausierien määrällä. Korko lasketaan kertomalla kuukausikorko (vuosikorko/12) sen hetkisellä lainapääomalla.

Käyttöliittymä toteutetaan WinForms-lomakkeilla. Koska sovelluksen pitää olla: a) siirrettävä b) ylläpidettävä, niin päätettiin luoda PankkiBL-DLL, joka sisältää Lainan kuukausimaksun laskentalogiikan. DLL sisältää staattisen luokan LainaLaskenta, ja jolla on staattinen metodi LaskeKuukasiMaksut().
Toteuta ensin PankkiBL.dll ja testaa se TestiPenkki-konsolisovelluksella että se laskee kuukausimaksun oikein-Luon sen jälkeen näyttävä ja käyttäjäystävällinen Windos-sovellus, joka hyödyntää dll:ää.

Viikko 8

Asiakasrekisteri

Oppimistavoite: MVC-mallin toteutus Windows-sovelluksessa Windows-datan esittämiskomponenttien käyttö ja BusinessLogiikka-luokan käyttö

Tehtävä: Tee oheisen kuvan mukainen käyttöliittymä ja tarvittava toiminnallisuus yrityksen Asiakasrekisterin ylläpitoon. Kutakin Yritystä sovelluksessa vastaa luokan Yritys-ilmentymä. Yritys-luokalla on seuraavat julkiset jäsenmuuttujat: Ytunnus, nimi, kaupunki ja liikevaihto euroina (double). Mieti & suunnittele millaista kokoelma, taulukkoa tms kannattaisi käyttää Yritysten-tietojen varastointiin sovelluksessa.
Erota käyttöliittymä, sovelluksen kontrolli ja tietosisältö toisistaan, eli suunnittele ja toteuta sovellus MVC-mallin  mukaisesti.
Luo myös AsiakasRekisteri-niminen luokka jolla on staattinen metodi TuoAsiakastiedot. Sovellus käynnistettäessä asiakastiedot tuodaan automaattisesti em. metodilla DataGridView:iin.

Toteuta painikkeiden Näytä lukumäärä ja Laske liikevaihto toiminnallisuus.
Suodatus toiminto toteutetaan myöhemmin.

Viikko 10

SMLiiga09

Oppimistavoite: Tietokannan tietojen lukeminen/muuttaminen.

Tehtävä: Tee Windows-sovellus jolla käyttäjä voi hakea Access-tietokannasta SMLiiga09 taulusta Pisteet kaikki tiedot lomakkeelle.
Käyttäjä voi myös muokata tietoja ja tallentaa muutokset tietokantaan painikkeen Update-toiminnolla.

SMLiiga

Viikko 11

SMLiiga09 Pistenikkarit DataReaderilla

Oppimistavoite: Tietokannan tietojen lukeminen OLEDB-rajapinnan avulla tietokannasta DataReader/DataSet-objekteilla

Tehtävä 1a) Tee konsoli-sovellus jolla käyttäjä voi näyttää Access-tietokannan SMLiiga09.accdb taulun XXX tiedot  konsolilla. Oletusarvoisesti sovellus hakee tiedot ja esittää ne siinä järjestyksessä kun ne ovat taulussa. Käytä DataReader-objektia.
Tehtävä 1b) Jos käyttäjä antaa käynnistysparametrin -sort tiedot lajitellaan sukunimen mukaan nousevaan järjestykseen.

Tehtävä 2a) Tee konsoli-sovellus jolla käyttäjä voi näyttää Access-tietokannan SMLiiga09.accdb taulun XXX tiedot  konsolilla. Sovellus hakee tiedot ja esittää ne aakkosjärjestyksessä sukunimen mukaan kun ne ovat taulussa. Käytä DataSet/DataTable-objekteja.

Viikko 12

Tietojen haku eri tietovarastoista

Tee oheisen kuvan mukainen sovellus ADOBasics, jolla voidaan hakea kirjailijatietoja eri tietovarastoista:
- Access tietokanta
- SQL Server
- Excel työkirja
- XML tiedosto
- CSV tekstitiedosto
- ja "koodi".

Tee formilla enum DataStores, jossa määritellään eri tietovarastot seuraavasti:

private enum myDataStores{Code,CSV,MDB,SQLServer,XLS,XML}

Luo formille metodi private void SetDataToGrid(myDataStores ds)

jolla asetat DataGridView tiedot muuttamalla sen DataSeource-ominaisuutta.

Toteuta sovellukseen asiallinen virhekäsittely, eli jos haku ei onnistu, niin sovellus ei saa kaatua vaan se ilmoittaa virheestä lomakkeen alareunassa olevalla toolStripStatusLabel:ssa, siinä  kaiutetaan siis ilmoitus onnistuneesta hausta sekä mahdolliset virheilmoitukset.

Toteuta tiedonhakua varten luokka DBData (komponentti) joka tarjoaa tarvittavan toiminnallisuuden käyttöliittymälle, allaolevassa kuvassa on esitetty tarvittavat staattiset metodit, kaikki metodit palauttavat DataTablen jollei muuta mainita.

 

   
ADOBasic lopullinen  
Komponentti