(Denne oppgaven er hentet fra ordinær eksamen 2014, oppgave nr. 2. Vi går gjennom de fire første deloppgavene, som handler om filbehandling og structs. Oppgaveteksten er gjengitt her for enkelhets skyld.)
Oppgave 2: Programmering Fallskjerm
(I denne oppgaven kan det være gunstig å kalle funksjoner som du har laget i tidligere deloppgaver. Selv om du ikke har fått til den tidligere oppgaven, kan du kalle funksjonen derfra med antagelse om at den virker som spesifisert i oppgaveteksten.)
NTNU fallskjermklubb (NTNU-FSK) trenger hjelp til å lage et nytt opplærings- og administrasjonsprogram. De har bedt firmaet ditt (ITGK) om hjelp, og du har fått jobben med å programmere funksjoner som beskrevet i deloppgavene under.
Vi benytter en litt forenklet versjon av jordens fysiske lover: En fallskjermhopper faller (med konstant/gjennomsnittlig hastighet) 100 fot pr. sekund, de 10 første sekundene, og deretter med konstant topphastighet på 200 fot pr. sekund til skjermen må åpnes i 300 fots høyde (se figur 1). Hvis man mot normalt hopper ut under 3000 fot må skjermen utløses umiddelbart (etter 0 sekunder)
Medlemsdatabasen til NTNU-FSK ligger lagret på en fil members.txt
med følgende format:
NAVN;IDNR;VEKT;SKJERMST
Eksempel på innholdet i filen:
Frank Stank;D-49334;75;120 Bjarne Stor;C-49335;95;150 Dumbo Ear;D-50105;450;750 Peter Pan;A-12345;30;100
Oppgave 2a
Lag en funksjon inputPerson
som leser inn navn, id, vekt og skjermstørrelse fra tastaturet, og returnerer en struct person
med riktige verdier i følgende felt: name, id, weight, size. Merk at "name" og "id" er tekststrenger, mens "weight" og "size" er tall. De kan anta at bruker skriver inn lovlige verdier.
Eksempel på kjøring (tekst med understrekning skrives inn av brukeren):
Oppgave 2b
Lag en funksjon readDbFile
som leser inn hele medlemsbasen i en struct-vektor, med følgende feltnavn: "name", "id", "weight" og "size". "name" og "id" skal lagres som tekst, mens "weight" og "size" skal lagres som tall. Du kan anta at filen finner og at det ikke oppstår noen problemer ved åpning/lukking, og at filen ikke inneholder noen blanke eller ugyldige linjer. Funksjonen skal ha inn-parameter filename
og retur-verdi db
.
Eksempel på kjøring:
Oppgave 2c
Lag en funksjon printMemberList
som skriver ut innholdet i struct-vektoren db
(som forklart ovenfor) på skjermen med overskrifter og format som i følgende eksempel på kjøring:
Det skal være avsatt 15 tegn til NAVN, 9 tegn til ID-NR, 5 tegn/siffer til VEKT og 4 tegn/siffer til SKJERMSTØRRELSE. Du kan anta at databasen ikke har innhold som går utover de avsatte antall tegn for hvert felt. Feltene skal være høyrejusterte. Hvis verdier trenger mindre plass enn antallet avsatte tegn, skal resten av feltbredden fylles av blanke.
Inn-parameter db
, ingen retur-verdi.
Oppgave 2d
Lag en funksjon addPerson
med inn-parametere filename
(der databasen er lagret). Funksjonen skal be bruker skrive inn informasjon om en person beskrevet med navn, id, vekt og skjermstørrelse, og lagre dette i variabelen person
. Funksjonen skal så lese inn databasen som ligger lagret i filen filename
til datastrukturen (struct-vektor db
). Deretter skal opplysningene om den nye person legges til i db
og i filen filename
. Bruk riktig format: se "Eksempel på innholdet i filen" ved figur 1 (se side 6). Returverdi db
skal inneholde den oppdaterte databasen.
Du trenger ikke å skrive kode for feilhåndtering i forbindelse med å lese eller skrive fra/til fil.
Eksempel på kjøring (Endringen er markert med fet skrift):
Videoforklaring (50:37)
Del 1 (5:36) | Del 2 (6:38) | Del 3 (8:34) |
---|---|---|
Oppgaveintroduksjon, og litt om lesing av oppgavetekst på eksamen. | Opprett struct fra bruker-innputt (oppgave 2a). | Lesing og konvertering av linjer i fil til struct-verdier (oppgave 2b, del 1). |
Del 4 (6:41) | Del 5 (9:39) | Del 6 (13:29) |
---|---|---|
Kode for å lage en struct-vektor gradvis i en while-løkke (oppgave 2b, del 2). | Kode for formattert utskrift av struct-verdier, og for-løkke for å gå gjennom alle element i en struct-vektor (oppgave 2c). | Kode for å skrive en struct-verdi som tekst til fil (oppgave 2d). |