eget dokument - no

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