Oblig 4Hybelhus litt mer tips enn i oppgaven



Like dokumenter
1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Oblig 3 tips litt mer tips enn i oppgaven

Oblig 3 tips litt mer tips enn i oppgaven

Oblig3Hybelhus (INF Høst 2011) én av to mulige oppgaver for oblig3 (du løser denne eller Oblig3Pi)

Gulbrand Grås Husleiesystem

Oblig4Hybelhus (INF Høst 2013) én av to mulige oppgaver for oblig4 (du løser denne eller Oblig4Pi)

Gulbrand Grås husleiesystem

Oppgaven består av to deler, del A og del B. Alle skal besvare både del A og del B, men det finnes noen valgmuligheter innenfor hver del.

Repetisjon. INF gruppe 13

NB!!!! VIKTIG ANGÅENDE DATAFILA:

Obligatorisk oppgave nr. 3 (av 4) i INF1000, V-2007

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Oblig 3 (INF Høst 2010)

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Gulbrand Grås husleiesystem

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF1000: Forelesning 7

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

INF1000: Forelesning 7. Konstruktører Static

Sensur-veiledning INF1000 h 2013 (fasit) am - 6. des. 2013

Oblig4 - forklaringer. Arne og Ole Christian

INF Uke 10. Ukesoppgaver oktober 2012

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Løsningsforslag til eksamen i INF1000 våren 2006

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

Null, && og søppeltømmeren. INF Forelesning 9: Mer om objekter og klasser, tips til oblig 3. Eksempel Student med én konstruktør

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oblig3 - obligatorisk oppgave nr. 3 (av 4) i INF1000

Oblig 4 (av 4) INF1000, høsten 2009 Værdata, leveres innen 6. nov. kl

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

INF1000 Metoder. Marit Nybakken 16. februar 2004

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

UNIVERSITETET I OSLO

Gjennomgang av eksamen H99

Stringer er ordentlige objekter. Uke 8 - Mer om objekter og klasser. Tips Oblig3. Eksempel Student med en konstruktør

UNIVERSITETET I OSLO

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

UNIVERSITETET I OSLO

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

(! )! #!! *#+,$&!! &#$

3 #$ *#+,$&!! &#$ (! )! #! 6 &#)%#. / 5$ #%#.67 / "## #&! %# # & #!!& %&$ # $!!!!# $#

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

IN Notat om I/O i Java

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Dagens tema Kapittel 8: Objekter og klasser

Klasser, objekter, pekere og UML. INF gruppe 13

UNIVERSITETET I OSLO

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

Introduksjon til objektorientert programmering

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

UNIVERSITETET I OSLO

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Løsningsforslag ukeoppg. 7: okt (INF Høst 2010)

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

Programmering i C++ Løsningsforslag Eksamen høsten 2005

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

INF1000: Forelesning 6. Klasser og objekter del 1

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1000. Marit Nybakken 10. februar 2004

TOD063 Datastrukturer og algoritmer

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

HØGSKOLEN I SØR-TRØNDELAG

INF1000 Behandling av tekster

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF1000: noen avsluttende ord

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

UNIVERSITETET I OSLO

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

Endret litt som ukeoppgave i INF1010 våren 2004

Forelesning inf Java 5

Forelesning inf Java 5

INF1000 Prøveeksamen Oppgave 7 og 9

INF1000 : Forelesning 4

Transkript:

Oblig 4Hybelhus litt mer tips enn i oppgaven lørdag 19. okt 2013 Arne Maus

Obligatorisk oppgave 4 Gulbrand Grås husleiesystem I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer, nummerert fra 1-3. I hver etasje finner vi 6 hybler og et fellesareal. Hver hybel navngis med etasje + en bokstav. Første hybel har bokstaven A, siste hybel har bokstaven E. Fellesarealet er ikke markert med bokstav. For eksempel 2A en hybel i 2. etg.i andre etasje, mens 1E er hybel E i første etasje. 2

Inntekter og utgifter for Gulbrand Inntekter: Gulbrand Grå leier ut hyblene i de to nederste etasjene for 7500 kroner i måneden, mens husleien for en hybel i toppetasjen er 9000 kroner på grunn av utsikten. Beboerne betaler husleie for sine hyblene til Gulbrand og husleien dekker alle utgifter på hybelen unntatt strøm, som beboerne betaler utenom dette systemet. Utgifter: Gulbrand har hyret inn firmaet Vedlikehold A/S som tar seg av alle løpende utgifter: Vedlikehold, reparasjoner, kommunale avgifter, nettabonnement i hyblene, og utstyr og strøm til fellesarealer. For dette betaler Gulbrand hver måned til Vedlikehold A/S: 1200 kr per hybel A-F i hver etasje, uansett om en hybel har beboer eller ikke, pluss 1700 kr per etasje for fellesarealer. 3

Generell løsningsmetode Husk vi skal lage en kopi av virkeligheten i Java-programmet 1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?) 2. Finn ut hvilke objekter som eier objekter ( tegn UML diagram) 1. Lag pekere (enkle pekere eller arrayer ) som binder systemet sammen 3. Finn ut hva systemet skal gjøre = metoder vi skal ha. 1. Finn på et navn på hver av dem foreløpig uten kode inni { }. 4. Plasser metodene (og andre datafelter) i de klassene de naturlig hører hjemme 5. Finn ut hvordan vi skal kjøre programmet anta at vi har laget en klasse som er selve systemet (class HusleieSystem) 1. Lag et objekt av HusleieSystem (fra main) 2. I konstruktoren leser du inn file(ne) i systemet og lager alle objektene som selve HusleieSystem eier for eksempel Et hybelhus HybelHus med sine 18 hybler. 3. Kall en kommandolokke() metode i HusleieSystem. 4. Skriv ut nytt innhold av filer når kommandolokke() er ferdig 5. Ferdig! 6. Lag et kjørende system med (bare) tomme metoder 7. Programmer hver metode for seg, test 4

1. Finn klassene - Substantiv-metoden : understrek alle substantiver Gulbrand Grå har et hybelhus kalt Utsyn, med 18 studenthybler som han leier ut til studenter i Oslo. Du skal lage et system for å administrere utleie av hyblene i hybelhuset. Utsyn har 3 etasjer, nummerert fra 1 til 3. I hver etasje er det 6 hybler, kalt rom A til F, og et fellesrom. Hver hybel har et entydig «hybelnavn» som består av etasjenummer og rom-bokstav, f.eks. heter hybelen i rom C i andre etasje "2C"... Inntekter: Gulbrand Grå leier ut hyblene i de to nederste etasjene for 6000 kroner i måneden, mens husleien for en hybel i toppetasjen er 7000 kroner på grunn av utsikten. Beboerne betaler husleie for sine hyblene til Gulbrand og husleien dekker alle utgifter på hybelen unntatt strøm, som beboerne betaler utenom dette systemet. Utgifter: Gulbrand har hyret inn firmaet Vedlikehold A/S som tar seg av alle løpende utgifter: Vedlikehold, reparasjoner, kommunale avgifter, nettabonnement i hyblene, og utstyr og strøm til fellesarealer. For dette betaler Gulbrand hver måned til Vedlikehold A/S: 1200 kr per hybel A-F i hver etasje, uansett om en hybel har beboer eller ikke, pluss 1700 kr per etasje for fellesarealer. 5

1. Finn klassene - Substantiv-metoden : understrek alle substantiver Gulbrand Grå har et hybelhus kalt Utsyn, med 18 studenthybler som han leier ut til studenter i Oslo. Du skal lage et system for å administrere utleie av hyblene i hybelhuset. Utsyn har 3 etasjer, nummerert fra 1 til 3. I hver etasje er det 6 hybler, kalt rom A til F, og et fellesrom. Hver hybel har et entydig «hybelnavn» som består av etasjenummer og rom-bokstav, f.eks. heter hybelen i rom C i andre etasje "2C".... Inntekter: Gulbrand Grå leier ut hyblene i de to nederste etasjene for 7500 kroner i måneden, mens husleien for en hybel i toppetasjen er 9000 kroner på grunn av utsikten. Beboerne betaler husleie for sine hyblene til Gulbrand og husleien dekker alle utgifter på hybelen unntatt strøm, som beboerne betaler utenom dette systemet. Utgifter: Gulbrand har hyret inn firmaet Vedlikehold A/S som tar seg av alle løpende utgifter: Vedlikehold, reparasjoner, kommunale avgifter, nettabonnement i hyblene, og utstyr og strøm til fellesarealer. For dette betaler Gulbrand hver måned til Vedlikehold A/S: 1200 kr per hybel A-F i hver etasje, uansett om en hybel har beboer eller ikke, pluss 1700 kr per etasje for fellesarealer. 6

1. Substantivene er forslag til klasser Alt for mange A. Noen kutter vi ut A. Angår ikke datasystemet: Vedlikehold, reparasjoner, kommunale avgifter, nettabonnement, strøm, utsikt,.. B. Noen er egentlig handlinger (utleie, utdeling, innkreving, ) og blir kanskje metoder B. Noen er egentlig det samme og blir til ett forslag A. (beboer, student) C. Noen blir til enkle variable inne i en klasse A. De som ikke inneholder noe mer, ingen indre struktur (etasjenr, bokstav, husleie, måned..) D. Noen blir til klasser A. Typisk de som er gjentatt mange ganger (hybel, studenthus, etasje), men kanskje også bare få ganger (student) 7

2. Tegn UML klassediagram (første forslag) Oppgave 1 1 HybelHus 1 3 Etasje 1 6 Hybel 1 0..1 Student 8

2. UML klassediagram (forslaget fra oppgave-teksten) Oppgave Hva er best? 1 1 HybelHus 1 18 Hybel 1 0..1 Student 9

2b) Lag pekere ( nå henger det sammen) Oppgave utsyn Oppgave 1 studenthus 1 1 18 Hybel 1 0..1 Student stu HybelHus denthus hyblene 0 5 Hybel Hybel studenten studenten Student 0 2 10

3. Finn ut hva systemet skal gjøre = metoder vi skal ha Her er kravene til metoder fra oppgaven alle (med ett mulig unntak) blir egne metoder Tillegg: kommandolokke() + meny() 1. Skriv oversikt 2. Registrer ny leietager 3. Registrer betaling fra leietager 4. Registrer frivillig utflytting 5. Månedskjøring av husleie 6. Kast ut leietagere 7. Øk husleien 8. Avslutt Alle blir metoder noen trenger parametre det ordnes etterpå. 11

4. Plasser metodene (og andre datafelter) i de klassene de naturlig hører hjemme. Mange muligheter. kommandolokke() + meny() Oppgave 1. Skriv oversikt 2. Registrer ny leietager 3. Registrer betaling fra leietager 4. Registrer frivillig utflytting 5. Månedskjøring av husleie 6. Kast ut leietagere 7. Øk husleien 8. Avslutt 1 studenthus 1 1 18 Hybel 1 0..1 Student HybelHus: oversiktstabell, kommandolokke, meny, månedskjoring, sjekkomutkasting, okhusleien Hybel: reginnflytting, regutflytting, regbetaling, sjekkomutkasting, okhusleien Student: 12

4. Plasser datafelter i klasser Det som ikke ble klasser etasjenr, bokstav, husleie, Student: Navn, adresse, saldo..? Andre variable for eksempel når vi lager objekter (Student) Hvor plasserer vi høy og lav husleie? - Ikke dublisere enkle data rundt i systemet - Ha disse opplysningene bare ett sted (de kan endres) 13

5. Kjøre systemet class Oppgave { public static void main (String[] args) { HybelHus gg = new HybelHus (); gg.kommandolokke(); } } 14

hybeldata.txt systemets database Datafilen "hybeldata.txt" Første linje i filen inneholder seks heltalls-verdier adskilt med semikolon: int måned; int år; int totalfortjeneste; int totaltantallmåneder; int int månedsleievanlighybel; int månedsleietoppetasjehybel. Her er "int måned" og "int år" månedsnummeret og årstallet da månedskjøring sist ble utført, hvor måned er et tall i området 1 til 12, og årstallet er firesifret. Det tredje tallet er Gulbrands totale fortjeneste siden systemet ble satt i drift; og det femte tallet angir antall måneder systemet har vært i drift. Femte og sjette heltall er opplagt. Deretter er det 18 linjer, en for hver hybel, med følgende format: int etasje; char bokstav; int saldo; String studentnavn. For tomme hybler skal studentnavnet lagres i datafilen som TOM HYBEL, med saldo 0. Du kan anta at alle studenter har unike navn. Alle disse dataene skal holdes oppdatert internt i programmet mens det kjører, og skal skrives tilbake til datafilen når programmet avsluttes. Slik kan Gulbrand starte og avslutte programmet uten å miste 15 data mellom kjøringene.

Lesing av en redusert hybeldata.txt : 2; C; Ole Brun; 2400; 3; A; TOM HYBEL; 0; Når vi har med en String sep av separatortegn til en innlesningsmetode i klassen In, er det som leses en gruppe med tegn som er de tegnene som finnes mellom to skilletegnene i teksten sep For å si det enklere: Først hoppes det over alle skilletegn i sep, så leses alt frem til neste skilletegn som det vi egentlig er interessert i. Eks. int i =fil.inint( ; ); vil først hoppe over alle blanke og ;, så lese de neste tegnene til første blanke eller ; og prøve å tolke det som et heltall. 16

Z:\INF1000\Obli3tips>java LesHybelData Student:Ole Brun, med saldo:2400, etasje:2, hybel:c Student:TOM HYBEL, med saldo:0, etasje:3, hybel:a Merk ingen blanke skilletegn når vi leser inn navnet - HVORFOR 17

Tabell 18

Tips 2 19

Tips 3 Hver gang metoden tilkallhole() blir kalt skal du skrive til slutten av filen torpedo.txt (uten å overskrive det som allerede ligger der). Da må du åpne filen med append. Det gjøres ved å ha en ekstra parameter når du åpner filen: Out fil = new Out( torpedo.txt", true); Husk alltid å lukke filer når du er ferdig å lese/skrive til dem! 20

Tips 4 (B,..,E), skjerm.out("oppgi hybelnavn, etasje bokstav: "); int etg = (int) (tast.inchar(" ") - '1'); // '1' gir 0,'2' gir 1, osv. char bokstav = tast.inchar(" "); // Les rombokstaven int rom = (int) (bokstav - 'A'); // 'A' gir [0], 'B' gir [1], osv. Hyblene[etg][rom] 21

Tips 5 lage en fil første gang, men ikke senere. Kan gjelde både: hybeldata.txt og torpedo.txt import java.io.*; 22

Tips 6: 23

import easyio.*; import java.io.*; class Oppgave { public static void main(string [] args) { Utsyn s = new Utsyn(); s.menylokke(); } } class Student { String navn; // studentens navn int saldo; // studentens saldo } // evt. metoder for å behandle studentene class Hybel { Student leietager; // peker på leietager. Er hybelen tom, er denne null boolean toppetasje; // true = 9000kr (høy) /mnd i leie // false = 7500kr (lav)/mnd i leie } // evt. metoder for å behandle hyblene? 24

class HybelHus { Hybel[][] hyblene = new Hybel[3][6]; // deklarer objektvariable for // økonomi-/månedsberegning In tast = new In(); Out skjerm = new Out(); String DATAFIL = "Hybeldata.txt"; // Konstruktør for klassen HybelHus HybelHus() { // opprett hybler: // hyblene[etg][rom] = new Hybel(); // Les inn fra datafil. Opprett studentobjekter // for de hyblene hvor det bor studenter: // hyblene[etg][rom].leietager = // new Student(); } void menylokke() { int kommando = -1; while (kommando!= 7) { // skriv ut menyen skjerm.outln("hovedmeny"); skjerm.outln( 7. Avslutt"); } } // hent kommando fra bruker skjerm.out("kommando: "); kommando = tast.inint(); // utfør kommando switch(kommando) { case 1: skrivoversikt(); break; case 2: regnyleietager(); break; case 3 : regbetaling(); break; case 4: regfrivilligflytting(); break; case 5: //... fyll ut resten selv default: // gi feilmelding } 25

// metoder for de forskjellige kommandoene i menyløkke() void skrivoversikt() { /*... */ } void regnyleietager() { /*... */ } void regfrivilligflytting() { /*... */ } void regbetaling() { /*... */ } //... fyll ut med minst 4 ekstra metoder } void avslutt() { /*... */ } 26

Lykke til!