Ordinarie tentamen i OOSU2, 26 mars 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ändarnman 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 19 april. Lycka till! Petter
Teoridel Uppgift 1. (5 p) Besvara kortfattat följande småuppgifter. a) Vad blir det för färg av följande kod i hexadecimal notation? #07ebf1 b) Hur mycket, översatt till vårt decimala talsystem, är 2 19, och hur räknar man ut det i huvudet? c) Hur gör man om textsträgen 25 till ett heltal med hjälp av cast? (Du behöver inte ha någon felhantering.) d) Vad är protokollet MIDI till för? e) Vad heter de fyra faserna i RUP (på engelska eller svenska)? Uppgift 2. (4 p) Koden nedan kommer att krascha eftersom jag har tagit bort en viktig kodrad. Vad är det som jag har tagit bort och hur ska raden skrivas? SqlCeConnection conn = new SqlCeConnection(@"Data Source=C:\db\ICA.sdf;"); public static DataTable frandb(string str) { SqlCeCommand cmd = new SqlCeCommand(); cmd.connection = conn; cmd.commandtext = str; SqlCeDataAdapter da = new SqlCeDataAdapter(); da.selectcommand = cmd; DataTable dt = new DataTable(); da.fill(dt); Uppgift 3. (3 p) Vilka sex av följande existerande eller påhittade termer stöter man troligen ihop med om man skriver ett program för Silverlight (bortse från eventuell webbplats som Silverlightapplikationen ligger i)? Välj alltså endast ut sex av termerna, som är: LayoutRoot, Master Page, User Control, PixelChannel, Viewstate, Timer, GeneralCommand, XHML, XAML, Canvas, FormView, Deflector, TextBlock
Uppgift 4. (4 p) Nämn fyra saker som utmärker ett bra dataspel (egentligen oavsett hur avancerat det är). Berätta kort vad de olika sakerna innebär och ge gärna exempel från välkända spel eller från de spel som visades på speldagen i förra veckan. Minns du inte vad jag tog upp på föreläsningen så tänk ut egna saker. Uppgift 5. (8 p) Du har börjat skapa en webbplats och ska nu lägga till visning av nyheter, både som en lista och enskilda nyheter, för en webbplats. Nyheterna ligger i en tabell i en SQLServer-databas. Vilka.Netkontroller använder du för att visa nyheterna (det finns olika varianter, så välj vilket sätt du vill)? Ange hela kedjan från databas till webbsida, men du behöver inte skriva någon allmän kod. Skriv dock gärna kod som visar hur kontrollerna hänger ihop. Beskriv också med ord hur hela kedjan hänger ihop. (Obs poängen skriv ett utförligt svar.) Uppgift 6. (6 p) Objektorienterad systemutveckling sker inkrementellt och iterativt. Inför varje iteration måste man göra en bedömning av vilka saker som man ska jobba med under iterationen. Hur ska man tänka när man ska rangordna? Beskriv och ge exempel.
Praktisk del: kodning på dator Uppgift 7. (20 p) Din kompis Joppe driver stans bästa pizzeria, Pizzahuset. Pizzahuset har blivit såpass populärt att Joppe måste börja hålla koll på vem som beställer vilken pizza. Ryktena om OOSU2 har gått på stan och han ber dig därför om hjälp. Du hjälper förstås gärna till! 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ällda pizzor och sedan visa pizzorna i tabellform. Ordrar lagras (helst) i en egen klass. Startsida: En välkomstsida med välkomsttext etc efter behag En knapp som leder till sida där man skapar en ny order En knapp som leder till en sida där man ser beställda pizzor Orderformulär: Textboxar och lablar läggs till efter förstånd (obs! Systemet behöver bara kunna lägga in en pizza åt gången i denna första version. En combobox eller liknande med pizzornas namn (minst fem, t.ex Hawaii, Margharita, Calzone, Special och Quattro stagioni). Uppgifterna om pizzorna kan läggas hur som helst, dvs de behöver inte ligga i en separat klass eller array. Varje pizza har utöver ett namn även ett pris i hela kronor. 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 ordern sparas (se nedan). Tidpunkt (datum och klockslag) ska läggas till per automatik när ordern sparas. 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 pizzor. Det som ska sparas för varje order är pizzans namn (och pris om det inte hämtas igen), kundens namn och alltså tidpunkt. (Hade detta varit en bra lösning så hade helt andra 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 pizzan har lagts till. Orderlista: Lista helt enkelt alla pizzor i, förslagsvis, en datagridview. Rubrikerna i din datagridview ska ha lämpliga namn (t.ex. Kundens namn, Pizza, Pris). 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.
Lista helst så att den senaste orden hamnar överst. Skapa två lablar där den ena skriver ut hur många kronor det finns ordrar för idag, och den andra hur många kronor det har beställts pizzor för sedan systemet togs i bruk. 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("customer name"); dt.columns.add("pizza"); for (int i = 0; i < orders.count; i++) { dt.rows.add(new object[] { "hej", "hopp" }); }