Projektarbetet består av flera delar som alla är obligatoriska. Vissa delar utförs vid specifika tidpunkter men i övrigt bestämmer ni själva i vilken ordning som ni utför dem och i vilken utsträckning ni jobbar på dem parallellt.
Projektarbetet går ut på att implementera ett GUI-program med C# och Windows Forms som simulerar en nätbutik. Utöver en liten mängd gemensam funktionalitet bestämmer ni själva hur ert program ska vara utformat och vilken funktionalitet det ska ha. Ni bestämmer också själva vad som ska säljas i nätbutiken och har här möjlighet att anpassa projektet till era egna intressen.
Del 1: gemensam funktionalitet
Följande funktionalitet måste finnas i ert program och måste visas upp för användaren genom ett GUI om inget annat anges:
- En lista med produkter som låter kunden se information om produkterna och lägga till dem i sin varukorg.
- En textfil som med valfritt textbaserat format låter anställda bestämma vilka produkter som ska finnas tillgängliga. Denna del behöver inte ha ett GUI.
- En varukorg som visar vilka produkter som kunden har lagt till i sin beställning och låter kunden ta bort produkter.
- Möjlighet att slutföra beställningen och se ett kvitto som visar upp en sammanställning på det totala priset samt priset på de enskilda produkterna i beställningen.
- Möjlighet att mata in en rabattkod som ger rabatt på hela beställningen.
- En textfil som med valfritt textbaserat format låter anställda bestämma vilka rabattkoder som är giltiga. Denna del behöver inte ha ett GUI.
Viktigt: Ovanstående punkter är den enda funktionalitet som måste finnas med i alla inlämningar, men det är inte all funktionalitet som krävs för att få godkänt. För att få godkänt måste även allting under de övriga delarna utföras.
Nedan följer några punkter som inte ingår ovan:
- Ni behöver inte göra ett GUI som består av flera olika fönster eller "sidor" utan kan göra ett GUI där all funktionalitet (produktlista, varukorg, kvitto, etc.) visas i samma fönster.
- Ni behöver inte hantera användarprofiler eller användarkonton utan kan anta att användarens identitet inte är relevant för programmet.
- Ni behöver inte hantera betalningsprocessen med något mer än en knapp som låter kunden slutföra beställningen och omedelbart bekräftar att den har slutförts.
- Ni behöver inte hantera lagersaldon utan kan anta att samtliga produkter finns tillgängliga i oändligt antal exemplar.
Samtliga av dessa punkter skulle dock kunna implementeras i form av egna utökningar, som beskrivs i nästa del.
Del 2: egna utökningar
Utöver den gemensamma funktionaliteten ska ert program också innehålla utökningar som ni själva bestämmer över. Ni ska göra så många utökningar som ni behöver för att uppvisa kunskap i de flesta (men inte nödvändigtvis exakt alla) av kursens innehållsområden.
De innehållsområden som innefattas är följande:
De innehållsområden som täcks in av lektionerna efter projektarbetets start innefattas inte i det som ni förväntas ta med i ert program, men om ni vill så kan ni välja att ta med dessa ändå. I såna fall kommer ert arbete på dessa innehållsområden att ingå i betygsättningen precis som resten av programmet, men i utbyte har ni då möjlighet att betona dessa innehållsområden framför några av dem från tidigare lektioner.
Del 3: dokumentation
Ni ska dokumentera ert program på följande sätt:
- Skriv ett dokument på max två A4-sidor som beskriver hur ert program fungerar på hög nivå: vilken slags data det jobbar med, vilka de viktigaste klasserna och metoderna är och hur de olika delarna av programmet interagerar med varandra. Syftet med detta dokument är att jag ska förstå var i koden jag ska titta för att se hur något utförs. Skriv max två sidor. Om ni behöver mer utrymme än det så tyder det på att ni beskriver programmet på för låg nivå och istället behöver beskriva det på högre nivå. Spara denna dokumentation i filen
Overview.txt eller Overview.pdf i projektmappen.
- Om någon del av er kod (exempelvis en klass, en metod eller enskild rad) gör någonting på ett ovanligt eller svårförståeligt sätt, skriv en kortfattad kommentar direkt ovanför koden som förklarar vad den gör och varför. Gör detta enbart för sånt som inte påverkar programmet i sin helhet utan bara klassen/metoden/raden i sig. (Om er kommentar förklarar hur programmet beter sig på hög nivå så ska den inte ligga i koden utan i dokumentet som beskrivs i föregående punkt.) Syftet med dessa kommentarer är att jag ska kunna läsa igenom er kod utan att fastna på avsnitt som är svåra att förstå.
- Om ni vill ha chans till betyget VG, skriv ett dokument på max en A4-sida som beskriver de viktigaste designbesluten som ni tog angående kodens struktur samt de för- och nackdelar som ni såg med dessa. Ni kan resonera dels utifrån era egna erfarenheter och dels utifrån egenskaper som ni har läst om i kursboken och andra källor. Skriv max en sida. Om ni behöver mer utrymme än det så tyder det på att ni beskriver er design på för låg nivå och istället behöver beskriva den på högre nivå. Spara denna dokumentation i filen
Design.txt eller Design.pdf i projektmappen.
Del 4: presentation
Under kursens sista vecka ska ni genomföra en kortfattad presentation av ert program inför klassen. Syftet med denna presentation är att jag ska få en överblick av hur ert program fungerar samt att klassen ska kunna se hur olika grupper har löst liknande problem.
- Förbered en presentation på 10 minuter.
- Samtliga deltagare i projektgruppen måste delta i presentationen.
- Lägg ungefär hälften av tiden på att visa programmet ur användarens perspektiv, det vill säga hur man använder det till att faktiskt genomföra en beställning.
- Lägg ungefär hälften av tiden på att beskriva programmet ur programmerarens perspektiv, det vill säga hur ni har valt att lägga upp er kod och eventuella utmaningar som ni stötte på eller smarta lösningar som ni lyckades implementera.
Presentationerna äger rum på torsdag den 16:e november.
Del 5: muntlig tentamen
Den muntliga tentamen är en liten del av den totala bedömningen och är främst till för att komplettera sånt som inte framgick av er inlämning, samt för att underlätta bedömningen av enskilda insatser i de projektgrupper som består av flera deltagare.
Det enda som ni behöver förbereda till den muntliga tentamen är att ha koll på de olika delarna av er kod, vilka beräkningar som utförs var och hur era olika klasser och metoder interagerar. Om ni arbetar i en projektgrupp med flera deltagare och har valt att dela upp ansvaret för olika filer/klasser/metoder så behöver inte varje person ha detaljkunskap om hela kodbasen, men ni måste ha översiktlig kunskap om all kod i ert program. Det bästa sättet att skaffa detta är att inför den muntliga tentamen be er gruppkamrat att förklara de delar av koden som ni själva inte skrev, och vice versa.
Den muntliga tentamen äger rum på måndag den 20:e november. Ni bokar tider till den via PingPong under Verktyg > Inbjudningar. Ha med en dator med källkoden till ert projektarbete.
Notera att datumet på den muntliga tentamen har ändrats på grund av EU-toppmötet. Det är alltså den 20:e november som gäller, inget annat. Tiderna som går att boka i PingPong reflekterar detta.
Inlämning
Deadline för projektarbetet är den 14:e november klockan 23:55. För att lämna in ert arbete, följ dessa instruktioner:
- Se till att alla textfiler som ert program läser in (produkter, rabattkoder och eventuella egna utökningar) innehåller lämplig exempeldata, så att programmet kan köras utan att ändra på filerna.
- Se till att alla textfiler som ert program läser in ligger i projektmappen och öppnas med relativa sökvägar. (Om ert program exempelvis öppnar en fil med en sökväg som börjar på
C:\ så behöver det ändras.)
- Se till att filen
Overview.txt eller Overview.pdf finns i projektmappen. Denna fil beskrivs under Dokumentation. Endast .txt och .pdf är tillåtna.
- Om ni vill ha chans till betyget VG, se till att filen
Design.txt eller Design.pdf finns i projektmappen. Denna fil beskrivs under Dokumentation. Endast .txt och .pdf är tillåtna.
- Öppna ert projektarbete i Visual Studio och kör kommandot
Build > Clean Solution.
- Stäng ner samtliga instanser av Visual Studio.
- Öppna mappen på datorn som innehåller era Visual Studio-solutions (vanligtvis
C:\Users\[användarnamn]\source\repos).
- Högerklicka på mappen som innehåller ert projektarbete och välj
Send to > Compressed (zipped) folder.
- Extrahera ZIP-filen till valfri plats på datorn och öppna
.sln-filen i den.
- Kör programmet i Visual Studio och bekräfta att allting fungerar som det ska.
- Lämna in ZIP-filen via PingPong.
Om ni misslyckas med något av stegen, kontakta mig i god tid före inlämning.
Följ instruktionerna noga! Om er inlämning är felaktig så kommer jag inte att kunna bedöma och betygsätta ert arbete.
Betygsättning
De möjliga betygen för projektarbetet är G och VG, och ni som får VG på projektarbetet kommer också att få VG på kursen i sin helhet (förutsatt att ni har fått G på alla andra kursmoment). Betygsättningen sker individuellt och kan alltså skilja sig mellan deltagare i samma projektgrupp.
De fullständiga betygskriterierna finns i kursplanen, som är den officiella och fullständiga beskrivningen av vad som gäller för både projektarbetet och kursen i sin helhet. Det som följer är några tips på vad ni bör fokusera på för att kunna få det betyg som ni siktar på i projektarbetet och i förlängningen kursen i sin helhet:
- Målet med projektarbetet är inte att skriva så mycket kod som möjligt eller att skriva ett program med så mycket funktionalitet som möjligt. Målet är istället att skriva ett program som uppvisar er kunskap om kursens innehåll på ett så bra sätt som möjligt.
Ni behöver inte göra ett GUI som ser vackert ut eller är oerhört användarvänligt. De två kraven här är följande:
- GUI:t ska gå att förstå genom att testa sig fram. Om någon funktionalitet är ovanligt svår att förstå så ska den beskrivas direkt i GUI:t med någon form av instruktion. (Om ni inte själva kan bedöma vilken funktionalitet som är svår att förstå, testa den på någon av era klasskamrater!)
- GUI:t ska anpassa sig någorlunda bra till fönstrets storlek även när denna ändras. Ni behöver dock inte hantera problem som uppstår i väldigt små eller väldigt stora fönster.
Om ni får begränsat med tid och inte har tid att göra klart allt som ni skulle vilja, arbeta då utifrån följande prioritetsordning:
- Se till att den kod som ni redan skrivit är utformad på ett så bra sätt som möjligt, inklusive struktur, namngivning, korrekthet och liknande egenskaper.
- Uppvisa kunskap i fler av kursens innehållsområden genom att utöka programmet på lämpligt sätt.
- Utöka programmet med mer eller bättre funktionalitet (ur användarens perspektiv) på ett sätt som inte försämrar ert tidigare arbete.
Med andra ord är det exempelvis bättre att uppvisa god kunskap i tio innehållsområden än måttlig eller dålig kunskap i femton innehållsområden, och bättre med begränsad funktionalitet som uppvisar kunskap i femton innehållsområden än omfattande funktionalitet som uppvisar kunskap i tio innehållsområden.
Detta är vad som gäller om ni får ont om tid och måste prioritera. Om ni har nog med tid att göra allt som nämns ovan så ska ni dock göra det.
Viktigt: Skriv inte mer kod enbart för att ge ert program mer funktionalitet. Om den kod som ni skriver lägger till ny funktionalitet men varken är av hög kvalitet eller uppvisar kunskap i fler innehållsområden så kan den försämra helhetsbedömningen av er inlämning.
- För att få betyget G behöver ni skriva ett fungerande program som uppvisar kunskap i de flesta av kursens innehållsområden och visar att ni vet hur man kan använda dessa i riktiga program. För att få betyget VG behöver ni dessutom uppvisa fördjupad kunskap i de flesta av kursens innehållsområden samt utföra punkt 3 under "Dokumentation". Betyget sätts dels utifrån en helhetsbedömning av er inlämning och dels utifrån era motiveringar och förklaringar kring hur ni har valt att skriva programmet. Om ni kan förklara inte bara vad ni har gjort och hur ni har gjort det utan också varför ni har gjort det så ökar ni väsentligt era chanser att få betyget VG.
- Jag kan inte bedöma under projektets gång vilket betyg er inlämning kommer att få utan gör detta först efter inlämningen. Dock kan jag om det behövs titta översiktligt på ert arbete och ge er generella tips om vad ni skulle kunna fokusera på.
Övrigt
- Ni förväntas följa kodkonventionerna för C#. Nämnvärda avvikelser från denna bör dokumenteras.
- Samtliga namn i källkoden ska vara på engelska. Texten i ert GUI (alltså det som visas för användaren) kan vara på antingen svenska eller engelska.
- Ni får inte lämna in kod som har skapats av Designer-funktionaliteten i Visual Studio. Ni kan dock använda er av denna i ett helt separat projekt för att lära er mer om Windows Forms, vilket beskrivs i ett separat dokument.