Winkelbeheer

Structuur van Computerprogramma’s II: Taak 2
Dries Harnie
Coen De Roover
Dit document beschrijft taak 2 voor het vak
“Structuur van Computerprogramma’s II”.
De deadline voor deze taak is 23 november 2014 om 23:59.
1
Inleiding
Als volgende stap van het “point of sale” (PoS) systeem zullen we een interface ontwikkelen om de voorraad en prijslijst te beheren. Deze moet beheerders toelaten om
nieuwe artikelen toe te voegen, artikelen aan te passen of te verwijderen, of prijzen van
artikelen te veranderen.
2
Functionele eisen
Beheerdersinterface De beheerdersinterface krijgt de vorm van een interactief programma. Deze moet de volgende commando’s aanvaarden:
• list
Dit commando geeft alle artikelen in de prijslijst weer aan de gebruiker, met het
aantal artikelen die nog in stock zijn. In het voorbeeld hieronder staan van links
naar rechts de streepjescode, het aantal artikelen, de prijs per artikel, en de naam
van het artikel. Het verwacht geen argumenten.
Voorbeeld: (invoer van de gebruiker in het vetjes gedrukt)
> list
5449000000996
4333465106205
9780321563842
24
10
5
1.00
0.30
17.90
Coca-Cola 33cl blik
Zakdoekjes
The C++ Programming Language, 4th Edition
• add <streepjescode>
Dit commando voegt een artikel toe aan de prijslijst. De gebruiker moet apart nog
de naam van het artikel, de initiële prijs, en de initiële voorraad aangeven. Indien
de gebruiker op minstens één van deze drie vragen antwoordt met een lege lijn
wordt het artikel niet toegevoegd. Ook mag de prijs niet kleiner of gelijk aan nul
1
zijn. Het is niet toegelaten een artikel met een reeds bestaande streepjescode toe
te voegen.
Voorbeeld:
> add 5410041014600
Naam? Cent wafers
Prijs? 0.30
Voorraad? 5
Artikel 5410041014600 (Cent wafers) toegevoegd.
> add 3662168005302
Naam? Blauwe bordstift
Prijs?
Artikel niet toegevoegd.
• remove <streepjescode>
Dit commando verwijdert een artikel uit de prijslijst. Indien het artikel niet bestaat
wordt er een foutmelding afgedrukt.
Voorbeeld:
> remove 4333465106205
Artikel 4333465106205 (Zakdoekjes) verwijderd.
• edit <streepjescode>
Dit commando laat de gebruiker toe om de naam, prijs of voorraad van een artikel
te wijzigen. Dezelfde bevraging als bij het add commando wordt gebruikt, maar
als de gebruiker met een lege lijn antwoordt wordt de huidige waarde gewoon
overgenomen.
Voorbeeld:
> edit 9780321563842
Naam? [The C++ Programming Language, 4th Edition]
Prijs? [17.90] 15.00
Voorraad? [5]
Artikel 9780321563842 (The C++ Programming Language, 4th Edition) aangepast.
• stock <streepjescode> <wijziging>
Dit commando wijzigt het aantal artikelen in de voorraad met de gegeven streepjescode. Het <wijziging> argument kan drie vormen aannemen:
1. +aantal: Het opgegeven aantal wordt bijgeteld bij de voorraad.
2. -aantal: Het opgegeven aantal wordt afgetrokken van de voorraad.
Merk op dat de voorraad hierdoor niet onder nul mag gaan.
3. aantal: De voorraad wordt op het opgegeven aantal gezet.
2
Voorbeeld:
> stock 9780321563842 +2
Stock voor 9780321563842 (The C++ Programming Language, 4th Edition) is nu 7.
> stock 5449000000996 -3
Stock voor 5449000000996 (Coca-Cola 33cl blik) is nu 21.
> stock 5449000000996 22
Stock voor 5449000000996 (Coca-Cola 33cl blik) is nu 22.
• save
Dit commando slaat alle openstaande wijzigingen op naar de schijf.
• quit
Dit commando sluit de interactie met de gebruiker af. Indien er nog openstaande
wijzigingen zijn moet de gebruiker nog de kans krijgen deze te bewaren.
De beheerdersinterface moet een aantal invarianten onderhouden:
1. Er mogen nooit twee artikelen zijn met dezelfde streepjescode;
2. Prijzen mogen nooit kleiner dan of gelijk aan nul zijn;
3. Voorraden mogen nooit onder nul gaan.
Gebruik van in-memory datastructuren Bij het opstarten moet de beheerdersinterface zowel de huidige prijslijst als de stock inlezen. Aanpassingen die de gebruiker
maakt mogen enkel in het geheugen plaatsvinden. Je moet dus gebruik maken van de
datastructuren die C++ aanbiedt (of er zelf uitvinden). Pas als de gebruiker het save
commando ingeeft mogen de wijzigingen terug naar bestanden geschreven worden. Als
de gebruiker het programma afsluit met openstaande wijzigingen moet je de gebruiker
nog de kans geven om deze weg te schrijven.
3
Niet-functionele eisen
Maak je code overzichtelijk en probeer code-duplicatie te vermijden door middel van
functies, klassen en andere technieken die we in de les gezien hebben. Je moet je project
afgeven als een .tar.gz archief, met als naam taak2-<netid>.tar.gz . Dus voor mij
zou dit bestand bijvoorbeeld taak2-dharnie.tar.gz heten.
In dit archief moet de volgende directory-structuur zitten:
taak2-<netid>/
beheer.cpp
(andere .cpp of .h bestanden)
3
Indienen kan je via email: [email protected].
Veel succes!
4