Skip to content

Kmom07/10: Projektet Dbwebb B&B

Image description
Bild: Dbwebb B&B

Du ska utveckla ett objektorienterat system i C# för ett Bed & Breakfast (Dbwebb B&B). Systemet ska hantera olika övernattningsmöjligheter, som rum, stuga och tält, samt dessutom hantera gäster och bokningar. Syftet är att ge en praktisk tillämpning av objektorienterade principer som arv, polymorfism, relationer mellan klasser och metodöverlagring.

Du har jobbat igenom kmom01-kmom06 och lämnat in dessa. Innan du påbörjar projektet förväntas du ha kunskaper motsvarande innehållet från kmom01-06.

Projektet rättas först när att kmom03, kodintervjun och kmom06 är godkända.

Det finns ett dokument som beskriver grunderna för bedömning och betygsättning av projektet och kursen som helhet.

Börja med att ta fram ett övergripande klassdiagram i vilket det framgår vilka klasser som ingår i lösningen samt hur dessa relaterar till varandra. Detta lämnas in och därefter tittar en lärare på det och avgör om det är rimligt eller ej. Relevanta/Uppenbara attribut och metoder ska finnas med, men under arbetets gång kommer du förmodligen behöva lägga till och göra mindre ändringar i klassdiagrammet. Din slutliga lösning får dock inte skilja sig markant från det du utgått ifrån.

  • ett första utkast av klassdiagrammet som lämnas in separat och som är godkänt av lärare
  • minst 6 egendefinierade relevanta klasser som finns i det godkända klassdiagrammet
  • egendefinierat, logiskt och rimligt arv
  • minst 2 olika relationer (komposition/aggregation/association)
  • överlagring
  • överskuggning
  • filhantering (läsa från och/eller spara på fil)
  • felhantering med undantag
  • all in- och utmatning ska ske i en enda klass
  • koden ska överensstämma med klassdiagrammet
  • koden ska följa kodreglerna
  • koden ska vara städad (till exempel ej utkommenterade kodavsnitt)
  • någon komplex datatyp, som List, Array eller Dictionary, ska ingå
  • programmet ska kunna köras utan exekveringsfel
  • Använd hjälpmetoder för att få ner antalet kodrader. En vanlig rekommendation är max 20 rader per metod.
  • Använd namngivningsreglerna.
  • Alla attribut i en klass ska vara privata
  • Gör minst en explicit konstruktor i varje klass.
  • Använd de kodkonstruktioner som finns på kursens webbsida.
  • Använd inte (inte tillåtet) lambda-funktioner.
  • Använd inte (inte tillåtet) paket som LINQ, record, dynamiska typer, goto och extension-metoder.

Följande menyalternativ ska finnas samt en rubrik som innehåller Dbwebb B&B samt aktuellt datum:

  • 1 - Visa alla rum
  • 2 - Lägg till en gäst (Visa gästlistan)
  • 3 - Ta bort en gäst
  • 4 - Visa lediga rum
  • 5 - Boka ett rum
  • 6 - Avboka ett rum
  • q - Avsluta

Dbwebb B&B har olika sorters övernattningsmöjligheter, som vanliga rum, stugor och tält. För de som bor i stugor och tält kan frukost beställas i samband med att övernattning bokas för 110 kr per person.

Image description
Bild: Dubbelrum

För de gäster som vill ha det mer bekvämt finns det rum med frukost att hyra i huset.

  • enkelrum för 800 kr natten eller dubbelrum för 1200 kr natten
  • extra säng är möjlig i vissa av dubbelrummen och medför en extra kostnad på 300 kr
  • eget bad/delat badrum, eget badrum medför en extra kostnad på 200 kr
Image description
Bild: Stuga

För de gäster som vill bo lite mer avskilt men fortfarande bekvämt så är stuga ett alternativ. Här kan gästerna köra ända fram till stugan. Stugan kostar 800 kr natten.

  • 2 våningssängar med eget badrum och pentry
  • parkeringsplats ingår i priset
  • städning ingår mot en extra kostnad på 400 kr
Image description
Bild: Tält

För det gäster som vill ha ett budgetboende med mer naturupplevelse så finns det tält att hyra för 400 kr natten. Om du vill ha el till lampa och laddare så finns det. Vill gästerna ta med egen frukost finns kylbox att hyra.

  • 2 bekväma liggunderlag med sovsäcker
  • med eller utan el, el medför en extra kostnad på grundkostnad på 20 kr (vanlig el med lampor) för kylbox så tillkommer en extra kostnad på 30 kr extra kostnad

Du börjar med att göra ett klassdiagram som du lämnar in på Canvas. Helst ska en lärare godkänna ditt klassdigram innan du påbörjar implementationen men med alla helger över jul och nyår så är det bättre att du börjar lite smått.

När klassdiagrammet är klart ska du göra en kort plan för hur du kommer att lägga upp ditt arbete. Vilken klass börjar du med? Hur testar du den efter hand? Nu är du redo att påbörja implementationen.

Krav 2: Rum och gäster, implementera menyalternativ 1-3

Section titled “Krav 2: Rum och gäster, implementera menyalternativ 1-3”

Skapa en klass som hanterar B&B:et. Dbwebb B&B har ett bestämt antal (minst 10) övernattningsmöjligheter som beskrivs med ett rumsnummer, antal gäster och om frukost önskas. Informationen om de olika övernattningsmöjligheterna läser du in från fil. Här behöver du fundera över hur informationen om övernattningsmöjligheterna ska lagras på filen och anpassa inläsningen efter det. Informationen om övernattningsmöjligheterna hittar du ovan. Tänk på den filen som en beskrivning av hur just ditt Dbwebb B&B ser ut. Hur många rum och vilka har eget badrum och kan ha extra säng? Det bestämmer du.

Polymorfism ska användas på ett logisk och rimligt sätt (via arv).

Menyalternativ 1 presenterar alla rum med en beskrivning och rummen visas grupperade efter typ av övernattning.

Dbwebb B&B har även en gästlista med gäster. Du skapar gästlistan genom att läsa uppgifter om gästerna från fil. Från början ska det finns 3 stamkunder i gästlistan. När programmet stängs ner ska gästlistan sparas för att läsas in igen när programmet startas på nytt.

Menyalternativ 2 möjliggör inmatning av uppgifter för en gäst. En gäst beskrivs med ett id-nummer, vilket kan vara födelsedata eller något annat nummer, namn och om kunden är stamkund eller inte. Om vill kan du inkludera email och adress. Skriv ut alla gäster i gästlistan först för att se om gästen redan finns. Här kan du lägga till att om inget namn matas in, så visas bara gästerna.

Menyalternativ 3 möjliggör borttagning av en gäst. Skriv ut alla gäster i gästlistan först för att se gästernas id-nummer och använda det för att ta bort gästen.

Gör en enkel bokning utan datum som innehåller antalet nätter, rum och gäst. Bokningen utgår alltid från idag. Dbwebb B&B har ansvar för bokningarna. Du ska kunna boka en övernattning för en viss gäst från gästlistan. Den övernattningen är då inte längre ledig.

Menyalternativ 4, skriver ut de övernattningsmöjligheter som är lediga.

Menyalternativ 5, gör en bokning. Mata in övernattningens namn och gästens id. Vi kan förvänta oss att användaren skriver ut gästlistan och de lediga rummen innan och matar in rätt information för gästen och rummet för att skapa en bokning.

Menyalternativ 6, avbokar en viss bokning.

När du planerar dina tester så utgår du ifrån krav och kodregler för att säkra kvaliteten i ditt program på bästa sätt. In- och utmatning i terminalen kan du testa manuellt men ändå beskriva det i testplanen. Testa alla relevanta metoder. Implementera testfallen med NUnit och de ska kunna köras med dotnet run.
Tänk 1-2 testfall per publik metod i varje klass och en testklass per klass.

  • Gör en testplan för dina klasser.

  • Gör ett testprojekt med testklasser och testfall som i kmom05.

  • Testplanen ska sparas som pdf i kmom10-katalogen.

Image description
Bild: Kanot- och cykeluthyrning

Dbwebb B&B vill öka sin lönsamhet med uthyrning av kanoter och cyklar samt erbjuda olika paket för att locka kunder. Cyklar och kanoter räknas som inventarier och skrivs av på 5 år. De hyrs ut per dygn och ska kunna bokas i samband med att övernattning bokas. Kanske kommer uthyrning att utökas i framtiden så din lösningen bör var flexibel och lätt att utöka.

Antag att 6 cyklar köps in för 4995 kr stycket samt 4 kanoter för 16499 kr stycket. Hyran för en cykel är 175 kr per dygn och 400 kr per dygn för en kanot.

Ett annat sätt att öka lönsamheten är att erbjuda paketlösningar. Antag paketet:

  • Dubbelrum med eget bad och cykel på köpet (2 gäster och 2 cyklar). Omkostnaderna för ett dubbelrum med eget bad inkklusive cyklar är 790 kr per dygn.

Lägg till ett menyalternativ 7 - Visa rapporter, som visar minst 3 olika rapporter; en för cyklar, en för kanoter och en för paketet. Rapporterna ska se enhetliga ut med tydlig information om vad rapporten handlar om, inkomst (intäkt), kostnad och vinst för ett visst antal dagar som användaren matar in.

Du ska använda ett interface och implementationen ska innehålla minst 2 klasser som bygger på interfacet. Interfacet ska innehålla minst 4 metoder för hämta namn (t ex “Cykeluthyrning”), hämta inkomst, hämta kostnad och hämta vinst. I menyalternativ 7 anger du antalet dagar som rapporten ska beräknas på.

Det är inte tillåtet att använda Properties.

Krav 6: Bokning med datum & betalning (Optionellt)

Section titled “Krav 6: Bokning med datum & betalning (Optionellt)”

Utöka bokningen med datum och betalning. Nu ska du kunna ge ett startdatum och ett antal nätter, eller om du vill, start- och slutdatum när du söker efter lediga övernattningsmöjligheter för ett visst antal gäster 1-4. Även bokningen ska utökas med startdatum och ett antal nätter, eller om du vill, start- och slutdatum.

Betalning ska göras antingen med kort eller kontant. Ett kvitto ska skrivas ut på fil. Kvittot ska innehålla betalningssätt, specifikation på vad betalningen omfattar. Till exempel kan det vara en stuga med städning och frukost. Om det betalas med kort ska kortnumret vara med.

Det är inte tillåtet att använda Properties.

Dubbelkolla att du följt kraven i Projektet ska innehålla och var i koden du gjort det.

Dubbelkolla att du följt Övriga krav och Kodregler.

Läs instruktionen om hur du skall redovisa.

Utöver en vanlig inlämning ska du också göra en Pull Request.

Gör en inlämning i Canvas med länken till din PR.

I projektet ska du skriva en rapport som ska innehålla:

  • Inledning om projektet med vilka krav du implementerat
  • Ett kapitel för implementationen
    • Hur tänkte du? Planering? Genomförande?
    • Ett delkapitel per krav 10-15 meningar
  • Vad tycker du om projektet? Hur gick det?
  • Vad tycker du om kursen? Om du skulle rekommendera kursen, vad ger du för betyg 1-10 (10 är bäst)?

Ladda upp rapporten som en fil i Canvas.

Du ska lämna in en redovisningsvideo på 6-8 min som innehålla:

  • Id, visa ditt leg i början av videon
  • Visa dig (hela videon)
  • Inledning med vilka krav du gjort
  • Gå kort igenom ditt uppdaterade klassdiagram
  • Visa programmet (ena halvan av skärmen)
  • Visa och berätta om delar av koden (andra halvan av skärmen)
  • Visa testplanen kort
  • Kort avslutning

Redovisa länken till din video på Canvas.

Vill ha tips om hur du kan förbereda och utföra en slutpresentation av ditt projekt, kan läsa dokumentet Planera din slutpresentation och Spela in en redovisningsvideo med OBS.

    Implementera krav 1-3 (optionellt 4-6) och gör en PR (bth/submit/kmom10)
    Skriv en rapport och ladda upp på Canvas
    Spela in en video och lämna in länken på Canvas