Advertisement
Guest User

Alexis new Shop 2

a guest
Mar 20th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <fstream>
  4. #include <string>
  5. #include <sstream>
  6. #include <vector>
  7. #include <stdio.h>
  8. using namespace std;
  9.  
  10. //Variables
  11. int shopSize;
  12. int orders = 0;
  13. int numbers[150];
  14. //We use orders as a counter, in order to know when we should stop looking at the array
  15.  
  16. //Structures
  17. struct itemEntry {
  18. int itemNumber;
  19. string name;
  20. double cost;
  21. int quantity;
  22. };
  23.  
  24. //Dynamic Memory for shop and cart
  25. itemEntry * shop;
  26. itemEntry * cart;
  27.  
  28. //Functions
  29. bool Read(); //Reads from the .csv and puts it into the shop arrays
  30. void Display(); //Displays the receipt
  31. int search(int match, itemEntry *list); //Returns the array LOCATION of the barcode (item number)
  32. void printCart();
  33. void writeFile();
  34.  
  35. int main() {
  36. //Calls read to put the data from the csv into the shop arrays
  37. Read();
  38.  
  39. int userItemNum; //value the user inputs into the console to tell us what product # he wants
  40. int userItemAmount; //value the user inputs into the console to tell us how many of the product he wants
  41. int arrayNum; // a position variable, where the value is held in the array location wise
  42. string userInput = "";
  43. bool keepGo = true;
  44. cout << "at any time, enter cart to view your cart" <<endl;
  45. //loop keeps going until keepGo breaks
  46. while (keepGo) {
  47. cout << "Enter the Item Number" << endl;
  48. //takes the users input, checks if its cart, and stores it in userItemNum
  49. cin >> userInput;
  50. if (userInput == "cart") {
  51. printCart();
  52. }
  53. stringstream(userInput) >> userItemNum;
  54.  
  55. if (userItemNum == 0) { //escape loop, finished buying
  56. keepGo = false; //this is the break condition for the while loop
  57. }
  58. //searches for the position in the array the product is in and stores it in arrayNum
  59. arrayNum = search(userItemNum, shop);
  60. if (arrayNum == -1) {
  61. cout << "Error, product not found" << endl;
  62. }
  63. else { //if the product was found
  64. //check if there's a duplicate in the cart
  65. int storage = shop[arrayNum].quantity;
  66. int duplicate = search(userItemNum, cart);
  67. if (duplicate != -1) {
  68. storage = storage - cart[duplicate].quantity;
  69. }
  70. //print product information
  71. cout << "Product name is: " << "Product " << (arrayNum + 1) << endl;
  72. cout << "Price per unit is: " << shop[arrayNum].cost << endl;
  73. cout << "amount in stock is: " << storage << endl;
  74.  
  75. //asks the user how many they want until its a valid number
  76. do {
  77. cout << "How many would you like?" << endl;
  78. if (storage == 0) {
  79. cout << "We are out of stock of " << "Product " << (arrayNum + 1) << endl;
  80. userItemAmount = 0;
  81. }
  82. else {
  83. //takes the users input, checks if its cart, and stores it in userItemAmount
  84. cin >> userItemAmount;
  85. if (userItemAmount > storage) { //check if the request is larger than the stock
  86. cout << "There is not enough available please re-enter " << endl;
  87. }
  88. }
  89. } while (userItemAmount > storage); //keeps asking for an amount that is less than the storage
  90. if (duplicate != -1) {
  91. cart[duplicate].quantity = cart[duplicate].quantity + userItemAmount;
  92. }
  93. else {
  94. cart[orders].itemNumber = userItemNum; //puts in the cart the barcode of the product
  95. cart[orders].name = shop[arrayNum].name;
  96. cart[orders].cost = shop[arrayNum].cost;
  97. cart[orders].quantity = userItemAmount; //puts in the cart the amount of product bought
  98. numbers[orders] = arrayNum;
  99. orders++; //increases the shopping cart size counter
  100. }
  101. }
  102. }
  103. Display(); //displays receipt
  104. cout << "press enter to quit" << endl;
  105. cin >> userInput;
  106. }
  107.  
  108. //linear search looking for the location of the product within the array using itemNumber
  109. int search(int match, itemEntry *list) { //the parameter 'match' is the user's inputted bar code (item number)
  110. for (int i = 0; i < shopSize; i++) { //both arrays are size shopSize so it loops up to then
  111. if (match == list[i].itemNumber) { //if 'match' is equivalent to the array value stored at i, then return i
  112. return i;
  113. }
  114. }
  115. return -1; //this happens when we've looped through the entire array and didn't find a match
  116. }
  117.  
  118. bool Read() {
  119. //array values
  120. int itemNu;//value that goes into the array
  121. string nam = "";//value that goes into the array
  122. double pric;//value that goes into the array
  123. int amoun;//value that goes into the array
  124.  
  125. string translate;//value we read from the file to be translated / discarded
  126.  
  127. //File Opener
  128. ifstream inFile;
  129. int a = 0;//counter used to parse through the array
  130. inFile.open("C:\\Users\\Miguel\\Desktop\\ProductData.csv"); //*change destination later*
  131. if (!inFile) { //file didn't open
  132. cout << "error! Couldn't open file!";
  133. return false;// terminate with error
  134. }
  135.  
  136. //getLine( SOURCE, Variable you're putting the value in, and a 'delimiter' (where the line stops) )
  137. //Catches the number of data entries in the csv file
  138. getline(inFile, translate, '\n');
  139. stringstream(translate) >> shopSize; //use StringStream to feed int variable 'shopSize' numbers from our string 'translate'
  140. //Initializes the Dynamic Memory allocations for the shop inventory and the cart inventory
  141. shop = new itemEntry[shopSize];
  142. cart = new itemEntry[shopSize];
  143. //goes through the headers, and does nothing with them
  144. getline(inFile, translate, ','); //The source is 'inFile', because that's what we named our file opener
  145. getline(inFile, translate, ','); //The variable we're storing these lines in is 'translate'
  146. getline(inFile, translate, ','); //The delimiter is ',' that is, it stops reading after the comma
  147. getline(inFile, translate, '\n'); //The .csv has 4 columns for each row, so after the 4th get line the delimiter would be '\n'
  148.  
  149. while (inFile.good()) { //goes through file while it's not broken
  150. //Obtain untranslated values from the CSV and translates immedietly
  151. getline(inFile, translate, ',');//first value in the row is the item number
  152. stringstream(translate) >> itemNu;
  153. getline(inFile, nam, ',');//second value in the row is the name of the product
  154. getline(inFile, translate, ',');//third value in the row is the price
  155. stringstream(translate) >> pric;
  156. getline(inFile, translate, '\n');//final is the amount, and then we go to a new line
  157. stringstream(translate) >> amoun;
  158.  
  159. //fill the array with translated values
  160. shop[a].itemNumber = itemNu;
  161. //shop[a].name = nam;
  162. shop[a].cost = pric;
  163. shop[a].quantity = amoun;
  164. //new row so increase 'a' by one so we can still put the values in the right location of the array
  165. a++;
  166. }
  167. inFile.close();
  168. return true;
  169. }
  170.  
  171. void Display() {
  172. string infoOne; //name
  173. string infoTwo; //Street Address
  174. string infoThree; //City, Zipcode
  175. double billb = 0;
  176. getline(cin, infoOne);
  177. //takes input for name
  178. cout << "Enter Name" << endl;
  179. getline(cin, infoOne);
  180. //takes input for street address
  181. cout << "Enter Street Address" << endl;
  182. getline(cin, infoTwo);
  183. //takes input for city zipcode
  184. cout << "Enter City, State Zipcode" << endl;
  185. getline(cin, infoThree);
  186.  
  187. //opens an output file to print this too, every line is repeated to print to console and to the text file
  188. ofstream myfile;
  189. myfile.open("C:\\Users\\Miguel\\Desktop\\Invoie.txt");
  190. //formatting and output
  191. cout << "Customer Name: " << infoOne << endl;
  192. myfile << "Customer Name: " << infoOne << endl;
  193. cout << "Customer Address : " << infoTwo << endl;
  194. myfile << "Customer Address : " << infoTwo << endl;
  195. cout << " " << infoThree << endl;
  196. myfile << " " << infoThree << endl;
  197. printCart();
  198. myfile << "Item Number Item Name Qty Unit cost Total" << endl;
  199. myfile << "......................................................................." << endl;
  200. myfile << "..............." << endl;
  201. for (int i = 0; i < orders; i++) { //uses the counter, 'orders' to know when stop reading from the array
  202. double itemCash = 0; //total cost of this product (amount * price)
  203. myfile << "Item Number " << i << " ";
  204. myfile << "Product " << numbers[i];
  205. myfile << cart[i].quantity << " ";
  206. myfile << cart[i].cost << " ";
  207. //Calculate total cost of this individual product
  208. itemCash = cart[i].quantity * cart[i].cost;
  209. myfile << itemCash << endl;
  210. //adds the total cost of this individual product to the total bill
  211. billb = billb + itemCash;
  212. }
  213. myfile << "......................................................................." << endl;
  214. myfile << "..............." << endl;
  215. myfile << " Total:$" << billb << endl;
  216.  
  217. myfile.close();
  218. writeFile();
  219. delete[] shop;
  220. delete[] cart;
  221. }
  222. void writeFile() {
  223. //remove("C:\\Users\\Miguel\\Desktop\\ProductData.csv");
  224. ofstream csvfile;
  225. csvfile.open("C:\\Users\\Miguel\\Desktop\\ProductData.csv");
  226. csvfile << shopSize << endl;
  227. csvfile << "Item Number, Name, Cost, Qty" << endl;
  228. for (int i = 0; i < shopSize; i++) {
  229. int take = 0;
  230. int findtake = search(shop[i].itemNumber, cart);
  231. if (findtake != -1) {
  232. take = cart[findtake].quantity;
  233. }
  234. csvfile << shop[i].itemNumber << ",";
  235. csvfile << "Product " << numbers[i] << ",";
  236. csvfile << shop[i].cost << ",";
  237. csvfile << shop[i].quantity - take << endl;
  238. }
  239. }
  240. void printCart() {
  241. double bill = 0; //Bill size
  242. cout << "shopping cart:" << endl;
  243. cout << "Item Number Item Name Qty Unit cost Total" << endl;
  244. cout << "......................................................................." << endl;
  245. cout << "..............." << endl;
  246. for (int i = 0; i < orders; i++) { //uses the counter, 'orders' to know when stop reading from the array
  247. double itemCash = 0; //total cost of this product (amount * price)
  248. cout << "Item Number " << i << " ";
  249. cout << "Product " << numbers[i] << " ";
  250. cout << cart[i].quantity << " ";
  251. cout << cart[i].cost << " ";
  252. //Calculate total cost of this individual product
  253. itemCash = cart[i].quantity * cart[i].cost;
  254. cout << itemCash << endl;
  255. //adds the total cost of this individual product to the total bill
  256. bill = bill + itemCash;
  257. }
  258. cout << "......................................................................." << endl;
  259. cout << "..............." << endl;
  260. cout << " Total:$" << bill << endl;
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement