EKSAMEN (Konvertert fra en gammel PHP-eksamen) Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 07/12-2010 09.00-13.00 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne) Faglærer: Tom Heine Nätt Eksamensoppgaven: Oppgavesettet består av 8 sider inkludert denne forsiden, og er inndelt i 4 deler med henholdsvis 5, 2, 2 og 3 oppgaver. Du er selv ansvarlig for å kontrollere at oppgavesettet er komplett. Det er på hver del og oppgave angitt hvor mye disse teller av totalen. Karakter fastsettes dog på basis av en helhetsvurdering av besvarelsen. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad. Det er alltid bedre å svare noe, om så bare hvordan du ser for deg at oppgaven kunne vært løst, enn å ikke skrive noe i det hele tatt på en oppgave. Lykke til! Sensurdato: 06/01-2011 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. Følg instruksjoner gitt på: www.hiof.no/studentweb Side 1 av 9
Del 1 Kodeforståelse (10%) Her skal du kun svare på selve spørsmålet, og du trenger ikke forklare hvordan du kommer frem til svaret. NB! Les koden og selve spørsmålet nøye, for det kan være mange feller å gå i her... Oppgave 1.1 (2%) var a=2; var b=4; var c=6; if(a > b a > c){ console.log(a); else{ console.log(c); Oppgave 1.2 (2%) var s=0; for(i=1; i<4; i++){ s++; console.log(i); console.log(s); Side 2 av 9
Oppgave 1.3 (2%) var t=3; for(i=5; i>==0; i--){ if(t >== i){ console.log("a"); else{ console.log("b"); Oppgave 1.4 (2%) var liste = [1,2,3,1,2,3]; for(i=0; i<liste.length; i++){ liste[i]= liste[i]*i; console.log(liste[2]); Oppgave 1.5 (2%) Ternary-operators er ikke pensum function test(a,b,c){ return (a > b? a : c); console.log(test(1,3,5)); Del 2 Grunnleggende programmering (15%) Oppgave 2.1 (5%) Side 3 av 9
Skriv kode som summerer alle partall i en array med navn liste. Denne lista kan f.eks se slik ut: liste = [3,4,2,1,3,2]; Oppgave 2.2 (10%) I kurset Webprogrammering 1 ble det høsten 2010 gjennomført to tester (test 1 og test 2) før endelig eksamen. Resultatene (karakterene) er lagret i tre arrays: var res_test1 = [1,4,2,6, osv.]; var res_test2 = [1,2,2,5, osv.]; var res_eksamen = [2,4,1,2, osv.]; Samme plassering/posisjon/indeks i de tre arrayene angir resultater for samme student, og de vil derfor også være like lange. Istedenfor å lagre bokstavkarakterer har man lagret lettere beregnbare tallkarakterer etter følgende mal: 1=A, 2=B, 3=C, 4=D, 5=E, 6=F Skriv kode som finner ut hvor mange studenter som gjorde det bedre, dårligere eller likt på eksamen i forhold til snittet (summen av resultatene delt på to) av test 1 og test 2, og som skriver ut resultatet slik (tallene her er fiktive): Bedre: 23 studenter Likt: 12 studenter Dårligere: 14 studenter Side 4 av 9
Del 3 Databaser og PHP (15 %) NB: Oppgaven benytter opprinnelig database og er derfor enklere å løse. Gå ut i fra at du har følgende databasetabell JSON med Hassan-klipp (Små humoristiske telefonspøker gitt ut på CD. Opprinnelig sendt på Sveriges Radio): Tabellnavn: hassanklipp tittel cd spor lengde morsomhet Der Spiegel 3 3 1.04 4 Nummerupplysningen 4 5 2.09 5 osv osv osv osv osv { "klipp": [ { "tittel": "Der spiegel", "cd": 3, "spor": 3, "lengde": 1.04, "morsomhet": 4, { "tittel": "Nummeropplysningen", "cd": 4, "spor": 5, "lengde": 2.09, "morsomhet": 5 ] Morsomhet er en skala fra 1=dårligst til 5=best. Lengde er et ordinært desimaltall. Oppgave 3.1 (10%) NB: Ved hjelp av database kan man enkelt få dataene ferdig sortert. Denne oppgaven er derfor vanskeligere å løse. Skriv kode som presenterer dataene for alle klippene sortert etter synkende lengde på følgende format: Nummerupplysningen (CD 4 / Spor 5) - 2.09 Der Spiegel (CD 3 / Spor 3) - 1.04 osv. Databasen har følgende tilkoblingsinformasjon: Kjøres på localhost i forhold til PHP-scriptet Brukernavn: foreleser Passord: nassau Side 5 av 9
Databasenavn: humor Oppgave 3.2 (5%) Hvilke endringer må til i 3.1 for å kunne angi morsomhet fra en dropdown-meny som så benyttes til å filtrere ut kun de klippene som er morsommere enn et visst nivå: Del 4 Skjemaer og filbehandling (60 %) Foreleseren i et kurs kalt Webprogrammering 1 har planlagt å lage et ekstrakurs kalt Webprogrammering 1,5 som skal være et betalingskurs for spesielt interesserte der man skal fordype seg langt ned i de særeste funksjoner og mest kompliserte regulæruttrykk. Da det er ventet en stor mengde interessenter, ønsker foreleseren et webskjema for påmelding som skal se slik ut: Oppgave 4.1 (10%) Skriv HTML-koden for påmeldingsskjemaet som er skissert i introen til oppgaven. Skjemaet skal sende resultatet som POST til websiden registrer.php. Nedtrekkslista skal fylles med følgende to alternativer og opprettes med standard HTML. Det er da value-kolonnen som skal benyttes som value og tekst-kolonnen som skal benyttes som tekst på hvert listeelement. Side 6 av 9
Value Tekst 1 Skinkepizza 2 Surkål med broccolli Side 7 av 9
Oppgave 4.2 (30%) Skriv ferdig siden registrer.php som skal motta data fra skjemaet. Denne websiden skal først ha tre tester på om navn, epost og fødselsår er godkjente verdier. Dersom en test ikke er ok, skal det skrives ut en tilhørende feilmelding og ingenting mer skal skje. Testene er som følger: Navn: Må være lenger enn 3 tegn Epost: Må kontrolleres med følgende funksjon, som er ferdig definert i en fil kalt hjelpefunksjoner.inc, og som returnerer true/false: o function gyldigepost($epostadresse) Fødselsår: Må være større enn 1910 og lavere enn 2000 Er alle de tre verdiene godkjent skal deltakeren få opp en bekreftelse med en pris. Prisen beregnes noe underlig etter følgende regler: Er man et partall år gammel koster kurset alltid 500 kr. Er man et oddetall år gammel koster kurset i utgangspunktet 2300 kr og deretter må man betale 100 kr pr år man er eldre enn 20 år. Eneste unntaket fra disse to reglene er at om man er født i 1981 så får man kurset helt gratis. Du skal gå ut i fra at året for registreringen er 2010, og at man regner alder ut i fra 1. januar. Dette medfører at alle som f.eks er født i 1990 er 20 år gamle. Bekreftelsen skal se slik ut (her da for en person kalt Navn Navnesen, som er født i 1987): Registreringen skal så lagres til en fil med navn deltakere.dat. Denne fila skal ha følgende struktur: navn epost fødselsår matrett pris I praksis kan fila dermed se slik ut: Anna Nass anna.nass@domene.no 1966 1 500 Tor Dehn tord@domene2.no 1983 1 3000 Dag S. Lysh dags@domene3.no 1981 2 0 PS! Merk deg at denne oppgaven (4.2) i praksis består av flere deler. Om du ikke klarer oppgaven som en helhet, så svar på de delene du får til. Side 8 av 9
Oppgave 4.3 (20%) Du skal også lage en rapportside for foreleseren. Denne siden skal lese fila deltakere.dat, og gi følgende informasjon basert på innholdet i fila (tall i eksemplet under er basert på utdraget av fila i 4.2): (Tallene som står etter Alternativ 1: og Alternativ 2: er antallet deltakere som har valgt dette matalternativet) NB! For å få full uttelling på denne oppgaven må du skrive koden såpass generell at den ikke er låst til kun 2 alternativer. Med andre ord skal man kunne legge til flere alternativer i skjemaet, og denne oppsummeringssiden skal da ta med dette om den finner noen alternativ 3, 4, 5 osv i fila. Det skal ikke være noen øvre grense på antall alternativer som skal kunne legges inn, og det er ikke sikkert at alternativene er i sekvens (dvs at vi f.eks kan ha alternativ 1,2,6,8 og 9). Synes du dette virker vanskelig, lønner det seg kanskje å gå for den enklere løsningen med to fastsatte alternativer. Side 9 av 9