import java.util.ArrayList;
class Oving4 {
public static void main(String[] args) {
//tester Rom
System.out.println("Tester rom: \n\n");
Rom nr69 = new Rom(69, 13); // nr 69, størrelse 13
Kunde Skrue = new Kunde("Skrue McDuck", "1-800-555"); // navn , tlf
Tidspunkt t1 = new Tidspunkt(200301001200L);
Tidspunkt t2 = new Tidspunkt(200301070230L);
Tidspunkt t3 = new Tidspunkt(200301070330L);
Tidspunkt t4 = new Tidspunkt(200301070430L);
nr69.nyReservasjon( t1, t2, Skrue, 5); //går
nr69.nyReservasjon( t1, t3, Skrue, 5); //går ikke, overlapp
nr69.nyReservasjon( t3, t4, Skrue, 5); //går
nr69.nyReservasjon( t1, t2, Skrue, 22); // går ikke, for mange
System.out.println(nr69);
System.out.println("Tester konf.sent.: \n\n");
Konferansesenter DenBlaLagune = new Konferansesenter();
DenBlaLagune.leggTilRom( 10, 10 ); //nr , antall
DenBlaLagune.leggTilRom( 20, 5 );
DenBlaLagune.leggTilRom( 30, 10 );
DenBlaLagune.leggTilRom( 40, 9 );
DenBlaLagune.leggTilRom( 50, 20 );
DenBlaLagune.reserverRom(200301201200L, 200301201200L, 1, "Skrue McDuck", "1-LOL-555");
DenBlaLagune.reserverRom(200301201200L, 200301201230L, 9, "Skrue McDuck", "1-LOL-555");
DenBlaLagune.reserverRom(200301201200L,200301201330L, 9, "Skrue McDuck", "1-LOL-555");
DenBlaLagune.reserverRom(200301201200L,200301201630L, 9, "Skrue McDuck", "1-LOL-555");
DenBlaLagune.reserverRom(200301201200L,200301201800L, 9, "Skrue McDuck", "1-LOL-555");
if ( !(DenBlaLagune.leggTilRom(10,10)) ) {
System.out.println("Kunne ikke opprette rom. Rommet eksisterer allerede.\n\n");
}
System.out.println(DenBlaLagune);
}
}
class Reservasjon {
private Tidspunkt fraTid;
private Tidspunkt tilTid;
private Kunde kunde;
public Reservasjon(Tidspunkt startFra, Tidspunkt startTil, Kunde startKunden) {
fraTid = startFra;
tilTid = startTil;
kunde = startKunden;
}
public Tidspunkt finnFraTid() {
return fraTid;
}
public Tidspunkt finnTilTid() {
return tilTid;
}
/*
* Metoden returnerer true dersom tidsintervallet [sjekkFraTid, sjekkTilTid] overlapper
* med det tidsintervallet som er i det reservasjonsobjektet vi er inne i [fraTid, tilTid]
*/
public boolean overlapp(Tidspunkt sjekkFraTid, Tidspunkt sjekkTilTid) {
if (sjekkTilTid.compareTo(fraTid) <= 0 || sjekkFraTid.compareTo(tilTid) >= 0) {
return false; // ikke overlapp
} else return true; // opptatt i denne perioden
}
public String toString() {
return "Kunde: " + kunde.finnNavn() + ", tlf: " + kunde.finnTlf() + ", fra " +
fraTid.toString() + ", til " + tilTid.toString() + "\n";
}
/* Metode som prøver klassen Reservasjon
public static void main(String[] args) {
Kunde k = new Kunde("Anne Hansen", "12345678");
Reservasjon r1 = new Reservasjon(
new Tidspunkt(200302011000L), new Tidspunkt(200302011100L), k);
System.out.println("Reservasjon 1: " + r1.toString());
Reservasjon r2 = new Reservasjon(
new Tidspunkt(200301211000L), new Tidspunkt(200301211000L), k);
System.out.println("Reservasjon 2: " + r2.toString());
Reservasjon r3 = new Reservasjon(
new Tidspunkt(200302011130L), new Tidspunkt(200302011300L), k);
System.out.println("Reservasjon 3: " + r3.toString());
Reservasjon r4 = new Reservasjon(
new Tidspunkt(200302010900L), new Tidspunkt(200302011100L), k);
System.out.println("Reservasjon 4: " + r4.toString());
/* Prøver overlapp()
System.out.println(r1.overlapp(new Tidspunkt(200302011000L), new Tidspunkt(200302011100L))); // true
System.out.println(r1.overlapp(new Tidspunkt(200302021000L), new Tidspunkt(200302021100L))); // false
System.out.println(r1.overlapp(new Tidspunkt(200302011030L), new Tidspunkt(200302011100L))); // true
System.out.println(r1.overlapp(new Tidspunkt(200302010930L), new Tidspunkt(200302011030L))); // true
}
Utskrift:
Reservasjon 1: fra 01-02-2003 kl 1000, til 01-02-2003 kl 1100
Reservasjon 2: fra 21-01-2003 kl 1000, til 21-01-2003 kl 1000
Reservasjon 3: fra 01-02-2003 kl 1130, til 01-02-2003 kl 1300
Reservasjon 4: fra 01-02-2003 kl 0900, til 01-02-2003 kl 1100
true
false
true
true
*/
}
class Kunde {
private String navn;
private String tlf;
public Kunde(String startNavn, String startTlf) {
navn = startNavn;
tlf = startTlf;
}
public String finnNavn() {
return navn;
}
public String finnTlf() {
return tlf;
}
public String toString() {
return navn + ", tlf " + tlf;
}
/* Tester klassen Kunde
public static void main(String[] args) {
Kunde k = new Kunde("Ole Olsen", "12345678");
System.out.println("Prøver finn-metodene:\n Navn: " + k.finnNavn() + "\n Tlf.: " + k.finnTlf());
System.out.println("Prøver toString()-metoden: " + k);
}
Utskrift:
Systemet finner ikke angitt bane.
Pr°ver finn-metodene:
Navn: Ole Olsen
Tlf.: 12345678
Pr°ver toString()-metoden: Ole Olsen, tlf 12345678
*/
}
class Tidspunkt implements Comparable<Tidspunkt> {
private long tid; // format ååååmmddttmm
public Tidspunkt(long startTid) {
tid = startTid;
}
public long finnTidspunkt() {
return tid;
}
/* formaterer tidspunktet slik: dd-mm-åååå kl ttmm */
public String toString() {
// foretar trygg omforming til mindre type,
// dato og klokkeslett er hver for seg innenfor tallområdet til int
int dato = (int) (tid / 10000);
int klokkeslett = (int) (tid % 10000);
int år = dato / 10000;
int mndDag = dato % 10000;
int mnd = mndDag / 100;
int dag = mndDag % 100;
String tid = "";
if (dag < 10) tid += "0";
tid += dag + "-";
if (mnd < 10) tid += "0";
tid += mnd + "-" + år + " kl ";
if (klokkeslett < 1000) tid += "0";
tid += klokkeslett;
return tid;
}
public int compareTo(Tidspunkt detAndre) {
if (tid < detAndre.tid) return -1;
else if (tid > detAndre.tid) return 1;
else return 0;
}
/* Tester klassen Tidspunkt
public static void main(String[] args) {
Tidspunkt t1 = new Tidspunkt(200301201200L);
Tidspunkt t2 = new Tidspunkt(200301070230L);
Tidspunkt t3 = new Tidspunkt(200301070230L);
System.out.println("t1 = " + t1.finnTidspunkt() + " formattert: " + t1); // bruker toString()
System.out.println("t2 = " + t2.finnTidspunkt() + " formattert: " + t2);
System.out.println("t3 = " + t3.finnTidspunkt() + " formattert: " + t3);
System.out.println("t1 compareto t2 er lik " + t1.compareTo(t2));
System.out.println("t2 compareto t1 er lik " + t2.compareTo(t1));
System.out.println("t3 compareto t2 er lik " + t3.compareTo(t2));
System.out.println("t2 compareto t3 er lik " + t2.compareTo(t3));
}
Utskrift:
t1 = 200301201200 formattert: 20-01-2003 kl 1200
t2 = 200301070230 formattert: 07-01-2003 kl 0230
t3 = 200301070230 formattert: 07-01-2003 kl 0230
t1 compareto t2 er lik 1
t2 compareto t1 er lik -1
t3 compareto t2 er lik 0
t2 compareto t3 er lik 0
*/
}
class Rom {
private int størrelse;
private int nummer;
private ArrayList<Reservasjon> res = new ArrayList<Reservasjon>();
public Rom(int nummer, int størrelse) {
this.størrelse = størrelse;
this.nummer = nummer;
}
public int finnStørrelse() {
return størrelse;
}
public int finnRomnr() {
return nummer;
}
public int finnAntRes() {
return res.size();
}
public boolean nyReservasjon( Tidspunkt fra, Tidspunkt til, Kunde kunde, int antPers) {
boolean overlapp = false;
//while(!overlapp && i < res.size()) {
for (int i=0; i<res.size(); i++) {
if (res.get(i).overlapp(fra,til)) {
overlapp = true;
break;
}
}
if ( (!overlapp) && (antPers <= størrelse) ) {
res.add(new Reservasjon(fra, til, kunde));
return true;
} else return false;
}
public String toString() {
String ut = "\nReservert av: \n";
for (int i=0; i<res.size(); i++) {
ut += res.get(i).toString();
}
ut += "\nAntall reservasjoner: " + finnAntRes() + "\n";
return ut;
}
}
class Konferansesenter {
private ArrayList<Rom> rom = new ArrayList<Rom>();
public Konferansesenter(){}
public boolean leggTilRom( int nr, int størrelse ) {
if ( (finnRomEtterNr(nr) != null) ) return false;
else {
if ( ( nr > 0 ) && ( størrelse > 0 ) ) {
rom.add( new Rom( nr, størrelse ) );
return true;
}
else return false;
}
}
public Rom finnRomEtterIndeks(int indx) {
if ( (indx >= 0) && (indx < rom.size()) ) {
return rom.get(indx);
}
else return null;
}
public Rom finnRomEtterNr(int romnr) {
int indeks = -1;
for(int i=0; i<finnAntRom(); i++) {
if (rom.get(i).finnRomnr() == romnr) {
return rom.get(i);
/*indeks = i;
i = finnAntRom();*/
}
}
/*
if (indeks != -1) {
return rom.get(indeks);
} else */return null;
}
public int finnAntRom() {
return rom.size();
}
public int reserverRom(long fra, long til, int ant, String navn, String tlf) {
Tidspunkt fraTid = new Tidspunkt(fra);
Tidspunkt tilTid = new Tidspunkt(til);
Kunde kunde = new Kunde(navn, tlf);
int indeks = -1;
for (int i=0; i<finnAntRom(); i++) {
if (rom.get(i).nyReservasjon(fraTid, tilTid, kunde, ant)) {
indeks = i;
i = finnAntRom();
}
}
return indeks;
}
public String toString() {
String output = "Rom nr.\tAnt res.\n";
for (int i=0; i<finnAntRom(); i++) {
output += rom.get(i).finnRomnr() + "\t" + rom.get(i).finnAntRes() + "\n";
}
output += "\nAntall rom: " + finnAntRom();
return output;
}
}