Omtentamen i OOSU2, 16 maj 2014 Maxpoäng: 50. Betygsgränser: A: 90 % + B: 80 % + C: 70 % + D: 60 % + E: 50 % + Mindre än 50 % ger underkänd tentamen. Är det något du inte uppfattar så förklara hur du tolkar uppgiften och gör så gott du kan. Programmeringsuppgiften är ganska stor och det är helt okej att bara jobba med vissa delar om du inte kan lösa hela uppgiften. Du får dina inloggningsuppgifter till tentakontot när du lämnar in svaren till de teoretiska frågorna. Du kan därefter inte fylla i fler svar till de uppgifterna! Alltså: först teori, sedan programmering. Observera att du inte ska logga in med ditt användarnamn på datorn utan med inloggningsuppgifterna (t.ex. användarnamn TEN123 och lösenord 12345). Ifall det strular rent tekniskt så gå tillbaka till tentavakterna och begär nya inloggningsuppgifter. Hjälpmedel: Papper och penna, samt dator för programmeringsuppgiften (det är alltså endast EN uppgift som kräver dator). Du kan lösa flera uppgifter på samma pappersark om du vill, eftersom jag rättar alla uppgifterna. Resultatet på tentan bör vara dig tillhanda senast den 5 juni. Lycka till! Petter
Teoridel Uppgift 1. (8 p) Besvara kortfattat följande småuppgifter. a) Vad blir det för färg av följande kod i hexadecimal notation? #f00f0f (1p) b) Vad saknas i följande kodrad för att siten ska kunna köras? (1p) <asp:label ID="lRub" Text="lRub"></asp:Label> c) Vad gör följande kodrader och när används de, dvs vad används catch till generellt? (2p) catch (Exception msg) { MessageBox.Show(msg); } d) Nämn tre klassbibliotek i.net-ramverket! (Det jag söker efter är exempel enligt System.[namnet], t.ex. System.Xml, dvs det som står överst på en.cs-sida efter ordet using.) (1,5 p) e) Vilka tre av följande filändelser används för bilder på webben? (1,5p).tiff,.bmp,.fxx,.pyt,.gif,.igr,.png,.jpg,.llq,.mid f) Betrakta koden nedan. Vad händer när man trycker ned J-tangenten? (1p) <Rectangle x:name="player" Height="34" Canvas.Left="334" Stroke="Black" Canvas.Top="520" Width="138" Fill="#FF26276C"> <i:interaction.triggers> <pb:physicskeytrigger Key="J"> <pb:physicsapplyforcebehavior ForceX="-100"/> </pb:physicskeytrigger> </i:interaction.triggers> <i:interaction.behaviors> <pb:physicsobjectbehavior Mass="10"/> </i:interaction.behaviors> </Rectangle> Uppgift 2. (3p) Vad gör följande kod? totalorders = orders.count(theorder => theorder.customername == custname);
Uppgift 3. (3p) Vad är det för skillnad på en domänmodell och en designmodell (designdiagram)? Rita ett exempel där bägge varianter finns med! Uppgift 4. (3 p) När man ställer in sin bildskärm kan man få frågan om färgdjup, som kan vara t.ex. 24 bitar. Hur stort tal är det (alltså 2 upphöjt till 24)? Och varför är det just 24 bitars färgdjup i inställningen och inte, t.ex. 20 eller 21? Uppgift 5. (3p) Vad kallas diagrammet på bilden, och hur ska man tolka det som står i figuren?
Uppgift 6. (10 p) Här nedan (alt fristående blad) ser du en site för en mäklarfirma. Siten är byggd i HTML. Ägarna kommer till dig eftersom de inser att Internet är så mycket mer än bara en samling statiska dokument. För varje sida, ge förslag på hur sidan kan förbättras med Asp.Net (och eventuellt kopplingar till en databas). Ge både exempel på funktion och beskriv hur funktionen ska implementeras. Obs att du inte behöver beskriva något om inloggning och administrationsgränssnitt denna gång. Observera också poängen det är en rätt så omfattande uppgift.
Praktisk del: kodning på dator Uppgift 7. (20 p) Du har just kommit på en idé som ska göra dig ekonomiskt oberoende för resten av livet. Idén är att starta en resebyrå riktad till studenter som antingen är färdiga med sina studier eller som vill ta ett sabbatsår från sina vanliga studier och i stället plugga språk eller så. Du har sett ut vissa orter som verkar särskilt intressanta för studenter, oavsett om det är ytterligareplugg eller kanske dykning som lockar, och alla platser omfattas av svenskt studiemedel. Du har delat in dina orter i Upplev och Storstad och totalt har du än så länge sex orter att välja mellan. I Upplev finns: Cypern (där man kan dyka och lära sig engelska) Tanzania (där man kan jobba med bistånd eller åka på safari) Australien (där man kan bo med en känguruflock eller plugga språk) I Storstad finns: Paris (där man kan plugga franska och ekonomi) San Francisco (där man kan plugga IT och affärsengelska) München (där man kan plugga tyska) Du har just varit i kontakt med Drivhuset för att komma vidare. Tipset du får är att skapa ett administrativt system så att infrastrukturen finns på plats när du börjar ta emot beställningar. Vilken tur att du har läst OOSU2-kursen! Systemet väljer du att skapa i WinForms och det här är kraven som systemet ska omfattas av: Allmänt: Ett system där man kan skriva in beställningar på resor och sedan visa beställningarna i tabellform. Beställningarna lagras (helst) i en egen klass. Beställningarna ska sedan kunna väljas och visas i egna textboxar. Startsida: En välkomstsida med välkomsttext etc efter behag En knapp som leder till sida där du kan skriva in en ny beställning på resa En knapp som leder till en sida där man ser beställda resor Orderformulär: Textboxar och lablar läggs till efter förstånd (obs! Systemet behöver bara kunna lägga in en resa åt gången i denna första version. En combobox eller liknande med resmålens namn. Uppgifterna om resorna kan läggas hur som helst, dvs de behöver inte ligga i en separat klass eller array. Resmålslistan har inga andra attribut än själv namnen. Tabbordning ska fungera på ett logiskt och användarmässigt lämpligt sätt. Görs med attributet TabIndex för varje kontroll. När man klickar på en Lägg till-knapp ska resebeställningen sparas (se nedan).
Data ska alltså sparas på valfritt objektorienterat sätt, förslagsvis till en egen klass. (Ju bättre OO-lösning desto bättre, men gör så gott du kan och gör annorlunda om du fastnar.) Lämpligt är att ha en array eller List med resebeställningar. Det som ska sparas för varje order är resmålets namn, kundens namn och kundens mailadress. (Hade detta varit en bra lösning så hade förstås fler data sparats.) Programmet ska ge felmeddelande om man glömmer att fylla i något av värdena. Du får själv bestämma om fönstret ska stängas när resebeställningen har gått igenom. Beställningslista: Lista helt enkelt alla resebeställningar i, förslagsvis, en datagridview. Rubrikerna i din datagridview ska ha lämpliga namn. Listningen kan t.ex. göras med hjälp av en datatable utifrån en loopning av dina sparade data (se kod nedan!). Lyckas du inte fylla tabellen så gör så gott du kan i övrigt, alternativt lista dina data på annat sätt. Lägg till en knapp kallad btnvisa. När man trycker på den ska namnen på vald resenär, resenärens mailadress och valt resmål hamna i separata textboxar på sidan. (Kodhjälp för att välja en rad i en dgv: se nedan.) Lägg också till en knapp som stänger fönstret. Övrigt: Alla sidor ska helst ärva från en base form i stället för från Page. Alla kontroller ska ha vettig namngivning. Alla metoder ska kommenteras på ett vettigt sätt. Vid bedömningen ges poäng för kodmognad och färdigställande, men också för grad av användbarhet. Obs! Stöter du på problem så strunta i kravet/egenskapen och gör så gott du kan! Exempelkod för att lägga till värden i en datatable. Obs att du kanske ska ha med fler fält. DataTable dt = new DataTable(); dt.columns.add("förnamn"); dt.columns.add("efternamn"); dt.columns.add("resmål"); for (int i = 0; i < lista.orderlistan.count; i++) { dt.rows.add(new object[] { lista.[i].fnamn, lista[i].enamn, lista[i].resmal }); } Det kan också gå att skriva detta enklare, beroende på hur din kod är uppbyggd. Du kan alltså eventuellt göra ungefär så här: dgvreselista.datasource = listan; Exempelkod för att hämta värden från tabellcellerna: tbfnamn.text = dgvorderlista.selectedrows[0].cells[0].value.tostring(); Obs att det med koden ovan underlättar att sätta propertyn SelectionMode för dgv:n till FullRowSelect.