⌛⌛ Opiskelijarekisteri

Palautusongelmasta

Plussan pitäisi ottaa nyt vastaan palautuksia tähän tehtävään.

Tehtävään on tarjolla totetusta testaava luokka sekä testisyötetiedosto valmiin materiaalin etävaraston hakemistossa round4/studentregister. Aseta vastauksesi tiedostoihin Student.java, Course.java, Attainment.java ja StudentRegister.java. Palautusta varten tiedostojen tulee olla 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.

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 esimerkiksi komennolla javac *.java, ja suorita komennolla java StudentRegisterTest students.txt courses.txt attainments.txt. Suorituksen pitäisi tuottaa tiedostossa output.txt kuvattu tuloste.

Palautus

Varmista ennen palautusta, että luokkasi ovat paikallisen tietovarastosi hakemistossa /round4/studentregister/ ja että olet muistanut puskea kaikki muutokset henkilökohtaiseen etätietovarastoosi. Anna sitten alla olevaan kenttään henkilökohtaisen etätietovarastosi verkko-osoite, joka on muotoa https://course-gitlab.tuni.fi/compcs140-spring2023/------, missä ------ on Tuni-käyttäjätunnuksesi.

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