Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <utility>
  3. #include <vector>
  4. #include <memory>
  5. #include <map>
  6. #include <list>
  7. using namespace std;
  8.  
  9. class Student{
  10.     const string& name;
  11.     const string& personalInfo;
  12.     map<string,int> gradelist;
  13. public:
  14.     Student(const string &name, const string &personalInfo, map<string, int> gradelist)
  15.             : name(name), personalInfo(personalInfo), gradelist(std::move((gradelist))) {};
  16.     void bestgrade(){
  17.         int max=0;
  18.         string temp;
  19.         for(auto i=gradelist.begin();i!=gradelist.end();i++)
  20.             if(i->second>=max)
  21.                 max = i->second;
  22.         for(const auto& item:gradelist)
  23.             if(item.second == max)
  24.                 cout<<"student has best grade in "<<item.first<<" "<<item.second<<endl;
  25.     };
  26.     void worstgrade(){
  27.         int min=10;
  28.         string temp;
  29.         for(auto i=gradelist.begin();i!=gradelist.end();i++)
  30.             if(i->second<=min)
  31.                 min = i->second;
  32.  
  33.         for(const auto& item:gradelist)
  34.             if(item.second == min)
  35.                 cout<<"student has worst grade in "<<item.first<<" "<<item.second<<endl;
  36.     }
  37.     virtual int averageGrade(){
  38.         int total=0;
  39.         int gradenr=0;
  40.         for(auto i=gradelist.begin();i!=gradelist.end();i++)
  41.         {
  42.             total+=i->second;
  43.             gradenr++;
  44.         }
  45.         total=total/gradenr;
  46.         return total;
  47.     }
  48.     string getname()const {return name;}
  49. };
  50. class HardwareStudent:public Student{
  51.     const string& fieldofwork;
  52.     map<string,int> hardwareCourses;
  53. public:
  54.     HardwareStudent(const string &name, const string &personalInfo, const map<string,int> gradeList, const string &fieldofwork,const map<string,int> hardwareCourses):
  55.             Student(name, personalInfo, gradeList),fieldofwork(fieldofwork),hardwareCourses(move(hardwareCourses)){};
  56.     int averageGrade(){
  57.         int total=0;
  58.         int gradenr=0;
  59.         int normalcoursegrade=Student::averageGrade();
  60.         for (auto i=hardwareCourses.begin();i!=hardwareCourses.end();i++)
  61.         {
  62.             total+=i->second;
  63.             gradenr++;
  64.         }
  65.         total=total/gradenr;
  66.         total+=normalcoursegrade;
  67.         total/=2;
  68.         return total;
  69.     }
  70.  
  71. };
  72. class SoftwareStudent:public Student{
  73.     map<string,int> softwareCourses;
  74.     list<string> languages;
  75. public:
  76.     SoftwareStudent(const string &name, const string &personalInfo, const map<string,int> &gradeList, const map<string,int> softwareCourses,const list<string> languages):
  77.             Student(name, personalInfo, gradeList),softwareCourses(move(softwareCourses)),languages(move(languages)){};
  78.     int averageGrade(){
  79.         int total=0;
  80.         int gradenr=0;
  81.         int normalcoursegrade=Student::averageGrade();
  82.         for (auto i=softwareCourses.begin();i!=softwareCourses.end();i++)
  83.         {
  84.             total+=i->second;
  85.             gradenr++;
  86.         }
  87.         total=total/gradenr;
  88.         total+=normalcoursegrade;
  89.         total/=2;
  90.         return total;
  91.     }
  92.  
  93. };
  94. int main(){
  95.     auto *FirstStudent=new Student("Angela","romanian",{{"english",3},{"french",6}});
  96.     Student s("Baloo","turkish",{{"german",4}});
  97.     cout<<FirstStudent->averageGrade()<<endl;
  98.     FirstStudent->worstgrade();
  99.     FirstStudent->bestgrade();
  100.     auto *FirstHardware=new HardwareStudent("Darius","romanian",{{"english",7},{"physics",5}},"electric",{{"engineering fundamentals",10}});
  101.     cout<<FirstHardware->averageGrade()<<endl;
  102.     auto *FirstSoftware=new SoftwareStudent("Marius","turkish",{{"turkish",5},{"german",9}},{{"OOP",8},{"ASD",7},{"HTML",3}},{"C++","C","Java"});
  103.     cout<<FirstSoftware->averageGrade()<<endl;
  104.  
  105.  
  106.  
  107.     const string fieldofwork="electrician";
  108.     map<string,int> hardwareCourses={{"FIE",4}};
  109.     const string name="Pavel";
  110.     const string personalInfo="romanian";
  111.     map<string,int> gradelist{{"FIEtc",7},{"SDA",6}};
  112.     map<string,int> softwareCourses{{"OOP",8},{"ASD",7},{"HTML",3}};
  113.     list<string> languages{"C++","C","Java"};
  114.     list<unique_ptr<HardwareStudent>> hardwarelist;
  115.     list<unique_ptr<SoftwareStudent>> softwarelist;
  116.     hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
  117.     hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
  118.     hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
  119.     hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
  120.     softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
  121.     softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
  122.     softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
  123.     softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
  124.     softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
  125.     for(auto &instance : hardwarelist){
  126.         cout<<instance->averageGrade()<<endl;
  127.     }
  128.     for(auto &instance : softwarelist){
  129.         cout<<instance->averageGrade()<<endl;
  130.     }
  131.     int maxgrade=0;
  132.     string temp;
  133.     for(auto &i:hardwarelist){
  134.         if(i->averageGrade()>maxgrade) {
  135.             maxgrade = i->averageGrade();
  136.             temp = i->getname();
  137.         }
  138.     }
  139.     for(auto &i:hardwarelist){
  140.         if(i->averageGrade()==maxgrade) {
  141.             cout<<i->getname()<<" "<<maxgrade<<endl;
  142.         }
  143.     }
  144.     for(auto &i:softwarelist){
  145.         if(i->averageGrade()>maxgrade) {
  146.             maxgrade = i->averageGrade();
  147.             temp = i->getname();
  148.         }
  149.     }
  150.     for(auto &i:softwarelist){
  151.         if(i->averageGrade()==maxgrade) {
  152.             cout<<i->getname()<<" "<<maxgrade<<endl;
  153.         }
  154.     }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement