Inlämningsuppgift 1

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.

Del 1: grundbeteende

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.

Del 2: utökat beteende

När ni har färdigställt programmet enligt specifikationen ska ni också utöka det genom att utföra en av uppgifterna nedan:

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.

Upplägg

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:

  1. using System;
  2. ...
  3. namespace ConsoleApp
  4. {
  5. // Er definition av klassen "Product", samt eventuella andra egna klasser, ska placeras här.
  6. class Product
  7. {
  8. ...
  9. }
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. // Indata
  15. // När jag som rättare (och ni själva som utvecklare) testar olika kombinationer av indata så är det enbart värdet på variabeln "cart", angivet i tilldelningen nedan, som ska ändras. Värdet som används nedan är ett ofullständigt exempel enbart avsett att illustrera hur denna del av programmet ska se ut. I er inlämnade kod kan variabeln "cart" ha godtyckligt giltigt värde, inklusive en tom array. Medan jag testar programmet tar jag som rättare ansvar för att fylla i giltig indata enligt den definition av klassen "Product" som ni har skrivit.
  16. Product[] cart =
  17. {
  18. new Product { ... },
  19. new Product { ... },
  20. ...
  21. };
  22. // Beräkningar
  23. ...
  24. // När sista raden har körts ska variabeln "total" innehålla det totala priset på kundens beställning, beräknat enligt specifikationen.
  25. }
  26. }
  27. }

Inlämning

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.

Övrigt