Obligatorisk oppgave nr.2 i ”Objekt-orientert programmering”, våren 2017 Frist: Torsdag 2.mars 2017 kl.11.00 Sett deg inn i/studer nøye filen OBLIG2.TPL (denne filen skal brukes). Innledning: Du skal lage et program som holder orden på ulike ansatte i en bedrift/organisasjon. I forbindelse med hver person skal det lagres informasjon om vedkommendes barn og partner (ektefelle/samboer/kjæreste). Alt dette lagres på en fil. Datastrukturen: Vi har følgende klasser, datamedlemmer og klassehierarki (arvetre): Person char* fornavn char fodselsdato[7] Barn Voksen Kjonn kjonn char* etternavn Partner int telefon1 int telefon2 Ansatt int nr int antBarn char* adresse Partner* partner Barn* barn[21] Vi har typen: enum Kjonn { jente, gutt }; ”fodselsdato” er på formen: ååmmdd ”telefon1” og ”telefon2” er f.eks. jobb- og mobiltelefon. Datastrukturen består av: Ansatt* ansatte[101] ; int sisteBrukt; Dvs. programmets datastruktur består av en array med pekere til ”Ansatt”-objekter, der ”sisteBrukt” av disse for tiden peker til et reelt/virkelig objekt. Et ”Ansatt”-objekt har inni seg pekere til ett ”Partner”-objekt og 20 ”Barn”-objekter, der ”antBarn” av disse for tiden er i bruk. Både ”Person” og ”Voksen” er altså abstrakte baseklasser. 1 Oppgaven: Du skal lage et program som har følgende muligheter/menyvalg: 1. N - Legge inn en ny ansatt Dvs. ta i bruk (om mulig) neste peker i arrayen ”ansatte” og les inn alle aktuelle data om vedkommende. Arrayen ”ansatte” holdes hele tiden sortert på ”nr”, dvs. nye smettes inn (vent gjerne til slutt med å kode/lage dette). Når det opprettes en ny ansatt, skal det ikke leses inn data om partneren og (alle) barna – til dette har vi kommandoene ’P’ og ’B’. 2. P - Endre data om en partner Om et gitt ansatt-nummer finnes, så slettes, nyopprettes eller byttes vedkommendes partner. 3. B - Legge til/inn et nytt barn hos en ansatt Om et gitt ansatt-nummer finnes, så legges (om mulig) ett nytt barn til hos vedkommende. 4. D - Skrive ut alle data om en ansatt Om et gitt ansatt-nummer finnes, så skrives alle dataene om vedkommende ut på skjermen. 5. A – Skrive ut numrene til alle ansatte som har barn født i et gitt år Det leses først inn et fire-sifret årstall. Numrene til alle ansatte som har barn født i dette året skrives så ut til skjermen. 6. F – Fjern/slett en ansatt Om et gitt ansatt-nummer finnes, så tas vedkommende ut av datastrukturen og slettes. For å tette igjen ’hullet’, så flyttes alle de etterfølgende ”ansatte” ned ett hakk i arrayen. 7. Lese datastrukturen fra fil I starten av programmet leses (automatisk) hele datastrukturen inn fra fil. Annet: Inni de fleste klassene skal du altså lage: 1. en constructorer som leser inn data om objektet fra tastaturet 2. en constructorer som leser inn data om objektet fra fil (medsendes som parameter) 3. destructor som frigir allokert memory 4. en funksjon som skriver objektets data på skjermen 5. en funksjon som skriver objektets data til fil (filobjekt medsendes som parameter) Inni klassene ”Person” og ”Ansatt” vil det i tillegg bl.a. være aktuelt å lage funksjoner som overloader operatorene ”==” og/eller ”>” ifm. å spørre et objekt om dets fødselsår og ansattnummer. Pass på at arrayene ”ansatte” og ”barn” ikke sprenges. Alle de ansattes numre (”nr”) skal være unike/entydige, og skrives inn av brukeren (dvs. ikke bli automatisk generert/telt opp). ”nr” har ingen sammenheng med objektets indeks i arrayen ”ansatte”, og den skal forbli uendret under hele kjøringen av programmet. Hver gang det er foretatt endringer i datastrukturen (ny/fjern ansatt, endring av partner og nytt barn) så skrives datastrukturen til fil. NB: Dette lagres på en fil. Bestem formatet selv. Innlevering: Følgende skal leveres: 1) Utskrift av programmet 2) Filens format og eksempel på utseende 3) Egne presiseringer/forutsetninger (om du har måttet foreta slike) Generelle krav til (obligatoriske) øvingsoppgaver: Se: http://folk.ntnu.no/frh/grprog/obliger/index.html#Gen_reg 2
© Copyright 2024