Advertisement
Guest User

Demo

a guest
May 21st, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.26 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class NoCourseException
  6. {
  7. private:
  8. int index;
  9. public:
  10. NoCourseException(int i)
  11. {
  12. index=i;
  13. }
  14. void pecati()
  15. {
  16. cout<<"Demonstratorot so indeks "<<index<<" ne drzi laboratoriski vezbi"<<endl;
  17. }
  18. };
  19. class Kurs
  20. {
  21. private:
  22. char ime[20];
  23. int krediti;
  24. public:
  25. Kurs (char *ime,int krediti)
  26. {
  27. strcpy(this->ime,ime);
  28. this->krediti=krediti;
  29. }
  30. Kurs ()
  31. {
  32. strcpy(this->ime,"");
  33. krediti=0;
  34. }
  35. bool operator==(const char *ime) const
  36. {
  37. return strcmp(this->ime,ime)==0;
  38. }
  39. char const * getIme()const
  40. {
  41. return ime;
  42. }
  43. void pecati ()const
  44. {
  45. cout<<ime<<" "<<krediti<<"ECTS";
  46. }
  47. };
  48.  
  49. class Student
  50. {
  51. private:
  52. int *ocenki;
  53. int brojOcenki;
  54.  
  55. protected:
  56. int indeks;
  57.  
  58. public:
  59. Student(int indeks,int *ocenki, int brojOcenki)
  60. {
  61. this->indeks=indeks;
  62. this->brojOcenki=brojOcenki;
  63. this->ocenki=new int[brojOcenki];
  64. for (int i=0; i<brojOcenki; i++) this->ocenki[i]=ocenki[i];
  65. }
  66. Student(const Student &k)
  67. {
  68. this->indeks=k.indeks;
  69. this->brojOcenki=k.brojOcenki;
  70. this->ocenki=new int[k.brojOcenki];
  71. for (int i=0; i<k.brojOcenki; i++) this->ocenki[i]=k.ocenki[i];
  72. }
  73. Student operator=(const Student &k)
  74. {
  75. if (&k==this) return *this;
  76. this->indeks=k.indeks;
  77. this->brojOcenki=k.brojOcenki;
  78. delete [] ocenki;
  79. this->ocenki=new int[k.brojOcenki];
  80. for (int i=0; i<k.brojOcenki; i++) this->ocenki[i]=k.ocenki[i];
  81. return *this;
  82. }
  83.  
  84. virtual ~Student()
  85. {
  86. delete [] ocenki;
  87. }
  88. virtual int getBodovi()
  89. {
  90. int brojac=0;
  91. for(int i=0; i<brojOcenki; i++)
  92. {
  93. if(ocenki[i]>5) brojac++;
  94. }
  95. return (brojac*100)/brojOcenki;
  96. }
  97. virtual void pecati()
  98. {
  99. cout<<indeks;
  100. }
  101. };
  102.  
  103. class Predavach
  104. {
  105. private:
  106. Kurs kursevi[10];
  107. int brojKursevi;
  108.  
  109. protected:
  110. char *imeIPrezime;
  111.  
  112. public:
  113. Predavach(char *imeIPrezime,Kurs *kursevi,int brojKursevi)
  114. {
  115. this->brojKursevi=brojKursevi;
  116. for (int i=0; i<brojKursevi; i++) this->kursevi[i]=kursevi[i];
  117. this->imeIPrezime=new char[strlen(imeIPrezime)+1];
  118. strcpy(this->imeIPrezime,imeIPrezime);
  119. }
  120. Predavach(const Predavach &p)
  121. {
  122. this->brojKursevi=p.brojKursevi;
  123. for (int i=0; i<p.brojKursevi; i++) this->kursevi[i]=p.kursevi[i];
  124. this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  125. strcpy(this->imeIPrezime,p.imeIPrezime);
  126. }
  127. Predavach operator=(const Predavach &p)
  128. {
  129. if (this==&p) return *this;
  130. this->brojKursevi=p.brojKursevi;
  131. for (int i=0; i<p.brojKursevi; i++) this->kursevi[i]=p.kursevi[i];
  132. this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  133. delete [] imeIPrezime;
  134. strcpy(this->imeIPrezime,p.imeIPrezime);
  135. return *this;
  136. }
  137. ~Predavach()
  138. {
  139. delete [] imeIPrezime;
  140. }
  141.  
  142. int getBrojKursevi()const
  143. {
  144. return brojKursevi;
  145. }
  146. Kurs getKurs(int i) {
  147. return kursevi[i];
  148. }
  149. char * const getImeIPrezime()const
  150. {
  151. return imeIPrezime;
  152. }
  153.  
  154. Kurs operator[](int i) const
  155. {
  156. if (i<brojKursevi&&i>=0)
  157. return kursevi[i];
  158. else return Kurs();
  159. }
  160.  
  161. void pecati() const
  162. {
  163. cout<<imeIPrezime<<" (";
  164. for (int i=0; i<brojKursevi; i++)
  165. {
  166. kursevi[i].pecati();
  167. if (i<brojKursevi-1) cout<<", ";
  168. else cout<<")";
  169. }
  170. }
  171. };
  172.  
  173. class Demonstrator : public Predavach, public Student
  174. {
  175. int brojCasovi;
  176. public:
  177. Demonstrator(int indeks,int *ocenki, int brojOcenki,char *imeIPrezime,Kurs *kursevi,
  178. int brojKursevi,int br):Student(indeks,ocenki,brojOcenki),Predavach(imeIPrezime,kursevi,
  179. brojKursevi)
  180. {
  181. brojCasovi=br;
  182. }
  183. int getBodovi()
  184. {
  185. int p=Student::getBodovi();
  186. try{
  187. if(Predavach::getBrojKursevi()==0) throw NoCourseException(indeks);
  188. p+=((20*brojCasovi)/Predavach::getBrojKursevi());
  189. }
  190. catch (NoCourseException &e) {
  191. e.pecati();
  192. p=0;
  193. }
  194. return p;
  195. }
  196. void pecati()
  197. {
  198. Student::pecati();
  199. cout<<": ";
  200. Predavach::pecati();
  201. cout<<endl;
  202. }
  203. };
  204. Student& vratiNajdobroRangiran(Student ** studenti, int n ) {
  205. int max=0;int maxIndex;
  206. for (int i=0;i<n;i++)
  207. if(studenti[i]->getBodovi()>max)
  208. {
  209. max=studenti[i]->getBodovi();
  210. maxIndex=i;
  211. }
  212. return *studenti[maxIndex];
  213. }
  214. void pecatiDemonstratoriKurs(char* kurs, Student** studenti, int n) {
  215. for (int i=0;i<n;i++){
  216. Demonstrator* d;
  217. d=dynamic_cast<Demonstrator*>(studenti[i]);
  218. if(d){
  219. for (int j=0;j<d->getBrojKursevi();j++)
  220. if(!strcmp(kurs,d->getKurs(i).getIme())){
  221. d->pecati();
  222. break;
  223. }
  224. }
  225. }
  226. }
  227.  
  228.  
  229. int main()
  230. {
  231.  
  232. Kurs kursevi[10];
  233. int indeks,brojKursevi, ocenki[20],ocenka,brojOcenki,tip,brojCasovi,krediti;
  234. char ime[20],imeIPrezime[50];
  235.  
  236. cin>>tip;
  237.  
  238. if (tip==1) //test class Demonstrator
  239. {
  240. cout<<"-----TEST Demonstrator-----"<<endl;
  241. cin>>indeks>>brojOcenki;
  242. for (int i=0; i<brojOcenki; i++)
  243. {
  244. cin>>ocenka;
  245. ocenki[i]=ocenka;
  246. }
  247. cin>>imeIPrezime>>brojKursevi;
  248. for (int i=0; i<brojKursevi; i++)
  249. {
  250. cin>>ime>>krediti;
  251. kursevi[i]=Kurs(ime,krediti);
  252. }
  253. cin>>brojCasovi;
  254.  
  255. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  256. cout<<"Objekt od klasata Demonstrator e kreiran";
  257.  
  258. }
  259. else if (tip==2) //funkcija pecati vo Student
  260. {
  261. cout<<"-----TEST pecati-----"<<endl;
  262. cin>>indeks>>brojOcenki;
  263. for (int i=0; i<brojOcenki; i++)
  264. {
  265. cin>>ocenka;
  266. ocenki[i]=ocenka;
  267. }
  268.  
  269. Student s(indeks,ocenki,brojOcenki);
  270. s.pecati();
  271.  
  272. }
  273. else if (tip==3) //funkcija getVkupnaOcenka vo Student
  274. {
  275. cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  276. cin>>indeks>>brojOcenki;
  277. for (int i=0; i<brojOcenki; i++)
  278. {
  279. cin>>ocenka;
  280. ocenki[i]=ocenka;
  281. }
  282. Student s(indeks,ocenki,brojOcenki);
  283. cout<<"Broj na bodovi: "<<s.getBodovi()<<endl;
  284.  
  285. }
  286. else if (tip==4) //funkcija getVkupnaOcenka vo Demonstrator
  287. {
  288. cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  289. cin>>indeks>>brojOcenki;
  290. for (int i=0; i<brojOcenki; i++)
  291. {
  292. cin>>ocenka;
  293. ocenki[i]=ocenka;
  294. }
  295. cin>>imeIPrezime>>brojKursevi;
  296. for (int i=0; i<brojKursevi; i++)
  297. {
  298. cin>>ime>>krediti;
  299. kursevi[i]=Kurs(ime,krediti);
  300. }
  301. cin>>brojCasovi;
  302.  
  303. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  304. cout<<"Broj na bodovi: "<<d.getBodovi()<<endl;
  305.  
  306. }
  307. else if (tip==5) //funkcija pecati vo Demonstrator
  308. {
  309. cout<<"-----TEST pecati -----"<<endl;
  310. cin>>indeks>>brojOcenki;
  311. for (int i=0; i<brojOcenki; i++)
  312. {
  313. cin>>ocenka;
  314. ocenki[i]=ocenka;
  315. }
  316. cin>>imeIPrezime>>brojKursevi;
  317. for (int i=0; i<brojKursevi; i++)
  318. {
  319. cin>>ime>>krediti;
  320. kursevi[i]=Kurs(ime,krediti);
  321. }
  322. cin>>brojCasovi;
  323.  
  324. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  325. d.pecati();
  326.  
  327. }
  328. else if (tip==6) //site klasi
  329. {
  330. cout<<"-----TEST Student i Demonstrator-----"<<endl;
  331. cin>>indeks>>brojOcenki;
  332. for (int i=0; i<brojOcenki; i++)
  333. {
  334. cin>>ocenka;
  335. ocenki[i]=ocenka;
  336. }
  337. cin>>imeIPrezime>>brojKursevi;
  338. for (int i=0; i<brojKursevi; i++)
  339. {
  340. cin>>ime>>krediti;
  341. kursevi[i]=Kurs(ime,krediti);
  342. }
  343. cin>>brojCasovi;
  344.  
  345. Student *s=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  346. s->pecati();
  347. cout<<"Broj na bodovi: "<<s->getBodovi()<<endl;
  348. delete s;
  349.  
  350.  
  351. }
  352. else if (tip==7) //funkcija vratiNajdobroRangiran
  353. {
  354. cout<<"-----TEST vratiNajdobroRangiran-----"<<endl;
  355. int k, opt;
  356. cin>>k;
  357. Student **studenti=new Student*[k];
  358. for (int j=0; j<k; j++)
  359. {
  360. cin>>opt; //1 Student 2 Demonstrator
  361. cin>>indeks>>brojOcenki;
  362. for (int i=0; i<brojOcenki; i++)
  363. {
  364. cin>>ocenka;
  365. ocenki[i]=ocenka;
  366. }
  367. if (opt==1)
  368. {
  369. studenti[j]=new Student(indeks,ocenki,brojOcenki);
  370. }
  371. else
  372. {
  373. cin>>imeIPrezime>>brojKursevi;
  374. for (int i=0; i<brojKursevi; i++)
  375. {
  376. cin>>ime>>krediti;
  377. kursevi[i]=Kurs(ime,krediti);
  378. }
  379. cin>>brojCasovi;
  380. studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  381. }
  382. }
  383. Student& najdobar=vratiNajdobroRangiran(studenti,k);
  384. cout<<"Maksimalniot broj na bodovi e:"<<najdobar.getBodovi();
  385. cout<<"\nNajdobro rangiran:";
  386. najdobar.pecati();
  387.  
  388. for (int j=0; j<k; j++) delete studenti[j];
  389. delete [] studenti;
  390. }
  391. else if (tip==8) //funkcija pecatiDemonstratoriKurs
  392. {
  393. cout<<"-----TEST pecatiDemonstratoriKurs-----"<<endl;
  394. int k, opt;
  395. cin>>k;
  396. Student **studenti=new Student*[k];
  397. for (int j=0; j<k; j++)
  398. {
  399. cin>>opt; //1 Student 2 Demonstrator
  400. cin>>indeks>>brojOcenki;
  401. for (int i=0; i<brojOcenki; i++)
  402. {
  403. cin>>ocenka;
  404. ocenki[i]=ocenka;
  405. }
  406. if (opt==1)
  407. {
  408. studenti[j]=new Student(indeks,ocenki,brojOcenki);
  409. }
  410. else
  411. {
  412. cin>>imeIPrezime>>brojKursevi;
  413. for (int i=0; i<brojKursevi; i++)
  414. {
  415. cin>>ime>>krediti;
  416. kursevi[i]=Kurs(ime,krediti);
  417. }
  418. cin>>brojCasovi;
  419. studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  420. }
  421. }
  422. char kurs[20];
  423. cin>>kurs;
  424. cout<<"Demonstratori na "<<kurs<<" se:"<<endl;
  425. pecatiDemonstratoriKurs (kurs,studenti,k);
  426. for (int j=0; j<k; j++) delete studenti[j];
  427. delete [] studenti;
  428.  
  429. }
  430.  
  431.  
  432. return 0;
  433. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement