Advertisement
Zuhairy_Harry

main.cpp W1

Jan 14th, 2024
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 63.75 KB | None | 0 0
  1. /*
  2.  
  3.  
  4.     NAME            :   MUHAMMAD ZUHAIRY BIN RAZALY
  5.     MATRIX NUMBER   :   B032310282
  6.     COURSE          :   BITS
  7.     TOPIC           :   GROCERIES SALE TRACKER
  8.     CURRENT FILE    :   main.cpp file
  9.  
  10.  
  11. */
  12.  
  13. #include <iostream>
  14. #include <conio.h>
  15. #include <iomanip>
  16. #include <sstream>
  17. #include <cmath>
  18. #include <cstdio>
  19.  
  20. #include "Menu.h"
  21. #include "Account.h"
  22. #include "Item.h"
  23. #include "Category.h"
  24. #include "Transaction.h"
  25. #include "Sale.h"
  26. #include <stdio.h>
  27. using namespace std;
  28.  
  29. void registerAccount();
  30. void loginMenu();
  31. void home(Account user);
  32.  
  33. void record_sale(Account user); //sale page
  34. void record_sale_item(Account user);
  35. void item_cart(Account user, int itemID, Transaction cart); //item cart page
  36.  
  37. void sale_report(Account user);
  38. void edit_sale(Account user);
  39. void all_sale_report(Account user);
  40. void all_sale_report_id(Account user);
  41. void all_sale_report_name(Account user);
  42. void view_statistic(Account user);
  43. void search_filter(Account user);
  44.  
  45. void new_item(Account user); //item page
  46. void edit_item(Account user); //edit item page
  47. void update_new_item(Account user, int itemID, string itemName, double itemPrice, int category_id); //update new item page
  48. void delete_item(Account user); //delete item page
  49. void create_new_item(Account user, string category_name); //create new item page
  50. void all_item(Account user); //all item page
  51.  
  52. Transaction cartMenu(Account user, Transaction cart);
  53.  
  54. void all_category(Account user); //all category page
  55. void add_category(Account user); //add category page
  56. void edit_category(Account user, int category_id, string category_name, string category_desc);
  57.  
  58.  
  59. Account profile(Account user);
  60.  
  61. //utility functions
  62. bool isNumeric(string input);
  63. double roundTo2DecimalPlaces(double number);
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73. /*
  74.  
  75. ---------------------------------------------------------------------------------------------------------------------------------------
  76.     MAIN FUNCTION
  77. ---------------------------------------------------------------------------------------------------------------------------------------
  78.  
  79. */
  80. int main()
  81. {
  82.     Menu mainmenu;
  83.     mainmenu.header = "------------------------------------------\nWelcome to Groceries Sale Tracker\n------------------------------------------\nChoose your action = \n";
  84.     mainmenu.addOption("Register");
  85.     mainmenu.addOption("Login");
  86.     mainmenu.addOption("Exit\n");
  87.  
  88.     while (1) {
  89.         switch (mainmenu.prompt())
  90.         {
  91.         case 1:
  92.             registerAccount();
  93.             break;
  94.         case 2:
  95.             loginMenu();
  96.             break;
  97.         case 3:
  98.             return 0;
  99.         default:
  100.             break;
  101.         }
  102.     }
  103.  
  104.  
  105. }
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112. /*
  113.  
  114. ---------------------------------------------------------------------------------------------------------------------------------------
  115.     REGISTER ACCOUNT
  116. ---------------------------------------------------------------------------------------------------------------------------------------
  117.  
  118. */
  119. void registerAccount() {
  120.     Account newacc;
  121.  
  122.     Menu rgMenu;
  123.     rgMenu.header = "------------------------------------------\nGroceries Sale Tracker\nAccount Registration\n------------------------------------------\nChoose action and input details";
  124.     rgMenu.addOption("Username");
  125.     rgMenu.addOption("Password");
  126.     rgMenu.addOption("Full Name");
  127.     rgMenu.addOption("Shop Name");
  128.     rgMenu.addOption("Telephone");
  129.     rgMenu.addOption("Year of Birth");
  130.     rgMenu.addOption("Register");
  131.     rgMenu.addOption("Back");
  132.  
  133.  
  134.     string tmpinput;
  135.     bool valid = true;
  136.     while (1) {
  137.  
  138.         switch (rgMenu.prompt()) {
  139.         case 1:
  140.             cout << "Insert Username: ";
  141.             cin >> newacc.username;
  142.             rgMenu.setValue(0, newacc.username);
  143.             break;
  144.         case 2:
  145.             cout << "Insert password: ";
  146.             cin >> tmpinput;
  147.             if (tmpinput.length() < 6) {
  148.                 cout << "Password must be at least 6 character long";
  149.                 _getch();
  150.             }
  151.             else {
  152.                 newacc.password = tmpinput;
  153.                 rgMenu.setValue(1, newacc.password);
  154.             }
  155.             break;
  156.         case 3:
  157.             cout << "Insert fullname: ";
  158.             getline(cin, newacc.fullname);
  159.             rgMenu.setValue(2, newacc.fullname);
  160.             break;
  161.         case 4:
  162.             cout << "Insert shop name: ";
  163.             getline(cin, newacc.shopname);
  164.             rgMenu.setValue(3, newacc.shopname);
  165.             break;
  166.         case 5:
  167.             cout << "Insert telephone: ";
  168.             getline(cin, newacc.telephone);
  169.             rgMenu.setValue(4, newacc.telephone);
  170.             break;
  171.  
  172.         case 6:
  173.             cout << "Insert yearOfBirth: ";
  174.             cin >> tmpinput;
  175.             if (isNumeric(tmpinput) && tmpinput.length() == 4) {
  176.  
  177.                 newacc.yearOfBirth = stoi(tmpinput);
  178.  
  179.                 rgMenu.setValue(5, to_string(newacc.yearOfBirth));
  180.             }
  181.             else {
  182.                 cout << "Input for year of birth must be number with 4 digit";
  183.                 _getch();
  184.             }
  185.             break;
  186.         case 7:
  187.             valid = true;
  188.  
  189.             // 20 years old to register,  
  190.             if (newacc.getAge() < 20) {
  191.                 valid = false;
  192.                 cout << endl << "You must be at least 20 years old to register" << endl;
  193.             }
  194.             if (valid) {
  195.                 newacc.insert();
  196.                 cout << "Registered";
  197.                 _getch();
  198.                 return;
  199.             }
  200.             else {
  201.                 cout << "Please re-check your informations";
  202.                 _getch();
  203.             }
  204.             break;
  205.         case 8:
  206.             return;
  207.         default:
  208.             break;
  209.         }
  210.     }
  211.  
  212. }
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. /*
  226.  
  227. ---------------------------------------------------------------------------------------------------------------------------------------
  228.     LOGIN MENU
  229. ---------------------------------------------------------------------------------------------------------------------------------------
  230.  
  231. */
  232. void loginMenu() {
  233.     Menu loginMenu;
  234.     loginMenu.header = "----------------------\nGroceries Sale Tracker\nLogin\n----------------------\nChoose action and input details";
  235.     loginMenu.addOption("username");
  236.     loginMenu.addOption("password");
  237.     loginMenu.addOption("Login");
  238.     loginMenu.addOption("Back");
  239.  
  240.     Account user;
  241.  
  242.     while (1) {
  243.         switch (loginMenu.prompt())
  244.         {
  245.         case 1:
  246.             cout << "Insert Username: ";
  247.             cin >> user.username;
  248.             loginMenu.setValue(0, user.username);
  249.             break;
  250.         case 2:
  251.             cout << "Insert Password: ";
  252.             cin >> user.password;
  253.             loginMenu.setValue(1, user.password);
  254.             break;
  255.         case 3:
  256.             if (user.login()) {
  257.                 home(user);
  258.             }
  259.             else {
  260.                 cout << "Invalid Login";
  261.                 _getch();
  262.             }
  263.             break;
  264.         case 4:
  265.             return;
  266.             break;
  267.         default:
  268.             break;
  269.         }
  270.     }
  271. }
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. /*
  283.  
  284. ---------------------------------------------------------------------------------------------------------------------------------------
  285.     HOME PAGE
  286. ---------------------------------------------------------------------------------------------------------------------------------------
  287.  
  288. */
  289. void home(Account user) {
  290.     Menu homeMenu;
  291.     homeMenu.addOption("Profile");
  292.     homeMenu.addOption("Shop");
  293.     homeMenu.addOption("Sale Report");
  294.     homeMenu.addOption("Record New Item");
  295.     homeMenu.addOption("Logout");
  296.     while (1) {
  297.         homeMenu.header = "------------------------------\nWelcome to " + user.shopname + "\n------------------------------\nThis is your home page\nPlease choose your action\n";
  298.         switch (homeMenu.prompt())
  299.         {
  300.         case 1:
  301.             user = profile(user);
  302.             break;
  303.         case 2:
  304.             record_sale(user);
  305.             break;
  306.         case 3:
  307.             sale_report(user);
  308.             break;
  309.         case 4:
  310.             new_item(user);
  311.             break;
  312.         case 5:
  313.             return;
  314.             break;
  315.         default:
  316.             break;
  317.         }
  318.     }
  319. }
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328. /*
  329.  
  330. ---------------------------------------------------------------------------------------------------------------------------------------
  331.     USER PROFILE
  332. ---------------------------------------------------------------------------------------------------------------------------------------
  333.  
  334. */
  335. Account profile(Account user) {
  336.  
  337.     Account temp = user; // copy the object
  338.  
  339.     Menu profileMenu;
  340.     profileMenu.header = "----------------------\nGroceries Sale Tracker\nYour Profile\n----------------------\nChoose action and input details";
  341.     profileMenu.addOption("username");
  342.     profileMenu.addOption("password");
  343.     profileMenu.addOption("fullname");
  344.     profileMenu.addOption("shopname");
  345.     profileMenu.addOption("telephone");
  346.     profileMenu.addOption("yearOfBirth");
  347.     profileMenu.addOption("Reset");
  348.     profileMenu.addOption("Save");
  349.     profileMenu.addOption("Back");
  350.     profileMenu.addOption("Delete Account");
  351.  
  352.     string tmpInput;
  353.     while (1) {
  354.         profileMenu.setValue(0, temp.username);
  355.         profileMenu.setValue(1, temp.password);
  356.         profileMenu.setValue(2, temp.fullname);
  357.         profileMenu.setValue(3, temp.shopname);
  358.         profileMenu.setValue(4, temp.telephone);
  359.         profileMenu.setValue(5, to_string(temp.yearOfBirth));
  360.         profileMenu.footer = "You are " + to_string(temp.getAge()) + " Years old\nSelect Option and press Enter";
  361.         profileMenu.prompt();
  362.  
  363.         //char choice;
  364.         string option;
  365.         cin >> option;
  366.         //cin >> choice;
  367.  
  368.         if (option == "1") {
  369.             cout << "\nInsert Username: ";
  370.             cin >> temp.username;
  371.         }
  372.         else if (option == "2") {
  373.             cout << "\nInsert password: ";
  374.             cin >> temp.password;
  375.         }
  376.         else if (option == "3") {
  377.             cout << "\nInsert full name: ";
  378.             std::cin.clear();
  379.             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  380.             getline(cin, temp.fullname);
  381.         }
  382.         else if (option == "4") {
  383.             cout << "\nInsert shop name: ";
  384.             std::cin.clear();
  385.             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  386.             getline(cin, temp.shopname);
  387.         }
  388.         else if (option == "5") {
  389.             cout << "\nInsert telephone: ";
  390.             cin >> temp.telephone;
  391.         }
  392.         else if (option == "6") {
  393.             cout << "\nInsert year of birth: ";
  394.             //cin >> temp.yearOfBirth;
  395.             cin >> tmpInput;
  396.             if (isNumeric(tmpInput)) {
  397.                 temp.yearOfBirth = stoi(tmpInput);
  398.             }
  399.             else {
  400.                 cout << "\nInput for year of birth must be numeric";
  401.                 _getch();
  402.             }
  403.         }
  404.         else if (option == "7") {
  405.             temp = user;
  406.         }
  407.         else if (option == "8") {
  408.             cout << "\nDo you want to update these details? (y/n)";
  409.             char confirm;
  410.             confirm = _getch();
  411.             if (confirm == 'Y' || confirm == 'y') {
  412.                 user = temp;
  413.                 user.update();
  414.                 cout << "\nAccount Updated";
  415.                 _getch();
  416.             }
  417.         }
  418.         else if (option == "9") {
  419.             return user;
  420.             break;
  421.         }
  422.         else if (option == "10") {
  423.             cout << "\nDelete your account? (y/n)";
  424.             char confirm;
  425.             confirm = _getch();
  426.             if (confirm == 'Y' || confirm == 'y') {
  427.                 user = temp;
  428.                 user.remove();
  429.                 main();
  430.             }
  431.         }
  432.         else {
  433.             cout << "Enter a valid option!";
  434.             _getch();
  435.         }
  436.        
  437.     }
  438. }
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. /*
  451.  
  452. ---------------------------------------------------------------------------------------------------------------------------------------
  453.     RECORD SALE MAIN PAGE
  454. ---------------------------------------------------------------------------------------------------------------------------------------
  455.  
  456. */
  457. void record_sale(Account user) {
  458.  
  459.     Transaction cart; //initialize a transaction to hold product values
  460.     cart.userId = user.accountId; // put currently logge in user id into the transaction
  461.  
  462.  
  463.     Account temp = user;
  464.     vector<Item> items;
  465.     int itemID, quantity, category_id;
  466.     string category_name, category;
  467.     char choice;
  468.     vector<Category> category1;
  469.     DBConnection db;
  470.  
  471.     Item item;
  472.  
  473.     Menu saleMenu;
  474.     saleMenu.addOption("View All Item in Cart");
  475.     saleMenu.addOption("Show All Item");
  476.     saleMenu.addOption("Choose by Category");
  477.     saleMenu.addOption("Clear cart");
  478.     saleMenu.addOption("Back");
  479.     while (1) {
  480.         saleMenu.header = "----------------------\n" + user.shopname + "\nShop\n----------------------\nItems in cart = " + to_string(cart.count()) + "\nTotal price = " + to_string(cart.total()) + "\n";
  481.         switch (saleMenu.prompt())
  482.         {
  483.         case 1:
  484.             cart = cartMenu(user, cart);
  485.             break;
  486.         case 2:
  487.             items = Item::findItem();
  488.  
  489.             cout << "\nChoose Item ID = ";
  490.             cin >> itemID;
  491.  
  492.             item = Item::findItemSale(itemID);
  493.  
  494.             if (item.itemId != NULL) {
  495.                 cout << "\nInsert Quantity = ";
  496.                 cin >> quantity;
  497.  
  498.                 if (quantity > 0) {
  499.                     cout << "\nItem Name = " +item.itemName;
  500.                     cout << "\nItem Price = " +to_string(item.itemPrice)+"\n";
  501.                     cout << "\nQuantity = " + to_string(quantity);
  502.                     cout << "\nTotal Price = " +to_string(quantity*item.itemPrice);
  503.                     cout << "\nTotal after add = " + to_string(cart.total() + (quantity * item.itemPrice));
  504.                     cout << "\nAre you sure? (y-yes, n-no) \n";
  505.                     cin >> choice;
  506.  
  507.                     if (choice == 'y') {
  508.                         cart.addItem(item, quantity);
  509.  
  510.                         cout << endl << "Item Added into cart";
  511.  
  512.                     }
  513.                     else {
  514.                         cout << endl << "Item Not Added into cart";
  515.                     }
  516.  
  517.                 }
  518.             }
  519.  
  520.             _getch();
  521.             break;
  522.  
  523.  
  524.         case 3:
  525.             category1 = Category::findCategory();
  526.             cout << "\nInsert Category ID: ";
  527.             cin >> category_id;
  528.  
  529.             if (!cin.fail()) {
  530.                 db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  531.                 db.stmt->setInt(1, category_id);
  532.  
  533.  
  534.                 db.QueryResult();
  535.  
  536.                 if (db.res->rowsCount() > 0) {
  537.                     while (db.res->next()) {
  538.                         category_name = db.res->getString("category_name");
  539.                         cout << "You choose " << category_name << "\n";
  540.  
  541.                         category = category_name;
  542.  
  543.                         items = Item::findItembyCategory(category_id);
  544.  
  545.                         cout << "\nChoose Item ID = ";
  546.                         cin >> itemID;
  547.  
  548.                         item = Item::findItemSaleCategory(itemID, category_id);
  549.  
  550.                         if (item.itemId != NULL) {
  551.                             cout << "\nInsert Quantity = ";
  552.                             cin >> quantity;
  553.  
  554.                             if (quantity > 0) {
  555.                                 cout << "\nItem Name = " + item.itemName;
  556.                                 cout << "\nItem Price = " + to_string(item.itemPrice) + "\n";
  557.                                 cout << "\nQuantity = " + to_string(quantity);
  558.                                 cout << "\nTotal Price = " + to_string(quantity * item.itemPrice);
  559.                                 cout << "\nTotal after add = " + to_string(cart.total() + (quantity * item.itemPrice));
  560.                                 cout << "\nAre you sure? (y-yes, n-no) \n";
  561.                                 cin >> choice;
  562.  
  563.                                 if (choice == 'y') {
  564.                                     cart.addItem(item, quantity);
  565.  
  566.                                     cout << endl << "Item Added into cart";
  567.  
  568.                                 }
  569.                                 else {
  570.                                     cout << endl << "Item Not Added into cart";
  571.                                 }
  572.  
  573.                             }
  574.                         }
  575.                     }
  576.                 }
  577.                 else {
  578.                     cout << "No category found!" << endl;
  579.                 }
  580.             }
  581.             else {
  582.                 std::cin.clear();
  583.                 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  584.                 std::cout << "Invalid input. Please enter an integer." << std::endl;
  585.             }
  586.  
  587.             _getch();
  588.             break;
  589.         case 4:
  590.             record_sale(user);
  591.             break;
  592.         case 5:
  593.             home(user);
  594.             break;
  595.         default:
  596.             break;
  597.         }
  598.     }
  599. }
  600.  
  601.  
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622. /*
  623.  
  624. ---------------------------------------------------------------------------------------------------------------------------------------
  625.     SALE REPORT ITEM SECTION
  626. ---------------------------------------------------------------------------------------------------------------------------------------
  627.  
  628. */
  629. void record_sale_item(Account user) {
  630.  
  631.  
  632.     Transaction cart; //initialize a transaction to hold product values
  633.     cart.userId = user.accountId; // put currently logge in user id into the transaction
  634.  
  635.  
  636.     Account temp = user;
  637.     vector<Sale> sales;
  638.     vector<Category> category1;
  639.     vector<Item> items;
  640.     Item item;
  641.     int itemID, quantity;
  642.  
  643.     int categoryID;
  644.     string category, category_name;
  645.     char choice;
  646.  
  647.     DBConnection db, db1;
  648.  
  649.     Menu homeMenu;
  650.     homeMenu.addOption("Show All");
  651.     homeMenu.addOption("Search by Keyword");
  652.     homeMenu.addOption("Search by Price");
  653.     homeMenu.addOption("Back");
  654.     while (1) {
  655.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  656.         switch (homeMenu.prompt())
  657.         {
  658.         case 1:
  659.             items = Item::findItem();
  660.  
  661.             cout << "\nChoose Item ID = ";
  662.             cin >> itemID;
  663.  
  664.             item = Item::findItemSale(itemID);
  665.  
  666.             if (item.itemId != NULL) {
  667.                 cout << "\nInsert Quantity = ";
  668.                 cin >> quantity;
  669.  
  670.                 if (quantity > 0) {
  671.                     cout << "\nItem Name = " + item.itemName;
  672.                     cout << "\nItem Price = " + to_string(item.itemPrice) + "\n";
  673.                     cout << "\nQuantity = " + to_string(quantity);
  674.                     cout << "\nTotal Price = " + to_string(quantity * item.itemPrice);
  675.                     cout << "\nTotal after add = " + to_string(cart.total() + (quantity * item.itemPrice));
  676.                     cout << "\nAre you sure? (y-yes, n-no) \n";
  677.                     cin >> choice;
  678.  
  679.                     if (choice == 'y') {
  680.                         cart.addItem(item, quantity);
  681.  
  682.                         cout << endl << "Item Added into cart";
  683.  
  684.                     }
  685.                     else {
  686.                         cout << endl << "Item Not Added into cart";
  687.                     }
  688.  
  689.                 }
  690.             }
  691.            
  692.             _getch();
  693.             record_sale(user);
  694.             break;
  695.         case 2:
  696.             cout << "Find by Keyword" << endl;
  697.             _getch();
  698.             break;
  699.         case 3:
  700.             cout << "Find by Price" << endl;
  701.             _getch();
  702.             break;
  703.         case 4:
  704.             return;
  705.             break;
  706.         default:
  707.             break;
  708.         }
  709.     }
  710. }
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727. /*
  728.  
  729. ---------------------------------------------------------------------------------------------------------------------------------------
  730.     CART MENU
  731. ---------------------------------------------------------------------------------------------------------------------------------------
  732.  
  733. */
  734. Transaction cartMenu(Account user, Transaction cart) {
  735.     Menu cartM;
  736.     cartM.header = "----------------------\n" + user.shopname + "\nShop\n----------------------\nItems in cart = " + to_string(cart.count()) + "\nTotal price = " + to_string(cart.total()) + "\n\nActions";
  737.     cartM.addOption("Checkout");
  738.     cartM.addOption("Empty Cart");
  739.     cartM.addOption("Back");
  740.     stringstream ss;
  741.     ss << "---------------------------------------------------------------------------------" << endl;
  742.     ss << fixed << setprecision(2) << "Item\t\t\t\t|Price\t\t|Quantity\t|Subtotal\t|" << endl;
  743.     ss << "---------------------------------------------------------------------------------" << endl;
  744.     for (int i = 0; i < cart.items.size(); i++) {
  745.  
  746.         if ((cart.items[i].first.itemName).length() >= 8 && (cart.items[i].first.itemName).length() <= 13) {
  747.             ss << cart.items[i].first.itemName << "\t\t\t|" << cart.items[i].first.itemPrice << "\t\t|" << cart.items[i].second
  748.                 << "\t\t|" << (cart.items[i].first.itemPrice * cart.items[i].second) << "\t\t|" << endl;
  749.         }
  750.         else if ((cart.items[i].first.itemName).length() > 13 && (cart.items[i].first.itemName).length() <= 16) {
  751.             ss << cart.items[i].first.itemName << "\t\t|" << cart.items[i].first.itemPrice << "\t\t|" << cart.items[i].second
  752.                 << "\t\t|" << (cart.items[i].first.itemPrice * cart.items[i].second) << "\t\t|" << endl;
  753.         }
  754.  
  755.         else if ((cart.items[i].first.itemName).length() > 16) {
  756.             ss << cart.items[i].first.itemName << "\t\t|" << cart.items[i].first.itemPrice << "\t\t|" << cart.items[i].second
  757.                 << "\t\t|" << (cart.items[i].first.itemPrice * cart.items[i].second) << "\t\t|" << endl;
  758.         }
  759.         else {
  760.             ss << cart.items[i].first.itemName << "\t\t\t\t|" << cart.items[i].first.itemPrice << "\t\t|" << cart.items[i].second
  761.                 << "\t\t|" << (cart.items[i].first.itemPrice * cart.items[i].second) << "\t\t|" << endl;
  762.         }
  763.     }
  764.     ss << "---------------------------------------------------------------------------------" << endl;
  765.     ss << "\nSUM" << "\t\t\t\t|\t\t|" << cart.count() << "\t\t|" << cart.total() << "\t\t|";
  766.     cartM.footer = "\nCart Items\n" + ss.str();
  767.     char confirm;
  768.     while (1)
  769.     {
  770.         switch (cartM.prompt())
  771.         {
  772.         case 1:
  773.             cout << "\nCheck out? (y/n)\n";
  774.             confirm = _getch();
  775.             if (confirm == 'Y' || confirm == 'y') {
  776.  
  777.                 if (cart.count() == 0) {
  778.                     cout << "\nEmpty Cart!";
  779.                 }
  780.                 else {
  781.                     cart.insert(cart.total());
  782.                     cout << "\nTransaction saved";
  783.                 }
  784.  
  785.                 _getch();
  786.                 record_sale(user); // go back to shop with empty cart
  787.                 break;
  788.             }
  789.             else {
  790.                 _getch();
  791.                 break;
  792.             }
  793.            
  794.         case 2:
  795.             cout << "\nClear your cart? (y/n)\n";
  796.             confirm = _getch();
  797.             if (confirm == 'Y' || confirm == 'y') {
  798.                 cout << "\nYour cart is empty";
  799.                 _getch();
  800.                 record_sale(user); // go back to shop with empty cart
  801.             }
  802.             _getch();
  803.             break;
  804.         case 3:
  805.             return cart;
  806.         }
  807.  
  808.     }
  809. }
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817. /*
  818.  
  819. ---------------------------------------------------------------------------------------------------------------------------------------
  820.     ITEM CART
  821. ---------------------------------------------------------------------------------------------------------------------------------------
  822.  
  823. */
  824. void item_cart(Account user, int itemID, Transaction cart) {
  825.     Account temp = user;
  826.  
  827.     Menu cartMenu;
  828.     cartMenu.addOption("Insert Quantity");
  829.     cartMenu.addOption("Total Price");
  830.     cartMenu.addOption("Back");
  831.     while (1) {
  832.         cartMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  833.         switch (cartMenu.prompt())
  834.         {
  835.         case 1:
  836.             cout << "Total Item";
  837.             _getch();
  838.             break;
  839.         case 2:
  840.             cout << "Total Price";
  841.             _getch();
  842.             break;
  843.         case 3:
  844.             return;
  845.             break;
  846.         default:
  847.             break;
  848.         }
  849.     }
  850. }
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861. /*
  862.  
  863. ---------------------------------------------------------------------------------------------------------------------------------------
  864.     SALE REPORT MAIN SECTION
  865. ---------------------------------------------------------------------------------------------------------------------------------------
  866.  
  867. */
  868. void sale_report(Account user) {
  869.  
  870.     Account temp = user;
  871.     vector<Sale> sales;
  872.     vector<Category> category1;
  873.     vector<Item> items;
  874.  
  875.     int categoryID;
  876.     string category, category_name;
  877.  
  878.     DBConnection db, db1;
  879.  
  880.     Menu homeMenu;
  881.     homeMenu.addOption("Show All Sale Report");
  882.     homeMenu.addOption("Show by Month");
  883.     homeMenu.addOption("Show by Category");
  884.     homeMenu.addOption("Show by Item");
  885.     homeMenu.addOption("View Statistics");
  886.     homeMenu.addOption("Edit Sales");
  887.     homeMenu.addOption("Back");
  888.     while (1) {
  889.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  890.         switch (homeMenu.prompt())
  891.         {
  892.         case 1:
  893.             all_sale_report(user);
  894.             break;
  895.         case 2:
  896.             sales = Sale::findSaleDate();
  897.             _getch();
  898.             break;
  899.         case 3:
  900.  
  901.             category1 = Category::findCategory();
  902.             cout << "\nInsert Category ID: ";
  903.             cin >> categoryID;
  904.  
  905.  
  906.             if (!cin.fail()) {
  907.                 db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  908.                 db.stmt->setInt(1, categoryID);
  909.  
  910.  
  911.                 db.QueryResult();
  912.  
  913.                 if (db.res->rowsCount() > 0) {
  914.                     while (db.res->next()) {
  915.                         category_name = db.res->getString("category_name");
  916.                         cout << "\nYou choose " << category_name << "\n";
  917.  
  918.                         category = category_name;
  919.  
  920.  
  921.                         items = Item::findItembyCategory(categoryID);
  922.                         sales = Sale::findSaleCategory(categoryID);
  923.                     }
  924.                 }
  925.                 else {
  926.                     cout << "No item found!" << endl;
  927.                 }
  928.             }
  929.             else {
  930.                 std::cin.clear();
  931.                 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  932.                 std::cout << "Invalid input. Please enter an integer." << std::endl;
  933.             }
  934.  
  935.  
  936.             _getch();
  937.             break;
  938.         case 4:
  939.             all_sale_report_id(user);
  940.             break;
  941.         case 5:
  942.             view_statistic(user);
  943.             break;
  944.         case 6:
  945.             view_statistic(user);
  946.             break;
  947.         case 7:
  948.             return;
  949.             break;
  950.         default:
  951.             break;
  952.         }
  953.     }
  954. }
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964. /*
  965.  
  966. ---------------------------------------------------------------------------------------------------------------------------------------
  967.     EDIT SALE SECTION
  968. ---------------------------------------------------------------------------------------------------------------------------------------
  969.  
  970. */
  971. void edit_sale(Account user) {
  972.  
  973.     Account temp = user;
  974.     vector<Sale> sales;
  975.     vector<Category> category1;
  976.     vector<Item> items;
  977.  
  978.     int categoryID;
  979.     string category, category_name;
  980.  
  981.     DBConnection db, db1;
  982.  
  983.     Menu homeMenu;
  984.     homeMenu.addOption("Show All Sale Report");
  985.     homeMenu.addOption("Show by Month");
  986.     homeMenu.addOption("Show by Category");
  987.     homeMenu.addOption("Show by Item");
  988.     homeMenu.addOption("View Statistics");
  989.     homeMenu.addOption("Edit Sales");
  990.     homeMenu.addOption("Back");
  991.     while (1) {
  992.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  993.         switch (homeMenu.prompt())
  994.         {
  995.         case 1:
  996.             all_sale_report(user);
  997.             break;
  998.         case 2:
  999.             sales = Sale::findSaleDate();
  1000.             _getch();
  1001.             break;
  1002.         case 3:
  1003.  
  1004.             category1 = Category::findCategory();
  1005.             cout << "\nInsert Category ID: ";
  1006.             cin >> categoryID;
  1007.  
  1008.  
  1009.             if (!cin.fail()) {
  1010.                 db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  1011.                 db.stmt->setInt(1, categoryID);
  1012.  
  1013.  
  1014.                 db.QueryResult();
  1015.  
  1016.                 if (db.res->rowsCount() > 0) {
  1017.                     while (db.res->next()) {
  1018.                         category_name = db.res->getString("category_name");
  1019.                         cout << "\nYou choose " << category_name << "\n";
  1020.  
  1021.                         category = category_name;
  1022.  
  1023.  
  1024.                         items = Item::findItembyCategory(categoryID);
  1025.                         sales = Sale::findSaleCategory(categoryID);
  1026.                     }
  1027.                 }
  1028.                 else {
  1029.                     cout << "No item found!" << endl;
  1030.                 }
  1031.             }
  1032.             else {
  1033.                 std::cin.clear();
  1034.                 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  1035.                 std::cout << "Invalid input. Please enter an integer." << std::endl;
  1036.             }
  1037.  
  1038.  
  1039.             _getch();
  1040.             break;
  1041.         case 4:
  1042.             all_sale_report_id(user);
  1043.             break;
  1044.         case 5:
  1045.             view_statistic(user);
  1046.             break;
  1047.         case 6:
  1048.             view_statistic(user);
  1049.             break;
  1050.         case 7:
  1051.             return;
  1052.             break;
  1053.         default:
  1054.             break;
  1055.         }
  1056.     }
  1057. }
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063. /*
  1064.  
  1065. ---------------------------------------------------------------------------------------------------------------------------------------
  1066.     ALL SALE REPORT BY ID
  1067. ---------------------------------------------------------------------------------------------------------------------------------------
  1068.  
  1069. */
  1070. void all_sale_report_id(Account user) {
  1071.  
  1072.     Account temp = user;
  1073.     vector<Sale> sales;
  1074.     vector<Item> items;
  1075.     DBConnection db;
  1076.  
  1077.     int item_id;
  1078.     string item_name;
  1079.     string itemNamePattern;
  1080.  
  1081.     Menu homeMenu;
  1082.     homeMenu.addOption("Show by Item Name");
  1083.     homeMenu.addOption("Show by Item ID");
  1084.     homeMenu.addOption("Back");
  1085.     while (1) {
  1086.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  1087.         switch (homeMenu.prompt())
  1088.         {
  1089.         case 1:
  1090.             /*cout << "\nInsert Item Keyword = " << endl;
  1091.             cin >> item_name;
  1092.  
  1093.             itemNamePattern = "%" + item_name + "%";
  1094.             items = Item::findItembyPattern(itemNamePattern);
  1095.  
  1096.             db.prepareStatement("SELECT * FROM item WHERE item_name LIKE ?");
  1097.             db.stmt->setString(1, itemNamePattern);
  1098.             db.QueryResult();
  1099.  
  1100.  
  1101.  
  1102.  
  1103.             if (db.res->rowsCount() > 0) {
  1104.  
  1105.                 while (db.res->next()) {
  1106.                     item_id = db.res->getInt("item_id");
  1107.                     sales = Sale::findSaleItemID(item_id);
  1108.                 }
  1109.             }*/
  1110.  
  1111.             all_sale_report_name(user);
  1112.  
  1113.             break;
  1114.         case 2:
  1115.             cout << "\nInsert Item ID = " << endl;
  1116.             cin >> item_id;
  1117.  
  1118.             items = Item::findItembyId(item_id);
  1119.  
  1120.             sales = Sale::findSaleItemID(item_id);
  1121.             _getch();
  1122.             break;
  1123.         case 3:
  1124.             return;
  1125.             break;
  1126.         default:
  1127.             break;
  1128.         }
  1129.     }
  1130. }
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144. /*
  1145.  
  1146. ---------------------------------------------------------------------------------------------------------------------------------------
  1147.     ALL SALE REPORT BY NAME
  1148. ---------------------------------------------------------------------------------------------------------------------------------------
  1149.  
  1150. */
  1151. void all_sale_report_name(Account user) {
  1152.  
  1153.     Account temp = user;
  1154.     vector<Sale> sales;
  1155.     vector<Item> items;
  1156.     DBConnection db;
  1157.  
  1158.     int item_id;
  1159.     string item_name;
  1160.     string itemNamePattern;
  1161.  
  1162.     Menu homeMenu;
  1163.     homeMenu.addOption("Insert Item Full Name");
  1164.     homeMenu.addOption("Insert Item Keyword");
  1165.     homeMenu.addOption("Back");
  1166.     while (1) {
  1167.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  1168.         switch (homeMenu.prompt())
  1169.         {
  1170.         case 1:
  1171.             cout << "\nInsert Item Name = " << endl;
  1172.             cin >> item_name;
  1173.             items = Item::findItembyName(item_name);
  1174.  
  1175.             db.prepareStatement("SELECT * FROM item WHERE item_name=?");
  1176.             db.stmt->setString(1, item_name);
  1177.             db.QueryResult();
  1178.  
  1179.  
  1180.  
  1181.             if (db.res->rowsCount() > 0) {
  1182.  
  1183.                 while (db.res->next()) {
  1184.                     item_id = db.res->getInt("item_id");
  1185.                     sales = Sale::findSaleItemID(item_id);
  1186.                 }
  1187.             }
  1188.  
  1189.             _getch();
  1190.             break;
  1191.         case 2:
  1192.             cout << "\nInsert Item Keyword = " << endl;
  1193.             cin >> item_name;
  1194.  
  1195.             itemNamePattern = "%" + item_name + "%";
  1196.             items = Item::findItembyPattern(itemNamePattern);
  1197.  
  1198.             db.prepareStatement("SELECT * FROM item WHERE item_name LIKE ?");
  1199.             db.stmt->setString(1, itemNamePattern);
  1200.             db.QueryResult();
  1201.  
  1202.  
  1203.  
  1204.  
  1205.             if (db.res->rowsCount() > 0) {
  1206.  
  1207.                 while (db.res->next()) {
  1208.                     item_id = db.res->getInt("item_id");
  1209.                     sales = Sale::findSaleItemID(item_id);
  1210.                 }
  1211.             }
  1212.  
  1213.             _getch();
  1214.             break;
  1215.         case 3:
  1216.             return;
  1217.             break;
  1218.         default:
  1219.             break;
  1220.         }
  1221.     }
  1222. }
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234. /*
  1235.  
  1236. ---------------------------------------------------------------------------------------------------------------------------------------
  1237.     ALL SALE REPORT
  1238. ---------------------------------------------------------------------------------------------------------------------------------------
  1239.  
  1240. */
  1241. void all_sale_report(Account user) {
  1242.  
  1243.     Account temp = user;
  1244.     vector<Sale> sales;
  1245.  
  1246.     Menu homeMenu;
  1247.     homeMenu.addOption("Show All Sale Report by User");
  1248.     homeMenu.addOption("Show All Sale Report by Item");
  1249.     homeMenu.addOption("Search and Filter");
  1250.     homeMenu.addOption("Back");
  1251.     while (1) {
  1252.         homeMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  1253.         switch (homeMenu.prompt())
  1254.         {
  1255.         case 1:
  1256.             cout << "\nAll Sale Report";
  1257.  
  1258.             sales = Sale::findSaleDate();
  1259.  
  1260.             _getch();
  1261.             break;
  1262.         case 2:
  1263.             cout << "\nAll Sale Report";
  1264.  
  1265.             sales = Sale::findSaleItem();
  1266.             _getch();
  1267.             break;
  1268.         case 3:
  1269.             search_filter(user);
  1270.  
  1271.             break;
  1272.         case 4:
  1273.             return;
  1274.             break;
  1275.         default:
  1276.             break;
  1277.         }
  1278.     }
  1279. }
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. /*
  1291.  
  1292. ---------------------------------------------------------------------------------------------------------------------------------------
  1293.     SEARCH AND FILTER
  1294. ---------------------------------------------------------------------------------------------------------------------------------------
  1295.  
  1296. */
  1297.  
  1298. void search_filter(Account user) {
  1299.  
  1300.     Account temp = user;
  1301.     string categoryName, maxName, proceed;
  1302.     double maxValue, minValue;
  1303.     vector<Sale> sales;
  1304.     maxValue = 0;
  1305.     minValue = 0;
  1306.  
  1307.     DBConnection db;
  1308.  
  1309.     Menu itemMenu;
  1310.     itemMenu.addOption("Input Maximum");
  1311.     itemMenu.addOption("Input Mimimum");
  1312.     itemMenu.addOption("Search");
  1313.     itemMenu.addOption("Back");
  1314.     while (1) {
  1315.         itemMenu.header = "----------------------\n" + user.shopname + "\nItem Directories\n----------------------\nChoose action and input details";
  1316.         switch (itemMenu.prompt())
  1317.         {
  1318.         case 1:
  1319.             cout << "Input maximum price value = ";
  1320.             cin >> maxValue;
  1321.             _getch();
  1322.             itemMenu.setValue(0, to_string(maxValue));
  1323.             break;
  1324.         case 2:
  1325.             cout << "Input minimum price value = ";
  1326.             cin >> minValue;
  1327.             _getch();
  1328.             itemMenu.setValue(1, to_string(minValue));
  1329.             break;
  1330.         case 3:
  1331.  
  1332.             if ((maxValue == 0) && (minValue == 0)) {
  1333.                 cout << "\nPlease input maximum or minimum subtotal value first!";
  1334.             }
  1335.             else if ((maxValue >= 0) && (minValue == 0)) {
  1336.  
  1337.                 cout << "\nYou only input maximum subtotal value, do you want to proceed? (y-yes, n-no)" << endl;
  1338.                 cin >> proceed;
  1339.  
  1340.                 if ((proceed == "Y") || (proceed == "y")) {
  1341.  
  1342.                     sales = Sale::findSaleRangeMax(maxValue);
  1343.                 }
  1344.                 else {
  1345.                     cout << "\nDenied!";
  1346.                 }
  1347.  
  1348.             }
  1349.             else if ((maxValue == 0) && (minValue >= 0)) {
  1350.                 cout << "\nYou only input minimum subtotal value, do you want to proceed? (y-yes, n-no)" << endl;
  1351.                 cin >> proceed;
  1352.  
  1353.  
  1354.                 if ((proceed == "Y") || (proceed == "y")) {
  1355.  
  1356.                     sales = Sale::findSaleRangeMin(minValue);
  1357.                 }
  1358.                 else {
  1359.                     cout << "\nDenied!";
  1360.                 }
  1361.  
  1362.             }
  1363.             else if ((maxValue >= 0) && (minValue >= 0)) {
  1364.                 sales = Sale::findSaleRange(minValue, maxValue);
  1365.             }
  1366.            
  1367.             _getch();
  1368.  
  1369.  
  1370.             break;
  1371.         case 4:
  1372.             return;
  1373.             break;
  1374.         default:
  1375.             break;
  1376.         }
  1377.     }
  1378. }
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396. /*
  1397.  
  1398. ---------------------------------------------------------------------------------------------------------------------------------------
  1399.     VIEW STATISTIC
  1400. ---------------------------------------------------------------------------------------------------------------------------------------
  1401.  
  1402. */
  1403.  
  1404. void view_statistic(Account user) {
  1405.  
  1406.     Account temp = user;
  1407.     vector<Sale> sales;
  1408.     DBConnection db, db1;
  1409.     double maxmin_sale;
  1410.     int total_item;
  1411.  
  1412.     Menu statMenu;
  1413.     statMenu.addOption("View by Item");
  1414.     statMenu.addOption("Highest and Lowest Sale");
  1415.     statMenu.addOption("Average Sale");
  1416.     statMenu.addOption("Sum Sale");
  1417.     statMenu.addOption("Back");
  1418.     while (1) {
  1419.         statMenu.header = "----------------------\n" + user.shopname + "\nSale Report\n----------------------\nChoose action and input details";
  1420.         switch (statMenu.prompt())
  1421.         {
  1422.         case 1:
  1423.             sales = Sale::findHighLowSale();
  1424.             _getch();
  1425.             break;
  1426.         case 2:
  1427.             cout << "\nHighest Sale";
  1428.             db.prepareStatement("SELECT MAX(subtotal) FROM sale");
  1429.             db.QueryResult();
  1430.             //cout << max_sale;
  1431.  
  1432.             while (db.res->next()) {
  1433.                 maxmin_sale = db.res->getDouble(1);
  1434.                
  1435.                 sales = Sale::findSaleMaxMin(maxmin_sale);
  1436.  
  1437.             }
  1438.  
  1439.             cout << "\nLowest Sale";
  1440.             db.prepareStatement("SELECT MIN(subtotal) FROM sale");
  1441.             db.QueryResult();
  1442.             //cout << max_sale;
  1443.  
  1444.             while (db.res->next()) {
  1445.                 maxmin_sale = db.res->getDouble(1);
  1446.  
  1447.                 sales = Sale::findSaleMaxMin(maxmin_sale);
  1448.  
  1449.             }
  1450.  
  1451.             _getch();
  1452.             break;
  1453.         case 3:
  1454.  
  1455.             db.prepareStatement("SELECT AVG(subtotal) FROM sale");
  1456.             db.QueryResult();
  1457.  
  1458.             while (db.res->next()) {
  1459.                 maxmin_sale = db.res->getDouble(1);
  1460.                
  1461.                 db1.prepareStatement("SELECT COUNT(sale_id) FROM sale");
  1462.                 db1.QueryResult();
  1463.  
  1464.                 while (db1.res->next()) {
  1465.                     total_item = db1.res->getInt(1);
  1466.                     cout << "\nTotal Average Sale = " << maxmin_sale << endl;
  1467.                     cout << "Total Sale Recorded = " << total_item << endl;
  1468.                 }
  1469.  
  1470.  
  1471.             }
  1472.             _getch();
  1473.             break;
  1474.         case 4:
  1475.             db.prepareStatement("SELECT SUM(subtotal) FROM sale");
  1476.             db.QueryResult();
  1477.  
  1478.             while (db.res->next()) {
  1479.                 maxmin_sale = db.res->getDouble(1);
  1480.  
  1481.                 db1.prepareStatement("SELECT COUNT(sale_id) FROM sale");
  1482.                 db1.QueryResult();
  1483.  
  1484.                 while (db1.res->next()) {
  1485.                     total_item = db1.res->getInt(1);
  1486.                     cout << "\nTotal Sum of every Sale = " << maxmin_sale << endl;
  1487.                     cout << "Total Sale Recorded = " << total_item << endl;
  1488.                 }
  1489.  
  1490.  
  1491.             }
  1492.             _getch();
  1493.             break;
  1494.         case 5:
  1495.             return;
  1496.             break;
  1497.         default:
  1498.             break;
  1499.         }
  1500.     }
  1501. }
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512. /*
  1513.  
  1514. ---------------------------------------------------------------------------------------------------------------------------------------
  1515.     NEW ITEM SECTION
  1516. ---------------------------------------------------------------------------------------------------------------------------------------
  1517.  
  1518. */
  1519. void new_item(Account user) {
  1520.  
  1521.     Account temp = user;
  1522.     string categoryName = "d";
  1523.  
  1524.     Menu itemMenu;
  1525.     itemMenu.addOption("Edit Item");
  1526.     itemMenu.addOption("New Item");
  1527.     itemMenu.addOption("Delete Item");
  1528.     itemMenu.addOption("All Item List");
  1529.     itemMenu.addOption("Show Category");
  1530.     itemMenu.addOption("Back");
  1531.     while (1) {
  1532.         itemMenu.header = "----------------------\n"+user.shopname+"\nItem Directories\n----------------------\nChoose action and input details";
  1533.         switch (itemMenu.prompt())
  1534.         {
  1535.         case 1:
  1536.             edit_item(user);
  1537.  
  1538.             break;
  1539.         case 2:
  1540.             create_new_item(user, categoryName);
  1541.  
  1542.             break;
  1543.         case 3:
  1544.             delete_item(user);
  1545.             break;
  1546.         case 4:
  1547.             all_item(user);
  1548.             break;
  1549.         case 5:
  1550.             all_category(user);
  1551.  
  1552.             break;
  1553.         case 6:
  1554.             return;
  1555.             break;
  1556.         default:
  1557.             break;
  1558.         }
  1559.     }
  1560. }
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572. /*
  1573.  
  1574. ---------------------------------------------------------------------------------------------------------------------------------------
  1575.     EDIT ITEM SECTION
  1576. ---------------------------------------------------------------------------------------------------------------------------------------
  1577.  
  1578. */
  1579. void edit_item(Account user) {
  1580.  
  1581.     Account temp = user;
  1582.     vector<Item> items;
  1583.     vector<Category> category1;
  1584.     DBConnection db;
  1585.     int itemID, categoryID, category_id;
  1586.     double itemPrice;
  1587.     string itemName, category, itemNameFind;
  1588.     Item itemSingleName;
  1589.  
  1590.     Menu homeMenu;
  1591.     homeMenu.addOption("Choose by Item ID");
  1592.     homeMenu.addOption("Choose by Item Name");
  1593.     homeMenu.addOption("Choose by Category");
  1594.     homeMenu.addOption("Back");
  1595.     while (1) {
  1596.         homeMenu.header = "----------------------\n" + user.shopname + "\nEdit Item\n----------------------\nChoose action and input details";
  1597.         switch (homeMenu.prompt())
  1598.         {
  1599.         case 1:
  1600.             items = Item::findItem();
  1601.  
  1602.             cout << "Insert Item ID = ";
  1603.             cin >> itemID;
  1604.  
  1605.             if (!cin.fail()) {
  1606.                 db.prepareStatement("SELECT * FROM item WHERE item_id=?");
  1607.                 db.stmt->setInt(1, itemID);
  1608.  
  1609.  
  1610.                 db.QueryResult();
  1611.  
  1612.                 if (db.res->rowsCount() > 0) {
  1613.                     while (db.res->next()) {
  1614.                         itemName = db.res->getString("item_name");
  1615.                         itemPrice = db.res->getDouble("item_price");
  1616.                         category_id = db.res->getInt("category_id");
  1617.                         update_new_item(user, itemID, itemName, itemPrice, category_id);
  1618.                     }
  1619.                 }
  1620.                 else {
  1621.                     cout << "No item found!" << endl;
  1622.                 }
  1623.             }
  1624.             else {
  1625.                 std::cin.clear();
  1626.                 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  1627.                 std::cout << "Invalid input. Please enter an integer." << std::endl;
  1628.             }
  1629.  
  1630.             _getch();
  1631.             break;
  1632.         case 2:
  1633.             items = Item::findItem();
  1634.  
  1635.             cout << "Insert Item Name = ";
  1636.             std::cin.clear();
  1637.             getline(cin, itemNameFind);
  1638.  
  1639.             db.prepareStatement("SELECT * FROM item WHERE item_name=?");
  1640.             db.stmt->setString(1, itemNameFind);
  1641.  
  1642.             db.QueryResult();
  1643.  
  1644.             if (db.res->rowsCount() > 1) {
  1645.                 cout << "There are more than 1 item with same name, please choose one item ID\n";
  1646.                 cout << "\nITEM ID\t\t|ITEM NAME\t\t\t\t|ITEM PRICE\t\t|CATEGORY\t\t|" << endl;
  1647.                 cout << "---------------------------------------------------------------------------------------------------------" << endl;
  1648.                 while (db.res->next()) {
  1649.                     Item tmpItem(db.res);
  1650.                     items.push_back(tmpItem);
  1651.  
  1652.                     if ((db.res->getString("item_name")).length() > 8 && (db.res->getString("item_name")).length() <= 12) {
  1653.                         cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1654.                         cout << fixed << showpoint;
  1655.                         cout << setprecision(2);
  1656.                     }
  1657.                     else if ((db.res->getString("item_name")).length() > 12 && (db.res->getString("item_name")).length() <= 16) {
  1658.                         cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1659.                         cout << fixed << showpoint;
  1660.                         cout << setprecision(2);
  1661.                     }
  1662.                     else if ((db.res->getString("item_name")).length() > 16) {
  1663.                         cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1664.                         cout << fixed << showpoint;
  1665.                         cout << setprecision(2);
  1666.                     }
  1667.                     else {
  1668.                         cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1669.                         cout << fixed << showpoint;
  1670.                         cout << setprecision(2);
  1671.                     }
  1672.  
  1673.                 }
  1674.                 cout << "\nEnter item ID = ";
  1675.                 cin >> itemID;
  1676.  
  1677.                 if (!cin.fail()) {
  1678.                     db.prepareStatement("SELECT * FROM item WHERE item_id=? AND item_name=?");
  1679.                     db.stmt->setInt(1, itemID);
  1680.                     db.stmt->setString(2, itemNameFind);
  1681.  
  1682.                     db.QueryResult();
  1683.  
  1684.                     if (db.res->rowsCount() > 0) {
  1685.                         while (db.res->next()) {
  1686.                             itemName = db.res->getString("item_name");
  1687.                             itemPrice = db.res->getDouble("item_price");
  1688.                             category_id = db.res->getInt("category_id");
  1689.                             update_new_item(user, itemID, itemName, itemPrice, category_id);
  1690.                         }
  1691.                     }
  1692.                     else {
  1693.                         cout << "No item found in this name!" << endl;
  1694.                     }
  1695.                 }
  1696.                 else {
  1697.                     std::cin.clear();
  1698.                     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  1699.                     std::cout << "Invalid input. Please enter an integer." << std::endl;
  1700.                 }
  1701.             }
  1702.             else if (db.res->rowsCount() == 1) {
  1703.                 db.prepareStatement("SELECT * FROM item WHERE item_name=?");
  1704.                 db.stmt->setString(1, itemNameFind);
  1705.  
  1706.                 db.QueryResult();
  1707.  
  1708.                 if (db.res->rowsCount() > 0) {
  1709.                     while (db.res->next()) {
  1710.                         itemID = db.res->getInt("item_id");
  1711.                         itemName = db.res->getString("item_name");
  1712.                         itemPrice = db.res->getDouble("item_price");
  1713.                         category_id = db.res->getInt("category_id");
  1714.                         update_new_item(user, itemID, itemName, itemPrice, category_id);
  1715.                     }
  1716.                 }
  1717.                 else {
  1718.                     cout << "No item found!" << endl;
  1719.                     _getch();
  1720.                 }
  1721.             }
  1722.             else {
  1723.                 cout << "No item found!" << endl;
  1724.             }
  1725.  
  1726.             _getch();
  1727.             break;
  1728.         case 3:
  1729.             category1 = Category::findCategory();
  1730.             cout << "\nInsert Category ID: ";
  1731.             cin >> categoryID;
  1732.             db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  1733.             db.stmt->setInt(1, categoryID);
  1734.  
  1735.             db.QueryResult();
  1736.  
  1737.             if (db.res->rowsCount() > 0) {
  1738.                 while (db.res->next()) {
  1739.                     category = db.res->getString("category_name");
  1740.                     cout << "\nYou choose " << category;
  1741.                     cout << "\nList of all item in " << category << " category\n";
  1742.  
  1743.                     db.prepareStatement("SELECT * FROM item WHERE category_id=?");
  1744.                     db.stmt->setInt(1, categoryID);
  1745.  
  1746.  
  1747.                     db.QueryResult();
  1748.  
  1749.                     if (db.res->rowsCount() > 0) {
  1750.                         cout << "\nITEM ID\t\t|ITEM NAME\t\t\t\t|ITEM PRICE\t\t|CATEGORY\t\t|" << endl;
  1751.                         cout << "---------------------------------------------------------------------------------------------------------" << endl;
  1752.                         while (db.res->next()) {
  1753.                             Item tmpItem(db.res);
  1754.                             items.push_back(tmpItem);
  1755.  
  1756.                             if ((db.res->getString("item_name")).length() > 8 && (db.res->getString("item_name")).length() <= 12) {
  1757.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1758.                                 cout << fixed << showpoint;
  1759.                                 cout << setprecision(2);
  1760.                             }
  1761.                             else if ((db.res->getString("item_name")).length() > 12 && (db.res->getString("item_name")).length() <= 16) {
  1762.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1763.                                 cout << fixed << showpoint;
  1764.                                 cout << setprecision(2);
  1765.                             }
  1766.                             else if ((db.res->getString("item_name")).length() > 16) {
  1767.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1768.                                 cout << fixed << showpoint;
  1769.                                 cout << setprecision(2);
  1770.                             }
  1771.                             else {
  1772.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  1773.                                 cout << fixed << showpoint;
  1774.                                 cout << setprecision(2);
  1775.                             }
  1776.  
  1777.                         }
  1778.                         cout << "\nEnter item ID = ";
  1779.                         cin >> itemID;
  1780.  
  1781.                         if (!cin.fail()) {
  1782.                             db.prepareStatement("SELECT * FROM item WHERE item_id=? AND category_id=?");
  1783.                             db.stmt->setInt(1, itemID);
  1784.                             db.stmt->setInt(2, categoryID);
  1785.  
  1786.  
  1787.                             db.QueryResult();
  1788.  
  1789.                             if (db.res->rowsCount() > 0) {
  1790.                                 while (db.res->next()) {
  1791.                                     itemName = db.res->getString("item_name");
  1792.                                     itemPrice = db.res->getDouble("item_price");
  1793.                                     category_id = db.res->getInt("category_id");
  1794.                                     update_new_item(user, itemID, itemName, itemPrice, category_id);
  1795.                                 }
  1796.                             }
  1797.                             else {
  1798.                                 cout << "This Item ID unavailable in this category!" << endl;
  1799.                             }
  1800.                         }
  1801.                         else {
  1802.                             std::cin.clear();
  1803.                             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  1804.                             std::cout << "Invalid input. Please enter an integer." << std::endl;
  1805.                         }
  1806.                     }
  1807.                 }
  1808.             }
  1809.             else {
  1810.                 cout << "Invalid Category ID!" << endl;
  1811.             }
  1812.  
  1813.             _getch();
  1814.             break;
  1815.         case 4:
  1816.             return;
  1817.             break;
  1818.         default:
  1819.             break;
  1820.         }
  1821.     }
  1822. }
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836. /*
  1837.  
  1838. ---------------------------------------------------------------------------------------------------------------------------------------
  1839.     UPDATE ITEM SECTION
  1840. ---------------------------------------------------------------------------------------------------------------------------------------
  1841.  
  1842. */
  1843. void update_new_item(Account user, int itemID, string itemName, double itemPrice, int category_id) {
  1844.     vector<Category> categoryitem;
  1845.     //Account temp = user;
  1846.     Item newitem;
  1847.     Item newItem = newitem;
  1848.     Account temp = user; // copy the object
  1849.  
  1850.     Category category1;
  1851.     DBConnection db;
  1852.     int item_ID;
  1853.     string item_name, item_category, category_name;
  1854.     double item_price = itemPrice;
  1855.  
  1856.     newitem.itemId = itemID;
  1857.     newitem.itemName = itemName;
  1858.     newitem.itemPrice = itemPrice;
  1859.     newitem.categoryId = category_id;
  1860.     string item_price1;
  1861.     item_price1 = to_string(newitem.itemPrice);
  1862.  
  1863.     Menu homeMenu;
  1864.  
  1865.     homeMenu.addOption("Item ID");
  1866.     homeMenu.addOption("Item Name");
  1867.     homeMenu.addOption("Item Price");
  1868.     homeMenu.addOption("Item Category");
  1869.     homeMenu.addOption("Reset");
  1870.     homeMenu.addOption("Save");
  1871.     homeMenu.addOption("Back");
  1872.  
  1873.     homeMenu.setValue(0, to_string(newitem.itemId));
  1874.     homeMenu.setValue(1, newitem.itemName);
  1875.     homeMenu.setValue(2, to_string(newitem.itemPrice));
  1876.     homeMenu.setValue(3, to_string(newitem.categoryId));
  1877.     while (1) {
  1878.         homeMenu.header = "----------------------\n" + user.shopname + "\nRecord New Item\n----------------------\nChoose action and input new data";
  1879.         switch (homeMenu.prompt())
  1880.         {
  1881.         case 1:
  1882.             cout << "Item ID is : " << newitem.itemId;
  1883.             cout << "\nYou cannot change Item ID!";
  1884.             _getch();
  1885.             break;
  1886.         case 2:
  1887.             cout << "Insert Item Name: ";
  1888.             std::cin.clear();
  1889.             getline(cin, newitem.itemName);
  1890.             homeMenu.setValue(1, newitem.itemName);
  1891.             break;
  1892.         case 3:
  1893.             cout << "Insert Item Price: ";
  1894.             cin >> newitem.itemPrice;
  1895.             item_price1 = to_string(newitem.itemPrice);
  1896.  
  1897.             cout << fixed << showpoint;
  1898.             cout << setprecision(2);
  1899.  
  1900.             homeMenu.setValue(2, to_string(newitem.itemPrice));
  1901.             break;
  1902.         case 4:
  1903.             categoryitem = Category::findCategory();
  1904.             cout << "Choose Category ID: ";
  1905.             cin >> category_id;
  1906.             db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  1907.             db.stmt->setInt(1, category_id);
  1908.  
  1909.  
  1910.             db.QueryResult();
  1911.  
  1912.             if (db.res->rowsCount() > 0) {
  1913.                 while (db.res->next()) {
  1914.                     category_name = db.res->getString("category_name");
  1915.                     cout << "You choose " << category_name;
  1916.                 }
  1917.             }
  1918.             else {
  1919.                 cout << "No item found!" << endl;
  1920.             }
  1921.  
  1922.             newitem.categoryId = category_id;
  1923.             homeMenu.setValue(3, to_string(newitem.categoryId));
  1924.             _getch();
  1925.             break;
  1926.         case 5:
  1927.             homeMenu.setValue(1, itemName);
  1928.             homeMenu.setValue(2, to_string(itemPrice));
  1929.             homeMenu.setValue(3, to_string(category_id));
  1930.             break;
  1931.         case 6:
  1932.             newItem = newitem;
  1933.             newItem.update_item();
  1934.             cout << "Item Successfully Saved";
  1935.             _getch();
  1936.             new_item(user);
  1937.  
  1938.             break;
  1939.         case 7:
  1940.             return;
  1941.             break;
  1942.         default:
  1943.             break;
  1944.         }
  1945.     }
  1946. }
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961. /*
  1962.  
  1963. ---------------------------------------------------------------------------------------------------------------------------------------
  1964.     CREATE NEW ITEM
  1965. ---------------------------------------------------------------------------------------------------------------------------------------
  1966.  
  1967. */
  1968. void create_new_item(Account user, string category_name) {
  1969.  
  1970.     vector<Category> category;
  1971.     Account temp = user;
  1972.     Item newitem;
  1973.     Category category1;
  1974.     DBConnection db;
  1975.     int category_id;
  1976.     string CategoryName;
  1977.     double item_price;
  1978.     Menu homeMenu;
  1979.     homeMenu.addOption("Insert Item Name");
  1980.     homeMenu.addOption("Insert Item Price");
  1981.     homeMenu.addOption("Choose Item Category");
  1982.     homeMenu.addOption("Save");
  1983.     homeMenu.addOption("Back");
  1984.     while (1) {
  1985.         homeMenu.header = "----------------------\n" + user.shopname + "\nRecord New Item\n----------------------\nChoose action and input new data";
  1986.         switch (homeMenu.prompt())
  1987.         {
  1988.         case 1:
  1989.             cout << "Item Name should not more than 25 characters";
  1990.             cout << "\nInsert Item Name: ";
  1991.             std::cin.clear();
  1992.             getline(cin, newitem.itemName);
  1993.  
  1994.             if ((newitem.itemName).length() > 25) {
  1995.                 cout << "\nItem Name must less than 26 characters!";
  1996.                 cout << "\nTotal characters = " + to_string((newitem.itemName).length());
  1997.                 cout << "\nPlease type back!";
  1998.                 _getch();
  1999.                 homeMenu.setValue(0, "");
  2000.             }
  2001.             else if ((newitem.itemName).length() <= 25) {
  2002.                 cout << "\nYou type = " +newitem.itemName;
  2003.                 cout << "\nTotal characters = " + to_string((newitem.itemName).length());
  2004.                 _getch();
  2005.                 homeMenu.setValue(0, newitem.itemName);
  2006.             }
  2007.             break;
  2008.         case 2:
  2009.             cout << "Insert Item Price: ";
  2010.             cin >> newitem.itemPrice;
  2011.  
  2012.             cout << fixed << showpoint;
  2013.             cout << setprecision(2);
  2014.  
  2015.             homeMenu.setValue(1, to_string(newitem.itemPrice));
  2016.             break;
  2017.         case 3:
  2018.             category = Category::findCategory();
  2019.             cout << "\nInsert Category ID: ";
  2020.             cin >> category_id;
  2021.             db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  2022.             db.stmt->setInt(1, category_id);
  2023.  
  2024.  
  2025.             db.QueryResult();
  2026.  
  2027.             if (db.res->rowsCount() > 0) {
  2028.                 while (db.res->next()) {
  2029.                     category_name = db.res->getString("category_name");
  2030.                     cout << "You choose " << category_name;
  2031.                     newitem.categoryId = category_id;
  2032.                     homeMenu.setValue(2, to_string(newitem.categoryId));
  2033.                 }
  2034.             }
  2035.             else {
  2036.                 cout << "No category found!" << endl;
  2037.             }
  2038.  
  2039.  
  2040.             _getch();
  2041.             break;
  2042.         case 4:
  2043.             newitem.insert_item();
  2044.             cout << "Item Successfully Saved";
  2045.             _getch();
  2046.             new_item(user);
  2047.             break;
  2048.         case 5:
  2049.             return;
  2050.             break;
  2051.         default:
  2052.             break;
  2053.         }
  2054.     }
  2055. }
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068. /*
  2069.  
  2070. ---------------------------------------------------------------------------------------------------------------------------------------
  2071.     DELETE ITEM SECTION
  2072. ---------------------------------------------------------------------------------------------------------------------------------------
  2073.  
  2074. */
  2075. void delete_item(Account user) {
  2076.  
  2077.     vector<Category> categoryitem;
  2078.     vector<Category> category1;
  2079.     Account temp = user;
  2080.     Item item;
  2081.     Item temp1 = item;
  2082.     string itemName, category, item_name, delete_decision;
  2083.     int itemId, itemIdDelete, category_id;
  2084.     vector<Item> items, items2;
  2085.     DBConnection db;
  2086.  
  2087.  
  2088.     Menu itemMenu;
  2089.     itemMenu.addOption("List out all item");
  2090.     itemMenu.addOption("List by Category");
  2091.     itemMenu.addOption("Back");
  2092.     while (1) {
  2093.         itemMenu.header = "----------------------\n" + user.shopname + "\nDelete Item\n----------------------\nChoose action\n";
  2094.         switch (itemMenu.prompt())
  2095.         {
  2096.         case 1:
  2097.             items = Item::findItem();
  2098.  
  2099.             cout << "\nInsert Item ID to Delete = ";
  2100.             cin >> itemIdDelete;
  2101.  
  2102.             db.prepareStatement("SELECT * FROM item WHERE item_id=?");
  2103.             db.stmt->setInt(1, itemIdDelete);
  2104.  
  2105.  
  2106.             db.QueryResult();
  2107.  
  2108.             if (db.res->rowsCount() > 0) {
  2109.                 while (db.res->next()) {
  2110.                     item_name = db.res->getString("item_name");
  2111.  
  2112.                     items = Item::findItembyId(itemIdDelete);
  2113.  
  2114.                     cout << "\nDelete this item? (y/n) = ";
  2115.                     char confirm;
  2116.                     confirm = _getch();
  2117.                     if (confirm == 'Y' || confirm == 'y') {
  2118.                         item = temp1;
  2119.                         cout << "\nItem ID " << itemIdDelete << " = " << item_name << " successfully deleted!";
  2120.                         item.remove_item(itemIdDelete);
  2121.                     }
  2122.                 }
  2123.             }
  2124.             else {
  2125.                 cout << "No item found!" << endl;
  2126.             }
  2127.  
  2128.  
  2129.             _getch();
  2130.             break;
  2131.  
  2132.         case 2:
  2133.             categoryitem = Category::findCategory();
  2134.             cout << "\nInsert Category ID to show: ";
  2135.             cin >> category_id;
  2136.  
  2137.             db.prepareStatement("SELECT * FROM category WHERE category_id=?");
  2138.             db.stmt->setInt(1, category_id);
  2139.  
  2140.             db.QueryResult();
  2141.  
  2142.             if (db.res->rowsCount() > 0) {
  2143.                 cout << "\nCATEGORY ID\t|CATEGORY NAME\t\t|CATEGORY DESC\t\t\t\t|" << endl;
  2144.                 cout << "---------------------------------------------------------------------------------" << endl;
  2145.                 while (db.res->next()) {
  2146.                     Category tmpCategory(db.res);
  2147.                     category1.push_back(tmpCategory);
  2148.  
  2149.                     cout << "" << db.res->getInt("category_id") << "\t\t|" << db.res->getString("category_name") << "      \t\t|" << db.res->getString("category_desc") << "      \t\t\t|" << endl;
  2150.                     cout << fixed << showpoint;
  2151.                     cout << setprecision(2);
  2152.  
  2153.                     cout << "\nList of item available in this category = \n";
  2154.  
  2155.                     category_id = db.res->getInt("category_id");
  2156.  
  2157.                     db.prepareStatement("SELECT * FROM item WHERE category_id=?");
  2158.                     db.stmt->setInt(1, category_id);
  2159.  
  2160.  
  2161.                     db.QueryResult();
  2162.  
  2163.                     if (db.res->rowsCount() > 0) {
  2164.                         cout << "\nITEM ID\t\t|ITEM NAME\t\t\t\t|ITEM PRICE\t\t|CATEGORY\t\t|" << endl;
  2165.                         cout << "---------------------------------------------------------------------------------------------------------" << endl;
  2166.                         while (db.res->next()) {
  2167.                             Item tmpItem(db.res);
  2168.                             items.push_back(tmpItem);
  2169.  
  2170.                             if ((db.res->getString("item_name")).length() > 8 && (db.res->getString("item_name")).length() <= 12) {
  2171.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  2172.                                 cout << fixed << showpoint;
  2173.                                 cout << setprecision(2);
  2174.                             }
  2175.                             else if ((db.res->getString("item_name")).length() > 12 && (db.res->getString("item_name")).length() <= 16) {
  2176.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  2177.                                 cout << fixed << showpoint;
  2178.                                 cout << setprecision(2);
  2179.                             }
  2180.                             else if ((db.res->getString("item_name")).length() > 16) {
  2181.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  2182.                                 cout << fixed << showpoint;
  2183.                                 cout << setprecision(2);
  2184.                             }
  2185.                             else {
  2186.                                 cout << "" << db.res->getInt("item_id") << "\t\t|" << db.res->getString("item_name") << "      \t\t\t\t|" << db.res->getDouble("item_price") << "      \t\t|" << db.res->getInt("category_id") << "\t\t\t|" << endl;
  2187.                                 cout << fixed << showpoint;
  2188.                                 cout << setprecision(2);
  2189.                             }
  2190.  
  2191.                         }
  2192.                         cout << "\nEnter item ID = ";
  2193.                         cin >> itemId;
  2194.  
  2195.                         if (!cin.fail()) {
  2196.                             db.prepareStatement("SELECT * FROM item WHERE item_id=? AND category=?");
  2197.                             db.stmt->setInt(1, itemId);
  2198.                             db.stmt->setString(2, category);
  2199.  
  2200.  
  2201.                             db.QueryResult();
  2202.  
  2203.                             if (db.res->rowsCount() > 0) {
  2204.                                 while (db.res->next()) {
  2205.  
  2206.  
  2207.                                     items2 = Item::findItembyId(itemId);
  2208.  
  2209.                                     cout << "\nDelete this item? (y/n) = ";
  2210.                                     char confirm;
  2211.                                     confirm = _getch();
  2212.                                     if (confirm == 'Y' || confirm == 'y') {
  2213.                                         item = temp1;
  2214.                                         db.prepareStatement("DELETE FROM item WHERE item_id=?");
  2215.                                         db.stmt->setInt(1, itemId);
  2216.  
  2217.                                         db.QueryResult();
  2218.  
  2219.                                         cout << "\nItem ID " << itemId << " successfully deleted!";
  2220.  
  2221.                                     }
  2222.  
  2223.                                     db.prepareStatement("DELETE FROM item WHERE item_id=?");
  2224.                                     db.stmt->setInt(1, itemId);
  2225.  
  2226.                                 }
  2227.                             }
  2228.                             else {
  2229.                                 cout << "This Item ID unavailable in this category!" << endl;
  2230.                             }
  2231.                         }
  2232.                         else {
  2233.                             std::cin.clear();
  2234.                             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  2235.                             std::cout << "Invalid input. Please enter an integer." << std::endl;
  2236.                         }
  2237.                     }
  2238.  
  2239.  
  2240.  
  2241.                 }
  2242.             }
  2243.             else {
  2244.                 cout << "Invalid Category ID!" << endl;
  2245.             }
  2246.  
  2247.  
  2248.             _getch();
  2249.             break;
  2250.         case 3:
  2251.             return;
  2252.             break;
  2253.         default:
  2254.             break;
  2255.         }
  2256.     }
  2257. }
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267. /*
  2268.  
  2269. ---------------------------------------------------------------------------------------------------------------------------------------
  2270.     ALL ITEM
  2271. ---------------------------------------------------------------------------------------------------------------------------------------
  2272.  
  2273. */
  2274. void all_item(Account user) {
  2275.  
  2276.     Account temp = user;
  2277.     string itemName, category, category_name;
  2278.     int itemId, categoryId;
  2279.     vector<Item> items;
  2280.     vector<Category> categoryFind;
  2281.     DBConnection db;
  2282.  
  2283.     Menu itemMenu;
  2284.     itemMenu.addOption("List out all item");
  2285.     itemMenu.addOption("Choose Item by Category");
  2286.     itemMenu.addOption("Choose Item by ID");
  2287.     itemMenu.addOption("Choose Item by Name");
  2288.     itemMenu.addOption("Back");
  2289.     while (1) {
  2290.         itemMenu.header = "----------------------\n" + user.shopname + "\nAll Item List\n----------------------\nChoose action\n";
  2291.         switch (itemMenu.prompt())
  2292.         {
  2293.         case 1:
  2294.             items = Item::findItem();
  2295.             _getch();
  2296.             break;
  2297.  
  2298.         case 2:
  2299.             categoryFind = Category::findCategory();
  2300.             cout << "\nInsert Category ID: ";
  2301.             cin >> categoryId;
  2302.  
  2303.             if (!cin.fail()) {
  2304.                 db.prepareStatement("SELECT category_name FROM category WHERE category_id=?");
  2305.                 db.stmt->setInt(1, categoryId);
  2306.  
  2307.  
  2308.                 db.QueryResult();
  2309.  
  2310.                 if (db.res->rowsCount() > 0) {
  2311.                     while (db.res->next()) {
  2312.                         category_name = db.res->getString("category_name");
  2313.                         cout << "You choose " << category_name << "\n";
  2314.  
  2315.                         category = category_name;
  2316.  
  2317.                         items = Item::findItembyCategory(categoryId);
  2318.                     }
  2319.                 }
  2320.                 else {
  2321.                     cout << "No item found!" << endl;
  2322.                 }
  2323.             }
  2324.             else {
  2325.                 std::cin.clear();
  2326.                 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  2327.                 std::cout << "Invalid input. Please enter an integer." << std::endl;
  2328.             }
  2329.  
  2330.             _getch();
  2331.             break;
  2332.         case 3:
  2333.             cout << "Insert Item Id to Select: ";
  2334.             cin >> itemId;
  2335.             items = Item::findItembyId(itemId);
  2336.             _getch();
  2337.             break;
  2338.         case 4:
  2339.             cout << "Insert Item Name to Show: ";
  2340.  
  2341.             std::cin.clear();
  2342.             getline(cin, itemName);
  2343.             items = Item::findItembyName(itemName);
  2344.             _getch();
  2345.             break;
  2346.         case 5:
  2347.             return;
  2348.             break;
  2349.         default:
  2350.             break;
  2351.         }
  2352.     }
  2353. }
  2354.  
  2355.  
  2356.  
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363. /*
  2364.  
  2365. ---------------------------------------------------------------------------------------------------------------------------------------
  2366.     ALL CATEGORY
  2367. ---------------------------------------------------------------------------------------------------------------------------------------
  2368.  
  2369. */
  2370. void all_category(Account user) {
  2371.  
  2372.     Account temp = user;
  2373.     vector<Category> category;
  2374.     int category_id;
  2375.     DBConnection db;
  2376.     Category category1;
  2377.     string category_name, category_desc;
  2378.  
  2379.     Menu categoryMenu;
  2380.     categoryMenu.addOption("List All Category");
  2381.     categoryMenu.addOption("Add New Category");
  2382.     categoryMenu.addOption("Edit Category");
  2383.     categoryMenu.addOption("Delete Category");
  2384.     categoryMenu.addOption("Back");
  2385.     while (1) {
  2386.         categoryMenu.header = "----------------------\n" + user.shopname + "\nCategory Section\n----------------------\nChoose action";
  2387.         switch (categoryMenu.prompt())
  2388.         {
  2389.         case 1:
  2390.             category = Category::findCategory();
  2391.             _getch();
  2392.             break;
  2393.         case 2:
  2394.             add_category(user);
  2395.             break;
  2396.         case 3:
  2397.             category = Category::findCategory();
  2398.  
  2399.             cout << "\nChoose category ID to edit = ";
  2400.             cin >> category_id;
  2401.  
  2402.             db.prepareStatement("SELECT * FROM category WHERE category_id=?");
  2403.             db.stmt->setInt(1, category_id);
  2404.  
  2405.             db.QueryResult();
  2406.  
  2407.  
  2408.             if (db.res->rowsCount() > 0) {
  2409.                 while (db.res->next()) {
  2410.                     category_name = db.res->getString("category_name");
  2411.                     category_desc = db.res->getString("category_desc");
  2412.                     edit_category(user, category_id, category_name, category_desc);
  2413.                 }
  2414.             }
  2415.             else {
  2416.                 cout << "Category ID not available!" << endl;
  2417.             }
  2418.  
  2419.             _getch();
  2420.             break;
  2421.         case 4:
  2422.             return;
  2423.             break;
  2424.         case 5:
  2425.             return;
  2426.             break;
  2427.         default:
  2428.             break;
  2429.         }
  2430.     }
  2431. }
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441. /*
  2442.  
  2443. ---------------------------------------------------------------------------------------------------------------------------------------
  2444.     ADD NEW CATEGORY
  2445. ---------------------------------------------------------------------------------------------------------------------------------------
  2446.  
  2447. */
  2448. void add_category(Account user) {
  2449.  
  2450.     Account temp = user;
  2451.     Category newcategory;
  2452.  
  2453.     Menu categoryMenu;
  2454.     categoryMenu.addOption("Category Name");
  2455.     categoryMenu.addOption("Category Description");
  2456.     categoryMenu.addOption("Save");
  2457.     categoryMenu.addOption("Back");
  2458.     while (1) {
  2459.         categoryMenu.header = "----------------------\n" + user.shopname + "\nAdd New Category\n----------------------\nChoose action and input details";
  2460.         switch (categoryMenu.prompt())
  2461.         {
  2462.         case 1:
  2463.             cout << "Insert Category Name: ";
  2464.             std::cin.clear();
  2465.             //std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  2466.             getline(cin, newcategory.categoryName);
  2467.             categoryMenu.setValue(0, newcategory.categoryName);
  2468.             break;
  2469.         case 2:
  2470.             cout << "Insert Category Description: ";
  2471.             std::cin.clear();
  2472.             getline(cin, newcategory.categoryDesc);
  2473.             categoryMenu.setValue(1, newcategory.categoryDesc);
  2474.             break;
  2475.  
  2476.            
  2477.         case 3:
  2478.             newcategory.insert_category();
  2479.             cout << "Category Successfully Saved";
  2480.             _getch();
  2481.         case 4:
  2482.             return;
  2483.             break;
  2484.         default:
  2485.             break;
  2486.         }
  2487.     }
  2488. }
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497. /*
  2498.  
  2499. ---------------------------------------------------------------------------------------------------------------------------------------
  2500.     EDIT CURRENT CATEGORY
  2501. ---------------------------------------------------------------------------------------------------------------------------------------
  2502.  
  2503. */
  2504. void edit_category(Account user, int category_id, string category_name, string category_desc) {
  2505.  
  2506.     Account temp = user;
  2507.     Category newcategory;
  2508.     newcategory.categoryId = category_id;
  2509.     newcategory.categoryName = category_name;
  2510.     newcategory.categoryDesc = category_desc;
  2511.  
  2512.     Menu categoryMenu;
  2513.     categoryMenu.addOption("Category ID");
  2514.     categoryMenu.addOption("Category Name");
  2515.     categoryMenu.addOption("Category Description");
  2516.     categoryMenu.addOption("Reset");
  2517.     categoryMenu.addOption("Save");
  2518.     categoryMenu.addOption("Back");
  2519.  
  2520.  
  2521.     categoryMenu.setValue(0, to_string(category_id));
  2522.     categoryMenu.setValue(1, category_name);
  2523.     categoryMenu.setValue(2, category_desc);
  2524.     while (1) {
  2525.         categoryMenu.header = "----------------------\n" + user.shopname + "\nAdd New Category\n----------------------\nChoose action and input details";
  2526.         switch (categoryMenu.prompt())
  2527.         {
  2528.         case 1:
  2529.             cout << "Category ID cannot be changed!";
  2530.             _getch();
  2531.             break;
  2532.         case 2:
  2533.             cout << "Insert new Category Name = \n";
  2534.             cin >> newcategory.categoryName;
  2535.  
  2536.             categoryMenu.setValue(1, newcategory.categoryName);
  2537.  
  2538.             break;
  2539.         case 3:
  2540.             cout << "Insert new Category Description = \n";
  2541.  
  2542.             std::cin.clear();
  2543.             std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  2544.             getline(cin, newcategory.categoryDesc);
  2545.             categoryMenu.setValue(2, newcategory.categoryDesc);
  2546.  
  2547.             break;
  2548.         case 4:
  2549.             categoryMenu.setValue(1, category_name);
  2550.             categoryMenu.setValue(2, category_desc);
  2551.             break;
  2552.         case 5:
  2553.             newcategory.update_category();
  2554.             cout << "\nCategory Successfully Saved";
  2555.             _getch();
  2556.  
  2557.             all_category(user);
  2558.             break;
  2559.         case 6:
  2560.             return;
  2561.             break;
  2562.         default:
  2563.             break;
  2564.         }
  2565.     }
  2566. }
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582. /*
  2583.  
  2584. ---------------------------------------------------------------------------------------------------------------------------------------
  2585.     MENU
  2586. ---------------------------------------------------------------------------------------------------------------------------------------
  2587.  
  2588. */
  2589. bool isNumeric(string input) {
  2590.     for (int i = 0; i < input.length(); i++) {
  2591.         // loop through the string and if the character at index is not digit return false
  2592.         if (!isdigit(input.at(i))) {
  2593.             return false;
  2594.         }
  2595.     }
  2596.     // if loop finishes means all is digit so return true
  2597.     return true;
  2598. }
  2599.  
  2600.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement