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. >
public 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
a) Programmer klassens konstruktør og metoden 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. >
}
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
a) Programmer følgende metoder:
navn, pNr og romgjestpublic 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. >
}
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
a) Programmer metodene:
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. >
}
public 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
a) Programmer metoden 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();
}
}