⌛⌛ Opiskelijarekisteri

Tehtävään on tarjolla valmiina totetusta testaava luokka sekä testisyötetiedosto student_template_project-repositoriossa hakemistossa Round4/studentregister. Aseta vastauksesi tiedostoihin Student.java, Course.java, Attainment.java ja StudentRegister.java. Palautusta varten tiedostot tulee olla hakemiston /Round4/studentregister/ alla.

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 standarditulostevirtaan. 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ä. Huomaa aakkosjärjestyksessä isojen kirjainten vaikutus. Aakkosjärjestyksellä tarkoitetaan tässä ns. leksikografista eli sanakirjajärjestystä, jossa isot kirjaimet tulevat ennen pieniä.

          • Jos order on “by code”, tulostetaan suoritukset kurssikoodien aakkosjärjestyksessä.

          • 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 standarditulostevirtaan siinä järjestyksessä kuin ne on lisätty opintorekisteriin. Tämän ja edellä kuvatun toisen printStudentAttainments-funktion ainoa ero on parametrin order puuttuminen.

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 nämä tiedostot sekä omat luokkatoteutuksesi samaan hakemistoon, käännä ohjelma esim. tapaan javac *.java, ja suorita tapaan java StudentRegisterTest students.txt courses.txt attainments.txt. Suorituksen pitäisi tuottaa tiedostossa output.txt kuvattu tuloste.

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