Advertisement
Tranvick

АПОЖ

Jan 8th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1. #include <cstring>
  2. #include <iostream>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. class MyException{
  8. public:
  9.     MyException() : message("Mark must be between 0 and 10\n") {}
  10.     void printMessage() { cout << message; }
  11. private:
  12.     const char * message;
  13. };
  14.  
  15. class Man {
  16. protected:
  17.     char * name;
  18. public:
  19.     Man(char *);
  20.     virtual ~Man();
  21.     const char * getname() const;
  22. };
  23.  
  24. Man :: Man(char * s) {
  25.     int n = strlen(s);
  26.     name = new char [n + 1];
  27.     for (int i = 0; i <= n; ++i) name[i] = s[i];
  28. }
  29.  
  30. Man :: ~Man() {
  31.     delete [] name;
  32. }
  33.  
  34. const char * Man :: getname() const {
  35.     return name;
  36. }
  37.  
  38. class Staff : public Man {
  39. protected:
  40.     char * disc;
  41. public:
  42.     Staff(char *, char *);
  43.     virtual ~Staff();
  44.     const char * getdisc() const;
  45. };
  46.  
  47. Staff :: Staff(char * s, char * f) : Man(s) {
  48.     int n = strlen(f);
  49.     disc = new char [n + 1];
  50.     for (int i = 0; i <= n; ++i) disc[i] = f[i];
  51. }
  52.  
  53. Staff :: ~Staff() {
  54.     delete [] disc;
  55. }
  56.  
  57. const char * Staff :: getdisc() const {
  58.     return disc;
  59. }
  60.  
  61. class Student : public Staff {
  62. private:
  63.     struct MyStruct {
  64.         char * disc;
  65.         int mark;
  66.     } my;
  67. public:
  68.     Student(char *, char *, int);
  69.     virtual ~Student() {}
  70.     int getmark() const;
  71. };
  72.  
  73. Student :: Student(char * s, char * f, int x) : Staff(s, f) {
  74.     if (x < 0 || x > 10) throw MyException();
  75.     my.disc = disc;
  76.     my.mark = x;
  77. }
  78.  
  79. int Student :: getmark() const {
  80.     return my.mark;
  81. }
  82.  
  83. int main() {
  84.     setlocale(LC_ALL, ".1251");
  85.     ifstream fin("input.txt");
  86.     int n, m;
  87.     fin >> n;
  88.     if (n <= 0) {
  89.         cout << "Количество студентов должно быть положительным числом\n";
  90.         return 0;
  91.     }
  92.     Student ** students = new Student * [n];
  93.     for (int i = 0; i < n; ++i) {
  94.         char * name, * disc;
  95.         int mark;
  96.         name = new char[20];
  97.         disc = new char[20];
  98.         fin >> name >> disc >> mark;
  99.         try {
  100.             students[i] = new Student(name, disc, mark);
  101.         } catch (MyException e) {
  102.             e.printMessage();
  103.             students[i] = NULL;
  104.         }
  105.         delete [] name;
  106.         delete [] disc;
  107.     }
  108.  
  109.     char s[100];
  110.     int ans = 0;
  111.     cout << "Введите название дисциплины:\n";
  112.     cin >> s;
  113.     for (int i = 0; i < n; ++i)
  114.         if (students[i] != NULL && strcmp(students[i] -> getdisc(), s) == 0) ans += students[i] -> getmark() > 3;
  115.     cout << "Количество студентов, сдавших указанную дисциплину положительно: " << ans << endl << endl;
  116.  
  117.     fin >> m;
  118.     Staff ** staffs = new Staff *[m];
  119.  
  120.     for (int i = 0; i < m; ++i) {
  121.         char * name, * disc;
  122.         name = new char[100];
  123.         disc = new char[100];
  124.         fin >> name >> disc;
  125.         staffs[i] = new Staff(name, disc);
  126.         delete [] name;
  127.         delete [] disc;
  128.     }
  129.  
  130.     for (int i = 0; i < m; ++i) {
  131.         int sum = 0, count = 0;
  132.         for (int j = 0; j < n; ++j)
  133.             if (students[j] != NULL && strcmp(students[j] -> getdisc(), staffs[i] -> getdisc()) == 0) {
  134.                 ++count;
  135.                 sum += students[j] -> getmark();
  136.             }
  137.         cout << "Преподаватель: " << staffs[i] -> getname() << "\nДисциплина: " << staffs[i] -> getdisc();
  138.         if (count) cout << "\nСредний балл: " << (sum + .0) / count;
  139.         else cout << "Ни один студент не сдавал экзамен этому преподавателю";
  140.         cout << endl << endl;
  141.     }
  142.     return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement