⌛⌛ Opiskelijarekisteri

Tehtävän palautus koostuu Maven-projektista. Sijoita pom.xml-tiedosto paikallisen tietovarastosi round4/studentregister-hakemistoon ja tee tähän hakemistoon src/main/java-niminen alihakemisto. Tee luokkatiedostot Student.java, Course.java, Attainment.java ja StudentRegister.java ja liitä ne fi.tuni.prog3.studentregister-nimiseen pakkaukseen. Tiedostojesi tulee olla siten hakemistossa round4/studentregister/src/main/java/fi/tuni/prog3/studentregister. NetBeans osaa luoda tehtävässä pakkausta vastaavan hakemistorakenteen automaattisesti, kun annat Maven-projektia luodessasi oikeat tiedot.

Tehtävään on tarjolla toteutusta testaava luokka sekä testisyötetiedosto valmiin materiaalin etävaraston hakemistossa round4/studentregister.

Toteuta opiskelijadatan ylläpitoon soveltuvat luokat Student, Course, Attainment ja StudentRegister, joilla on alla kuvatut julkiset ominaisuudet. Voit suunnitella luokkien yksityiset jäsenet haluamallasi tavalla.

  • Student

    • Tallettaa opiskelijan nimen ja opiskelijanumeron.

    • Julkiset rakentimet/jäsenfunktiot:

      • Rakennin Student(String name, String studentNumber): alustaa Student-olioon rakentimen parametreina saamat nimen ja opiskelijanumeron.

      • Jäsenfunktiot getName() ja getStudentNumber(): palauttavat opiskelijan nimen ja opiskelijanumeron String-merkkijonoina.

  • Course

    • Tallettaa kurssin koodin, nimen ja laajuuden opintopisteinä.

    • Julkiset rakentimet/jäsenfunktiot:

      • Rakennin Course((String code, String name, int credits): alustaa Course-olioon rakentimen parametreina saamat koodin, nimen ja opintopistemäärän.

      • Jäsenfunktiot getCode(), getName() ja getCredits(): palauttavat kurssin koodin ja nimen (jotka ovat String-merkkijonoja) sekä laajuuden (joka on int-arvo).

  • Attainment

    • Kuvaa kurssisuorituksen tallettamalla kurssikoodin, opiskelijanumeron ja arvosanan.

    • Julkiset rakentimet/jäsenfunktiot:

      • Rakennin Attainment(String courseCode, String studentNumber, int grade): alustaa Attainment-olioon rakentimen parametreina saamat kurssikoodin, opiskelijanumeron ja arvosanan.

      • Jäsenfunktiot getCourseCode(), getStudentNumber() ja getGrade(): palauttavat suorituksen kurssikoodin ja opiskelijanumeron (jotka ovat String-merkkijonoja) sekä arvosanan (joka on int-arvo).

  • StudentRegister

    • Toteuttaa yksinkertaisen opintorekisterin, joka ylläpitää tietoa opiskelijoista, kursseista ja kurssisuorituksista.

    • Julkiset rakentimet/jäsenfunktiot:

      • Rakennin StudentRegister(): alustaa tyhjän StudentRegister-olion, jossa ei vielä ole tietoa opiskelijoista, kursseista tai kurssisuorituksista.

      • Jäsenfunktio getStudents(): palauttaa ArrayList<Student>-tyyppisen listan, joka sisältää opintorekisteriin talletetut opiskelijat nimien aakkosjärjestyksen mukaisessa järjestyksessä.

      • Jäsenfunktio getCourses(): palauttaa ArrayList<Course>-tyyppisen listan, joka sisältää opintorekisteriin talletetut kurssit kurssien nimien aakkosjärjestyksen mukaisessa järjestyksessä.

      • Jäsenfunktio addStudent(Student student): lisää parametrina saadun opiskelijan opintorekisteriin.

      • Jäsenfunktio addCourse(Course course): lisää parametrina saadun kurssin opintorekisteriin.

      • Jäsenfunktio addAttainment(Attainment att): lisää parametrina saadun kurssisuorituksen opintorekisteriin.

      • Jäsenfunktio printStudentAttainments(String studentNumber, String order): tulostaa parametrina saatua opiskelijanumeroa vastaavan opiskelijan kurssisuoritukset näytölle. Toinen parametri order ilmaisee, missä järjestyksessä tiedot tulostetaan.

        • Ellei rekisterissä ole parametrina saatua opiskelijanumeroa vastaavaa opiskelijaa, tulostetaan muotoa "Unknown student number: studentNumber" oleva viesti.

        • Aluksi tulostetaan muotoa "studentName (studentNumber):" oleva otsakerivi.

        • Otsakerivin jälkeen tulostetaan kukin kurssisuoritus muodossa "  courseCode courseName: grade". Huomaa kaksi välilyöntiä alussa.

          • Jos order on "by name", tulostetaan suoritukset kurssien nimien aakkosjärjestyksessä. Saat oikean järjestyksen aikaiseksi käyttämällä vertailufunktiona String-luokan compareTo-funktiota. Nimet järjestyvät siten, että isot kirjaimet tulevat ennen pieniä. Tästä ei tarvitse huolestua. Nyt on hyvä vain tietää, että ohjelmointikielet lajittelevat kirjaimia usein tällä tavoin.

          • Jos order on "by code", tulostetaan suoritukset kurssikoodien aakkosjärjestyksessä. Käytä String-luokan compareTo-funtiota apuna myös koodien lajittelussa.

          • Muuten suoritukset tulostetaan siinä järjestyksessä kuin ne on lisätty opintorekisteriin: ensimmäisenä rekisteriin kaikkein aikaisimmin lisätty suoritustieto ja viimeisenä kaikkein myöhäisimmin rekisteriin lisätty kurssisuoritus.

      • Jäsenfunktio printStudentAttainments(String studentNumber): tulostaa parametrina saatua opiskelijanumeroa vastaavan opiskelijan kurssisuoritukset näytölle siinä järjestyksessä kuin ne on lisätty opintorekisteriin. Tämän ja edellä kuvatun toisen printStudentAttainments-funktion ainoa ero on parametrin order puuttuminen.

      • Näet tarkempia esimerkkejä tulostuksesta oheismateriaalina annetusta tulostiedostosta.

Automaattiset sekä alla kuvatut testit olettavat, että teet projektitiedostoosi pom.xml seuraavat määritykset:

  • artifactId-elementin arvo on studentregister.

  • version-elementin arvo on 1.0.

  • maven.compiler.source ja maven.compiler.target -elementtien arvo on 17 tai pienempi. Tarkistimella on asennettuna Java 17, joten tätä uudempaa versiota ei voi käyttää.

  • Onejar-liitännäisen määritys, jonka mainClass-elementin arvo on StudentRegisterTest, joka on alla kuvattu valmiina annettu testiluokka.

Toteutuksen testaus

Voit testata luokkiasi tiedostossa StudentRegisterTest.java annetun valmiin testiohjelman, tiedostoissa students.txt, courses.txt ja attainments.txt annetun testidatan, ja tiedostossa output.txt annetun esimerkkitulosteen avulla.

Aseta StudentRegisterTest.java Maven-projektisi alihakemiston src/main/java juureen ja muut tiedostot Maven-projektisi juurihakemistoon pom.xml tiedoston seuraksi. Edellä on huomattava, että StudentRegisterTest.java ei sisällä pakkausmääritystä, joten sitä ei siksi aseteta syvempään alihakemistoon.

Voit tämän jälkeen kääntää ohjelman komennolla mvn package ja suorittaa testin antamalla komennon java -jar target/studentregister-1.0.one-jar.jar students.txt courses.txt attainments.txt projektin juurihakemistossa. Ohjelman suorituksen pitäisi tuottaa tiedostossa output.txt kuvattu tuloste.

Palautus

Tehtävä palautetaan tavalliseen tapaan puskemalla tiedostot etätietovarastoon ja antamalla etätietovaraston verkko-osoite alla olevaan kenttään.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.