Advertisement
Guest User

Header

a guest
May 22nd, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5. struct Bad_index {};
  6. class Zachetka_ABS
  7. {
  8. public:
  9. virtual int * AverageMark() = 0;
  10. virtual int * CountGoodMarks() = 0;
  11. virtual int * MinMarks() = 0;
  12. };
  13. struct element
  14. {
  15. int ZachetkaNum;//номер зачётки
  16. int *a;
  17. element()
  18. {
  19. a = new int[4];
  20. }
  21. friend ostream & operator << (ostream & out, element & m)
  22. {
  23. out << m.ZachetkaNum<< " ";
  24. for (int i = 0; i < 4; i++)
  25. out << m.a[i] << " ";
  26. return out;
  27. }
  28. friend istream & operator >> (istream & in, element & m)
  29. {
  30. in >> m.ZachetkaNum;
  31. for (int i = 0; i < 4; i++)
  32. in >> m.a[i];
  33. return in;
  34. }
  35. int AverageMark()
  36. {
  37. int res = 0;
  38. for (int i = 0; i < 4; i++)
  39. res += a[i];
  40. return res/4;
  41. }
  42. int CountGoodMarks()
  43. {
  44. int res = 0;
  45. for (int i = 0; i < 4; i++)
  46. if (a[i] >= 9)
  47. res++;
  48. return res;
  49. }
  50. int MinMarks()
  51. {
  52. int res = 0;
  53. for (int i = 0; i < 3; i++)
  54. for (int j = 0; j < 3; j++)
  55. if (a[j+1] < a[j])
  56. swap(a[j], a[j + 1]);
  57. return a[0];
  58. }
  59. };
  60. class Zachetka : public Zachetka_ABS
  61. {
  62. private:
  63. int count;
  64. element * massiv;
  65. public:
  66. Zachetka()
  67. {
  68. count = 10;
  69. massiv = new element[10];
  70. }
  71. Zachetka(int count)
  72. {
  73. this->count = count;
  74. massiv = new element[count];
  75. }
  76. ~Zachetka()
  77. {
  78. delete[] massiv;
  79. }
  80. element & operator[](int key)
  81. {
  82. if (key<0 || key >count)
  83. throw Bad_index();
  84. else
  85. return massiv[key];
  86. }
  87. friend ostream & operator << (ostream & out, Zachetka & m)
  88. {
  89. for (int i = 0; i < m.count; i++)
  90. out << m[i] << endl;
  91. return out;
  92. }
  93. friend istream & operator >> (istream & in, Zachetka & m)
  94. {
  95. for (int i = 0; i < m.count; i++)
  96. in >> m[i];
  97. return in;
  98. }
  99. int* AverageMark()
  100. {
  101. int *arr = new int[count];
  102. for (int i = 0; i < count; i++)
  103. arr[i] = massiv[i].AverageMark();
  104. return arr;
  105. }
  106. int* CountGoodMarks()
  107. {
  108. int *arr = new int[count];
  109. for (int i = 0; i < count; i++)
  110. arr[i] = 0;
  111. for (int i = 0; i < count; i++)
  112. arr[i]=massiv[i].CountGoodMarks();
  113. return arr;
  114.  
  115. }
  116. int* MinMarks()
  117. {
  118. int *arr = new int[count];
  119. for (int i = 0; i < count; i++)
  120. arr[i] = 0;
  121. for (int i = 0; i < count; i++)
  122. arr[i] = massiv[i].MinMarks();
  123. return arr;
  124.  
  125. }
  126.  
  127.  
  128. };
  129. struct Container1
  130. {
  131. char SurName[50];
  132. char Name[50];
  133. char patronymic[50];
  134. int ZachetkaNum;
  135. int kurs;
  136. int group;
  137. friend ostream & operator << (ostream & out, Container1 & C1)
  138. {
  139. out << C1.SurName << " " << C1.Name << " " << C1.patronymic << " " << C1.ZachetkaNum << " " << C1.kurs << " " << C1.group << " " << endl;
  140. return out;
  141. }
  142. friend istream & operator >> (istream & in, Container1 & C1)
  143. {
  144. in >> C1.SurName >> C1.Name >> C1.patronymic >> C1.ZachetkaNum >> C1.kurs >> C1.group;
  145. return in;
  146. }
  147.  
  148. };
  149.  
  150. struct Container3
  151. {
  152. char SurName[25];
  153. int ZachetkaNum;
  154. int kurs;
  155. int group;
  156. int CountGoodMarks;
  157. int AverageMark;
  158. int MinMark;
  159.  
  160. friend ostream & operator << (ostream & out, Container3 & m)
  161. {
  162. out << m.SurName <<" "<< m.ZachetkaNum << " " << m.AverageMark << " " << m.group << " " << m.CountGoodMarks << " " << m.kurs << " " << m.MinMark << endl;
  163. return out;
  164. }
  165. friend istream & operator >> (istream & in, Container3 & C1)
  166. {
  167.  
  168. in >> C1.SurName >>C1.ZachetkaNum>>C1.kurs>>C1.group >> C1.CountGoodMarks >> C1.AverageMark >> C1.MinMark;
  169. return in;
  170. }
  171.  
  172. };
  173.  
  174.  
  175.  
  176. template<class T>
  177. class Student
  178. {
  179. private:
  180. int count;
  181. T *M;
  182. public:
  183. Student()
  184. {
  185. count = 30;
  186. M = new T[count];
  187. }
  188. Student(int a)
  189. {
  190. count = a;
  191. M = new T[count];
  192. }
  193. Student(Student <T> & m)
  194. {
  195. count = m.count;
  196. for (int i = 0; i < count; i++)
  197. M[i] = m.M[i];
  198. }
  199. ~Student()
  200. {
  201. delete[] M;
  202. }
  203. T & operator[](int key)
  204. {
  205. if (key<0 || key >count)
  206. throw Bad_index();
  207. else
  208. return M[key];
  209. }
  210. friend ostream & operator << (ostream & out, Student <T> &m)
  211. {
  212. for (int i = 0; i < m.count; i++)
  213. out << m[i] << " ";
  214. return out;
  215. }
  216. friend istream & operator >> (istream & in, Student <T> & m)
  217. {
  218. for (int i = 0; i < m.count; i++)
  219. in >> m[i];
  220. return in;
  221. }
  222. int get_count() {
  223. return count;
  224. }
  225. void set_count(int count)
  226. {
  227. this->count = count;
  228. }
  229. int* AverageMark(Zachetka_ABS * p)
  230. {
  231. return (p->AverageMark());
  232. }
  233. int * CountGoodMarks(Zachetka_ABS * p)
  234. {
  235. return (p->CountGoodMarks());
  236. }
  237. int * MinMarks(Zachetka_ABS * p)
  238. {
  239. return (p->MinMarks());
  240. }
  241.  
  242. void Sum(Student<Container1> &students, Zachetka & c1)
  243. {
  244. for (int i = 0; i < students.get_count(); i++)
  245. {
  246. strcpy_s(M[i].SurName, students[i].SurName);
  247. M[i].ZachetkaNum = c1[i].ZachetkaNum;
  248. M[i].kurs = students[i].kurs;
  249. M[i].group = students[i].group;
  250. M[i].AverageMark = c1[i].AverageMark();
  251. M[i].CountGoodMarks = c1[i].CountGoodMarks();
  252. M[i].MinMark = c1[i].MinMarks();
  253. }
  254. }
  255. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement