HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 21.mai 2007 Varighet: Fagnummer: Fagnavn: Klasse(r): Studiepoeng: 6 09.00 13.00 (4 timer) LN116D Programmering i Visual Basic FU Faglærer: Svend Andreas Horgen tlf: 73 55 92 69 Kursassistent: Siri Wæhre Lien tlf: 73 55 91 54 Hjelpemidler: Oppgavesettet består av: Alle skriftlige hjelpemidler 4 oppgaver og totalt 5 sider (inkludert forsiden). Viktig: Planlegg tiden godt (4 timer). Dersom noe virker uklart i oppgavene, må du selv gjøre de nødvendige antakelser og få med disse i besvarelsen. Det står angitt vekting på hver oppgave. Det skal hjelpe deg med å prioritere og fordele tiden riktig. Innenfor de ulike oppgavene kan det være ulik vekting på delspørsmålene. Denne interne vektingen er ikke oppgitt. Lykke til! Side 1 av 5
Case som brukes i denne eksamen Les først gjennom følgende lille case-beskrivelse. Oppgavene er knyttet til caset. Kari har startet opp en liten landhandel, og ønsker å få bedre oversikt over varebeholdningen. Landhandelen har varer som for eksempel melk på flaske, lokale malerier, epler og speltbrød. Varene har en pris, og det kan variere hvor mange varer som er på lager. Kari har lyst på et system som gjør det mulig for henne å klikke på en vare og angi antall av varen (for eksempel 5 flasker melk), og så gjøre det samme for resten av varene som en kunde kjøper. Når hun til slutt klikker på en summer-knapp, vil totalsummen regnes ut. Hvorfor ikke bare bruke kalkulator? Fordelene med et datasystem er mange: Det er mulig å se alle varene som hører til en handel. Bruk av en kalkulator ville vist bare sluttsummen og ved feil inntasting må alt regnes ut på nytt igjen. Hver kjøpte vare blir registrert, og systemet kan dermed vise Kari en oversikt over varebeholdningen til enhver tid. Det er lett å beregne totalt salg, og gitt at utgiftene er kjente, kan total inntekt i Karis lille bedrift beregnes. Søk etter varer: Hvis en kunde spør om hva en vare koster, kan Kari lett søke opp informasjonen. Prisliste: Kari ser for seg at det er mulig å lage en prisliste av varer hun har spesielt lyst til å henge opp på døren. Dette kan gjøres på en enkel måte når hun måtte ønske det. Gode kunder kan få rabatt på varer. Mye nyttig statistisk informasjon kan beregnes: mest solgte vare, minst solgte vare, dyreste vare, største kjøp, antall solgte malerier, salg for en vare i ulike tidsperioder (graf) og så videre. Dette kan presenteres på interessante måter (med både tekst og grafikk). Kari kan analysere utfallet av endringer i pris. Hvor mye har det å si at prisen på en tilbudsvare går ned fra 20 til 17 kroner? Kan prisen på andre varer økes for å kompensere for eventuelt tap? Side 2 av 5
Oppgave 1 Skisse til brukergrensesnitt (30%) Lag forslag til brukergrensesnitt som best mulig oppfyller Karis behov fra punktene listet i case-beskrivelsen. Tegn de skjermbilder du mener det er behov for, og forklar med tekst. Du skal formidle hvordan du tenker deg et slikt system programmert. Tips: For å gjøre forklaringen til figurene dine mer oversiktlige, kan du sette på tall med sirkel rundt, og så ha utfyllende tekstlige forklaringer under aktuelle figure, for eksempel slik: Figur 1: Et tenkt eksempel på skjermbilde med forklaring. Dette skjermbildet har ikke noe med denne oppgaven å gjøre, men illustrerer hva du skal gjøre. Merk at denne oppgaven teller i underkant av 1/3 av eksamen. Beregn tiden deretter. Oppgave 2 Funksjon for rabatt (15%) Lag en funksjon (med kode) som mottar informasjon om pris, rabattprosent (for eksempel 20, som tilsvarer 20% rabatt), og returnerer den rabatterte prisen. Oppgave 3 Rabatt kun for gode kunder (20%) Anta at den totale prisen på varene til enhver tid ligger i labelen lblsum etterhvert som Kari registrerer nye varer. Lag nå kode som gjør følgende når knappen Fullfør kjøp trykkes: Dersom ingen rabatt gis, skal prisen regnes ut og vises på skjermen. Hvis kunden er verdig en rabatt, skal Kari kunne skrive inn navn på kunden og en rabattprosent (i to tekstfelt), og deretter se en oppsummering med opplysninger om navn på kunden, pris før rabatt og pris etter rabatten. Ta hensyn til at inngangsdata er korrekte. Hint: Se tilbake til oppgave 2. Side 3 av 5
Oppgave 4 Ekstern lagring over tid (35%) I denne oppgaven skal du bruke filer for å langtidslagre informasjon. Du kan bruke en database hvis du heller vil det. Skriv helt tydelig om du velger å jobbe mot fil eller database i denne oppgaven. Det er lurt å skumlese gjennom hele oppgaven før du starter. a) Tegn opp hvilken lagringsstruktur du ville brukt for å lagre informasjon om et kjøp, og begrunn svaret ditt. Følgende informasjon skal lagres: varenavn, antall kjøpt av varen, varens gjeldende stykkpris, dato for kjøpet. Før du går videre, må du vite at også informasjon om varenavn, varepris og varebeholdning (med mer) må lagres på fil/database (i andre filer/tabeller enn varekjøpene). Anta nå at alle prisene er lest fra fil/database inn i en matrisestruktur ved oppstart av programmet. Her er et eksempel på hvordan varene og den tilhørende prisinformasjonen ligger i to parallelle matriser når Kari starter programmet hver morgen: VARER PRISER Melk 10 Speltbrød 20 Epler 8 b) Lag en funksjon som finner prisen for en bestemt vare ved å benytte de to parallelle matrisene. Funksjonen skal hete hentvarenspris() og slå opp navn på en vare (argument). Den skal returnere varens pris (fra matrisen PRISER) dersom varen eksisterer i matrisen VARER. Hvis ikke, skal -1 returneres. Merk at du ikke skal operere på filer her. c) Skriv kode for å lagre informasjon om en handel i den filstrukturen (evt. databasestrukturen) som du skisserte i oppgave a. Per kan typisk handle 5 flasker melk, 2 speltbrød og 3 epler den 28.juni. Alt dette må lagres. d) Forklar med ord/pseudokode: Hvordan var salget av en vare de ulike dagene? Kari skal kunne skrive inn en startdato og en sluttdato, og så få presentert en grafisk visning av antall solgte av en bestemt vare for hver dag i perioden. Eksempel: Hun solgte 20 flasker melk den 27.juni, 15 flasker den 28.juni og 4 flasker den 29.juni. Hvordan ville du gått frem for å løse dette? Forklar stegvis og detaljert, men du trenger ikke skrive kode for å få full uttelling på denne oppgaven (kun egne ord eller pseudokode dersom du er detaljert nok). Du kan anta at funksjonen Side 4 av 5
lagnysoyle() eksisterer og er kapabel til å tegne opp en søyle av en viss høyde, litt til høyre for forrige søyle. Det eneste funksjonen trenger å vite (argumenter), er et tall som representerer høyden som søylen skal ha og eventuell tekst som skal skrives i søylen. Side 5 av 5