Deadline 10:e september 23:55
Denna beskrivning har uppdaterats och förtydligats sedan den först publicerades. Vänligen läs den på nytt, i synnerhet avsnitten Del 1: grundbeteende och Upplägg.
Ni har fått i uppgift att skriva ett program som sköter utcheckningsproceduren i en näthandel. Detta innefattar att beräkna det totala priset på kundens beställning, inklusive fraktavgift och ett par andra detaljer. Specifikationen på programmet följer nedan och er uppgift är att skriva ett program som följer den så noga som möjligt.
Om någon del av specifikationen nedan är otydlig, kontakta mig för förtydligande. Om specifikationen är tydlig men ni kan tänka er mer än ett sätt att lösa ett problem så får ni själva välja vilken lösning som ni tycker är bäst.
Utöver programkoden uppmuntras ni också att lägga med kommentarer i ert program som förklarar otydliga eller kluriga delar av koden. Om ni i någon del av programmet har valt mellan flera möjliga lösningar bör ni också lägga med kommentarer som förklarar varför ni valde just er lösning. Ni måste inte lägga med några kommentarer alls, men i denna uppgift är det utan tvekan bättre att ha för många kommentarer än för få, då detta hjälper mig att förstå er lösning och minskar risken för att ni ska behöva komplettera er inlämning.
En tidigare version av denna specifikation nämnde av misstag både variabeln cart och variabeln basket. Det är enbart cart som ska användas.
Programmets indata är en samling produkter i en varukorg. Varje produkt har ett pris och ett namn. Samma produkt kan förekomma flera gånger i varukorgen (om kunden köper mer än ett exemplar av något). Inbördes ordning på produkterna i varukorgen har ingen betydelse. Indatan ska sparas i en enda variabel med namnet cart på programmets första rad, och typen på denna variabel ska vara Product[]. Det är dock upp till er själva att definiera klassen Product. Mer information om detta följer i avsnittet Upplägg.
Programmets utdata är det totala priset på hela beställningen: summan av priserna på samtliga produkter i varukorgen samt en fraktkostnad på 29 kronor. Om produkterna tillsammans kostar 300 kronor eller mer är frakten gratis. Utdatan ska sparas i en variabel med namnet total, vars värde i slutet av programmet ska vara det totala priset enligt reglerna som har beskrivits. Datatypen på denna variabel bestämmer ni själva.
Indatan ska skapas direkt i källkoden (och med andra ord inte läsas in från konsolen eller på annat sätt fås direkt från användaren), och för att testa olika kombinationer av indata ska man ändra värdet på variabeln cart. Det är dock endast denna del av programmet som ska ändras när man testar olika kombinationer av indata; resten av er källkod måste förbli likadan oavsett vilken indata jag som rättare vill testa programmet med. Man ska kunna testa programmet med godtyckligt antal produkter i varukorgen, och produkter med godtyckliga namn och priser. Mer information om detta följer i avsnittet Upplägg.
När ni har färdigställt programmet enligt specifikationen ska ni också utöka det genom att utföra en av uppgifterna nedan:
code som innehåller eventuell rabattkod.Ni väljer själva vilken av dessa tre utökningar som ni vill utföra. Er inlämning ska endast innehålla en och exakt en av dessa utökningar. Om ni på egen hand har utfört mer än en, se till att ni tar bort samtliga förutom en av dem innan ni lämnar in er lösning.
Hela ert program ska skrivas inuti en enda textfil med namnet Program.cs i stil med den som Visual Studio automatiskt skapar för nya C#-projekt. Indatan, utdatan och samtliga beräkningar ska placeras inuti metoden Main, precis som i tidigare övningar. Klasser som ni definierar själva ska placeras utanför metoden Main men inuti samma fil och namespace. Följande kodexempel illustrerar det upplägg som er källkod ska följa:
Er lösning ska lämnas in via PingPong senast klockan 23:55 den 10:e september. Hela lösningen ska lämnas in i form av en enda textfil med namnet Program.cs.