Structuur van Computerprogramma’s II: Taak 3 Dries Harnie Coen De Roover Dit document beschrijft taak 3 voor het vak “Structuur van Computerprogramma’s II”. De deadline voor deze taak is 21 december 2014 om 23:59. 1 Inleiding Als volgende stap van het “point of sale” (PoS) systeem zullen we ondersteuning toevoegen voor verschillende manieren om korting te geven. Dit heeft een invloed op zowel de beheerders- als de verkoopsinterface. Kortingen In deze taak voorzien we vier verschillende manieren om korting te verkrijgen1 : 1. Een klantenkaart. Deze geeft een vast percentage korting op alle artikelen in een aankoop. Een klantenkaart moet gescand worden voor, tijdens, of na het scannen van de artikelen. Er kan maar één klantenkaart per aankoop gebruikt worden. 2. Volumekorting. Deze korting wordt automatisch toegepast als een klant een voldoende aantal eenheden van een bepaald artikel koopt. 3. Een vaste korting. Er is een vaste korting op een bepaald artikel. 4. “N kopen M gratis”. Zoals de naam zegt krijgt de klant bij elke aankoop van N artikelen er M gratis artikelen bij. Aankopen voorbij N + M artikelen komen opnieuw in aanmerking voor dezelfde korting. Elke korting — op de klantenkaart na — kan bovendien een start- en einddatum (inclusief) hebben. Een korting kan nooit eindigen voor ze begint, maar start- en einddatum kunnen wel samenvallen. 1 Maak je design uitbreidbaar! 1 2 Functionele eisen In deze taak bundelen we zowel de beheerders- als de verkoopsinterface in één programma. Het programma moet tussen deze twee interfaces kiezen aan de hand van de argumenten: # $ # $ Start de beheerdersinterface pos beheer Start de verkoopsinterface pos verkoop Om dit onderscheid te maken moet je programma kijken naar de parameters van de main functie, waar argc het aantal argumenten plus één bevat en argv wijst naar een array van de argumenten: int main(int argc, char ** argv) { ... } Beheerdersinterface De beheerdersinterface wordt uitgebreid met commando’s om kortingen te beheren. Kortingen moeten net zoals de prijslijst persistent zijn, dat wil zeggen dat aanpassingen bewaard moeten blijven tussen runs van je programma. Je mag het formaat van de kortingenlijst zelf kiezen. De interface moet volgende bijkomende commando’s aanvaarden: • discount add <streepjescode> <soort> Dit commando voegt een nieuwe korting toe. Het <soort> argument is één uit de volgende lijst: VOLUME, VAST, EXTRA. Deze soorten komen overeen met kortingen 2–4 uit de inleiding. De gebruiker moet apart nog de parameters van de korting ingeven. Let erop dat er op elk moment maar één korting mag lopen per artikel, maar er kunnen meerdere kortingen zijn waarvan de begin- en einddata niet overlappen. Je programma moet een fout geven als een nieuwe korting overlapt met een andere. Voorbeeld: > discount add 5449000000996 VAST Startdatum? [25/09/2014] Einddatum? 31/12/2014 Hoeveel percent korting? 5 Korting voor artikel 5449000000996 (Coca-Cola 33cl blik) toegevoegd. > discount add 3662168005302 EXTRA Startdatum? [25/09/2014] Einddatum? 31/10/2014 Minimum aantal? 4 Gratis aantal? 1 Korting voor artikel 3662168005302 (Blauwe bordstift) toegevoegd. 2 > discount add 5449000000996 VAST Startdatum? [25/09/2014] 30/12/2014 Einddatum? 01/04/2015 Korting niet toegevoegd: overlapt met eerdere korting. • discount del <streepjescode> Dit commando verwijdert de korting die momenteel van toepassing is op een bepaald artikel. Kortingen die momenteel niet gelden worden niet verwijderd. Voorbeeld: discount del 5449000000996 Korting voor artikel 5449000000996 (Coca-Cola 33cl blik) verwijderd. • discount list Dit commando geeft een lijst terug van alle kortingen die niet verlopen zijn. Actieve kortingen worden met een sterretje (*) aangeduid. Voorbeeld: 1) *5449000000996 1) 5449000000996 2) *3662168005302 3) *333465106205 (Coca-Cola 33cl blik): 5% (Coca-Cola 33cl blik): 4% (Blauwe bordstift): 4 + 1 (Zakdoekjes): 10% korting vaste korting (einde 31/12/2014) vaste korting (einde 31/12/2015) gratis (einde 31/10/2014) vanaf 20 stuks (einde 31/12/2020) Verkoopsinterface De verkoopsinterface is — net zoals in de eerste taak — een programma dat haar standaard invoer uitleest. Elke lijn invoer kan ofwel een combinatie van streepjescode en aantal zijn (gescheiden door een TAB-karakter), ofwel de letterlijke string klantenkaart gevolgd door een TAB-karakter en een getal dat het percentage korting aangeeft. In tegenstelling tot de eerste taak kan het deze keer wel gebeuren dat er meerdere lijnen invoer zijn voor hetzelfde artikel. De invoer wordt opnieuw afgesloten door een puntje op een lijn apart. Pas dan moet je programma uitvoer geven, in de vorm van een overzicht van alle artikelen. Per artikel moet je nu als uitvoer geven: 1. de streepjescode; 2. het aantal verkocht; 3. de naam van het artikel; 4. de totaalprijs, zonder korting; 5. de korting die wordt toegepast; 6. een opsomming van de korting die van toepassing is voor dat artikel. Voorbeeld invoer en uitvoer (met de kortingen uit het discount list voorbeeld van toepassing): Merk op: De verkoopsinterface moet deze keer wél robuust zijn tegen artikelen die niet in de database zitten. Tevens moet je programma een foutmelding geven indien men twee klantenkaarten probeert te scannen. 3 333465106205 klantenkaart 333465106205 5549000000996 . 20 15 20 24 Listing 1: Voorbeeldinvoer Streepjescode 333465106205 5549000000996 Aantal 40 24 Subtotaal: Extra korting: Te betalen: 33.60 -5.04 28.56 Naam Zakdoekjes Coca-Cola 33cl blik Totaal 12.00 24.00 Korting -1.20 korting vanaf 20 stuk -1.20 5% vaste korting Listing 2: Voorbeelduitvoer 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 taak3-<netid>.tar.gz . Dus voor mij zou dit bestand bijvoorbeeld taak3-dharnie.tar.gz heten. In dit archief moet de volgende directory-structuur zitten: taak3-<netid>/ pos.cpp (andere .cpp of .h bestanden) Indienen kan je via email: [email protected]. Veel succes! 4
© Copyright 2024 ExpyDoc