#include #include #include #include #include #include "MenuManager.h" #include "ProductSale.h" std::string readFile(std::string &fileName, std::vector &allSales) { std::string content; std::ifstream infile; infile.open(fileName); if (!infile.is_open()) { std::cout << "File does not exist" << std::endl; return "FAILED_TO_READ_FILE"; } std::string line; std::getline(infile, line); // Skip first Line while (std::getline(infile, line)) { content += line; ProductSale *temp = new ProductSale(line); // TODO Use Smart Pointers allSales.push_back(temp); } return content; } void printAllSales(std::vector &allSales) { for (int i = 0; i < allSales.size(); ++i) { std::cout << allSales[i]->toString() << std::endl; std::cout << "==============" << std::endl; } } void deleteAllPointers(std::vector &allSales) { for (auto it = allSales.begin(); it != allSales.end(); it++) { delete (*it); } } void getMostPopularTypeIn(std::string country, std::vector &allSales) { std::mapTypeCounter; for (ProductSale* singelSale : allSales) { // map.add(singleSale) if (singelSale->country != country) { continue; } bool alreadyExists = false; for (auto element : TypeCounter) { if (element.first == singelSale->itemType) { element.second++; alreadyExists = true; break; } } if (!alreadyExists) { TypeCounter[singelSale->itemType] = 1; } } // return map.getMostCommon std::string mostPopularType; int counter = 0; for (auto element : TypeCounter) { if (element.second > counter) { counter = element.second; mostPopularType = element.first; } } std::cout << "Most popular Type : " << mostPopularType << std::endl << "Occurences : " << counter << std::endl << std::endl; } void getOnlineVsOfflineIn(std::string country, std::vector &allSales) { std::mapTypeCounter; for (ProductSale* singelSale : allSales) { // map.add(singleSale) if (singelSale->country != country) { continue; } bool alreadyExists = false; for (auto element : TypeCounter) { if (element.first == singelSale->salesChannel) { element.second++; alreadyExists = true; break; } } if (!alreadyExists) { TypeCounter[singelSale->salesChannel] = 1; } } int OnlineCounter = TypeCounter["Online"]; int OfflineCounter = TypeCounter["Offline"]; double ratio = (OfflineCounter == 0) ? 100.0 : static_cast(OnlineCounter) / OfflineCounter * 100.0; std::cout << "Online : " << OnlineCounter << std::endl << "Offline : " << OfflineCounter << std::endl; std::cout << "Ratio : " << ratio << "% Online" << std::endl << std::endl; } void Aufg8Main() { std::vector allSales; std::string fileName = "../Aufg8/IO-Files/sales_records_small.csv"; fileName = "../Aufg8/IO-Files/DANGER-1500000SalesRecords.csv"; readFile(fileName, allSales); // printAllSales(allSales); std::string selectedRegion; std::string selectedType; int currentMenu = 0; std::string* PselectedRegion = &selectedRegion; std::string* PselectedType = &selectedType; int* PcurrentMenu = ¤tMenu; MenuManager menu{PcurrentMenu, PselectedType, PselectedRegion}; menu.MainInteraction(); while (currentMenu) { switch (currentMenu) { // TODO Finish these case 0: return; // To quit the programm case 1: // getTotalProfitFor(*selectedType); break; case 2: // getSaleCount(*selectedType, *selectedRegion); break; case 3: getMostPopularTypeIn(selectedRegion, allSales); break; case 4: getOnlineVsOfflineIn(selectedRegion, allSales); break; default: std::cout << "You should not be able to reach this!"; } menu.MainInteraction(); } }