Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Logg
,
Boboer
, Rom
, Romregister
, Vaktvindu
og Soningsanstalten
som tilsammen utgjør
et fullstendig program.
I resten av oppgaven blir de innsatte omtalt som beboere.
I første oppgave vil du få bruk for å kunne lagre et tidspunkt.
Til dette kan du bruke et Calendar
-objekt som du oppretter ved å skrive:
Calendar dato = Calendar.getInstance();Hvis du ønsker å skrive ut
dato
, skriver du:
DateFormat df = DateFormat.getDateInstance(); String rapport = "\nDato: " + df.format(dato.getTime());
Logg
.< import-setninger > public class Logg { private String[] rapporter; private int antall; // antall rapporter som til enhver tid er lagret i arrayen public static final int ARRAYLENGDE = 100; public static final int UTVIDELSE = 10; < Parameterløs konstruktør som utfører nødvendige oppgaver. >a) Programmer klassens konstruktør og metodenpublic String toString() { < Metoden skal returnere en tekst som inneholder alle rapportene i arrayen, slik at den nyeste rapporten står først og den eldste sist, dvs i omvendt kronologisk rekkefølge. Det skal være et linjeskift mellom hver rapport. > } public void utvidArray() { < Metoden skal utvide arrayen "rapporter" med så mange elementer som konstanten UTVIDELSE angir. > } public void nyRapport( String melding ) { < Metoden skal opprette en rapport, med teksten som den innkomne parameteren "melding" inneholder. Rapporten skal starte med dagens dato, og lagres i arrayen "rapporter". Hvis arrayen er full, skal den utvides med så mange elementer som konstanten UTVIDELSE angir, før rapporten den nye settes inn. > } } // end of class Logg
public String toString()
.
b) Programmer metoden public void utvidArray()
.
c) Programmer metoden public void nyRapport( String melding )
.
Beboer
:
public class Beboer { private String navn; private long pNr; // personnummer private Rom rom; // Klassen Rom er beskrevet i oppgave 3 private Logg loggbok; private String gjest; public Beboer(String n, long nr, Rom r ) { < Konstruktøren oppretter loggboken og initialiserer datafeltene. Konstruktøren skal IKKE programmeres. > } < get-metoder for navn, pNr og rom > < set-metode for gjest > public void slettGjest() { < Metoden skal slette gjesten fra objektet. > } public void nyRapport( String rapport ) { < Metoden skal sette rapporten, som den mottar som parameter, inn i loggboken. Hvis beboeren har en gjest på besøk, skal gjestens navn også tas med i rapporten. > }a) Programmer følgende metoder:public String toString() { < Metoden skal returnere beboerens navn og personnummer i form av en tekst. > } public String loggbok() { < Metoden skal returnere en tekst som starter med beboerens navn, personnummer og romnummer, etterfulgt av alle rapportene i loggboken. > } } // end of class Beboer
navn
, pNr
og rom
gjest
public void slettGjest()
public void nyRapport( String rapport )
public String toString()
public String loggbok()
Rom
:
< import-setninger > public class Rom { private int romNr; private int status; private Beboer beboer; // hvis beboer == null er rommet ledig private JTextArea display; private String arkiv = ""; public static final int LEDIG = 0, INNE = 1, UTE = 2, BESØK = 3; public Rom(int nr, JTextArea d) { < initialisering - skal IKKE programmeres. > oppdaterRomStatus("", LEDIG); } < get-metoder for romNr, arkiv og beboer - skal IKKE programmeres. > public String status() { < Metoden skal returnere er tekst som tilsvarer rommets status, dvs. "LEDIG", "INNE", "UTE" eller "BESØK". > } public boolean ledig() { < Hvis rommet er ledig skal metoden returnere true, og i motsatt fall skal den returnere false. > }public void oppdaterRomStatus(String melding, int st) { < Metoden skal oppdatere rommets status med den nye verdien som parameteren "st" angir. Hvis rommet er bebodd, skal det i beboerens loggbok opprettes en rapport som inneholder informasjon om den nye statusen etterfulgt av meldingen som parameteren "melding" inneholder. På displayet skal beboerens navn og personnummer, samt rommets nye status, skrives. Hvis rommet er ledig skal det kun stå teksten "LEDIG" på displayet. (Se bilde av brukergrensesnittet på side 8.) > } public boolean flyttInn( Beboer ny) { < Hvis rommet er ledig skal det registreres at en ny beboer flytter inn, og romstatusen skal så oppdateres.(Se metoden over.) Hvis innflyttingen lot seg gjøre, skal metoden returnere true. I motsatt fall skal den returnere false. Du kan anta ny != null. > } public void flyttUt() { < Metoden skal lagre beboerens logg i arkivet, deretter ledigstille rommet og endre dets status til LEDIG. Den nye statusen skal skrives på displayet. > } public String gårUt(String s) { < Metoden skal IKKE programmeres. > } public String gårInn( String s) { < Metoden skal IKKE programmeres. > } public String fårBesøk( String melding, String g ) { < Hvis beboeren er inne, skal metoden registrere at vedkommende har besøk og hvem vedkommende har besøk av. Parameteren "g" angir gjestens navn. Besøket skal loggføres med meldingen som parameteren "melding" inneholder og rommets status og display skal oppdateres. Beboeren kan imidlertid ikke ta imot besøk hvis vedkommende er ute eller allerede har besøk. Metoden skal enten returnere en tekst med informasjon om at besøket er registrert, eller en tekst som forklarer hvorfor besøket ikke lar seg gjennomføre. > } public String besøkSlutt( String melding ) { < Metoden skal registrere at besøket er avsluttet, og rommets status og display skal oppdateres. Forutsetningen er imidlertid at vedkommende virkelig har besøk. Metoden skal enten returnere en tekst med informasjon om at besøket er avsluttet, eller en tekst som forklarer at beboeren ikke har hatt besøk. > } } // end of class Rom
a) Programmer metodene:
public String status()
public boolean ledig()
public void oppdaterRomStatus(String melding, int st)
.
c) Programmer metodene:
public boolean flyttInn( Beboer ny )
public void flyttUt()
public String fårBesøk( String melding, String g ).
public String besøkSlutt( String melding )
Romregister
.< import-setninger > public class Romregister { private Rom[] rommene; public Romregister( Rom[] r ) { rommene = r; } public String beboerLogg( long pnr ) { < Metoden skal returnere loggboken til beboeren med personnummer lik den innkomne parameteren "pnr", under forutsetning av at vedkommende bor på institusjonen. Hvis det ikke er tilfelle skal metoden returnere teksten "Ukjent personnummer". > } public Rom finnRom( long pnr ) { < Metoden skal returnere en referanse til rommet som beboeren med personnummer lik den innkomne parameteren "pnr" bor på. Hvis et slikt rom ikke finnes skal metoden returnere null. > } public Beboer finnBeboer( long pnr ) { < Metoden returnerer en referanse til beboeren med personnummer lik den innkomne parameteren "pnr". Hvis en slik beboer ikke finnes returnerer metoden null. NB! Denne metoden skal IKKE programmeres. > }a) Programmer metodene:public String nyBeboer( String navn, long pnr ) { < Metoden skal innlosjere en ny beboer, med navn og personnr som parametrene "navn" og "pnr", angir. Forutsetningen er imidlertid at det finnes et ledig rom og at vedkommende ikke allerede bor på institusjonen. Hvis innflyttingen gikk bra, skal metoden returnere en tekst med beboerens navn og opplysninger om hvilket rom vedkommende har flyttet inn på. Hvis vedkommende allerede bor på institusjonen skal teksten som returneres fortelle hvilket rom vedkommende allerede bor på. Hvis ingen rom er ledige skal det returneres informasjon om det. > } public String utflytting( long nr ) { < Metoden skal IKKE programmeres. > } public String ut( long pnr, String s) { < Metoden skal IKKE programmeres. > } public String inn( long pnr, String s ) { < Metoden skal IKKE programmeres. > } public String besøkInn( long pnr, String melding, String gjest ) { < Metoden skal IKKE programmeres. > } public String besøkAvsluttet( long pnr, String melding ) { < Metoden skal IKKE programmeres. > } public String visArkiv() { < Metoden skal IKKE programmeres. > } } // end of class Romregister
public String beboerLogg( long pnr )
public Rom finnRom( long pnr )
public String nyBeboer( String navn, long pnr )
VaktVindu
.
< import-setninger > public class VaktVindu extends JFrame { private JTextField navneFelt, nrFelt, besøksFelt; private JTextArea[] display; private JTextArea utskrift, rapport; private JButton flyttInn, flyttUt, inn, ut,besøkInn, besøkUt, logg, arkiv; private Romregister institusjonen; public VaktVindu() { super( "VaktVindu"); display = new JTextArea[20]; Rom[] rommene = new Rom[display.length]; for( int i = 0; i < display.length; i++ ) { ... display[i] = new JTextArea(3,10); rommene[i] = new Rom(i+1, display[i]); } institusjonen = new Romregister( rommene ); Lytter lytter = new Lytter(); < Setter opp brukergrensesnittet og knytter knappene til lytteobjektet. > }a) Programmer metodenpublic void innskriving() { < Metoden skal lese inn navn og personnummer og, om mulig innlosjere den nye beboeren på institusjonen. Utfallet av oppgaven skal skrives til tekstområdet "utskrift". > } public void visArkiv() { < Metoden skal IKKE programmeres. > } public void beboerLogg() { < Metoden skal IKKE programmeres. > } public void utskriving() { < Metoden skal IKKE programmeres. > } public void ut() { < Metoden skal IKKE programmeres. > } public void inn() { < Metoden skal IKKE programmeres. > } public void besøk() { < Metoden skal IKKE programmeres. > } public void besøkAvsluttet() { < Metoden skal IKKE programmeres. > } < privat lytteklasse > } // end of class Vaktvindu
public void innskriving()
.
b) Programmer den private lytteklassen Lytter.
c) Du skal nå programmere en
public lytteklasse som skal kunne brukes av klassen VaktVindu
, i stedet for den private
du har laget under punkt b). Hvilke forandringer må du gjøre i klassen VaktVindu
for
at dette skal fungere?
Til orientering: Klassen Soningsanstalten
innholder main-metoden og starter programmet:
public class Soningsanstalten{ { public static void main( String[] args ) { new VaktVindu(); } }