Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Kommentar:
- *
- * "4.) Registrer utflytting" sier ikke hva som skjer med saldoen til studenten.
- * Det naturlige vil vaere at studenten faar tilbake dette beloepet, derfor setter jeg i
- * min loesning saldoen til null, uten aa overfoere noe til utleier.
- */
- import easyIO.*;
- //Hovedklassen: Starter opp menyen i klassen Hybelhus
- class Oblig3 {
- public static void main(String[] args) {
- // Kjorer metoden meny i objektet Hybelhus - eller er det i klassen Hybelhus?? :(
- Hybelhus hh = new Hybelhus();
- hh.kommandomeny();
- hh.avslutt();
- }
- }
- class Hybelhus {
- In tast = new In();
- // Array med hybler[etasjenr][romnr]
- Hybel[][] hybler = new Hybel[3][6];
- /* Variabler for drift og okonomi.
- * Har slaatt sammen utgifter for vedlikehold av hybler og fellesareal
- * (og ganget dette med antall etasjer),ettersom disse er konstante og uavhengig av om hyblene er bebodd eller ikke.
- */
- int utgifter = 10500;
- int mnd, aar, totalfortjeneste, driftstid, husleie;
- final String FILNAVN = "hybeldata.txt";
- final String TOM_HYBEL = "TOM HYBEL";
- // Konstruktor for klassen Hybelhus
- Hybelhus() {
- In innfil = new In(FILNAVN);
- mnd = innfil.inInt(";");
- aar = innfil.inInt(";");
- totalfortjeneste = innfil.inInt(";");
- driftstid = innfil.inInt(";");
- while (!innfil.endOfFile()) {
- int etg = (int)innfil.inInt(";") - 1;
- char bokstav = innfil.inChar(";");
- int rom = (int) (bokstav - 'A'); // 'A' gir [0], 'B' gir [1], osv.
- int saldo = innfil.inInt(";");
- String navn = innfil.inLine();
- if (etg == 2) {
- husleie = 7000;
- } else {
- husleie = 6000;
- }
- Student leietager = new Student(navn, saldo);
- hybler[etg][rom] = new Hybel(leietager, husleie);
- }
- innfil.close();
- }
- /* kommandomeny
- *
- * Metode som skriver ut kommandomeny og lar brukeren velge forskjellige operasjoner.
- * Kjoerer deretter funksjon avhengig av brukerens valg
- */
- void kommandomeny() {
- int ordre = 0;
- while (ordre != 7) {
- System.out.println("\n*** HER KAN DU ADMINISTRERE HYBELHUSET UTSYN ***");
- System.out.println("\nDette er valgmulighetene du har:\n ");
- System.out.println("1): Vis hybeloversikt i tabellform");
- System.out.println("2): Registrer ny leietager");
- System.out.println("3): Registrer betaling fra leietager");
- System.out.println("4): Registrer frivillig utflytting");
- System.out.println("5): Start maanedskjoering av husleie");
- System.out.println("6): Kast ut leietagere");
- System.out.println("7): Avslutt");
- System.out.print("Velg kommando nr.: ");
- ordre = tast.inInt();
- switch(ordre) {
- case 1: skrivHybeltabell(); break;
- case 2: registrerLeietager(); break;
- case 3: registrerBetaling(); break;
- case 4: registrerUtflytting(); break;
- case 5: mndKjoringHusleie(); break;
- case 6: kastUtLeietager(); break;
- case 7: avslutt(); break;
- default: break;
- }
- }
- }
- // Metoder for de forskjellige ordrene i kommandomeny()
- /* skrivHybeltabell
- *
- * Metode som skriver ut tabell med hybelnavn,
- * leietagernavn og saldo for alle hyblene,
- * samt data knyttet til drift og økonomi.
- *
- */
- void skrivHybeltabell() {
- Out skjerm = new Out();
- int bredde = 13;
- int bredde2 = 10;
- String linje = "------ ----------------------- -----";
- char bokstav;
- // Overskrifter:
- skjerm.out("Hybel", bredde);
- skjerm.out("Leietager", bredde, Out.LEFT);
- skjerm.outln(" Saldo", bredde);
- skjerm.outln(linje);
- // Innmat i tabellen
- for (int etg = 0; etg < hybler.length; etg++) {
- for (int rom = 0; rom < hybler[0].length; rom++){
- bokstav = (char) ('A' + rom);
- skjerm.out(etg + 1 + "" + bokstav, bredde);
- if (hybler[etg][rom].leietager.navn.equals("TOM HYBEL")){
- skjerm.out("( LEDIG )", bredde);
- } else {
- skjerm.out(hybler[etg][rom].leietager.navn, bredde);
- }
- skjerm.outln(hybler[etg][rom].leietager.saldo, bredde2);
- }
- skjerm.outln();
- }
- skjerm.outln("Maaned/aar:" + mnd + "/" + aar);
- skjerm.outln("Driftstid (mnd): " + driftstid);
- skjerm.outln("Totalfortjeneste: " + totalfortjeneste);
- }
- /* registrerLeietager
- *
- * Metode som brukes for aa registrere nye hybelbeboere, samt betale inn depositum.
- * Fra depositumet trekkes den foerste husleien. Det som er til overs legges til
- * studentens saldo.
- */
- void registrerLeietager() {
- int etg, rom, saldo, etgPrint;
- char bokstav;
- String navn;
- boolean ledigeHybler = false;
- int depositum = 10000;
- for (etg = 0; etg < hybler.length; etg++) {
- for (rom = 0; rom < hybler[0].length; rom++) {
- if (hybler[etg][rom].leietager.navn.equals("TOM HYBEL"))
- ledigeHybler = true;
- }
- }
- if (!ledigeHybler) {
- System.out.println("\nAlle hyblene er utleid. ");
- System.out.println("\nDu vil naa returneres til hovedmenyen");
- return;
- }
- System.out.println("Disse hyblene er ledige: ");
- for (etg = 0; etg < hybler.length; etg++) {
- for (rom = 0; rom < hybler[0].length; rom++) {
- if (hybler[etg][rom].leietager.navn.equals("TOM HYBEL")) {
- bokstav = (char) ('A' + rom);
- etgPrint = etg + 1;
- System.out.println(etgPrint + "" + bokstav);
- }
- }
- }
- System.out.print("Hvilken hybel vil du leie? ");
- etg = (int)(tast.inChar("\n\r") - '1');
- bokstav = Character.toUpperCase(tast.inChar("\n\r"));
- rom = (int) (bokstav - 'A');
- //Sjekker om indeksen er gyldig:
- if (etg > hybler.length || etg < 0 || rom > hybler[0].length || rom < 0) {
- System.out.println("\n Hybelen du tastet inn finnes ikke i hybelhuset Utsyn.");
- return;}
- if (!hybler[etg][rom].leietager.navn.equals("TOM HYBEL")) {
- System.out.println("Denne hybelen er allerede utleid. Se oversikt over ledige hybler paa nytt.");
- return;}
- System.out.println("Hva heter studenten?");
- navn = tast.inLine();
- saldo = depositum - hybler[etg][rom].husleie;
- totalfortjeneste = totalfortjeneste + hybler[etg][rom].husleie;
- Student innflytter= new Student(navn, saldo);
- hybler[etg][rom].leietager = innflytter;
- bokstav = (char) ('A' + rom);
- etgPrint = etg + 1;
- System.out.println("\n" + hybler[etg][rom].leietager.navn + " har naa flyttet inn i hybelen "
- + etgPrint + bokstav + ". Etter aa ha betalt depositum (" + depositum + "kr) og trukket fra foerste husleie paa " + hybler[etg][rom].husleie
- + "kr, er studentens saldo " + hybler[etg][rom].leietager.saldo + "kr.");
- }
- /* registrerBetaling()
- *
- * Metode som registrer betaling fra leietager.
- * Hvis studentens saldo fra forrige mndkjoering staar i minus,
- * trekkes dette beloepet fra betalingen og legges til utleiers totalfortjeneste.
- */
- void registrerBetaling() {
- int etg, rom, saldo, beloep, saldoFraForrigeMnd, pengerStudentenSkylder, restbeloep;
- char bokstav;
- System.out.println("For hvilken hybel skal det betales? ");
- etg = (int) (tast.inChar("\n\r") - '1');
- bokstav = Character.toUpperCase(tast.inChar("\n\r"));
- rom = (int) (bokstav - 'A');
- if(hybler[etg][rom].leietager.navn.equals("TOM HYBEL")) {
- System.out.println("Denne hybelen er ikke bebodd, og betaling kan derfor ikke utfoeres");
- return;
- }
- System.out.println("Hvor mye vil " + hybler[etg][rom].leietager.navn + " betale?");
- beloep = tast.inInt();
- if (hybler[etg][rom].leietager.saldo < 0) {
- saldoFraForrigeMnd = (hybler[etg][rom].leietager.saldo);
- pengerStudentenSkylder = (saldoFraForrigeMnd * -1);
- totalfortjeneste = totalfortjeneste + pengerStudentenSkylder;
- restbeloep = beloep - pengerStudentenSkylder;
- hybler[etg][rom].leietager.saldo = restbeloep;
- System.out.println("Saldoen til " + hybler[etg][rom].leietager.navn + " var " + saldoFraForrigeMnd
- + ", altsaa negativ. " + pengerStudentenSkylder + " kr legges derfor direkte til utleiers totalfortjeneste.\n"
- + "Det skyldige beloepet (" + pengerStudentenSkylder + " kr) trekkes fra det innbetalte beloepet (" + beloep
- + " kr). Studentens gjenvaerende saldo blir dermed " + hybler[etg][rom].leietager.saldo + " kr.");
- } else {
- hybler[etg][rom].leietager.saldo += beloep;
- System.out.println("Belopet er lagt til " + hybler[etg][rom].leietager.navn + " sin saldo. "
- + "Denne er naa paa " + hybler[etg][rom].leietager.saldo + " kr.");
- }
- }
- /* registrerUtflytting
- *
- * Metode som registrerer utflytting om studentnavnet
- * finnes i systemet og studentens saldo ikke er negativ.
- */
- void registrerUtflytting() {
- int etg, rom;
- String utflytter;
- char bokstav;
- boolean funnet = true;
- int etgPrint;
- System.out.println("Hva heter studenten som vil flytte ut?");
- utflytter = tast.inWord("\n\r");
- for (etg = 0; etg < hybler.length; etg++) {
- for (rom = 0; rom < hybler[0].length; rom++) {
- if (hybler[etg][rom].leietager.navn.equals(utflytter)) {
- funnet = true;
- if (hybler[etg][rom].leietager.saldo > -1) {
- hybler[etg][rom].leietager.navn = "TOM HYBEL";
- hybler[etg][rom].leietager.saldo = 0;
- bokstav = (char) ('A' + rom);
- etgPrint = etg + 1;
- System.out.println("\nLeietageren " + utflytter + " er naa avregistrert som leietager "
- + "av hybel " + etgPrint + "" + bokstav + ".");
- } else {
- System.out.println("\nStudentens saldo er i minus. Det kreves at all husleie er betalt "
- + "ved utflytting, og studenten kan derfor ikke flytte ut.");
- }
- }
- }
- }
- if (!funnet) {
- System.out.println("\nDette navnet er ikke registrert i systemet.");
- System.out.println( "Er du sikker paa at du stavet navnet riktig?");
- return;
- }
- }
- /* mndKjoringHusleie
- *
- * Metode som trekker husleie fra studentenes saldo og
- * legger denne til utleiers fortjeneste.
- */
- void mndKjoringHusleie() {
- int etg, rom, snittfortjeneste;
- int mndFortjeneste = 0;
- int smaaPengTilUtleier = 0; // Pengene som betales til utleier naar saldo er mer enn 0, men mindre enn husleiebeloepet.
- int resterendeHusleie = 0; // Differansen mellom husleiebeloepet og smaaPengTilUtleier
- int kommendeMnd = mnd + 1;
- System.out.print("\nOensker du aa utfoere maanedskjoering for maaned " + kommendeMnd + "/" + aar + " (j/n)? ");
- char svar = Character.toUpperCase(tast.inChar("\n\r"));
- System.out.println();
- if (svar == 'J') {
- mnd++;
- if(mnd > 12) {
- aar++;
- mnd = 1;
- }
- for (etg = 0; etg < hybler.length; etg++) {
- for (rom = 0; rom < hybler[0].length; rom++) {
- if (!hybler[etg][rom].leietager.navn.equals("TOM HYBEL")) {
- if (hybler[etg][rom].leietager.saldo >= hybler[etg][rom].husleie) {
- mndFortjeneste += hybler[etg][rom].husleie;
- hybler[etg][rom].leietager.saldo -= hybler[etg][rom].husleie;
- }
- else if (hybler[etg][rom].leietager.saldo > 0) {
- while (hybler[etg][rom].leietager.saldo > 0) {
- hybler[etg][rom].leietager.saldo = hybler[etg][rom].leietager.saldo - 1;
- mndFortjeneste++;
- smaaPengTilUtleier++;
- }
- resterendeHusleie = hybler[etg][rom].husleie - smaaPengTilUtleier;
- hybler[etg][rom].leietager.saldo -= resterendeHusleie;
- } else {
- hybler[etg][rom].leietager.saldo -= hybler[etg][rom].husleie;
- }
- }
- }
- }
- }
- mndFortjeneste -= utgifter;
- snittfortjeneste = (totalfortjeneste / driftstid);
- System.out.println("~~~ MAANEDSKJOERING UTFOERT ~~~");
- System.out.println("Maanedskjoeringen gjelder mnd/aar: " + kommendeMnd + "/" + aar);
- System.out.println("Driftstid (mnd): " + driftstid);
- System.out.println("Maanedens fortjeneste: " + mndFortjeneste);
- System.out.println("Totalfortjeneste: " + totalfortjeneste);
- System.out.println("Gjennomsnittlig maanedsfortjeneste: " + snittfortjeneste);
- }
- /* kastUtLeietager
- *
- * Gaar gjennom alle hyblene og finner studentene med saldo lavere
- * enn en mndleie. Hvis leietageren skylder mer enn en husleie,
- * sendes det beskjed (fil) til H. Hole.
- */
- void kastUtLeietager() {
- int etg, rom;
- int pengekrav = hybler[etg][rom].husleie + 3000;
- int gulbrandsPenger = (hybler[etg][rom].leietager.saldo * -1) + 1500;
- for (etg = 0; etg < hybler.length; etg++) {
- for (rom = 0; rom < hybler[0].length; rom++) {
- if (hybler[etg][rom].leietager.saldo < (hybler[etg][rom].husleie * -1))
- this.tilkallHole(etg, rom, pengekrav);
- totalfortjeneste += gulbrandsPenger;
- hybler[etg][rom].leietager.navn = "TOM HYBEL";
- hybler[etg][rom].leietager.saldo = 0;
- }
- }
- }
- void tilkallHole(int etg, int rom, int pengekrav) {
- Out skjerm = new Out();
- Out utfil = new Out("hole.txt", true);
- int bredde = 13;
- int bredde2 = 10;
- int etgPrint;
- char bokstav;
- rom = (int) (bokstav - 'A');
- etgPrint = etg + 1;
- System.out.println();
- System.out.println("*USKIKKELIGE STUDENTER*)"); utfil.outln("*USKIKKELIGE STUDENTER*");
- skjerm.out(etgPrint + bokstav, bredde); utfil.out(etgPrint + bokstav, bredde);
- skjerm.out(hybler[etg][rom].leietager.navn, bredde); utfil.out(hybler[etg][rom].leietager.navn, bredde);
- skjerm.out(pengekrav); utfil.out(pengekrav, bredde2);
- utfil.close();
- }
- /* avslutt
- *
- * Data skrives til fil 'hybeldata.txt', deretter avslutter prog.
- * Format:
- * maaned
- * aar
- * totalfortjeneste
- * antall mnd i drift
- * leietager for hver hybel
- * saldo for hver hybelleietager
- */
- void avslutt() {
- /*
- Skriving til fil:
- En god løsning er å bruke nestede for-lokker som teller rader og kolonner
- naar du skriver til datafilen
- Out utfil = new Out (FILNAVN);
- int mnd = utfil.inInt(";");
- int aar = innfil.inInt(";");
- int totalfortjeneste = innfil.inInt(";");
- int totaltAntallMnd = innfil.inInt(";");
- int etg = (int)innfil.inInt(";") - 1;
- char bokstav = innfil.inChar(";");
- int saldo = innfil.inInt(";");
- int rom = (int) (bokstav - 'A'); // 'A' gir [0], 'B' gir [1], osv.
- String studentnavn = innfil.inLine();
- // Oppretter Hybel- og Studentobjekter dataene puttes i?
- Hybel hybler[etg][rom] = new Hybel();
- hybler[etg][rom].leietager = new Student();
- hybler[etg][rom].leietager.saldo = innfil.inInt(" ;"); System.out.println("Saldoen for " + leiegager + " = " + saldo);
- int etasjer = 0;
- int rom = 0;
- for (int i = 0; i < hybler.length; i++) {
- for (int j = 0; j < hybler[].length; j++) {
- hybler[i][j]
- etasjer++;
- rom++;
- fil.close()
- System.out.println("--- Programmet avslutter ---");
- System.exit(0);
- */
- }
- }
- class Hybel {
- Student leietager;
- int husleie;
- // Konstruktor for klassen Hybel
- Hybel(Student leietager, int husleie) {
- this.leietager = leietager;
- this.husleie = husleie;
- }
- }
- class Student {
- int saldo;
- String navn;
- // Konstruktor for klassen Student
- Student(String navn, int saldo) {
- this.navn = navn;
- this.saldo = saldo;
- }
- }
Add Comment
Please, Sign In to add comment