Advertisement
Guest User

Untitled

a guest
Apr 12th, 2018
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 KB | None | 0 0
  1. /*-----------------------------------------------------------------
  2. System Name: Zoinkers!
  3. Artifact Name: Zoinkers.h
  4. Create Date: March 25, 2018
  5. Author: Shah Ohm, oshah@kent.edu
  6. Version: 2.0
  7. ------------------------------------------------------------------*/
  8.  
  9. #include "Zoinkers.hpp"
  10.  
  11. //============[Animal Functions]=====================
  12. Animal::Animal(int ID, int AniID, std::string str){
  13. EID = ID;
  14. AID = AniID;
  15. name = str;
  16. }
  17.  
  18. //============[Schedule Functions]===================
  19.  
  20.  
  21.  
  22. //============[User Functions]====================
  23.  
  24. void User::updateFav(){
  25.  
  26. }
  27.  
  28.  
  29. void User::checkDiscount(){
  30.  
  31. }
  32.  
  33. void User::dateParse(){
  34. std::vector<int> vect;
  35. std::stringstream ss(date);
  36. int i;
  37. while (ss >> i)
  38. {
  39. vect.push_back(i);
  40. if (ss.peek() == '-')
  41. ss.ignore();
  42. }
  43. month = vect.at(0);
  44. day = vect.at(1);
  45. year = vect.at(2);
  46. //std::cout << month << day << year;
  47. /* if(month <= 12 || month < 0) {
  48. std::cout << "\nPlease Enter Date as the Following Format 12-31-2018 \nPlease Enter a Date: ";
  49. std::cin >> date;
  50. //dateParse();
  51. }
  52. if(day <= 31 || day < 0){
  53. std::cout << "\nPlease Enter Date as the Following Format 12-31-2018 \nPlease Enter a Date: ";
  54. std::cin >> date;
  55. //dateParse();
  56. }
  57. if(year < 2050 || year <= 2018){ // must be this year or following years
  58. std::cout << "\nPlease Enter Date as the Following Format 12-31-2018 \nPlease Enter a Date: ";
  59. std::cin >> date;
  60. //dateParse();
  61. } */ //fix this issue with inputs
  62. }
  63.  
  64. void User::checkBudget(){
  65. char ans;
  66. std::cout << "Your Budget is: "<<budget<<" is this correct(y/n): ";
  67. std::cin >> ans;
  68. if (ans == 'y') return;
  69. else
  70. std::cout << "Please Enter a Budget: "; std::cin >> budget; //Budget is set
  71. checkBudget();
  72. }
  73.  
  74. void User::displayOptions(User userone, Zoink& zoinker){
  75. int input;
  76. std::cout << "1. Generate Order Plan"; //Options
  77. std::cout << "Select your option: ";
  78. std::cin >> input;
  79. switch (input) {
  80. case 1:
  81. generateSched(userone, zoinker);
  82. break;
  83. //add more cases in later iterations
  84. default:
  85. break;
  86. }
  87. }
  88.  
  89. bool User::checkUser(std::string name, std::string pass){
  90. if(pass == testPass && name == testUser) {// Hardcoded for 2.0
  91. std::cout << "Success! \n";
  92. return true;
  93. }
  94. //Update to check for invalid
  95. return false;
  96. }
  97.  
  98. User::User(std::string user, std::string pass, int tmpRole){
  99. username = user;
  100. password = pass;
  101. role = tmpRole;
  102.  
  103. Favorability fav1(1, 5);
  104. favanimal.push_back(fav1);
  105.  
  106. Favorability fav2(2, 4);
  107. favanimal.push_back(fav2);
  108.  
  109. Favorability fav3(3, 2);
  110. favanimal.push_back(fav3);
  111.  
  112. }
  113.  
  114. void User::avgFavExhibit(Zoink& zoinker){
  115. int i = 0;
  116. double avg = 0;
  117. int total = 0;
  118. while(i < zoinker.getNumExhib()){
  119. std::vector<int> exhibitAnimals = zoinker.getAnimalWithEID(i);
  120. for(int x = 0; x < exhibitAnimals.size(); ++x){
  121. for(int y = 0; y < favanimal.size(); ++y){
  122. if(favanimal[y].returnID() == exhibitAnimals[x]){
  123. avg += favanimal[y].returnFav();
  124. ++total;
  125. }
  126. }
  127. }
  128. ++i;
  129. }
  130. avg = avg/total;
  131. Favorability tmp(1, avg);
  132. exhibitFav.push_back(tmp);
  133. //std::cout << "in avg fav exhibit exhibitFav.size(): " << exhibitFav.size();
  134. }
  135.  
  136. User createUser(std::string name, std::string pass){
  137. User NewUser(name,pass,1);
  138. return NewUser;
  139. }
  140.  
  141. std::string User::generateSched(User userone, Zoink& zoinker){
  142. // Needs to Obtain a Buget X
  143. // Needs to Obtain a Date X
  144. // Add option for update fav X
  145. // Account for Discount Code X
  146. std::cout << "Please Enter a Budget: "; std::cin >> budget; //Budget is set
  147. checkBudget();
  148.  
  149. std::cout << "\nPlease Enter Date as the Following Format 12-31-2018 \nPlease Enter a Date: ";
  150. std::cin >> date;
  151. dateParse();
  152.  
  153. int time = 0;
  154. std::cout << "How long did you want to spend at the Zoo? ";
  155. std::cin >> time;
  156. //implement a time check not needed for phase 2
  157.  
  158. std::string sched;
  159. //If you are here assume date and budget are valid
  160.  
  161. //char ans;
  162. //std::cout << "\nWould you like to update favorability (y/n)? ";
  163. //std::cin >> ans;
  164. //if(ans == 'y') updateFav(); //Implement update of Favorability
  165. //avgFavExhibit(); Implement this in a loop to create averages of all exhibits you have
  166. //std::cout << "\nDo you have a Discount code(y/n)? ";
  167. //std::cin >> ans;
  168. //if(ans == 'y') checkDiscount(); //Implement the Discount Check
  169. //Now assume Fav and Discount are valid
  170.  
  171. //Got time expected
  172. std::vector<int> tmpExhibitFav;
  173. std::vector<int> able; // Exhibit IDS
  174. //std::cout << userone.getExhibitSize() << " subtract 1\n" << zoinker.getNumExhib() << "<-- this is num of exhibits in
  175. //directory";
  176. for(int i = 0; i < zoinker.getNumExhib() - 1; ++i){
  177. tmpExhibitFav.push_back(userone.getExhibitFav(i)); //accessor to exhibit's favorability
  178. }
  179. std::sort(tmpExhibitFav.begin(), tmpExhibitFav.end()); // Sorted lowest to highest
  180. int tempTotalPrice = 0;
  181. double totalp = 0;
  182. for(long i = tmpExhibitFav.size(); i >= 0; --i){ //iteratte backwards highest to lowest
  183. tempTotalPrice += zoinker.getPriceByEID(exhibitFav[i].returnID()); //use id to get price
  184.  
  185. double totalp = tempTotalPrice * time;
  186.  
  187. if(totalp <= budget){
  188. able.push_back(exhibitFav[i].returnID());
  189. }
  190. else {
  191. tempTotalPrice -= zoinker.getPriceByEID(exhibitFav[i].returnID());
  192. break;
  193. }
  194. }
  195. //std::cout << "able.size(): " << able.size() << '\n'; //getting 0
  196. std::cout << "exhibitFav.size(): " << exhibitFav.size() << '\n';
  197. std::cout << "Here is your recommended viewing Schedule:\n";
  198. std::cout << "Exhibit ";
  199. zoinker.getNameByEID(able);
  200. std::cout << "\nHere is your total price: " << totalp << '\n';
  201. return sched;
  202. }
  203.  
  204.  
  205. //============[Zoink Functions]====================
  206. void Zoink::getNameByEID(std::vector<int> IDs){
  207. //std::cout << "Size: " << IDs.size() << "\n"; // gives me 3
  208. //std::cerr << "exhibits.size(): " << exhibits.size() << "\n"; // gives me 4
  209.  
  210. for(int i = 0; i < IDs.size(); ++i){
  211. std::cout << exhibits[i].getName() << " ";
  212. }
  213. }
  214.  
  215. std::vector<int> Zoink::getAnimalWithEID(int ExID){
  216. int index = 0;
  217. for(int i = 0; i < exhibits.size(); ++i){
  218. if(ExID == exhibits[i].returnEID()) {
  219. index = i;
  220. }
  221. }
  222. return exhibits[index].getAnimalWithinExibit();
  223. }
  224.  
  225. int Zoink::getPriceByEID(int ExID){
  226. int index = 0;
  227. for(int i = 0; i < exhibits.size(); ++i){
  228. if(ExID == exhibits[i].returnEID()){
  229. index = i;
  230. }
  231. }
  232. return exhibits[index].getPrice();
  233. }
  234.  
  235. //============[Favorability Functions]=============
  236.  
  237.  
  238.  
  239. //============[Exhibit Functions]==================
  240. Exhibit::Exhibit(int ID,std::string name,int p){
  241. EID = ID;
  242. exhibitName = name;
  243. price = p;
  244. }
  245.  
  246. std::vector<int> Exhibit::getAnimalWithinExibit() {
  247. std::vector<int> tmpVect;
  248. for(int i = 0; i < animals.size(); ++i){
  249. tmpVect.push_back(animals[i].returnAID());
  250. }
  251.  
  252. return tmpVect;
  253. }
  254.  
  255. //=================================================
  256. int main(){
  257. Zoink zoinker;
  258. std::string userInput, userPass; //Mimicing Login
  259. std::cout << "Username: ";
  260. std::cin >> userInput;
  261. std::cout << "Password: ";
  262. std::cin >> userPass;
  263. //Login Completed
  264. User NewUser(userInput,userPass, 1);
  265. NewUser.avgFavExhibit(zoinker);
  266. std::string testStr = NewUser.generateSched(NewUser, zoinker);
  267.  
  268. return 0;
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement