import easyIO.*;
public class Oblig3 {
public static void main(String[] args) {
Oblig3 oblig3kjøring = new Oblig3(args);
}
Oblig3(String[] inputfiler) {
String datafil = "HaiHus.data";
String strømfil = "Lysregning.data";
if(inputfiler.length > 0)
datafil = inputfiler[0];
if(inputfiler.length > 1)
strømfil = inputfiler[1];
Hybelhus utsyn = new Hybelhus(datafil,strømfil);
utsyn.kommandoløkke();
}
}
class Student{
int saldo;
String navn;
Student (int saldo, String navn){
this.saldo = saldo;
this.navn = navn;
}
Student(){}
}
class Hybel{
Student leietager;
int utestående;
Hybel (String leietager, int utestående){
if (leietager.equals("TOM HYBEL")) {
this.utestående = utestående;
} else {
this.leietager = new Student(utestående,leietager);
}
}
}
class Hybelhus {
private String datafil;
private String strømfil;
final int ANT_KOR = 4;
final int ANT_ROM = 8;
final String TOM_HYBEL = "TOM HYBEL";
private int totalFortjeneste;
private int antallHybelmånederMedTommeHybler;
private int totaltAntallMåneder;
In tastatur = new In();
Out skjerm = new Out();
private Hybel[][] hyblene = new Hybel[ANT_KOR][ANT_ROM];
Hybelhus( String datafil, String strømfil ) {
this.datafil = datafil;
this.strømfil = strømfil;
skjerm.outln("Leser fra " + datafil + ":");
In hybelfil = new In(datafil);
for(int i = 0; i < ANT_KOR * (ANT_ROM - 1); i++) {
int gang = hybelfil.inInt(";"); skjerm.out(gang);
char bokstav = hybelfil.inChar(";"); skjerm.out(bokstav);
String studentnavn = hybelfil.inWord(";"); skjerm.out(" " + studentnavn);
int saldo = hybelfil.inInt(";"); skjerm.outln(" " + saldo);
hybelfil.readLine();
hyblene[gang - 1][(int)(bokstav - 'A')] = new Hybel(studentnavn.trim(), saldo);
}
totaltAntallMåneder = hybelfil.inInt(";");
antallHybelmånederMedTommeHybler = hybelfil.inInt(";");
totalFortjeneste = hybelfil.inInt(";");
hybelfil.close();
}
void skrivMeny() {
skjerm.outln("");
skjerm.outln("");
skjerm.outln("*** Gulbrand Grås husleiesystem ***");
skjerm.outln("");
skjerm.outln("Du har følgende valgmuligheter:");
skjerm.outln("0) Avslutt");
skjerm.outln("1) Skriv liste over ledige hybler");
skjerm.outln("2) Registrer ny leietager");
skjerm.outln("3) Registrer frivillig flytting av leietager");
skjerm.outln("4) Måneds-kjøring av husleie med strøm");
skjerm.outln("5) Registrer betaling fra leietager");
skjerm.outln("6) Sjekk om noen leietagere skal kastes ut");
skjerm.outln("7) Skriv økonomirapport");
skjerm.outln("8) Skriv ut menyen");
}
void kommandoløkke(){
skrivMeny();
int kommando = 1;
while (kommando != 0) {
kommando = velgOperasjon();
switch (kommando) {
case 0: Avslutt(); break;
case 1: skrivListeOverLedigeHybler(); break;
case 2: registrerNyLeietager(); break;
case 3: registrerFrivilligFlyttingAvLeietager(); break;
case 4: månedsKjøringAvHusleieMedStrøm(); break;
case 5: registrerBetalingFraLeietager(); break;
case 6: sjekkOmNoenLeietagereSkalKastesUt(); break;
case 7: skrivØkonomirapport(); break;
case 8: skrivMeny(); break;
default: skjerm.outln("Du har tastet feil"); break;
}
}
System.out.println("**AVSLUTTNING PÅ HUSLEIESYSTEMET**");
}
int velgOperasjon() {
skjerm.out("Velg en kommando: ");
int kommando = tastatur.inInt();
return kommando;
}
void Avslutt(){
Out lagre = new Out("HaiHus.data");
for(int i = 0; i < ANT_KOR; i++){
for(int j = 1; j < ANT_ROM; j++){
lagre.out(i+1+";");
lagre.out((char)('A' + j)+";");
if(hyblene[i][j].leietager != null){
lagre.outln(hyblene[i][j].leietager.navn + ";" + hyblene[i][j].leietager.saldo + ";");
}else{lagre.outln("TOM HYBEL" + ";" + hyblene[i][j].utestående + ";");
}
}
}
lagre.out(totaltAntallMåneder + ";");
lagre.out(antallHybelmånederMedTommeHybler + ";");
lagre.out(totalFortjeneste);
lagre.close();
skjerm.outln("Data er nå lagret i HaiHus.data");
}
void skrivListeOverLedigeHybler(){
skjerm.outln("Liste over ledige hybler:");
for(int i = 0; i < ANT_KOR; i++){
for(int j = 1; j < ANT_ROM; j++){
if(hyblene[i][j].leietager == null){
skjerm.out(i+1);
skjerm.out((char)('A' + j) + " ");
skjerm.outln("");
}
}
}
}
void registrerNyLeietager(){
skjerm.outln("Registrer ny leietager:");
skjerm.outln("");
skjerm.outln("Hvilken hybel ønsker du å leie: (eks. 3B)");
skjerm.outln("");
skjerm.out("Gang:");
int gang = tastatur.inInt();
skjerm.out("Bokstav:");
tastatur.skipWhite();
char bokstav = tastatur.inChar();
int rom = (int) (bokstav - 'A');
skjerm.outln("Gulbrands totale fortjeneste er: " + totalFortjeneste);
if (hyblene[gang-1][rom].leietager != null){
skjerm.outln("Hybelen er opptatt, se liste over ledige hybler");
}else{
hyblene[gang-1][rom].leietager = new Student();
skjerm.outln("Skriv leietagerens navn:");
hyblene[gang-1][rom].leietager.navn= tastatur.inLine();
hyblene[gang-1][rom].leietager.saldo = 9000;
totalFortjeneste += 5500;
hyblene[gang-1][rom].leietager.saldo -= 5500;
totalFortjeneste-=hyblene[gang-1][rom].utestående;
hyblene[gang-1][rom].leietager.saldo+=hyblene[gang-1][rom].utestående;
hyblene[gang-1][rom].utestående = 0;
skjerm.outln("");
skjerm.outln("Hybelen er nå utleid til " + hyblene[gang-1][rom].leietager.navn);
skjerm.outln("og saldo er " + hyblene[gang-1][rom].leietager.saldo);
skjerm.outln("Gulbrands totale fortjeneste er nå: " + totalFortjeneste);
}
}
void registrerFrivilligFlyttingAvLeietager(){
skjerm.outln("Registrer frivillig flytting:");
skjerm.outln("");
skjerm.outln("Hvilken hybel ønsker du å flytte fra: (eks. 3B)");
skjerm.outln("");
skjerm.out("Gang:");
int gang = tastatur.inInt();
skjerm.out("Bokstav:");
tastatur.skipWhite();
char bokstav = tastatur.inChar();
int rom = (int) (bokstav - 'A');
Student s = hyblene[gang-1][rom].leietager;
skjerm.out("Navn på studenten:");
String tastetNavn = tastatur.inLine();
skjerm.outln("Gulbrands totale fortjeneste: " + totalFortjeneste);
if(s != null && s.navn.equals(tastetNavn)){
hyblene[gang-1][rom].leietager.saldo -= 800;
totalFortjeneste += 800;
skjerm.outln("Studenten har til gode eller er skyldig følgende beløp: " + hyblene[gang-1][rom].leietager.saldo);
skjerm.outln("*** Nå er hybelen ledig! ***");
hyblene[gang-1][rom].leietager = null;
}else{skjerm.out("Det er ingen som eier hybelen, eller så er det tastet inn feil navn på studenten");
}
skjerm.outln("Gulbrands totale fortjeneste er nå: " + totalFortjeneste);
}
void månedsKjøringAvHusleieMedStrøm(){
double strømRegStud = 0;
double strømRegGulb = 0;
double strømFortjen = 0;
double fellesArealReg = 0;
double strømTomHybel = 0;
for(int i = 0; i < ANT_KOR; i++){
for(int j = 1; j < ANT_ROM; j++){
if(hyblene[i][j].leietager != null) {
hyblene[i][j].leietager.saldo -=5500;
totalFortjeneste += 5500;
}
totalFortjeneste -=1000;
}
}
skjerm.outln("Leser fra " + strømfil + ":");
In lysregning = new In(strømfil);
for(int i = 0; i < ANT_KOR; i++){
for(int j = 0; j < ANT_ROM; j++){
int husnr = lysregning.inInt(":");
int gangnr = lysregning.inInt(":");
char bokstav = lysregning.inChar(":");
int kwt = lysregning.inInt(":");
int gang1 = (gangnr-1);
int boks1 = (int)(bokstav - 'A');
if(bokstav == ('A')){
fellesArealReg = kwt*0.8;
totalFortjeneste += fellesArealReg;
}
else if(hyblene[gang1][boks1].leietager == null){
strømTomHybel = kwt*0.8;
totalFortjeneste -= strømTomHybel;
antallHybelmånederMedTommeHybler++;
}
else if(hyblene[gang1][boks1].leietager != null){
strømRegStud = kwt*2.0;
strømFortjen = kwt*1.2;
hyblene[gang1][boks1].leietager.saldo -= strømRegStud;
totalFortjeneste += strømFortjen;
}
}
}
lysregning.close();
totaltAntallMåneder++;
skjerm.outln("Månedskjøring: " + totaltAntallMåneder + " er gjennomført");
}
void registrerBetalingFraLeietager(){
skjerm.outln("Registrer betaling fra leietager:");
skjerm.outln("");
skjerm.outln("Hvilken hybel ønsker du å betale for: (eks. 3B)");
skjerm.outln("");
skjerm.out("Gang:");
int gang = tastatur.inInt();
skjerm.out("Bokstav:");
tastatur.skipWhite();
char bokstav = tastatur.inChar();
int rom = (int) (bokstav - 'A');
if(hyblene[gang-1][rom].leietager == null){
skjerm.outln("Betalingen kan ikke registreres siden det ikke bor noen i hybelen!");
}else{
skjerm.outln("Saldo er nå: " + hyblene[gang-1][rom].leietager.saldo);
skjerm.out("Hvor mye ønsker du å betale:");
int beløp = tastatur.inInt();
hyblene[gang-1][rom].leietager.saldo += beløp;
skjerm.outln("Betaling gjennomført!");
skjerm.outln("Saldo etter betaling er: " + hyblene[gang-1][rom].leietager.saldo);
}
}
void sjekkOmNoenLeietagereSkalKastesUt(){
int tellerTorpedo = 0;
skjerm.outln("Sjekk om noen må kastes ut");
for(int i = 0; i < ANT_KOR; i++){
for(int j = 1; j < ANT_ROM; j++){
if(hyblene[i][j].leietager != null){
if(hyblene[i][j].leietager.saldo < 0){
int saldo = hyblene[i][j].leietager.saldo;
int gjeld = (saldo - 1000);
totalFortjeneste-=gjeld;
int gang1 = (i+1);
char boks1 = (char)('A' + j);
String hybelNavn = (gang1+""+boks1);
String studentNavn = hyblene[i][j].leietager.navn;
skjerm.outln(studentNavn + hybelNavn);
hyblene[i][j].leietager = null;
tilkallTorpedo(hybelNavn,studentNavn,gjeld);
tellerTorpedo++;
}
}
}
}
if(tellerTorpedo>0) {
skjerm.outln("Leietagere som skal kastes ut er nå lagt i Torpedo.txt");
}else{skjerm.outln("Ingen leietagere trenger å kastes ut denne måneden");
}
}
void tilkallTorpedo (String hybelNavn, String studentNavn, int gjeld){
Out torpedo = new Out("Torpedo.txt",true);
torpedo.outln(hybelNavn+ ": "+ studentNavn +": "+ gjeld +";");
torpedo.close();
}
void skrivØkonomirapport(){
skjerm.outln("*** Økonomirapport ***");
skjerm.outln("");
skjerm.outln("Gulbrand Grå har tjent totalt: " + totalFortjeneste);
skjerm.outln("Antall måneder med tomme hybler er så langt " + antallHybelmånederMedTommeHybler);
skjerm.outln("Dette programmet har kjørt i " + (totaltAntallMåneder-2) + " måneder");
}
}