Emne: PROGRAMMERING |
Emnekode: LO 127 A |
Faglig veileder: Eva Vihovde | |
Grupper: 1AA, 1AB, 1AC, 1IA |
Dato: 30.11.2006 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden): 7 | Antall oppgaver: 5 | Antall vedlegg: 0 |
Tillatte hjelpemidler: | Alle trykte og håndskrevne | ||
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. |
Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Utarbeidet av (faglærer): | Kontrollert av (en av disse): | Studieleders/ Fagkoordinators underskrift: | ||
Annen lærer | Sensor | Studieleder/ Fagkoordinator | ||
|
SkriftligEksamen
og
ProsjektEksamen
representerer de to typene, se oppgave 1 og 2
for nærmere beskrivelse. Det som er felles for begge eksamenstyper er
representert av den abstrakte klassen Eksamen
som er
gjengitt nedenfor.
abstract public class Eksamen { private String fag; private String fagkode; private int studiepoeng; public Eksamen(String f, String fk, int stp) { fag = f; fagkode = fk; studiepoeng = stp; } public String getFagkode() { return fagkode; } public int getStudiepoeng() { return studiepoeng; } public String toString() { String resultat = ""; resultat = "\nFag: " + fag + "\nKode: " + fagkode + "\nStudiepoeng: " + studiepoeng + "\nKarakter: " + karakter(); if (strøket()) resultat += "\nFaget er ikke bestått"; return resultat; } public abstract char karakter(); public abstract boolean strøket(); }
SkriftligEksamen
er direkte subklasse til
Eksamen
og representerer en eksamen av type skriftlig eksamen.
I tillegg til det som er felles for alle typer eksamen, skal det for en slik
eksamen registreres (i form av datafelter) eksamenstid i antall timer, samt
en score i form av et helt tall fra og med 0 til og med 100. For øvrig
inneholder klassen følgende:
get
-metode for score (nevnt ovenfor).toString
-metode som i tillegg til det som returneres av
den arvede metoden også returnerer opplysninger om eksamenstype og
eksamenstid i antall timer.SkriftligEksamen
.
ProsjektEksamen
er direkte subklasse til
Eksamen
og representerer en eksamen av type prosjekteksamen.
I tillegg til det som er felles for alle typer eksamener, skal det for en slik
eksamen registreres (i form av datafelter) følgende:
public char gyldigKarakter( char c ) { < sjekker om parameteren er en gyldig bokstavkarakter, det vil si en av bokstavene A til F, eller tilsvarende liten bokstav. Dersom dette ikke er oppfylt, skal metoden returnere F. Ellers skal den returnere samme bokstav som parameteren angir, men av type stor bokstav i tilfelle mottatt bokstav er liten. > }
gyldigKarakter
skal konstruktøren sikre
at prosjektkarakteren får en gyldig bokstavkarakter (A til F) som verdi.get
-metoder for arrayen med studentnavn, samt for
prosjektets titteltoString
-metode som i tillegg til det som returneres av
den arvede metoden også returnerer opplysninger om eksamenstype,
prosjektets tittel, prosjektkarakter og navnene på studentene som
deltok i prosjektet.ProsjektEksamen
.
Student
, som representerer
én enkelt student.
public class Student
{
private String navn;
private String studentNr;
private Eksamen[] eksamener;
public static final int ANTALL = 10; //maksimalt antall eksamener
private static int nesteNr = 100000;
< konstruktør med parameter for navn. studentNr skal
konstruktøren generere automatisk, ved at første student får
studentNr s100001, neste student s100002, etc.
Konstruktøren skal også foreta annen nødvendig initialisering. >
< get
-metode for studentNr >
private int finnEksamen(Eksamen e)
{
< leter i eksamener etter Eksamen med samme fagkode som
parameterens Eksamen-objekt inneholder. Returnerer
arrayindeks dersom denne finnes, -1 ellers. >
}
public String regEksamen(Eksamen e)
{
< Registrerer den eksamen som parameteren angir forutsatt at
følgende er oppfylt:
Dersom eksamen med samme fagkode finnes fra før, skal ny
eksamen registreres bare dersom den eksisterende eksamen
er strøket. Ellers skal ny eksamen settes inn på første ledige
plass i arrayen, foutsatt at ledig plass finnes.
Returnert tekst skal gi passende opplysninger om utfallet av
registreringen. >
}
public String toString()
{
< Returnerer opplysninger om navn, studentnummer og
opplysninger om de eksamener studenten har tatt. >
}
}
Programmer konstruktør og de metoder som er skissert for klassen
Student
.
Studium
.
public class Studium { private final int MAX = 100; private Student[] studentene = new Student[ MAX]; private int antall = 0; // antall registrerte studenter public boolean nyStudent( Student s ) { < Registrerer ny student på første ledige plass i arrayen, forutsatt at det er plass. Studentobjektene skal ligge kontinuerlig etter hverandre. Returverdien indikerer om registrering lot seg utføre. > } public Student finnStudent( String studnr ) { < leter etter og returnerer student med det studentNr som parameteren angir. Ved manglende funn returneres null. > } public String registrer( String studentnr, Eksamen e ) { < Foretar registrering av eksamen på student det er gitt studentnr for, forutsatt at denne finnes. Returnert tekst skal gi passende opplysninger om utfallet av registreringen. > } public String statusListe() { < Returner for alle studentene de opplysninger som objektenes toString-metode gir. > } }Programmer de metoder som er skissert i klassen
Studium
.
Vindu
som er skissert
på følgende sider. Komponentenes navn indikerer hvilken rolle de har i vinduet.
public class Vindu extends JFrame { private JTextField tittel, fagnavn, fagkode, poeng, timer, score, pkarakter; private JTextField[] navn; private JTextField[] nr; private JButton skriftelig, prosjekt, status; private JTextArea utskrift; private Studium studium = new Studium(); public Vindu() { super("Eksamensregistrering"); Lytter lytter = new Lytter(); skriftelig = new JButton("Registrer skriftlig eksamen"); skriftelig.addActionListener(lytter); prosjekt = new JButton("Registrer prosjekteksamen"); prosjekt.addActionListener(lytter); status = new JButton( "Eksamensregisteret" ); status.addActionListener( lytter ); < Oppretter alle andre vinduskomponenter. Legger komponentene ut i vinduet, setter størrelse på det og gjør det synlig. > } public void klasseStatus() { < skriver ut i tekstområdet statusliste for studium > } public Student finnStudent( String navn, String studentnr ) { < Metoden skal returnere student med navn og studentnr som parametrene angir, i tilfelle denne finnes. Hvis ikke, skal ny student registreres og deretter returneres. Hvis registrering ikke lar seg gjøre, skal metoden returnere null. > } public void registrerSkriftlig() { < Registerer en skriftlig eksamen ved å lese inn nødvendige data fra vinduets tekstfelter. Hvis studentnr ikke finnes, skal ny student registreres først. Passende opplysninger om utfallet av registreringen skrives ut i tekstområdet. > } public void registrerProsjekt() { < Registrerer en prosjekteksamen. Det leses inn nødvendige data fra vinduets tekstfelter. Hvis studentnr for noen av de tre studentene ikke finnes, skal nødvendig registrering foretas først. Eksamen skal registrereres på alle studentene i prosjektgruppen. Utfall av registreringen skal skrives i tekstområdet. > } private class Lytter implements ActionListener { public void actionPerformed( ActionEvent e ) { if (e.getSource() == skriftelig) registrerSkriftlig(); else if (e.getSource() == prosjekt) registrerProsjekt(); else klasseStatus(); } } }a) Programmer metodene
klasseStatus
og
finnStudent
.
b) Programmer metoden registrerSkriftlig
.
c) Programmer metoden registrerProsjekt
.
-----------
Merknad De klasser som er skissert ovenfor gir til sammen ikke
et fullstendig program. Men du skal ikke programmere det som mangler.