Eksamen. Objekt-orientert programmering 03HBIND*, 03HBINFA, 03HBMETEA



Like dokumenter
Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

Eksamen. Objekt-orientert programmering 04HBIND*, 04HBINFA, 04HBMETEA

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Eksamen. Objekt-orientert programmering

KONTINUASJONSEKSAMEN

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

KONTINUASJONSEKSAMEN

Kontinuasjonseksamensoppgave i IMT1082 Objekt-orientert programmering

E K S A M E N 96HINDA / 96HINDE (1 AA / AE)

Kontinuasjonseksamen

Høgskolen i Gjøvik. Eksamen. Objekt-orientert programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB

Kontinuasjonseksamen

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Eksamensoppgave i IMT1082 Objekt-orientert programmering

Eksamen. Objekt-orientert programmering. EKSAMENSDATO: 25. mai HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB TID: Høgskolen i Gjøvik

Eksamen 00HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB

K O N T I N U A S J O N S E K S A M E N

Kontinuasjonseksamen

E K S A M E N. Grunnleggende datakunnskap og programmering 99HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB / 99HINGA

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Eksamensoppgave i IMT1082 Objekt-orientert programmering

GJØVIK INGENIØRHØGSKOLE

Kontinuasjonseksamen

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Eksamen. Objekt-orientert programmering

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

Kontinuasjonseksamen

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

Kontinuasjonseksamen

Kontinuasjonseksamen

Kontinuasjonseksamensoppgave i IMT1031(F) Grunnleggende programmering

Grunnleggende datakunnskap, programmering og datastrukturer 97HINDA / 97HINDB / 97HDMUA

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

Høgskolen i Gjøvik E K S A M E N. FAGLÆRER: Frode Haug KLASSE: 1 AA / AE

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 8. august 1995 TID:

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

E K S A M E N. Grunnleggende programmering 04HBIND*, 04HBINE*, 04HBINFA, 04HBMETEA, 04HBGEOA. ANTALL SIDER UTLEVERT: 8 (inkludert denne forside)

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

GJØVIK INGENIØRHØGSKOLE

Eksamen 01HIND* / 01HINE* / 01HDMU*

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

UNIVERSITETET I OSLO

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

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

HØYSKOLEN I OSLO, AVDELING FOR INGENIØRUTDANNING

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

EKSAMEN. Algoritmiske metoder I KLASSE: 97HINDA / 97HINDB ( 2DA / 2DB )

HØGSKOLEN I SØR-TRØNDELAG

Transkript:

Høgskolen i Gjøvik Avdeling for teknologi Eksamen FAGNAVN: FAGNUMMER: Objekt-orientert programmering IMT1081 / L183A EKSAMENSDATO: 27. mai 2004 KLASSE(R): 03HBIND*, 03HBINFA, 03HBMETEA TID: 09.00-13.00 FAGLÆRER: Frode Haug ANTALL SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 9 (inkludert denne forside) Alle trykte og skrevne. Kontroller at alle oppgavearkene er til stede. Innføring med penn, eventuelt trykkblyant som gir gjennomslag. Pass på så du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag når flere ark ligger oppå hverandre). Ved innlevering skilles hvit og gul besvarelse, som legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten til klagefristen er over. Ikke skriv noe av din besvarelse på oppgavearkene. Men, i oppgavetekst der du skal fylle ut svar i tegning/tabell/kurve, skal selvsagt dette innleveres sammen med hvit besvarelse. Husk kandidatnummer på alle ark. Ta vare på dette nummeret til sensuren faller.

NB: Oppgave 1a, 1b, 1c og 2 er totalt uavhengige og kan derfor løses separat. Oppgave 1 (30%) a) Det nedenfor stående programmet var det ønskelig at gav følgende utskrift: Dato: 1.januar (Nyttårsdag, fridag) Dato: 21.januar (H.M.Ingrid Alexandra) Dato: 21.februar (H.M.Kong Harald V) Dato: xx.mars/april (1.påskedag, fridag) Dato: 8.mai (Frigjøringsdagen 1945) Dato: 17.mai (Grunnlovsdagen, fridag) Men, i koden er det fem feil av typen syntaktiske (som kompilatoren reagerer på) og/eller semantiske (logiske, som gjør at programmet ikke fungerer som ønsket). Hvilke? NB: Tallene helt til venstre på hver linje er ikke en del av koden, men kun ment som linjenummer, slik at du enklere kan henvise til hvor feilene er å finne. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int STRLEN = 15; 5 const int ANTDAG = 17; 6 class Flaggdag { 7 private: 8 char dato[strlen]; 9 char beskr[strlen*2]; 10 bool fridag; 11 12 Flaggdag(char d[], char b[], bool f) 13 { strcpy(dato, d); strcpy(beskr, b); fridag = f; 14 void display() 15 { cout << "Dato: " << dato << " (" 16 << beskr << (fridag? ", fridag " : "") 17 << "))\n"; 18 ; 19 Flaggdag* fd[antdag]; 20 int main() { 21 int i; 22 fd[0] = new Flaggdag("1.januar", "Nyttårsdag", true); 23 fd[1] = new Flaggdag("21.januar", "H.M.Ingrid Alexandra", false); 24 fd[3] = new Flaggdag("21.februar", "H.M.Kong Harald V", false); 25 fd[4] = new Flaggdag("xx.mars/april", "1.påskedag, true); 26 fd[6] = new Flaggdag("8.mai", "Frigjøringsdagen 1945", false); 27 fd[7] = new Flaggdag("17.mai", "Grunnlovsdagen", true); 28 for (i = 0; i < ANTDAG; i++) 29 if (fd) fd[i]->display(); 30 cout << \n\n ; 31 return 0; 32 2

b) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> using namespace std; char txt[] = "FROMASJ-GELE-PUDDING-KREM" ; int main() { int i, j = 13; char* p = &txt[22]; cout << p << '\n'; for (i = j-8; i < j; i += 4) cout << *(p-i) << '\n'; txt[3] = '\0'; p = &txt[0]; cout << p << '\n'; txt[3] = 'F'; j = 7; p += ++j; while (j <= 16) { cout << *(p+j) << ' '; j += 7; return 0; 3

c) Hva blir utskriften fra følgende program (litt hjelp: det blir 5 linjer): #include <iostream> #include <cstring> using namespace std; class A { protected: int a; A(int n) { a = n; virtual void display() = 0; virtual bool operator == (int n) { return (a == n); ; class B : public A { private: char b; B(int n, char ch) : A(n) { b = ch; void display() { cout << a << ' ' << b; ; class C : public A { private: char c[10]; C(int n, char t[]) : A(n) { strcpy(c, t); void display() { cout << a << ' ' << c; bool operator == (char* t) { return (!strcmp(c, t)); void operator - (C cc) { cout << c << '-' << cc.c << " " << a << '-' << cc.a; ; int main() { A* arr[3]; C *c1, *c2; arr[0] = new B(27,'F'); arr[1] = new C(2, "VIF"); arr[2] = new C(7, "SIL"); c1 = (C*) arr[1]; c2 = (C*) arr[2]; arr[2]->display(); arr[0]->display(); arr[1]->display(); cout << ' ' << (*arr[0] == 7) << '\n'; cout << ' ' << (*c1 == "SIL") << '\n'; cout << ' ' << (*c2 == "sil") << '\n'; cout << (*((C*) arr[2]) == "SIL") << '\n'; *c2 - *c1; cout << '\n'; return 0; 4

Oppgave 2 (70%) NB: Les hele teksten for denne oppgaven nøye, før du begynner å besvare noe som helst. Studer vedlegg 1 (spesielt const er, klassene (deres data og funksjoner), global variabel, skriv_meny() og hovedprogrammet), slik at du får klarhet i hvordan dette skal fungere. Innledning Du skal i denne eksamensoppgaven lage et lite program som holder orden på adgangskortene (til fornøyelsesparker, museumer, gallerier, dyreparker, treningsstudioer, badeanlegg o.l.) for ulike enheter (familie/par/single) og de individene/personene som utgjør den enkelte enhet. Alle klasser, det de arver, alle datamedlemmer og alle prototyper for medlemsfunksjoner er komplett og fullstendig deklarert/definert i vedlegget. Din oppgave blir kun å skrive innmaten til noen hovedfunksjoner og medlemsfunksjonene inni de ulike klassene. Datastrukturen og ID-nummerering av enheter/individer Datastrukturen består (som du ser i vedlegg 1) av de to listene enhetene og individene. I disse ligger det henholdsvis Enhet -objekter og Individ -objekter. Begge er sortert på objektets numeriske ID (se rett nedenfor). NB: Datastrukturen er altså ikke en liste med Enhet -objekter der hver av disse inneholder en sideliste eller en array med dets tilhørende Individ -objekter. Hver nye enhet skal programmet automatisk nummerere f.o.m. 1.000.001 og fortløpende oppover til 9.999.999. (Denne øvre grensen er så høy at du ikke trenger å sjekke mot den noe sted i programmet.) Et individ har alltid et nummer mellom 100.000.101 og 999.999.999. Individenes nummer blir laget ut fra den enheten den tilhører sitt nummer ganget med 100 og tillagt individets fortløpende nummer fra 1 til 99. Dvs. individnummer = enhetsnummer*100 + et tall mellom 1 og 99. Eks: Enheten 1.000.004 har tre individer, med numrene: 100.000.401, 100.000.402 og 100.000.403. (NB: Punktumene i alle tallene ovenfor er selvsagt ikke med som en del av input til eller output fra int ene i programmet.) Oppgaven A) Skriv innmaten til funksjonen void nye_kort() og den første constructoren i de to klassene. Funksjonen leser først inn antall individer i den nye enheten. Dette skal være et tall mellom 0 og 99. Om tallet er 0, så avsluttes bare funksjonen. I motsatt fall så opprettes en ny enhet (dets constructor kjøres), med sin automatisk genererte ID og den legges inn i aktuell liste. Funksjonen oppretter også det angitte antall nye individer (deres constructorer kjøres), også med sine automatiske ID er og disse legges inn i aktuell liste. Constructorene skal kun sørge for at alle klassens data blir initiert, enten vha. parametrene som kommer inn eller ved å spørre brukeren om aktuelle verdier. ant_brukt i Individ er den eneste som direkte bare settes til 0 (null). B) Skriv innmaten til funksjonen void tilleggskort() Funksjonen leser først inn et nummer (ID) for en enhet. Om denne enheten ikke finnes, så kommer det en melding om det og funksjonen avsluttes. I motsatt fall så tas enheten ut av listen, dets ant_individ både økes med 1 og avleses (vha. oek_ant()) før det legges tilbake i listen igjen. Ett nytt individ opprettes (med automatisk generert ID) og legges inn i aktuell liste. Kortet til vedkommende får altså samme utløpsdato om resten av enheten, selv om dette i praksis kan skje lenge etter at de andre i enheten har fått registrert sine kort. NB: Du trenger ikke å sjekke på om grensen for 99 individer i en enhet overskrides. 5

C) Skriv innmaten til funksjonen void datautskrift() og void display() -funksjonene i de to klassene. Funksjonen datautskrift() spør brukeren etter et tall. Om dette er et enhets-nummer (i dets aktuelle intervall), så display es alle data om enheten inkludert data om alle dets tilhørende individer. Er tallet derimot et individ-nummer, så display es kun alle data om dette individet. Er tallet verken et gyldig enhets- eller individ-nummer så kommer feilmeldinger om dette. D) Skriv innmaten til funksjonen void kortbruk() Funksjonen spør brukeren etter et tall. Om dette er et enhets-nummer (i dets aktuelle intervall), så tas enheten ut av listen, dets ant_individ avleses (vha. hent_ant()) før det legges tilbake igjen. Alle enhetens individer blir så hentet ut av listen, hver sin ant_brukt økes med 1 (vha. operator ++()) før de legges tilbake i listen igjen. Om tallet derimot er et individ-nummer så hentes det aktuelle objektet ut av listen, dets ant_brukt økes med 1 og det legges tilbake igjen. Her gjelder det også at om tallet verken er et gyldig enhets- eller individ-nummer så kommer det feilmeldinger om dette. NB: Du trenger ikke å sjekke om et korts utlopsdato er overskredet. Vi regner med at kommandoen F (jfr. oppgave F nedenfor) utføres daglig. E) Skriv innmaten til funksjonen void les_fra_fil() og og den andre constructoren i de to klassene. Filen KORTENE.DTA inneholder data om alle enhetene og individene. Et konkret eksempel på denne er å finne i vedlegg 2. Aller først ligger det et singelt tall som forteller om hvor langt vi har kommet i nummereringen av enheter. Så følger poster med data om de ulike enhetene og deres tilhørende individer. En post er bygd opp av: enhetens nummer, dets etternavn, dets adresse, dets utløpsdato og antall individer i enheten. Så kommer det en linje pr.individ, bestående av: dets nummer, antall ganger kortet er brukt og til slutt dets fornavn. Funksjonen og de to constructorene skal sammen sørge for at hele datastrukturen leses inn fra denne filen. (NB: Eksamensoppgaven inneholder ikke en tilsvarende skriv_til_fil().) F) Skriv innmaten til funksjonene void fjern_utgaatte() og int Enhet:: fjern(int d) Funksjonen fjern_utgaatte() spør brukeren først om en dato (på formatet ååååmmdd du trenger ikke å sjekke at dette er korrekt). Deretter gås det manuelt gjennom alle enhetene. De som har utlopsdato før/eldre enn dette skal fjernes/slettes fra datastrukturen og memory. Alle individene som tilhører vedkommende enhet skal også slettes (i funksjonen fjern(int d)). Denne returnerer antall individ som ble fjernet (evt. 0 om kortene ikke er utgåtte). Funksjonen fjern_utgaatte() skriver til slutt ut totalt antall enheter og individer som har blitt slettet. NB: Fjerningen gjøres her selvsagt vel drastisk: i stedet for at dataene blir liggende og at enheten settes inaktiv, så fjernes alle dataene. Alle disse må ved fornyelse skrives inn igjen på nytt. Men, for å forenkle en del annet i denne eksamensoppgaven så gjør vi det slik nå. Annet (klargjørende?): Du skal bruke LISTTOOL ifm. løsningen av denne oppgaven. Alle i en enhet har samme etternavn og adresse. En enhet kan også bestå av kun en person. Et kort er ikke sesongkort for fast nummerert plass på et arrangement (idrettsarena, konserthus o.l.) Vi forutsetter at brukeren alltid skriver korrekte numeriske verdier (spesielt utløpsdatos format). Gjør dine egne forutsetninger og presiseringer av oppgaven, dersom du skulle finne dette nødvendig. Gjør i så fall klart rede for disse i starten av din besvarelse av oppgaven. Lykke til kort og godt! frode@haug.com 6

Vedlegg 1: Halvferdig programkode #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include "listtool.h" // INCLUDE: // cin, cout // ifstream // strcpy, strlen // toupper // Ulike "verktøy" fra "Listtool". using namespace std; // CONST: const int STRLEN = 80; // Max. lengde for en tekststreng. const int EN_MILLION = 1000000; // En million. // KLASSER: class Enhet : public Num_element { private: // Den arvede "number" brukes som ID for enheten ("familien") char* etternavn; char* adresse; int ant_individ; // Antall individer i enheten. int utlopsdato; // Kortenes utløpsdato (på formen ååååmmdd). Enhet(int nr, int ant); Enhet(int nr, istream* inn); ~Enhet() { delete [] etternavn; delete [] adresse; void display(); int oek_ant() { return ++ant_individ; int hent_ant() { return ant_individ; int fjern(int d); ; class Individ : public Num_element { private: // Den arvede "number" brukes som ID for individet. char* fornavn; int ant_brukt; // Antall ganger individet har brukt kortet. Individ(int nr); Individ(int nr, istream* inn); ~Individ() { delete [] fornavn; void display() { /* Oppgave 2C: Skriv innmaten */ void operator ++() { ++ant_brukt; ; void skriv_meny(); char les_kommando(); void nye_kort(); void tilleggskort(); void datautskrift(); void kortbruk(); void les_fra_fil(); void fjern_utgaatte(); // DEKLARASJON AV FUNKSJONER: // Oppgave 2A // Oppgave 2B // Oppgave 2C // Oppgave 2D // Oppgave 2E // Oppgave 2F // GLOBAL VARIBEL: List* enhetene; // Liste med alle enhetene (familiene). List* individene; // Liste med alle enkelt-individene. int e_nr = EN_MILLION; // Initierer enhetsnr. til nr.1 million. 7

int main() { // HOVEDPROGRAM: char kommando; // Brukerens valg/ønske. enhetene = new List(Sorted); // Initierer tomme lister: individene = new List(Sorted); les_fra_fil(); // Oppgave 2E skriv_meny(); // Skriver aktuelle valg/muligheter. kommando = les_kommando(); // Leser brukerens valg. while (kommando!= 'Q') { switch(kommando) { case 'N': nye_kort(); break; // Oppgave 2A case 'T': tilleggskort(); break; // Oppgave 2B case 'D': datautskrift(); break; // Oppgave 2C case 'K': kortbruk(); break; // Oppgave 2D case 'F': fjern_utgaatte(); break; // Oppgave 2F default: skriv_meny(); break; kommando = les_kommando(); // Leser brukerens valg. return 0; // DEFINISJON AV MEDLEMS-FUNKSJONER: // Constructor som leser inn medlemsdata: Enhet::Enhet(int nr, int ant) : Num_element(nr) { // Oppgave 2A: Skriv innmaten // Constructor som leser inn medlemsdata fra fil: Enhet::Enhet(int nr, istream* inn) : Num_element(nr) { // Oppgave 2E: Skriv innmaten void Enhet::display() { // Oppgave 2C: Skriv innmaten int Enhet::fjern(int d) { // Oppgave 2F: Skriv innmaten // Skriver enheten og dets individer: // Fjerner evt. alle tilhørende individer: // Constructor som leser inn medlemsdata: Individ::Individ(int nr) : Num_element(nr) { // Oppgave 2A: Skriv innmaten // Constructor som leser inn medlemsdata fra fil: Individ::Individ(int nr, istream* inn) : Num_element(nr) { // Oppgave 2E: Skriv innmaten // DEFINISJON AV FUNKSJONER: void skriv_meny() { // Skriver meny/lovlige kommandoer til bruker: cout << "\n\n\nfølgende kommandoer er lovlig:\n"; cout << "\tn - Nye kort (for en individene i en enhet)\n"; cout << "\tt - Tilleggskort (nytt individ i eksisterende enhet)\n"; cout << "\td - skriv/display data om individ eller enhet\n"; cout << "\tk - bruk av Kort for individer eller en HEL enhet\n"; cout << "\tf - Fjern alle utgåtte kort (individer/enheter)\n"; cout << "\tq - Quit / avslutt\n"; char les_kommando() { // Leser og returnerer ETT upcaset tegn. char ch; cout << "\n\nkommando: "; cin >> ch; cin.ignore(); return (toupper(ch)); 8

void nye_kort() { // Oppgave 2A: Skriv innmaten void tilleggskort() { // Nye kort utstedes til ALLE i en ny enhet: // Nytt kort utstedes til ett nytt individ i // Oppgave 2B: Skriv innmaten // eksisterende enhet: void datautskrift() { // Oppgave 2C: Skriv innmaten void kortbruk() { // Oppgave 2D: Skriv innmaten void les_fra_fil() { // Oppgave 2E: Skriv innmaten void fjern_utgaatte() { // Oppgave 2F: Skriv innmaten // Skriver ALLE data om EN enhet/ett individ: // Teller opp at ETT/flere kort er brukt EN gang: // Leser inn ALLE data om ALT fra EN fil: // Fjerner alle kort før en gitt dato: Vedlegg 2: Eksempel på filen kortene.dta 1000003 1000001 Andersen Arnljot Abresgate 1, 1111 Askim 20010101 3 100000101 11 Alfhild 100000102 12 Arnstein 100000103 13 Asbjørn 1000002 Bernhoft Borger Birgersvei 2, 2222 Bodø 20020202 5 100000201 21 Berit 100000202 22 Birger 100000203 23 Borghild 100000204 24 Burre 100000205 25 Buster 1000003 Carlsen Camilla Collets vei 3, 3333 Charlottenberg 20030303 4 100000301 31 Cato 100000302 32 Cecilie 100000303 33 Connie 100000304 34 Curt 9