Visuell Programutveckling med C# Provmoment: Ladokkod: Tentamen ges för: Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: 2012-02-25 Tid: 09.30 14.30 Hjälpmedel: Inga hjälpmedel 7,5 högskolepoäng Omtentamen NVC01G Systemvetarutbildningen och dataekonomutbildningen Totalt antal poäng på tentamen: 50 poäng För att få respektive betyg krävs: G=25, varav minst 10 poäng på teoridelen och minst 12 poäng på praktikdelen. VG=38, varav minst 10 poäng på teoridelen och minst 12 poäng på praktikdelen. OBS! For att få den praktiska delen (uppgift 5-7) rättad måste studenten ha uppnått minst 10/20 poäng på den teoretiska delen (uppgift 1-4). Om studenten inte uppnår 10 poäng på den teoretiska delen kommer den praktiska delen ej att rättas och 0 poäng kommer därmed att tilldelas på respektive uppgift. Allmänna anvisningar: Skriv dina svar på separata blad Spara alla filer på F: (OBS! Ingen annanstans, då försvinner det) Logga ur datorn när du är klar med tentamen (men stäng INTE av!). Rättningstiden är som längst tre veckor Viktigt! Glöm inte att skriva namn på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Gidenstam, Petter Terenius Telefonnummer: 033 435 4214 (5945)
Svarsblankett Namn: (Ifylles av student) Personnummer: (Ifylles av student) Uppgift 1: A B C D R1 R2 R3 R4 Uppgift 2: A B C D a) b) c) d) e) f) Uppgift 3: A B C D a) b) c) d) e) Uppgift 4: A B C D a) b) c) d) e) Observera: Det minimala resultatet på uppgift 1 till 4 är 10 poäng. Om detta inte uppnås, kommer inte uppgift 5 till 7 att beaktas och automatiskt få 0 poäng.
1. Matcha följande definitioner inom objektorientering med motsvarande exempel (samma relation kan förekomma flera gånger). R1: Association (eng. association) R2: Komposition (eng. composition) R3: Aggregat (eng. aggregation) R4: Arv (eng. inheritance) A: En cykel kan vara en trehjuling, en stadscykel eller en mountainbike. B: Ett land har invånare. C: En katt har en svans och fyra tassar. D: En student kan äga mobiler. En mobil har en ägare. (4p)
2. Svara med något av de angivna alternativen på följande frågor. (a) En implicit typomvandling kan göras? A. Till alla klasser i the.net Framework Class Library. B. Från en subklass till en abstrakt superklass. C. Från en superklass till en subklass. D. Från decimal till int. (b) Koden nedan använder Linq. Vad av följande skiljer den från vanlig C#? foreach (TextBox tb in this.controls.oftype<textbox>()) { tb.text = tb.name; //Sätt texten till textboxens namn A. foreach. B. in this. C. Controls. D. OfType. (c) Hur skriver man för att visa ett modalt fönster i Windows Forms, efter denna inledande rad? formabout abbe = new formabout(); A. abbe.showdialog(); B. abbe.show(); C. abbe.showmodwin(); D. abbe.showmodal(); (d) Vilken av följande kodrader kan göra att en TicTacToe-spelande dator slumrar en och en halv sekund utan att hantera händelser? A. Form1.Deactivate(1500); B. this.break(1500); C. Thread.Sleep(1500);. D. Wait(1500); (e) En definition av de egenskaper som kan ingå i ett objekt är känd som en? A. Klass. B. Instans. C. Objekt. D. Metod. (f) När en händelsehanterare (metod) kopplas till en händelse (event) används? A. En funktionspekare. B. En instans av metoden. C. Ett värde av den delegat typ som hör till händelsen. D. Ett värde av godtycklig delegat typ. (6p)
3. Svara med något eller några av de angivna alternativen på följande frågor. (a) Vilket eller vilka av följande påståenden om arv i C# är sanna? A. En klass kan ärva direkt från exakt en annan klass. B. Arv ökar möjligheten att återanvända kod. C. Arv beskriver relationen har-en mellan klasser. D. En klass kan ha godtyckligt många subklasser/barnklasser. (b) Vilken eller vilka av följande typkonverteringar måste göras explicit i C#? A. Konvertering av ett värde av typen Object till Nullable<T>. B. Konvertering av ett värde av heltalstyp till en flyttalstyp. C. Konvertering av ett värde av heltalstyp till text (string). D. Konvertering av ett Double-värde till Float. (c) Vilket eller vilka av följande påståenden om multitrådning i C# och.net är sanna? A. Trådar i C# (System.Threading.Thread) är billiga att skapa. B. Ett Task-objekt (System.Threading.Tasks.Task) representerar en uppgift som kan utföras. C. Konstruktioner som Parallel.For() eliminerar risken för synkroniseringsbuggar. D. Klassen Monitor kan användas för att synkronisera trådar. (d) Textboxen tbtelnr har tabindex satt till 12. Textboxen tbmailadress har tabindex satt till 9. Vad innebär detta? A. Det är högre sannolikhet att tbtelnr visas än att tbmailadress visas. B. Fokus kommer normalt till tbmailadress innan det kommer till tbtelnr. C. Textboxarna visas i olika tabbar. D. tbmailadress skrivs ut på skärmen först när tbtelnr och ytterligare två textboxar har fyllts i av användaren.windows (e) Vilket eller vilka av följande påståenden är sanna för ett interface? A. En klass kan implementera ett godtyckligt antal interface. B. En interface-referens kan implicit konverteras till en referens till ett objekt som implementerar interfacet. C. En referens till en klass som implementerar ett visst interface kan implicit konverteras till en interface-referens för det interfacet. D. Ett interface definierar vilka metoder klasser som implementerar interface:t måste ha. (5p)
4. Studera följande givna program. Svara med något eller några av de givna alternativen. (a) Vad skriver följande metod ut i konsollfönstret? static void Main(string[] args) { for (int i = 0; i < 10; i += 3) { Console.Write(i); Console.Write(' '); Console.ReadLine(); A. (ingenting) B. 0 1 2 C. 0 1 2 3 4 5 6 7 8 9 D. 0 3 6 9. (b) Givet följande klassdefinition: abstract class Arwen { public void Ettan() {/* plats för kod */ protected void Tvåan(int kilo) { /* plats för kod */ public virtual int Trean(int km, int hastighet) { /* plats för kod */ public abstract double Fyran(); Vilken eller vilka metoder måste överlagras (eng. override) av en klass som ärver från klassen Arwen? A. Ettan. B. Tvåan. C. Trean. D. Fyran.
(c) Vilket eller vilka av nedanstående påståenden är sanna för kodfragmentet object s = new SomeObject(31, 42) givet definitionerna nedan? class SomeObject { public object data; public object moredata; public SomeObject(int count) { data = count; public SomeObject(int count, int number) : this(number) { moredata = number; A. Attributet data i instansen s får värdet 31. B. Attributet moredata i instansen s får värdet 42. C. Attributet data i instansen s får sitt defaultvärde null. D. Attributet data i instansen s får värdet 42. (d) Koden nedan skriver ut en rad i konsolfönstret. Men vad är det som skrivs ut? class Knutsson { public void fun() { Console.WriteLine("Måns" + " "); public void fun(int i) { Console.Write("Bill" + " "); class Gosta : Knutsson { public void fun() { Console.Write("Bull" + " "); class MyProgram { static void Main(string[] args) { Gosta maja; maja = new Gosta(); maja.fun(); maja.fun(200); Console.ReadLine(); A. Bull Måns. B. Bull Bill. C. Bull Bull. D. Bill Bill.
(e) Följande UML-diagram beskriver relationer mellan klasser. Vilket eller vilka påståenden är korrekta enligt diagrammet? Person Förare Fordon 1 0..* Bil hjul 1..* Cykel 1..* A. Ett Fordon har endast en Förare men en Förare kan ha många Fordon. B. En Bil kan enligt diagrammet ha lika många hjul som en Cykel. C. Ett Fordon måste vara en Bil eller en Cykel (det kan inte vara en Släde eller en Buss). D. En Förare är bara en Person (alltså inte två eller fler). (5p)
5. Ett förenklat system för projektplanering skall tillverkas. Programmet skall hantera projekt bestående av ett antal resurser. För samtliga resurser skall det vara möjligt att ange hur mycket tid de skall jobba i projektet (budgeterad kostnad) och senare registrera hur mycket faktisk tid de utfört. Kostnaden för en resurs beräknas olika utifrån vilken typ av resurs det är frågan om. De tre typerna av resurser är: Anställd. En anställd har en viss lön, en viss arbetstid per månad och ett övertidstillägg om arbetstiden överskrids. Projektanställd. En projektanställd har ett kontrakterat pris för en viss tid. Innan denna tid har utförts är kostnaden noll, därefter är kostnaden det kontrakterade priset. Konsult. En konsult har en timkostnad. Programmets funktion kan beskrivas enligt följande: Programmet skapar ett projekt med ett visst antal allokerade timmar och en budget i kronor. Projektet skall stödja följande operationer: Lägga till en resurs om budgeten ej överskrids. Beräkna kostnad beräknar projektets budgeterade kostnad Nollställ projekt tar bort samtliga resurser från projektet Visa projekt returnerar en sträng med information om samtliga resurser i projektet Ingen meny behövs utan det är endast de logiska klasserna som skall skapas. Hårdkoda istället nedanstående resurser och lägg till dem till ett projekt. Skriv därefter ut den budgeterade kostnaden. Resurserna som skall läggas till projektet är följande: Kalle, anställd. Lön 20000 kr. Månadsarbetstid 160 timmar. Övertidstillägg 100 kr / h. Stina, anställd. Lön 21000 kr. Månadsarbetstid 160 timmar. Övertidstillägg 110 kr / h. Nisse, projektledare, konsult (från Manpower). Timlön 1000 kr. Albert, projektanställd. Kontrakterad tid 185 timmar. Kontrakterad lön 25000 kr. Budgeterad tid för resurserna är följande: Kalle 320 timmar. Stina 320 timmar. Nisse 175 timmar. Albert 185 timmar. Tänk på att använda en god objektorientering. Var speciellt noga med synlighet, konstruktorer, polymorfism och att separera logik och IO. (10p)
6. Uppgiften går ut på att skapa nedanstående fönster. I fönstret visas hela tiden en grafisk representation av 3 lottobollar. Varje boll består grafiskt av en fylld cirkel av en vald färg (vit, röd, blå eller grön) med en svart kontur och ett numer mellan 1 och 35 ritat mitt i cirkeln ritad med fontstorlek 24. Layouten nedan skall följas. Bollarna ska visas med bakgrundsfärg enligt valt alternativ. Färgerna som kan väljas är vit (Color.White), röd (Color.Red), blå (Color.Blue) eller grön (Color.Green). Knappen Randomize skall slumpa fram ett nytt värde mellan 1 och 35 för varje boll. Alla gjorda val skall få visuellt genomslag direkt. För full poäng skall lottobollarna vara instanser av en egendefinierad grafisk kontroll som kan styras med en egenskap (property) för värde (av typen int) och en för färg (med typen Color). Tips: Lös problemet stegvis, exempelvis börja med att implementera en boll som en grafisk komponent. (10p)
7. Uppgiften går ut på att skapa en administrativ applikation för att hantera fakturor för en bilpool. Tabellstrukturen för applikationens databas CarPool finns nedan. När programmet startas visas alla poolens medlemmar i en ListBox (obs! inget annat) på formen efternamn, förnamn och sorterade på efternamn. När en medlem väljs i listan så skall de fakturor som finns i databasen för den medlemmen visas i den andra ListBox:en (under Invoices). När en faktura väljs i Invoices-listan så skall information om fakturan visas i en detaljvy enligt bild nedan. Listan över fakturorna och detaljvyn skall automatiskt uppdateras när en annan medlem och/eller faktura väljs. Applikationens GUI skall arbeta mot logikklasser som du skapar och vars publika gränssnitt skall vara enligt nedanstående klassdiagram (lämpliga konstruktorer och eventuella privata metoder lägger du till själv). Koden i GUI-delen får endast kommunicera med databasen via logikklassernas publika gränssnitt. All databashantering skall ske internt i logikklasserna och skall ske med hjälp av LINQ.
Databasen är redan skapad och fylld med data. Ni kommer åt den med hjälp av de inloggningsuppgifter (till SQL Server) som finns med i tentan. Databasen har följande tabeller och nyckelrelationer: Tips: Lös problemet stegvis. Skapa logikklasserna först och fyll sen metoder och properties med innehåll. Använd LINQtoSQL klassernas styrkor som de automatiska kopplingarna mellan raderna de olika tabellerna! En DateTime instans kan konverteras till en lämplig sträng med metodanropet adate.tostring("yyyy-mm-dd HH:MM"); (10p)