Advertisement
Guest User

Untitled

a guest
Feb 29th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.69 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <ctime>
  5. using namespace std;
  6. //note example print name on console: cout << listNameGetre[WESTERN] << endl;
  7. struct TFakultet
  8. {
  9. string Name;
  10. string Section;
  11. int numberOfStudents;
  12. };
  13. struct TRektor
  14. {
  15. string nameRektor;
  16. string secondNameRector;
  17. string scienstDegree;
  18. };
  19.  
  20. ostream& operator <<(ostream& out, const TFakultet& fakultet);
  21. istream& operator >>(istream& in, TFakultet& fakultet);
  22.  
  23. ostream& operator <<(ostream& out, const TRektor& rektor);
  24. istream& operator >>(istream& in, TRektor& rektor);
  25.  
  26. class TUniver
  27. {
  28. private:
  29. string nameUniversity;
  30. string street;
  31. TRektor* rektor;
  32. TFakultet* fakultets; //it is dynamic array
  33. int n; //number students
  34. int ageaudience;
  35. int House;
  36.  
  37. public:
  38. TUniver();
  39. TUniver(const TUniver& obj);
  40. TUniver(const string& nameUniversity_, const string& street_, int ageaudience_, int House_);
  41. ~TUniver();
  42. const string& getnameUniversity()const;
  43. const string& getstreet()const;
  44. int getAgeaudience()const;
  45. int getHouse()const;
  46. int getNumberFakultets()const;
  47. void outputFakultets(ostream& out)const;
  48. void outputRektor(ostream& out)const;
  49.  
  50. void setnameUniversity(const string& nameUniversity_);
  51. void setstreet(const string& street_);
  52. void setAgeaudience(int ageaudience_);
  53. void setHouse(int House_);
  54.  
  55. int calcAverageAgeFakultet()const;
  56. bool isExistdFakultet(string Name_, string Section_)const;
  57. bool addFakultet(string Name_, string Section_, int numberOfStudents_);
  58. bool addFakultet(const TFakultet& fakultet);
  59. bool deleteFakultet(string Name_, string Section_);
  60.  
  61. bool isExistdRektor(string nameRektor_, string secondNameRector_)const;
  62. bool addRektor(string nameRektor_, string secondNameRector_, string scienstDegree_);
  63. bool addRektor(const TRektor& rektor);
  64. bool deleteRektor(string nameRektor_, string secondNameRector_, string scienstDegree_);
  65.  
  66. TFakultet* findOldestFakultet()const;
  67. int calcAverageFakultetsTime()const;
  68.  
  69. TUniver& operator =(const TUniver& obj);
  70. TUniver& operator +=(const TFakultet& fakultet);
  71. TUniver& operator +=(const TRektor& rektor);
  72. bool operator <(const TUniver& arg2) const;
  73. operator int()const;
  74. };
  75. ostream& operator <<(ostream& out, const TUniver& fakultet);
  76. istream& operator >>(istream& in, TUniver& fakultet);
  77.  
  78. ostream& operator <<(ostream& out, const TUniver& rektor);
  79. istream& operator >>(istream& in, TUniver& rektor);
  80.  
  81. int main()
  82. {
  83. time_t sysdate = time(NULL);
  84. cout << "Current Datetime:" << asctime(localtime(&sysdate)) << endl;
  85. TUniver chobit;
  86. cin >> chobit;
  87. cout << "Please add new fakultet:" << endl;
  88. TFakultet newFakultet;
  89. cin >> newFakultet;
  90. chobit += newFakultet;
  91. TRektor newRektor;
  92. cout << "Prepared info about film:\n";
  93. cout << chobit;
  94. cout << endl << endl;
  95. cout << "Average Fakultets Time: " << chobit.calcAverageFakultetsTime() << endl;
  96. cout << "Average age fakultet: " << chobit.calcAverageAgeFakultet() << endl;
  97. TFakultet* odestFakultet = chobit.findOldestFakultet();
  98. if (odestFakultet) cout << "Oldestfakultet is :\n" << *odestFakultet << endl;
  99. string Name;
  100. string Section;
  101. cout << "Please input name fakultet which need delete:\n";
  102. cout << "\tinput name: ";
  103. getline(cin, Name);
  104. cout << "\tinput second name: ";
  105. getline(cin, Section);
  106. bool result = chobit.deleteFakultet(Name, Section);
  107. if (!result) cout << "Warning: Fakultet not found " << endl;
  108. cout << "Final info about film:\n";
  109. cout << chobit << endl;
  110.  
  111. system("pause");
  112. return 0;
  113. }
  114.  
  115.  
  116. ostream& operator <<(ostream& out, const TFakultet& fakultet)
  117. {
  118. out << "\t" << fakultet.Name
  119. << "\t" << fakultet.Section
  120. << "\t" << fakultet.numberOfStudents;
  121. return out;
  122. }
  123. istream& operator >>(istream& in, TFakultet& fakultet)
  124. {
  125. cout << "Please input name: ";
  126. getline(in, fakultet.Name);
  127. cout << "Please input section: ";
  128. getline(in, fakultet.Section);
  129. cout << "Please input number of students: ";
  130. string strTmp;
  131. getline(in, strTmp);
  132. fakultet.numberOfStudents = atoi(strTmp.c_str());
  133. return in;
  134. }
  135.  
  136. ostream& operator <<(ostream& out, const TRektor& rektor)
  137. {
  138. out << "\t" << rektor.nameRektor
  139. << "\t" << rektor.secondNameRector
  140. << "\t" << rektor.scienstDegree;
  141. return out;
  142. }
  143.  
  144. istream& operator >>(istream& in, TRektor& rektor)
  145. {
  146. cout << "Please input name: ";
  147. getline(in, rektor.nameRektor);
  148. cout << "Please input second name: ";
  149. getline(in, rektor.secondNameRector);
  150. cout << "Please input scienst degree: ";
  151. string strTmp;
  152. getline(in, strTmp);
  153. rektor.scienstDegree = atoi(strTmp.c_str());
  154. return in;
  155. }
  156.  
  157. TUniver::TUniver() :n(0), fakultets(NULL), rektor(NULL),nameUniversity("New"), street("Ukrain"), ageaudience(0), House(0)
  158. {
  159. }
  160. TUniver::TUniver(const TUniver& obj)
  161. {
  162. nameUniversity = obj.nameUniversity;
  163. street = obj.street;
  164. ageaudience = obj.ageaudience;
  165. House = obj.House;
  166. n = obj.n;
  167. fakultets = new TFakultet[n];
  168. for (int i = 0; i < n; ++i)
  169. {
  170. fakultets[i] = obj.fakultets[i];
  171. }
  172. rektor = new TRektor[n];
  173. for (int i = 0; i < n; ++i)
  174. {
  175. rektor[i] = obj.rektor[i];
  176. }
  177.  
  178. }
  179.  
  180. TUniver::TUniver(const string& nameUniversity_, const string& street_, int ageaudience_, int House_)
  181. :n(0), fakultets(NULL), rektor(NULL),nameUniversity(nameUniversity_), street(street_), ageaudience(ageaudience_), House(House_)
  182. {
  183. }
  184. TUniver::~TUniver()
  185. {
  186. if (fakultets) delete[] fakultets;
  187. fakultets = NULL;
  188. if (rektor) delete[] rektor;
  189. rektor = NULL;
  190. n = 0;
  191. }
  192. const string& TUniver::getnameUniversity()const
  193. {
  194. return nameUniversity;
  195. }
  196. const string& TUniver::getstreet()const { return street; }
  197. int TUniver::getAgeaudience()const { return ageaudience; }
  198. int TUniver::getHouse()const { return House; }
  199. int TUniver::getNumberFakultets()const { return n; }
  200.  
  201. void TUniver::outputFakultets(ostream& out)const
  202. {
  203. for (int i = 0; i < n; ++i)
  204. out << fakultets[i] << endl;
  205. }
  206. void TUniver::outputRektor(ostream& out)const
  207. {
  208. for (int i = 0; i < n; ++i)
  209. out << rektor[i] << endl;
  210. }
  211.  
  212. void TUniver::setnameUniversity(const string& nameUniversity_) { nameUniversity = nameUniversity_; }
  213. void TUniver::setstreet(const string& street_) { street = street_; }
  214. void TUniver::setAgeaudience(int ageaudience_) { ageaudience = ageaudience_; }
  215. void TUniver::setHouse(int House_) { House = House_; }
  216.  
  217. int TUniver::calcAverageAgeFakultet()const
  218. {
  219. int result = 0;
  220. time_t sysdate = time(NULL);
  221. int curYear = 1900 + localtime(&sysdate)->tm_year;
  222. for (int i = 0; i < n; ++i)
  223. result += (curYear - fakultets[i].numberOfStudents);
  224. result /= n;
  225. return result;
  226. }
  227. bool TUniver::isExistdFakultet(string Name_, string Section_)const
  228. {
  229. for (int i = 0; i < n; ++i)
  230. {
  231. if (fakultets[i].Name == Name_ && fakultets[i].Section == Section_)
  232. {
  233. return true;
  234. }
  235. }
  236. return false;
  237. }
  238.  
  239. bool TUniver::addFakultet(string Name_, string Section_, int numberOfStudents_)
  240. {
  241. TFakultet newFakultet = { Name_, Section_, numberOfStudents_ };
  242. return addFakultet(newFakultet);
  243. }
  244.  
  245. bool TUniver::addFakultet(const TFakultet& fakultet)
  246. {
  247. if (isExistdFakultet(fakultet.Name, fakultet.Section)) return false;
  248. TFakultet* mas = new TFakultet[n + 1]; //выделяем новую область памяти
  249. for (int i = 0; i < n; ++i)
  250. mas[i] = fakultets[i]; //переносим массив в новую область памяти
  251. mas[n] = fakultet; //заносим новый элемент на последнюю позицию
  252. delete[]fakultets;//удаляем старый массив
  253. fakultets = mas;//пернаправляем указатель на новый увеличенный массив
  254. ++n;
  255. return true;
  256. }
  257. bool TUniver::deleteFakultet(string Name_, string Section_)
  258. {
  259. if (!isExistdFakultet(Name_, Section_)) return false;
  260. TFakultet* mas = new TFakultet[n - 1]; //выделяем новую область памяти
  261. int j = 0;
  262. for (int i = 0; i < n; ++i)
  263. {
  264. if (fakultets[i].Name == Name_ && fakultets[i].Section == Section_)
  265. {
  266. continue;
  267. }
  268. mas[j++] = fakultets[i]; //переносим массив в новую область памяти
  269. }
  270. delete[]fakultets;//удаляем старый массив
  271. fakultets = mas;//пернаправляем указатель на новый увеличенный массив
  272. --n;
  273. }
  274.  
  275.  
  276. TFakultet* TUniver::findOldestFakultet()const
  277. {
  278. if (n <= 0) return NULL;
  279. TFakultet* oldestFakultet = fakultets;
  280. for (int i = 1; i < n; ++i)
  281. {
  282. if (fakultets[i].numberOfStudents < oldestFakultet->numberOfStudents) oldestFakultet = &fakultets[i];
  283. }
  284. return oldestFakultet;
  285. }
  286. int TUniver::calcAverageFakultetsTime()const
  287. {
  288. int result = 0;
  289. for (int i = 0; i < n; ++i)
  290. result += (fakultets[i].numberOfStudents);
  291. result /= n;
  292. return result;
  293. }
  294.  
  295. TUniver& TUniver::operator =(const TUniver& obj)
  296. {
  297. if (this == &obj) return (*this);
  298. this->~TUniver();
  299. nameUniversity = obj.nameUniversity;
  300. street = obj.street;
  301. ageaudience = obj.ageaudience;
  302. House = obj.House;
  303. n = obj.n;
  304. fakultets = new TFakultet[n];
  305. for (int i = 0; i < n; ++i)
  306. {
  307. fakultets[i] = obj.fakultets[i];
  308. }
  309. rektor = new TRektor[n];
  310. for (int i = 0; i < n; ++i)
  311. {
  312. rektor[i] = obj.rektor[i];
  313. }
  314.  
  315. }
  316. TUniver& TUniver::operator +=(const TFakultet& fakultet)
  317. {
  318. addFakultet(fakultet);
  319. return(*this);
  320. }
  321. bool TUniver::operator < (const TUniver& arg2) const
  322. {
  323. return (this->House < arg2.House);
  324. }
  325. TUniver::operator int()const
  326. {
  327. int result = calcAverageFakultetsTime();
  328. return result;
  329. }
  330.  
  331. ostream& operator <<(ostream& out, const TUniver& Univer)
  332. {
  333. out << Univer.getnameUniversity()
  334. << "\t" << Univer.getstreet()
  335. << "\t" << "House: " << Univer.getHouse()
  336. << "\t Rector: " <<endl;
  337. //Univer.outputRektor(out);
  338. Univer.outputFakultets(out);
  339. return out;
  340. }
  341. istream& operator >>(istream& in, TUniver& Univer)
  342. {
  343. string strTmp;
  344. cout << "Please input name Univer: ";
  345. getline(in, strTmp);
  346. Univer.setnameUniversity(strTmp);
  347. cout << "Please input street: ";
  348. getline(in, strTmp);
  349. Univer.setstreet(strTmp);
  350. cout << "Please input House: ";
  351. getline(in, strTmp);
  352. Univer.setHouse(atoi(strTmp.c_str()));
  353.  
  354. cout << "Please add rektor:"<<endl;
  355. TRektor rektor;
  356. in >> rektor;
  357. //getline(in, strTmp);
  358. //Univer.setHouse(atoi(strTmp.c_str()));
  359. //Univer += rektor;
  360. // cout << "Please input the age audience: ";
  361. // getline(in, strTmp);
  362. // Univer.setAgeaudience(atoi(strTmp.c_str()));
  363. string ansver;
  364. do
  365. {
  366. cout << "Please add fakultet:"<<endl;
  367. TFakultet fakultet;
  368. in >> fakultet;
  369. Univer += fakultet;
  370. cout << "Do wount continue add fakultets(y/n):";
  371. getline(in, ansver);
  372. } while (ansver.size() != 0 && ansver[0] == 'y');
  373. return in;
  374. //getline(in, ansver);
  375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement