Kalenteri¶
Kalenteri on aika vanha, mutta varsin kätevä keksintö omien tapaamisten, ajanvarausten yms. hallintaan. Nykyaikana näitä tietenkin löytyy muussakin muodossa kuin kuolleeseen puuhun painetuna, kuten tietokoneohjelmina sekä älypuhelimista. Mutta miten paljon koodia yksinkertaisen kalenterin tekemiseen oikeastaan tarvitaan? Tässä työssä pääset tutustumaan hieman kalenteriohjelmien sielunelämään tekemällä oman, terminaalissa toimivan kalenteriohjelman.
Ohjelman toiminnot¶
Ohjelmalta halutaan seuraavat toiminnot. Lisäominaisuuksia ei vaadita työn hyväksymiseen, mutta niistä saa luonnollisesti enemmän pisteitä.
- Tapahtuman lisääminen
- Käyttäjä määrittää tapahtumalle nimen ja ajankohdan (alkamisaika ja kesto)
- Tapahtuma tallennetaan ohjelman muistiin
- Lisäominaisuus: ohjelma osaa varoittaa, jos tapahtuma menee päällekkäin toisen olemassaolevan tapahtuman kanssa.
- Tapahtuman poistaminen
- Käyttäjä voi poistaa tapahtumia nimellä.
- Tapahtuma poistetaan ohjelman muistista
- Kalenterin tulostaminen
- Käyttäjä voi syöttää aikavälin, jonka tapahtumia haluaa tarkistella
- Aikavälin tapahtumat tulostetaan aikajärjestyksessä
- Lisäominaisuus: tapahtumat on ryhmitelty päivämäärien alle
Ohjelman toiminnot toteutetaan tekstipohjaisena valikkona terminaalissa 2. ja 3. materiaalin esimerkkien tapaan.
Päivämäärien ja aikojen hallinta¶
Aikoja voi käsitellä pääasiassa kahdella tavalla: hyödyntämällä datetime-moduulia, joka osaa käsitellä aikaa erillisinä objektoina, ja helpottaa erityisesti lisäominaisuuksien toteutuksessa; tai käyttämällä sopivasti valittua merkkijonoa, joka järjestyy oikein (eli ISO-standardia
YYYY-MM-DD HH:MM:SS
).Mikäli tavoittelet lisäpisteitä päällekkäisten tapahtumien tunnistamisesta, kannattaa tutustua datetime-tyypin lisäksi samassa moduulissa olevaan timedelta-tyyppiin, jolla esitetään ajan muutoksia. Timedelta-objektin ja datetime-objektin välillä voi tehdä yhteen- ja vähennyslaskuja tavallisilla matemaattisilla operaattoreilla, ja näitä tuloksia voi hyödyntää ehtolauseissa, joilla päällekkäisyyttä haetaan.
Datan hallinta¶
Minimaalisessa toteutuksessa kalenteri säilytetään ohjelman muistissa sopivana tietorakenteena. Tämä tietenkin tarkoittaa sitä, että koko kalenteri katoaa jos ohjelma sammutetaan. Hiukan paremmassa toteutuksessa kalenteri olisikin hyvä tallentaa datatiedostoon ennen ohjelman sulkemista. Seuraavista ominaisuuksista saa siis lisäpisteitä.
- Kalenterin tallentaminen
- Ohjelma tallentaa kalenterin sammutettaessa tai käyttäjän pyynnöstä
- Lisäominaisuus: käyttäjä voi valita millä nimellä kalenteri tallennetaan
- Kalenterin lataaminen
- Ohjelma lataa kalenterin käynnistettäessä tai pyynnöstä
- Lisäominaisuus: käyttäjä voi valita ladattavan kalenterin joko komentoriviargumenttina tai syötteellä
Tallentamiseen suositellaan käytettävän json-moduulia. Mikäli käsittelet aikoja datetime-moduulin avulla, ne täytyy tallentaessa muuttaa merkkijonoiksi, ja ladatessa parsia takaisin aika-objekteiksi. Muunnoksiin kumpaankin suuntaan löytyy datetime-moduulista omat funktionsa.