81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW (NVDPHQL,1)²*UXQQNXUVLREMHNWRULHQWHUWSURJUDPPHULQJ (NVDPHQVGDJ )UHGDJGHVHPEHU 7LGIRUHNVDPHQ ² 2SSJDYHVHWWHWHUSnVLGHU%RNPnO 9HGOHJJ VWN 7LOODWWHKMHOSHPLGOHU$OOHWU\NWHRJVNUHYQH Kontroller at oppgavesettet er fullstendig (6 sider). Dette oppgavesettet gjelder også for eksamen i IN105. Du skal ikke løse alle oppgavene i settet. I byen Uqbal i Ruritania er det en frisørsalong som eies av Terje Tupé. Terje har bestandig håndtert både kunder, ansatte og varebestillinger manuelt, men har nå begynt å tenke på å lage et datasystem, som håndterer i hvert fall en del av tingene. Når en kunde ønsker å bestille en time hos frisøren, slår frisøren opp i en bok på ønsket dato, og finner en ledig time som passer, eventuelt hos en bestemt frisør. Navnet til kunden og kanskje et telefonnummer blir skrevet inn i avtaleboka. Hvis det ikke er noen ledig time som passer for kunden denne dagen vil man se i boka for andre passende datoer og finne en time en annen dag. Salongen har åpent fra 8.00 til 18.00, men den siste timen som kan bestilles er 17.30. Det finnes 20 tidspunkter hvor en kunde kan bestille timer i løpet av en dag. For enkelthets skyld antar vi at det til enhver tid er fem ulike frisører på jobb. Tidligere var det ikke mange frisører i Uqbal og de som var der hadde nok å gjøre. De siste årene derimot har flere flyttet til byen og flere frisører har etablert seg. En av grunnene til at Terje Tupé nå ønsker å legge om til data er at han vil prøve å knytte kundene sterkere til seg ved å lage et kundeoppfølgingssystem. Han ønsker bl.a. å registrere kundene og legge opp til et system hvor de får hver tiende behandling gratis. I dag har Terje et manuelt system for å håndtere lønnsberegningen for sine ansatte, men nå som han allikevel skal investere i informasjonsteknologi vil han gjerne automatisere denne delen også. Han har fem frisører som er fast ansatt. I tillegg er det tre vikarer som bare jobber av og til, f.eks. dersom noen er syke eller hvis det er ekstra mye å gjøre en dag. De som er fast ansatt har fast månedslønn, vikarene er timebetalt.
Eksamensoppgaven: Det Terje ønsker er å få laget er et system som holder orden på kundene hans, registrerer timebestillinger og beregner lønn for de ansatte. La oss først se på kunderegisteret og timebestillingene. Det han ønsker å lagre om hver kunde er navn, adresse, telefonnummer og hvor mange behandlinger de har hatt. I Ruritania har de en navneregel som sier at to personer ikke kan ha samme navn, derfor behøver du ikke å registrere fødselsnummer. Når kunden ringer eller kommer for å bestille time skal dette registreres på datamaskinen. Kunden sier hvilken dato hun ønsker time og den som tar imot bestillingen slår inn datoen og får opp denne datoens timeplan på skjermen. Den skal se omtrent slik ut: Tid/Frisør 1) Janne H. 2) Aisha K. 3) Eigil S. 4) Maria H. 5) Hans Petter N. 1) 8.00 Jonas Nilsen 2) 8.30 Randi Jensen 3) 9.00 Amalie Rud 4) 9.30 5) 10.00 Heidi Ås.................. 18) 16.30 19) 17.00 20) 17.30 Når en time er opptatt, står det et kundenavn i tabellen ved siden av tidspunktet og under et frisørnavn. Anta at alle de tomme cellene i tabellen er ledige timer. Hvis en av de ledige timene passer for kunden, registreres kundens navn på denne timen. Hvis ingen av de ledige timene passer, finner man en ny dato for å se om det er noen passende timer der osv. Når bestillingen gjøres skal systemet sjekke om dette er den tiende behandlingen, og i tilfelle skrive en melding på skjermen om at denne behandlingen er gratis. Det må også være mulig å avbestille en time. La oss her se på den delen av systemet som skal sørge for lønn til de ansatte. For alle ansatte skal det registreres fødselsnummer, navn, adresse og telefonnummer. For de fast ansatte registreres årslønn. For vikarene registreres antall timer og timelønn. Anta at innlesingen fra fil ved programstart sørger for at alle lønnsrelaterte variabler har en fornuftig verdi, du trenger altså ikke sette verdier for de ansattes lønn. (Ikke tenk på timeregistrering eller lignende i sammenheng med avtaleboka og timebestilling). Når vi skal beregne lønn for de ansatte hver måned forenkler vi dette noe, siden vi ikke tar
hensyn til feriepenger, skatt eller lignende. For en fast ansatt er månedslønnen årslønn/12 og for vikarene er månedslønnen antall timer * timelønn. De fast ansatte har ikke lov til å jobbe overtid. Noen presiseringer: Du skal ikke lage et fullstendig program her på eksamen. Dersom du finner ut at noe i oppgaveteksten er uklart, gjør de antagelsene du finner nødvendige og fornuftige og skriv dette i besvarelsen. I et reelt system må selvfølgelig data lagres på fil, slik at informasjon ikke går tapt når programmet avsluttes. Her på eksamen trenger du ikke å tenke på dette. Vi antar at data blir lest fra fil og skrevet til fil når det er nødvendig. Du kan ta utgangspunkt i programskjelettet i vedlegg A og bygge videre på dette. Når du skriver en metode må du også angi hvor denne metoden skal ligge (hvilken klasse den hører til). Ofte vil det være fornuftig å dele opp en oppgave slik at flere klasser samarbeider. Angi i tilfelle hvor de enkelte del-metoder ligger. OBS: Du skal ikke løse alle oppgaven i dette oppgavesettet. Alle skal løse oppgavene 1, 2, 3, 4 og 9, men du kan velge ut to (2) av disse oppgavene: 5,6,7 og 8. Hver oppgave i oppgavesettet teller omtrent like mye. Oppgave 1 a) Deklarer klassen Kunde. b) Bestem en passende datasstruktur for å holde orden på alle faste kunder. Beskriv denne med ord, begrunn valget ditt og angi hvor den skal ligge. c) Lag en meny/ordreløkke for systemet. Valgene skal være: 1. Registrere ny timebestilling 2. Beregn månedslønn for alle ansatte 3. Avbestill time 4. Avslutt I denne oppgaven skal du bare navngi de metodene som kalles ved hvert valg, ikke programmere dem (det kommer eventuelt senere i oppgaven). Hvor vil du legge denne menyløkka? Oppgave 2 Bestem hvordan du vil representere frisørsalongens avtalebok i systemet. Det er en samling med slike timeplaner som er vist på side 2, en for hver dag. Programmet skal kunne vise timeplanen for en vilkårlig dato. Vi tar altså ikke hensyn til at salongen kan være stengt på søn- og helligdager. Oppgave 3 Programmer metoden for å registrere en timebestilling; denne metoden skal du kalle regnytimebestilling(). Dersom kunden ikke er registrert frå før må dette gjøres. Programmet skal spørre etter datoen kunden vil ha time. Du kan her anta at metoden vistimeplan(string dato) finnes. Den skriver ut en tilsvarende timeplan som er vist på side 2 til skjerm, for den datoen du sender med i kallet. I denne oppgaven kan du gå ut fra at kunden finner en passende time denne datoen (men se også oppgave 6). En enkel måte
å gjøre registreringen på er at brukeren skriver inn nummeret på timen og nummeret på frisøren som tilsvarer timen som kunden vil ha. Du kan også gå ut fra at all behandling tar en halv time. Oppgave 4 Skisser hvilke klasser og datastrukturer (tabeller, nøkkeltabeller etc.) programmet vil inneholde. Ta med både de klasser som du selv deklarerer og de som er gitt i oppgaven (som du ikke programmerer selv, dersom du velger å bruke programskjelettet i vedlegg A). Du behøver ikke å ta med en klasses metoder, men tegn variablene (attributtene). (Når det gjelder strukturen som kreves i oppgave 5, tegner du denne bare dersom du velger å løse denne oppgaven). VELG TO AV DE FIRE NESTE OPPGAVENE: VALGFRI: Oppgave 5 Programmer en metode som beregner månedslønn for alle de ansatte (menyvalg nr. 2). Først må du gjøre de nødvendige deklarasjonene for å få en passende datastruktur. Den skal skrive ut til skjerm en liste der hver ansatts navn og månedslønn skrives ut (en linje for hver ansatt). Til slutt skal summen av alle de enkeltes lønnsutbetalinger, altså total lønnsutbetaling denne måned skrives ut på en egen linje. Husk: du kan anta at alle lønnsrelaterte variabler har en fornuftig verdi når programmet starter. Du behøver altså ikke sette verdier for de ansattes lønn, bare programmere metoden som bruker og behandler disse verdiene. VALGFRI: Oppgave 6 I bestillingsprosedyren slik den er beskrevet i oppgave 3, velger man en dato og kunden må finne en passende time denne datoen. Modifiser denne metoden slik at kunden kan ombestemme seg med hensyn på dato, hvis det ikke skulle være en time som passet i løpet av den dagen man først valgte. Denne metoden skal også kunne bestille behandlinger som tar lengre tid enn en halv time. Dvs. samme kunde reserverer to eller flere halve timer. (Du må gjerne legge denne varianten inn i besvarelsen til oppgave 3 i stedet for den enkleste løsningen). VALGFRI: Oppgave 7 Skriv en metode for å avbestille en time (menyvalg nr. 3). Anta at kunden husker datoen for timen. Ved å bruke metoden vistimeplan(string dato) kan den som foretar avbestillingen få opp datoens timeplan på skjermen og skrive inn den informasjonen som trenges for å avbestille timen. VALGFRI: Oppgave 8 Programmer metoden vistimeplan(string dato) som ble brukt i oppgave 3 og 7. Denne metoden skriver ut timeplanen for en bestemt dato. Formatet skal ligne det som er vist på side 2, men behøver ikke se akkurat sånn ut, du trenger for eksempel ikke ha med streker som skiller cellene fra hverandre.
Denne oppgaven skal alle svare på: Oppgave 9 Terje ser straks mulighetene her til å rangere sine frisører. Det vil være en enkel sak for ham å finne ut hvor mye av tiden en ansatt er sysselsatt med kunder, dette vil han for eksempel kunne bruke til lønnsjusteringer, si opp uproduktive frisører, sette opp lister over ukens mest populære osv. Har du noen kommentar til om det skulle være noen problemer med eller begrensninger på en slik bruk av informasjonen?
VEDLEGG A class FrisorSystemMain static public void main (String[] args) FrisørSystem system = new FrisørSystem(); class FrisorSystem //ofte kalt Kontroll-klassen Register reg = new Register(); FrisorSystem() // her kommer det eventuelt mer. // her kommer det eventuelt mer class Register // ofte kalt Datamodell-klassen. // Her legges datastrukturene og metoder som opererer på disse // Evt. flere klasser