Emne: PROGRAMMERING (nytt pensum, 10 studiep.) |
Emnekode: LO 127 A |
Faglig veileder: Eva Vihovde | |
Grupper: 1AA, 1AB, 1AC, 1IA, 1IB, 1IC |
Dato: 15.12.2004 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden): 7 | Antall oppgaver: 4 | 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 | ||
|
Pasient, Lege, LegeVakten
og PasientMottak
. Objekter av typene Pasient
og Lege
vil i oppgaveteksten bli omtalt
som henholdsvis pasienter og leger.
Av hensyn til oppgavens størrelse er programmet svært forenklet i forhold
til det som normalt ville kreves av et slikt program, men er bygget
opp slik at det er mulig å legge til ønsket funksjonalitet ved senere anledninger.
Pasient
.
Klassen skal ha følgende datafelt:
toString
-metode.
Metoden skal returnere en tekst
som inneholder alle data om pasienten. Flett inn forklarende ord
slik at den returnerte teksten ligner på en pasientjournal. Hvis det ikke er
stilt noen diagnose, skal dette fremgå av teksten.
public class Lege { private String navn; private static final int MAX = 14; // max antall pasienter som legen kan behandle // i løpet av en dag private Pasient[] pasienter; // array som kan lagre legens pasienter i løpet av en dag private int antall = 0; // antall pasienter som legen behandler i løpet av dagen private int neste = 0; // indeksen til neste pasient som legen skal behandle public Lege(String n) { navn = n; pasienter = new Pasient[MAX]; antall = 0; neste = 0; } public String getNavn() { return navn; } public int getAntall() { return antall; } < metoder du skal programmere > }
Pasient
-objektene skal
settes inn i arrayen pasienter
etter hvert som pasientene bestiller time hos legen,
og du kan anta at disse objektene ligger kontinuerlig etter hverandre.
Variabelen antall
skal til enhver tid holde rede på hvor mange pasienter
legen har. Variabelen neste
skal "peke ut" den neste pasienten som skal behandles,
slik at objektene med indeks mindre enn neste
representerer pasienter
som allerede er behandlet av legen,
mens de med indeks større eller lik neste
, og samtidig mindre enn
antall
, venter på å bli behandlet.
I hver deloppgave får du oppgitt metodens signatur og returverdi, men du må selv
programmere metodekroppen. Denne er beskrevet i pseudo-kode i hver metode:
a)
public String bestillTime(Pasient p)
{
< Pasienten p
skal settes inn i arrayen av pasienter tilhørende denne legen,
under forutsetning av at det er plass. I så fall skal nødvendig oppdatering
av et eller flere datafelt finne sted og metoden skal så returnere
legens navn. Hvis legen ikke har plass til pasienten, skal metoden returnere
null
. >
}
b)
public Pasient nestePasient()
{
< Metoden skal returnere den pasienten som står for tur til å bli
behandlet av legen. Hvis ingen venter på tur, skal metoden returnere null
. >
}
c)
public Pasient finnPasient(int pNr)
{
< Hvis pasienten med personnummer lik pNr
er en av legens pasienter,
skal dette pasientobjektet returneres av metoden. I motsatt fall skal
metoden returnere null
. >
}
d)
public boolean setDiagnose(String d,int pNr)
{
< Hvis pasienten med personnummer lik pNr
er en av legens pasienter,
skal diagnosen til pasienten settes lik d
, og metoden skal returnere true
.
Hvis legen ikke har pasienten, skal metoden returnere false
. >
}
e)
public String journal(int pNr)
{
< Metoden skal returnere en tekst som inneholder navnet på legen og journalen
til pasienten (se pasientens toString
-metode)
med personnummer lik pNr
, under forutsetning av at hun/han
er en av legens pasienter. I motsatt fall skal metoden returnere en tekst
som forteller at denne pasienten ikke blir behandlet av legen. >
}
LegeVakten
.
Nedenfor ser du en skisse av klassen:
public class LegeVakten { private Lege[] legene; public LegeVakten(Lege[] l) { legene = l; } < metoder du skal programmere > }Konstruktøren tar imot en array som inneholder
Lege
-objekter. Du kan anta at
arrayen er full, dvs. ingen av elementene har verdien null
.
I hver deloppgave får du oppgitt metodens signatur og returverdi, men du må selv
programmere metodekroppen. Denne er beskrevet i pseudo-kode i hver metode:
a)
public Lege finnLege(String n)
{
< Hvis det finnes en lege med navn lik n
på legevakten,
skal legeobjektet for denne returneres av metoden. I motsatt fall skal
metoden returnere null
. >
}
b)
public Lege finnLedigLege()
{
< Metoden skal returnere den legen på legevakten som har færrest
pasienter (uavhengig av om disse er behandlet eller ikke). Ved likt
antall spiller det ingen rolle hvem som velges. >
}
c)
public String bestillLegeTime( Pasient p)
{
< Metoden skal bestille time for pasienten p
hos den legen som har færrest
pasienter (uavhengig av om disse er behandlet eller ikke). Returverdien skal
være navnet på legen som pasienten har fått time hos. Hvis denne legen ikke
har plass til flere pasienter, skal metoden returnere null
. (Denne situasjonen
kan kun oppstå hvis ingen av legene kan ta imot flere pasienter.) >
}
d)
public Pasient nestePasient(String n)
{
< Metoden skal returnere den neste pasient som skal behandles
av legen med navn lik n
, under forutsetning av at denne legen jobber
ved legevakten. Hvis denne legen ikke jobber der, eller vedkommende
ikke har noen pasienter som skal behandles, skal metoden returnere null
. >
}
e)
public Pasient søkPasient( int pNr)
{
< Metoden skal returnere pasienten som har personnummer lik
pNr
. Hvis ingen av legene ved legevakten har en slik pasient,
skal metoden returnere null
. >
}
f)
public String pasientJournal( int pNr)
{
< Metoden skal returnere pasientjournalen til pasienten som har personnummer
lik pNr
. Hvis ingen av legene ved legevakten har en slik pasient,
skal metoden returnere null
. >
}
g)
public boolean setPasientDiagnose(String d, int pNr)
{
< Metoden skal sette diagnose på pasienten med personnummer lik pNr
og returnere true
. Diagnosen er gitt av parameteren d
. Dersom ingen
av legene ved legevakten har en slik pasient, skal metoden returnere false
. >
}
PasientMottak
definerer brukergrensesnittet til programmet:
< import-setninger > public class PasientMottak extends JApplet implements ActionListener { private JTextField legeFelt, pasientNavnFelt, pasientNrFelt; private JTextArea utskriftsområde; private JButton nyTime, nestePasient, diagnose; private LegeVakten legevakten; private static final int EGENANDEL = 150; public void init() { < oppretter brukergrensesnittet > nyTime.addActionListener(this); nestePasient.addActionListener(this); diagnose.addActionListener(this); Lege[] legene = opprettLegeVakt(); legevakten = new LegeVakten(legene); } < Metoder du skal programmere > }Din oppgave blir å programmere klassens metoder, bortsett fra
init
-metoden.
I hver deloppgave får du oppgitt metodens signatur og returverdi, men du må selv
programmere metodekroppen. Denne er beskrevet i pseudo-kode i hver metode:
a)
public Lege[] opprettLegeVakt()
{
< Følgende leger skal jobbe på legevakten: "Kristiansen", "Lie",
"Vogt", "Haug" og "Brun". Metoden skal returnere en array som innholder
lege-objekter tilsvarende disse legene. Arrayen skal ikke være lengre enn
antallet leger. >
}
b)
public void bestillLegeTime()
{
< Når brukeren klikker på "Bestill time"-knappen skal denne metoden kalles.
Du kan forutsette at navnet og personnummeret til pasienten da er fylt ut av
brukeren. Metoden skal bestille legetime, under forutsetning
av at det finnes en ledig lege som har plass. I så fall skal metoden skrive
en tekst i utskriftsområdet som forteller hvem pasienten har fått time hos.
I motsatt fall skal det skrives en melding om at "ingen leger har ledige timer i dag". >
}
c)
public void nestepasient()
{
< Når brukeren klikker på "Neste pasient"-knappen skal denne metoden kalles.
Du kan forutsette at brukeren av programmet har fylt ut navnet på en lege
i tekstfeltet legeFelt
. Metoden skal finne neste pasient som venter på denne
legen, for så å skrive pasientens navn og personnummer i henholdsvis pasientNavnFelt
og pasientNrFelt
. I tillegg skal utskriftsområdet "blankes ut".
Hvis ingen pasienter venter på tur eller legenavnet er ukjent (skrevet feil,
eller legen ikke jobber på legevakten), skal det skrives melding om det
i utskriftsområdet. >
}
d)
public void setDiagnose()
{
< Når brukeren klikker på "Diagnose"-knappen skal denne metoden kalles.
Du kan forutsette at brukeren av programmet har skrevet en diagnose i utskriftsområdet
og at personnummeret til pasienten den gjelder for står i tekstfeltet pasientNrFelt
.
Diagnosen skal så lagres i pasientobjektet med dette personnummeret. Hvis
dette gikk bra, skal pasientens journal skrives til utskriftsområdet.
Journalen skal inneholde navnet på legen som har behandlet pasienten,
og ellers alle data som er lagret om vedkommede pasient.
I tillegg skal det gis opplysninger om egenandelen som pasienten må betale.
Hvis det ikke finnes en lege med det aktuelle navnet, eller det ikke finnes noen
pasient med det aktuelle personnummeret, skal det skrives melding om det
til utskriftsområdet. >
}
e)
Du skal nå programmere den metoden som gjør klassen PasientMottak
til et
lytteobjekt og som kreves implementert av interface ActionListener
.
Sørg for at denne metoden kaller opp de riktige metodene av de du har definert over,
alt etter som hvilken hendelse som finner sted.
SLUTT