Computing the profits of a bakery on a given day

Suppose that you own a bakery and serve many clients each day. Keeping track of who paid for what is not always easy. Clients who make purchases create transactions that need to be stored, so that an accountant can validate the tax that needs to be paid at the end of a period. Bakeries can sell many products as these are relateively cheap and often in high demand. Correspondingly, this increases the number of transactions and the burden on the accountant.

Normally, you want to have an easy and simple interface that allows your employees to enter new information, ideally when it arrives, as opposed to having to search for an enormous amount of content at the end of the period. Sales receipts give such information, but they may not capture the full extent of the information richness coming from immediate, real-time feedback. When information about the sales is kept, it becomes possible to see which products people prefer and what price they are willing to pay for them. This allows the bakery to plan its production accordingly and introduce products whose demand can be verified. At the same time, some products might seem worth introducing, but they may become expensive for some clients.

Each customer transaction contains a timestamp (where the interface could help to determine the exact time it occurred), products that have been bought and total amount. Each customer has different preferences when it comes to bakery products and some products might even contain ingredients to which they are allergic. Giving the customer an interface to search and filter by ingredient could further ensure that they are accessing only foods that do not interfere with their health.

A bakery has also many properties, some of which you will be able to see in the code that follows, in the form of hints of how this code can be further improved or extended. It is interesting that these properties frequently address direct customer needs.

Since your bakery has many clients each day, you want to keep track of its profitability on a daily basis to ensure that you are not operating at a loss and that you are improving your performance over time. The code that follows makes the assumption that on a given day you had ten customers, each of which purchased specific products, whose prices and approximate production costs you knew in advance. The product names and prices included come from the website of "Junge Bäckerei", which you can visit for further information. The production costs were selected based on what seemed appropriate (may be too high or too low depending on the situation).

Note that in a bigger application, all classes would need to be separated into individual header files, containing no implementations.

#include <deque> #include <ctime> #include <iostream> #include <vector> #include <string> #include <map> using namespace std; string get_time() { time_t t = time(0); // now struct tm * now = localtime( & t ); string time = to_string(now->tm_hour) + ":" + to_string(now->tm_min) + ":" + to_string(now->tm_sec) + " " + to_string(now->tm_mday) + "." + to_string(now->tm_mon + 1) + "." + to_string(now->tm_year + 1900); return time; }; struct Product { string name; string description; double euro_price; }; class Transaction { private: string timestamp; vector<Product> products; double total_price; public: Transaction(string tst, const vector<Product>& prs): timestamp(tst), products(prs) {} vector<Product> get_products() { return this->products; } double get_total_price() { double total = 0.0; for(Product pr : products) { total += pr.euro_price; } return total; } }; class Bakery { private: vector<Transaction> transactions; vector<Product> products; map<string, double> product_costs; string location = "Hamburg, Bieberhause am HBF"; string name = "Junge Bäckerei"; // vector<string> branches; // vector<string> competitors; // bool offers_seats; // bool is_open; // bool ships_to_address; // bool branch_attractively_designed; // bool has_friendly_personnel; // bool has_short_servicing_times; // bool cares_about_employee_development; // bool offers_flexible_working_hours; // bool conveniently_reachable_by_feet; // bool conveniently_reachable_by_car; // bool neighborhood_friendly; // bool socially_responsible; // bool issues_sales_receipts; // double hygiene_inspection_score; public: Bakery() {} void add_products(const vector<Product>& products) { this->products = products; } void add_production_costs(map<string, double>& costs) { this->product_costs = costs; } void add_transaction(const Transaction& transaction) { this->transactions.push_back(transaction); } vector<Transaction> get_transactions() { return this->transactions; } vector<Product> get_products() { return this->products; } double compute_profit() { double revenue = 0.0; double costs = 0.0; for(auto transaction : get_transactions()) { revenue += transaction.get_total_price(); for(auto prod : transaction.get_products()) { costs += this->product_costs[prod.name]; } } //cout << "Revenue: " << revenue << endl; //cout << "Cost: " << costs << endl; double profit = revenue - costs; return profit; }; }; class Customer { private: // bool has_decided; // time_t can_wait_time; // time_t can_spend_euro; // vector<string> allergies; // vector<Customer> buys_for_people; public: Customer() {} Transaction buy_products(vector<string> product_names, Bakery& bakery) { vector<Product> prods; for(Product product : bakery.get_products()) { for(string product_name : product_names) { if(product.name == product_name) { prods.push_back(product); } } } //cout << prods.size() << endl; Transaction transaction(get_time(), prods); bakery.add_transaction(transaction); return transaction; } }; int main() { vector<Product> products = { {"Butterkuchen", "Saftig-lockerer Hefeteig mit gehobelten und gerösteten Mandeln.", 3.50}, {"Bäckerliebling", "Das feine Weizenbaguette von Meisterhand mit knuspriger Kruste und offener Krume. Für den besonderen Geschmack wird das Baguette bei der Herstellung in ein Tuch eingeschlagen, damit der Teig ruhen kann.", 1.99}, {"Croissant", "Gezogener Plunderteig aus Weizenmehl mit köstlich buttrigem Geschmack.", 1.05}, {"Dinkel plus Avocado", "Vitaler Genuss: Unser knuspriges Dinkel Plus Brötchen mit würziger Avocadocreme mit Frischkäse, Quark und Knoblauch, Kirschtomate und Rucola.", 2.99}, {"Dinkel plus Brötchen", "Dinkelbrötchen bestreut mit Sonnenblumenkernen und mit Kümmel verfeinert.", 0.72}, {"Dinkel plus Кäse", "Unser knuspriges Dinkel Plus Brötchen mit mildem Käse und Lollo Bionda Salat.", 2.40}, {"Dinkel plus Pute", "Unser knuspriges Dinkel Plus Brötchen mit magerer Putenbrust.", 2.75}, {"Dinkel Vollkornfit", "Dinkelvollkornbrötchen mit Dinkelflocken und Honig verfeinert.", 0.75}, {"Dinkel-Grünkern", "Knusprig aufgerissenes Dinkelbrot mit Grünkern (früh geernteter, grüner Dinkel), schmeckt dadurch besonders kernig und leicht nussig.", 2.99}, {"Dunkle Schokoperlen Tüte", "Auch für Zuhause: Kräftige dunkle Schokolade zum selber Auflösen in heißer, schaumiger Hemme Milch. Vollmundiger Schokoladengeschmack mit herber Note.", 1.39}, {"Firmacher", "Eine dicke Scheibe rustikales Weizenmischbrot mit Malz verfeinert, satt belegt mit fühlingsfrischem, hauseigenem Joghurt-Rahmaufstrich mit Kräutern.", 3.29}, {"Focaccia Mozzarella", "Ein heißer Genuss: Weiches Rosmarin-Weizenbrot belegt mit der beliebten Kombi aus Tomaten, Mozzarella und Pesto Genovese. Für einen knackigen Biss sorgt frischer Rucola.", 3.59}, {"Focaccia Serrano", "Ein heißer Genuss: Weiches Rosmarin-Weizenbrot belegt mit original spanischem Serrano Schinken und Grana Padano. Für einen knackigen Biss sorgt frischer Rucola.", 3.99}, {"Franz mit Schoko", "Plunderteig aus Weizenmehl mit Schokoladensplittern und einem Kern aus Kakaocreme.", 1.45}, {"Franz Original", "Plunderteig mit einer Zimtcreme, bestreut mit karamellisiertem Zimt und Zucker.", 1.35}, {"Frischling Kräuter", "Halber Roggenkrosser mit frischem hauseigenem Joghurt-Rahmaufstrich.", 1.85}, {"Ganzes Danbo", "Das knusprige Mittagsbrötchen mit mildem Käse und Lollo Bionda Salat.", 2.15}, {"Ganzes Mettwurst", "Das knusprige Mittagsbrötchen mit herzhafter Holsteiner Mettwurst.", 2.20}, {"Ganzes Pute", "Das knusprige Mittagsbrötchen mit magerer Putenbrust.", 2.50}, {"Ganzes Schinken", "Das knusprige Mittagsbrötchen mit zartem Kochschinken.", 2.50}, {"Halbes Briekäse", "Das knusprige Mittagsbrötchen mit cremigen Briekäse.", 1.80}, {"Halbes Danbo", "Das knusprige Mittagsbrötchen mit mildem Danbo Käse, Lollo Bionda Salat und Dekor der Saison.", 1.29}, {"Halbes Ei", "Unser Dauerbrenner: Das knusprige Mittagsbrötchen mit Ei.", 1.40}, {"Halbes Eiersalat", "Das knusprige Mittagsbrötchen mit hauseigenem Eiersalat.", 1.70}, {"Halbes Frikadelle", "Das knusprige Mittagsbrötchen mit Geflügelfrikadelle.", 2.30}, {"Halbes Frischkäse", "Das knusprige Mittagsbrötchen mit mildem Frischkäse.", 1.70}, {"Halbes Lachs", "Knuspriges Mittagsbrötchen mit echtem norwegischen Räucherlachs und Sahnemeerettich.", 2.99}, {"Halbes Mett", "Das knusprige Mittagsbrötchen mit frischem Zwiebelmett nach unserer hauseigenen Rezeptur.", 1.60}, {"Halbes Mettwurst", "Das knusprige Mittagsbrötchen mit herzhafter Holsteiner Mettwurst.", 1.39}, {"Halbes Pute", "Das knusprige Mittagsbrötchen mit magerer Putenbrust.", 1.70}, {"Halbes Rindertatar", "Knuspriges Mittagsbrötchen mit fein gewürztem Rindertatar. Besonders hochwertig durch die Verwendung von magerem Rindfleisch.", 2.20}, {"Halbes Schinken", "Das knusprige Mittagsbrötchen mit zartem Kochschinken.", 1.70}, {"Halbes Thunfischsalat", "Das knusprige Mittagsbrötchen mit hauseigenem Thunfischsalat.", 1.85}, {"Hansesemmel", "Unser Markenprodukt. Weizenbrötchen mit feinporiger Krume und knuspriger Kruste, verfeinert mit Rapsöl.", 0.40}, {"Junges Landsaft Apfelmango, 0.2l", "Exotisch fair gehandelte Mango und fruchtiger Apfelsaft aus erlesenen regionalen Äpfeln - aus einer kleinen Mosterei in Mecklenburg-Vorpommern.", 1.85}, {"Junges Landsaft Multi, 0.2l", "Der fruchtig frische Landsaft aus einer kleinen Mosterei in Mecklenburg-Vorpommern.", 1.85}, {"Junggeselle", "Handgefertigtes Weizenmischbrötchen mit hauseigenem Natursauerteig und rustikaler Kruste.", 0.99}, {"Kaffee Ngoro, 250g", "Extra mild - Unser Hauseigener Premiumkaffee aus Tansania als ganze Bohne für zu Hause.", 8.95}, {"Kraftmacher", "Eine dicke Scheibe rustikales Weizenmischbrot mit Malz verfeinert, satt belegt mit frischem Zwiebelmett nach unserer hauseigenen Rezeptur.", 3.39}, {"Kranzkuchen", "Handgeflochtener Plunderteig aprikotiert mit Mandeln und Creme mit Marzipangeschmack.", 4.99}, {"Krustico", "Großes Weizenmischbrot mit rustikaler Kruste, geschmacklich abgerundet mit einer malzigen Note.", 6.90}, {"Кäsebrötchen", "Weizenbrötchen überbacken mit knusprigem, handgeriebenen Edamerkäse.", 1.25}, {"Кäsebrötchen Кäse", "Das herzhafte Brötchen mit mildem Danbo Käse, Lollo Bionda Salat und hauseigener Remoulade.", 2.85}, {"Кäsebrötchen Pute", "Das herzhafte Brötchen mit magerer Putenbrust, Lollo Bionda Salat und hauseigener Remoulade.", 3.10}, {"Кäsebrötchen Schinken", "Das herzhafte Brötchen mit zartem Kochschinken, Lollo Bionda Salat und hauseigener Remoulade.", 3.15}, {"Kürbiskern & Haselnuss", "Weizenmischbrötchen mit Kürbiskernen und gerösteten Haselnüssen, verfeinert mit Kümmel, Koriander, Anis und Fenchel.", 0.79}, {"Kürbiskern & Haselnuss (Brot)", "Roggenmischbrot mit unserem hauseigenen Natursauerteig, Roggenvollkornschrot, ganzen Haselnüssen und Kürbiskernen.", 4.15}, {"Laugenkorn Schinkenkäse", "Laugencroissant mit Sonnenblumen-, Kürbiskernen und Sesam. Belegt mit mildem Danbo Käse und zartem Kochschinken.", 2.99}, {"Laugenstange", "Feinporiger Weizenteig in Brezellauge getaucht und mit Hagelsalz bestreut.", 1.10}, {"Laugenstange Danbo", "Unsere Laugenstange mit mildem Danbo Käse und Lollo Bionda Salat.", 2.85}, {"Laugenstange Meetw./Käse", "Unsere Laugenstange mit herzhafter holsteiner Mettwurst, mildem Danbo Käse und Lollo Bionda Salat.", 2.95}, {"Laugenstange mit Briekäse", "Unsere Laugenstange mit cremigem Briekäse und Lollo Bionda Salat.", 3.05}, {"Milchhörnchen", "Weicher und süßer Hefeteig in Hörnchenform.", 1.05}, {"Mohnbrötchen", "Weizenbrötchen mit Blaumohn, verfeinert mit Rapsöl.", 0.49}, {"Muffin Chocolate", "Schokorührteig mit einem Kern aus süßer Kakaocreme.", 1.65}, {"Müslistange", "Weiches Hörnchen mit Haferflocken, Cranberries, Apfelmark und Haselnüssen, verfeinert mit Honig.", 1.25}, {"Parisienne Briekäse", "Unser Baguettebrötchen mit cremigem Briekäse und Lollo Bionda Salat.", 3.15}, {"Parisienne Ei", "Unser Baguettebrötchen mit Ei, Schnittlauch und Lollo Bionda Salat.", 3.05}, {"Parisienne Frikadelle", "Unser Baguettebrötchen mit Geflügelfrikadelle, hauseigener Remoulade und Krautsalat.", 3.25}, {"Parisienne Кäse", "Unser Baguettebrötchen mit mildem Danbo Käse und Lollo Bionda Salat.", 2.85}, {"Parisienne Madame", "Unser Baguettebrötchen mit mildem Danbo Käse, zartem Kochschinken und Lollo Bionda Salat.", 3.10}, {"Parisienne Mettwurst", "Unser Baguettebrötchen mit herzhafter Holsteiner Mettwurst und Lollo Bionda Salat.", 2.95}, {"Parisienne Monsieur", "Unser Baguettebrötchen mit herzhafter holsteiner Mettwurst, mildem Danbo Käse und Lollo Bionda Salat.", 3.05}, {"Parisienne Mozarella", "Unser Baguettebrötchen mit Mozzarella, hauseignem Pesto Genovese, Lollo Bionda Salat und Tomate.", 3.25}, {"Parisienne Pute", "Unser Baguettebrötchen mit magerer Putenbrust, Lollo Bionda und hauseigener Remoulade.", 3.05}, {"Parisienne Schinken", "Unser Baguettebrötchen mit zartem Kochschinken, Lollo Bionda und hauseigener Remoulade.", 3.05}, {"Parisienne Seelachs", "Unser Baguettebrötchen mit paniertem Seelachsfilet - praktisch grätenfrei - und mit hauseigener Remoulade.", 3.85}, {"Parisienne Tomate/Ei", "Unser Baguettebrötchen mit Tomate, Ei, Lollo Bionda Salat und hauseigener Remoulade.", 2.85}, {"Parisienne-Baguette", "Rustikale Weizenbrotstange nach original französischem Rezept mit luftiger, großporiger Krume.", 2.79}, {"Pasta Primavera", "Penne mit hausgemachtem Pesto Genovese, gehobelten Mandeln, Mozzarellaperlen, würzigem Grana Padano und frischem Rucola. Auch heiß ein Genuss. Das Dressing ist bereits enthalten. Ein separates Dressing ist im Kaufpreis nicht inbegriffen.", 4.50}, {"Pasta Toskana Rosso", "Unser italientischer Nudelsalat mit hausgemachtem Pesto Rosso, schwarzen Oliven, eingelegten Tomaten, Grana Padano und frischem Rucola. In diesem Salat ist das Dressing bereits enthalten. Ein separates Dressing ist im Kaufpreis nicht inbegriffen.", 4.50}, {"Roggenkrosser", "Rustikales Roggen-Weizenbrötchen mit Hirse und Rapsöl verfeinert und mit Roggengrieß bestreut.", 0.69}, {"Rosinenbrötchen", "Wattig-weiches Hefebrötchen mit saftigen, aromatischen Rosinen.", 0.95}, {"Rosinenschnecke", "Plunderteig, Füllung mit Marzipangeschmack und Rosinen, aprikotiert und mit Zuckerguss überzogen.", 1.49}, {"Scharfer Segler", "Unser Klassiker: Das pikante Käsebrötchen mit grünem Pfeffer und Kümmel belegt mit zartem Kochschinken, Frischkäse und Krautsalat.", 3.40}, {"Schlemmertasche", "Unser Klassiker: Käsebrötchen mit zartem Kochschinken, mildem Danbo Käse, hauseigener Remoulade und Lollo Bionda Salat.", 3.55}, {"Schokijunge", "Saftig-weiches Quarkbrötchen mit dunklen Schokotropfen.", 0.99}, {"Schokocroissant", "Plunderteig aus Weizenmehl mit Schokoladensplittern und einem Kern aus Schokoladencreme.", 1.35}, {"Schokoperlen Dunkel Karton", "Auch für Zuhause im Vorratskarton (20 Tütchen à 37g): Kräftige dunkle Schokolade zum selber Auflösen in heißer, schaumiger Hemme Milch. Vollmundiger Schokoladengeschmack mit herber Note.", 27.80}, {"Schokoperlen Vollm. Karton", "Auch für Zuhause im Vorratskarton (20 Tütchen à 37g): Edle Milchschokolade zum selber Auflösen in heißer, schaumiger Hemme Milch. Verzaubert mit cremig-zartem Schokoladengeschmack.", 27.80}, {"Schokoperlen Weiss Karton", "Auch für Zuhause im Vorratskarton (20 Tütchen à 35g): Zartschmelzende, weiße Schokolade zum selber Auflösen in heißer, schaumiger Hemme Milch. Sahnig-cremig und angenehm süß im Geschmack.", 27.80}, {"Softie Kürbis", "Nur für kurze Zeit: Das süße Hefe-Brötchen mit saftigem Hokkaidokürbis und extra zartem Biss.", 0.99}, {"Spezial Danbo", "Eines unserer beliebten Körnerbrötchen mit mildem Danbo Käse.", 2.40}, {"Spezial Mettwurst", "Eines unserer beliebten Körnerbrötchen mit herzhafter holsteiner Mettwurst und hauseigener Remoulade.", 2.45}, {"Spezial Pute", "Eines unserer beliebten Körnerbrötchen mit magerer Putenbrust.", 2.75}, {"Spezial Schinken", "Eines unserer beliebten Körnerbrötchen mit zartem Kochschinken.", 2.75}, {"Stadtkrosser", "Rustikales Weizenmischbrötchen mit Weizengrieß bestreut.", 0.55}, {"Streuselkuchen", "Saftig-weicher Hefeteig mit knusprigen Butterstreuseln.", 3.30}, {"Streuselschnecke", "Hefeteig verfeinert mit Quark, knusprigen Streuseln und Zuckerguss.", 1.39}, {"Thunfischbrot", "Ein Klassiker in unserem Sortiment: Eine große Scheibe Vollkorn Natur mit hauseigenem Thunfischsalat, Ei und Lolo Bionda Salat.", 3.40}, {"Urbrot", "Kräftiges Roggenbrot mit unserem hauseigenen Natursauerteig. Mit schnittfester Krume, rustikaler Kruste und verfeinert mit Kümmel.", 2.99}, {"Weisse Schokoperlen Tüte", "Auch für Zuhause: Zartschmelzende, weiße Schokolade zum selber Auflösen in heißer, schaumiger Hemme Milch. Sahnig-cremig und angenehm süß im Geschmack.", 1.39}, {"Weltmeisterbrötchen", "Weizenmischbrötchen mit Blaumohn, Sesam und Sonnenblumenkernen.", 0.50}, {"Wikinger Danbo", "Die vegetarische Variante unseres Klassikers: Das körnige Sesamdreieck mit mildem Danbo Käse, Lollo Bionda Salat und hauseigener Remoulade.", 3.05}, {"Wikinger Pute", "Unser Klassiker: Das körnige Sesamdreieck mit magerer Putenbrust, Lollo Bionda Salat und hauseigener Remoulade.", 3.20} }; map<string, double> production_costs = { {"Butterkuchen", 2.25}, {"Bäckerliebling", 1.40}, {"Croissant", 0.75}, {"Dinkel plus Avocado", 1.75}, {"Dinkel plus Brötchen", 0.49}, {"Dinkel plus Кäse", 1.65}, {"Dinkel plus Pute", 1.80}, {"Dinkel Vollkornfit", 0.44}, {"Dinkel-Grünkern", 1.80}, {"Dunkle Schokoperlen Tüte", 0.79}, {"Firmacher", 2.65}, {"Focaccia Mozzarella", 2.75}, {"Focaccia Serrano", 2.65}, {"Franz mit Schoko", 0.85}, {"Franz Original", 0.95}, {"Frischling Kräuter", 1.15}, {"Ganzes Danbo", 1.55}, {"Ganzes Mettwurst", 1.70}, {"Ganzes Pute", 1.60}, {"Ganzes Schinken", 1.60}, {"Halbes Briekäse", 1.05}, {"Halbes Danbo", 0.75}, {"Halbes Ei", 0.80}, {"Halbes Eiersalat", 0.95}, {"Halbes Frikadelle", 1.55}, {"Halbes Frischkäse", 0.95}, {"Halbes Lachs", 1.80}, {"Halbes Mett", 1.00}, {"Halbes Mettwurst", 0.85}, {"Halbes Pute", 0.90}, {"Halbes Rindertatar", 1.40}, {"Halbes Schinken", 1.10}, {"Halbes Thunfischsalat", 1.05}, {"Hansesemmel", 0.20}, {"Junges Landsaft Apfelmango, 0.2l", 0.85}, {"Junges Landsaft Multi, 0.2l", 0.85}, {"Junggeselle", 0.59}, {"Kaffee Ngoro, 250g", 5.60}, {"Kraftmacher", 2.45}, {"Kranzkuchen", 3.15}, {"Krustico", 4.50}, {"Кäsebrötchen", 1.65}, {"Кäsebrötchen Pute", 2.30}, {"Кäsebrötchen Schinken", 2.35}, {"Kürbiskern & Haselnuss", 0.49}, {"Kürbiskern & Haselnuss (Brot)", 2.70}, {"Laugenkorn Schinkenkäse", 1.89}, {"Laugenstange", 0.55}, {"Laugenstange Danbo", 1.70}, {"Laugenstange Meetw./Käse", 1.70}, {"Laugenstange mit Briekäse", 1.75}, {"Milchhörnchen", 0.60}, {"Mohnbrötchen", 0.25}, {"Muffin Chocolate", 0.85}, {"Müslistange", 0.65}, {"Parisienne Briekäse", 2.20}, {"Parisienne Ei", 2.20}, {"Parisienne Frikadelle", 2.20}, {"Parisienne Кäse", 1.70}, {"Parisienne Madame", 2.30}, {"Parisienne Mettwurst", 1.80}, {"Parisienne Monsieur", 1.95}, {"Parisienne Mozarella", 1.95}, {"Parisienne Pute", 1.95}, {"Parisienne Schinken", 1.95}, {"Parisienne Seelachs", 2.25}, {"Parisienne Tomate/Ei", 1.90}, {"Parisienne-Baguette", 1.75}, {"Pasta Primavera", 3.10}, {"Pasta Toskana Rosso", 3.00}, {"Roggenkrosser", 0.40}, {"Rosinenbrötchen", 0.55}, {"Rosinenschnecke", 0.79}, {"Scharfer Segler", 2.20}, {"Schlemmertasche", 2.35}, {"Schokijunge", 0.55}, {"Schokocroissant", 0.75}, {"Schokoperlen Dunkel Karton", 19.40}, {"Schokoperlen Vollm. Karton", 19.00}, {"Schokoperlen Weiss Karton", 19.20}, {"Softie Kürbis", 0.69}, {"Spezial Danbo", 1.40}, {"Spezial Mettwurst", 1.35}, {"Spezial Pute", 1.65}, {"Spezial Schinken", 1.65}, {"Stadtkrosser", 0.30}, {"Streuselkuchen", 2.20}, {"Streuselschnecke", 0.85}, {"Thunfischbrot", 2.30}, {"Urbrot", 1.75}, {"Weisse Schokoperlen Tüte", 0.79}, {"Weltmeisterbrötchen", 0.25}, {"Wikinger Danbo", 2.15}, {"Wikinger Pute", 2.10} }; Bakery bakery; bakery.add_products(products); bakery.add_production_costs(production_costs); Customer cust1, cust2, cust3, cust4, cust5, cust6, cust7, cust8, cust9, cust10; deque<Customer> deq = {cust1, cust2, cust3, cust4, cust5, cust6, cust7, cust8, cust9, cust10}; vector<vector<string>> bought_products = { { "Weisse Schokoperlen Tüte", "Кäsebrötchen Schinken", "Mohnbrötchen" }, { "Softie Kürbis", "Ganzes Danbo", "Milchhörnchen", "Junges Landsaft Apfelmango", "Thunfischbrot" }, { "Parisienne Madame", "Wikinger Pute" }, { "Laugenstange Meetw./Käse", "Parisienne Frikadelle", "Bäckerliebling" }, { "Pasta Primavera", "Kraftmacher", "Urbrot" }, { "Streuselschnecke", "Krustico", "Firmacher" }, { "Kürbiskern & Haselnuss", "Halbes Ei", "Parisienne Seelachs" }, { "Dunkle Schokoperlen Tüte", "Parisienne Кäse", "Schlemmertasche", "Halbes Lachs", "Halbes Rindertatar", "Laugenstange mit Briekäse" }, { "Franz Original", "Frischling Kräuter", "Kürbiskern & Haselnuss (Brot)", "Croissant", "Rosinenschnecke", "Rosinenschnecke" }, { "Schokoperlen Dunkel Karton", "Streuselkuchen", "Muffin Chocolate" } }; int cust_idx = 0; while(!deq.empty()) { Customer cust = deq.front(); cust.buy_products(bought_products[cust_idx], bakery); deq.pop_front(); cust_idx++; } cout << "Today's profit: " << bakery.compute_profit() << " euro" << endl; // Today's profit: 39.33 euro // Now plot profits over time return 0; }

As you can see, there are many ideas you could use. You could add more bakery branches, having different sets of products. You could keep customer profiles so you can easily refer to people by name, asking whether they would want once again their favorite product(s) from the last time. You could track employee satisfaction scores, servicing times. You could evaluate whether the environment clearly divides between employees and customers or makes them feel like one. It is surprising how often carefully designed and programmed interfaces can improve both the customer experience and the business performance. And while we have looked at an example of a bakery here, the business could have been in almost any sector, given that we have access to domain knowledge about it.