Examination 31 maj 2018

Detta är den individuella examinationen som är en del av kmom07-10.

Uppgifterna skall lösas individuellt och du får inte prata, diskutera eller chatta med någon för att ta hjälp. Fråga läraren om något är oklart med uppgifterna. Om du är distansstudent så kan du använda kursens Gitter-kanal för att ställa frågor till läraren.

Övriga hjälpmedel är tillåtna, inklusive egen dator, access till Internet och tillgång till tidigare kursmoment och ditt kursrepo.

Examinationen är begränsad till 5 timmar.

Du behöver samla ihop minst 10 poäng för att få godkänt på detta examinationsmomentet. Samla fler poäng för att nå ett högre slutbetyg på kursen.

Spara all kod i me/kmom10/exam och inled med en dbwebb exam checkout exam (om du inte redan gjort det).

Missa inte att läsa sista stycket om hur du skall lämna in din examination, glöm inte att avsluta med en dbwebb exam seal exam.

#Inledning

Du har fått i uppdrag av det stora TV-bolaget “SeeMer” att utveckla en online-tjänst till den populära TV-serien “Det stora slaget om tårtan”. Tjänsten skall visa upp tårtorna och man kan genomföra tävlingar och rösta på vilken tårta som är bäst.

Gör en godtycklig sökning på “tårtor” så kan du finna inspiration till innehåll i databasen, eller kika på webbplatsen för TV-programmet “Det Stora Tårtslaget”.

#Uppgift 1 10p (obligatorisk)

Bygg en databas med en webbklient och en terminalklient.

#Filheader med ditt namn och akronym

I varje fil du skapar (*.sql och *.js) så lägger du en kommentar överst, som en header i filen. I kommentaren skriver du ditt namn, akronym och datum så det är tydligt att det är din fil.

#Filer för npm

Om du använder moduler som installeras med npm så skall de finnas i en package.json.

Den som rättar skall endast behöva göra npm install.

#Filer för databasen

I filen sql/setup.sql lägger du kod för att skapa databasen exam och för att ge tillgång till användaren user med lösenordet pass.

I filen sql/ddl.sql lägger du alla SQL DDL som skapar databasens schema.

I filen sql/insert.sql lägger du SQL INSERT för att fylla upp databasen.

Skriver du mer SQL-kod så lägger du den i sql/dml.sql. Det är bra att spara på kod, man vet aldrig när man vill titta tillbaka på den.

Samtliga filer skall gå att köra i en sekvens, för att återskapa databasen.

Använd kommentarer för att göra koden snygg och ordningsam.

GLÖM INTE att små och stora bokstäver spelar roll i din SQL-kod. Se till att du namnger tabeller och kolumner på samma sätt överallt i din kod.

#Tårtor

Kunden vill visa upp alla tårtor som skapats i programmet. Skapa en tabell för tårtorna och lägg in 5 tårtor.

Tabellen bör innehålla detaljer om tårtan såsom namn, beskrivning, datum (då den bakades i TV-programmet) samt en bild.

Gör en lagrad procedur som visar innehållet från tabellen (SELECT *).

När tabellen är klar så bygger du en terminalklient som visar upp tabellens innehåll och skriver ut dess innehåll i en fint formatterad textbaserad tabell.

Terminalklienten bygger du med ett menysystem och kommandot för att skriva ut innehållet från tårt-tabellen är tarta. Din terminalklient innehåller även kommandon för att visa menyn menu och för att avsluta exit.

Man startar terminalklienten via cli.js.

Kunden gillar vad de ser och ber dig bygga en webbklient som listar samma innehåll i en webbsida, fint uppstyrt i en HTML tabell.

I webbklienten gör du även en framsida som representerar TV-serien “Det stora slaget om tårtan”. Alla sidorna på webbplatsen har en gemensam header, footer och navbar.

Man startar webbklienten via index.js.

Terminalklienten och webbklienten använder samma gränssnitt (samma kodbas) mot databasen och det är den lagrade proceduren som används.

#Tårttävling

Kunden gillar vad de ser och ber om ytterligare en webbsida i webbklienten som kan hantera tårttävlingar.

Du skapar en tabell för tävlingar och skapar kolumner för namnet på tävlingen, en beskrivning av tävlingen och datum då tävlingen kommer att ske.

Du fyller tabellen med två tävlingar. En som har varit och en som är på dagens datum.

Du skapar en lagrad procedur som skriver ut informationen om alla tävlingar.

Du lägger till kommandot tavling i terminalklienten som skriver ut alla tävlingar i tabellform.

#Länka mellan tårta och tävling

Kunden gillar återigen vad de ser, men undrar om man inte kan koppla samman informationen från de båda tabellerna och visa i en gemensam rapport.

Kunden vill se ytterligare en sida där man först visar informationen om tävlingen och sedan listar de tårtor som ingår i tävlingen.

Du ser att här behövs en kopplingstabell, en tabell som kan länka mellan en tävling och de tårtor som ingår i en tävling. Du skapar en sådan tabell och för varje tävling lägger du in minst två tårtor.

Du uppdaterar din webbsida som visar tävlingarna och gör varje tävling klickbar. Klicket leder till en ny sida som visar information om tävlingen samt information om de tårtor som deltar i tävlingen.

Du använder (minst) en lagrad procedur för att generera rapporten från databasen.

Du uppdaterar din terminalklient och gör så den kan skriva ut de tårtor som deltar i en viss tävling. Kommandot för detta blir tavling <id> där man kan ange ett id för en tävling och på så sätt se de tårtor som finns i just den tävlingen.

#Uppgift 2 10p (optionell)

Kunden börjar bli riktigt nöjd och vill nu att man skall kunna rösta (+1) på en tårta som deltar i en tävling.

Du uppdaterar terminalklienten med en +1 funktion via rosta <tavlingsid> <tartid>.

Du lägger till en sida i webbklienten som på motsvarande sätt erbjuder en möjlighet att rösta på en tårta i en tävling, genom att “klicka på +1-knappen”.

Du uppdaterar din listning av tårtorna i tävlingen så att de sorteras i ordning så att den som har flest röster hamnar först (både terminalklient och i webbklienten).

#Uppgift 3 20p (optionell)

Kunden vill kunna uppdatera informationen på sin webbplats. Du bygger CRUD till dem så de kan lägga till tårtor och tävlingar via webbklienten.

Kunden blir extra glad om de även kan koppla tårtor till tävlingarna.

#Inlämning

Innan du lämnar in så skall du se till att din kod validerar via dbwebb validate.

Lämna slutligen in genom att göra dbwebb exam seal exam.

Vid problem, maila mos@bth.se och gör en dbwebb upload och maila sedan mos@bth.se och berätta vad som hänt och ange ditt namn och studentakronym.

#Revision history

  • 2018-05-30: (A, mos) Examinationen 31 maj 2018.

Document source.