Guest User

Interface

a guest
Dec 20th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.20 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <vector>
  4. #include <iostream>
  5. #include <string>
  6. #include <ctype.h>
  7. #include "C_Table.h"
  8.  
  9. using namespace std;
  10.  
  11. template<typename T>
  12. class UI
  13. {
  14. private:
  15. vector<CTable<T>*> v_CTables;
  16.  
  17. void VoidMethod(CTable<T> ctable)
  18. {}
  19.  
  20. bool AddCTables()
  21. {
  22. cout << "How many CTables do you want to create? :";
  23. int n_count = GetPositiveNumberInput();
  24. if (n_count == 0) return false;
  25.  
  26. for (int i = 0; i < n_count; i++) {
  27. CTable<T>* temp;
  28. v_CTables.push_back(temp);
  29. }
  30. return true;
  31.  
  32. }
  33.  
  34. bool ChangeTableSizeByIndex()
  35. {
  36. if (CheckIfCTableVectorEmpty())
  37. {
  38. cout << endl << "The vector is empty" << endl;
  39. return false;
  40. }
  41.  
  42.  
  43. CTable<T>* ptr_CTableToAffect = (v_CTables[0]);
  44. if (SelectCTableByIndex(ptr_CTableToAffect) == false) return false;
  45.  
  46. cout << endl << "Specify new table size for chosen CTable: ";
  47. int n_newSize = GetPositiveNumberInput();
  48.  
  49. (*ptr_CTableToAffect).ChangeTableSize(n_newSize);
  50.  
  51. return true;
  52. }
  53.  
  54. bool CheckIfCTableVectorEmpty()
  55. {
  56. if (v_CTables.empty()) return true;
  57. return false;
  58. }
  59.  
  60. bool SelectCTableByIndex(CTable<T>*& result)
  61. {
  62. cout << endl << "Which CTable (index) do you want to affect?: ";
  63. int n_CTableIndex = GetPositiveNumberInput();
  64. int vectorSize = v_CTables.size();
  65. if ((n_CTableIndex >= vectorSize))
  66. {
  67. cout << endl << "Index out of range" << endl;
  68. return false;
  69. }
  70. result = v_CTables[n_CTableIndex];
  71. return true;
  72.  
  73. }
  74.  
  75. bool DeleteCTableByIndex()
  76. {
  77. if (CheckIfCTableVectorEmpty())
  78. {
  79. cout << endl << "The vector is empty" << endl;
  80. return false;
  81. }
  82. cout << endl << "Which CTable (index) do you want to affect?: ";
  83. int n_CTableIndex = GetPositiveNumberInput();
  84. int vectorSize = v_CTables.size();
  85. if ((n_CTableIndex >= vectorSize))
  86. {
  87. cout << endl << "Index out of range" << endl;
  88. return false;
  89. }
  90. v_CTables.erase(v_CTables.begin() + n_CTableIndex);
  91. return true;
  92.  
  93. }
  94.  
  95. void DeleteAllCTables()
  96. {
  97. for each (CTable<T>* ptr_CTable in v_CTables)
  98. {
  99. delete ptr_CTable;
  100. }
  101. v_CTables.clear();
  102. }
  103.  
  104. bool ChangeCTableNameByIndex()
  105. {
  106. if (CheckIfCTableVectorEmpty())
  107. {
  108. cout << endl << "The vector is empty" << endl;
  109. return false;
  110. }
  111. CTable<T>* ptr_CTableToAffect = (v_CTables[0]);
  112. if (SelectCTableByIndex(ptr_CTableToAffect) == false)
  113. {
  114. cout << endl << "Index out of range" << endl;
  115. return false;
  116. }
  117. cout << endl << "New CTable name: ";
  118. string s_newName;
  119. cin >> s_newName;
  120. cout << endl;
  121. ptr_CTableToAffect->SetName(s_newName);
  122.  
  123. return true;
  124. }
  125.  
  126. int GetPositiveNumberInput() // -1 if input incorrect
  127. {
  128. string s_userInput;
  129. do
  130. {
  131. s_userInput = "";
  132. cin >> s_userInput;
  133. bool isNumber = true;
  134. int n_inputLength = s_userInput.length();
  135. for (int i = 0; i < n_inputLength; i++)
  136. {
  137. if (!isdigit((int)s_userInput[i])) isNumber = false;
  138. }
  139. if (!isNumber)
  140. {
  141. cout << endl << "Wrong input, try again" << endl;
  142. continue;
  143. }
  144. } while (atoi(s_userInput.c_str()) < 0);
  145.  
  146. return atoi(s_userInput.c_str());
  147. }
  148.  
  149. bool CreateCTableDuplicate()
  150. {
  151. if (CheckIfCTableVectorEmpty()) return false;
  152. CTable<T>* ptr_CTableToAffect = v_CTables.front();
  153. if (SelectCTableByIndex(ptr_CTableToAffect) == false) return false;
  154. CTable<T>* ptr_newCTable = ptr_CTableToAffect;
  155. v_CTables.push_back(ptr_newCTable);
  156. return true;
  157. }
  158.  
  159. bool PrintCTableContent()
  160. {
  161. if (CheckIfCTableVectorEmpty()) return false;
  162. CTable<T>* ptr_CTableToPrint = v_CTables[0];
  163. if (SelectCTableByIndex(ptr_CTableToPrint) == false) return false;
  164.  
  165. string s_result = ptr_CTableToPrint->ToString();
  166. cout << endl << s_result << endl;
  167.  
  168. return true;
  169. }
  170.  
  171. bool AssignValueInCTable()
  172. {
  173. if (CheckIfCTableVectorEmpty())
  174. {
  175. cout << endl << "The vector is empty" << endl;
  176. return false;
  177. }
  178. CTable<T>* ptr_CTableToAffect = v_CTables[0];
  179. if (SelectCTableByIndex(ptr_CTableToAffect) == false)
  180. return false;
  181. cout << "Select index in CTable to affect: ";
  182. int n_index = GetPositiveNumberInput();
  183. if (n_index < 0 || n_index >= ptr_CTableToAffect->GetTableSize()) return false;
  184. cout << endl << "New value: ";
  185. string s_input;
  186. cin >> s_input;
  187. bool isNumber = true;
  188. for (int i = 0; i < s_input.length(); i++)
  189. {
  190. if (isdigit(s_input[i] == false))
  191. {
  192. cout << endl << "Not a valid number" << endl;
  193. return false;
  194. }
  195. }
  196. ptr_CTableToAffect->AssignValueByIndex(atoi(s_input.c_str()), n_index);
  197. return true;
  198. }
  199.  
  200. void ShowNames()
  201. {
  202. for (int i = 0; i < v_CTables.size(); i++)
  203. {
  204. cout << endl << (*v_CTables[i]).ToString() << endl;
  205. }
  206. }
  207.  
  208. void ShowMenu()
  209. {
  210. cout << "1. Add new CTables" << endl;
  211. cout << "2. Change table size for chosen CTable" << endl;
  212. cout << "3. Delete chosen CTable" << endl;
  213. cout << "4. Delete all CTables" << endl;
  214. cout << "5. Change name of chosen CTable" << endl;
  215. cout << "6. Clone chosen CTable" << endl;
  216. cout << "7. Print contents of chosen CTable" << endl;
  217. cout << "8. Assign value at specified index in chosen CTable" << endl;
  218. cout << "9. Show all CTables" << endl;
  219. cout << "10. Exit program" << endl;
  220. cout << "11. Void method" << endl;
  221. int n_userChoice = 0;
  222. cout << "Choice: ";
  223. n_userChoice = GetPositiveNumberInput();
  224.  
  225. switch (n_userChoice) {
  226. case 1:
  227. {
  228. AddCTables();
  229. }
  230. break;
  231. case 2:
  232. {
  233. ChangeTableSizeByIndex();
  234. }
  235. break;
  236. case 3:
  237. {
  238. DeleteCTableByIndex();
  239. }
  240. break;
  241. case 4:
  242. {
  243. DeleteAllCTables();
  244. }
  245. break;
  246. case 5:
  247. {
  248. ChangeCTableNameByIndex();
  249. }
  250. break;
  251. case 6:
  252. {
  253. CreateCTableDuplicate();
  254. }
  255. break;
  256. case 7:
  257. {
  258. PrintCTableContent();
  259. }
  260. break;
  261. case 8:
  262. {
  263. AssignValueInCTable();
  264. }
  265. break;
  266. case 9:
  267. {
  268. ShowNames();
  269. }
  270. break;
  271. case 10:
  272. {
  273.  
  274. }
  275. case 11:
  276. {
  277. //cout << (*v_CTables[0] + *v_CTables[1]).ToString();
  278. }
  279. break;
  280.  
  281. default:
  282. {
  283. cout << endl << "Wrong input, try again" << endl << endl;
  284. }
  285. }
  286. }
  287.  
  288. public:
  289.  
  290. UI<T>()
  291. {
  292. while (true)
  293. {
  294. ShowMenu();
  295. }
  296. }
  297.  
  298. ~UI()
  299. {
  300. for each (CTable<T>* ptr_CTable in v_CTables)
  301. {
  302. delete ptr_CTable;
  303. }
  304. v_CTables.resize(0);
  305. }
  306. };
Add Comment
Please, Sign In to add comment