Arkanium77

3 класса

Nov 22nd, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cmath>
  4. #include <cstdlib>
  5. #include <string>
  6. using namespace std;
  7.  
  8. class NegativeException {
  9.     string exc;
  10.  
  11.     friend ostream& operator<<(ostream& os, const NegativeException& vi) {
  12.         os << "исключение " << vi.exc;
  13.         return os;
  14.     }
  15. public:
  16.  
  17.     NegativeException() {
  18.         this->exc = "NegativeException";
  19.     }
  20. };
  21.  
  22. class InvalidAdress {
  23.     string exc;
  24.  
  25.     friend ostream& operator<<(ostream& os, const InvalidAdress& vi) {
  26.         os << "исключение " << vi.exc;
  27.         return os;
  28.     }
  29. public:
  30.  
  31.     InvalidAdress() {
  32.         this->exc = "InvalidAdress";
  33.     }
  34. };
  35.  
  36. class Human {
  37. protected:
  38.     string name;
  39.     double ves;
  40.     double rost;
  41.     int vozrast;
  42. public:
  43.  
  44.     Human(string a = "Иван", double b = 84, double r = 162, int v = 21) {
  45.         name = a;
  46.         ves = b;
  47.         rost = r;
  48.         vozrast = v;
  49.     }
  50.  
  51.     Human(const Human &m) {
  52.         name = m.name;
  53.         vozrast = m.vozrast;
  54.         ves = m.ves;
  55.         rost = m.rost;
  56.     }
  57.  
  58.     Human& operator=(Human m) {
  59.         name = m.name;
  60.         vozrast = m.vozrast;
  61.         ves = m.ves;
  62.         rost = m.rost;
  63.     }
  64.  
  65.     void setname(string c) {
  66.         name = c;
  67.     }
  68.  
  69.     string getname() {
  70.         return name;
  71.     }
  72.  
  73.     void setves(double c) {
  74.         ves = c;
  75.     }
  76.  
  77.     double getves() {
  78.         return ves;
  79.     }
  80.  
  81.     void setrost(double c) {
  82.         rost = c;
  83.     }
  84.  
  85.     double getrost() {
  86.         return rost;
  87.     }
  88.  
  89.     void setvozrast(int c) {
  90.         vozrast = c;
  91.     }
  92.  
  93.     int getvozrast() {
  94.         return vozrast;
  95.     }
  96.  
  97.     friend ostream& operator<<(ostream& vivod, Human& H) {
  98.         vivod << "name " << H.name << endl << "vozrast " << H.vozrast << endl << "rost " << H.rost << endl << "ves " << H.ves << endl;
  99.         return vivod;
  100.     }
  101.  
  102.     friend istream& operator>>(istream& vvod, Human& H) {
  103.         cout << "Enter name " << endl;
  104.         vvod >> H.name;
  105.         vvod.ignore();
  106.         cout << "Enter vozrast " << endl;
  107.         vvod >> H.vozrast;
  108.         vvod.ignore();
  109.         cout << "Enter rost " << endl;
  110.         vvod >> H.rost;
  111.         vvod.ignore();
  112.         cout << "Enter ves " << endl;
  113.         vvod >> H.ves;
  114.         cout << endl;
  115.         return vvod;
  116.     }
  117.  
  118.     double IndMas() {
  119.         double k = ves / pow(rost, 2);
  120.         return k;
  121.     }
  122. };
  123.  
  124. class Book {
  125. protected:
  126.     string *pred;
  127.     int size;
  128.     int *mark;
  129. public:
  130.  
  131.     Book(int size = 2) {//Конструктор. size задаёт количество сдаваемых предметов. По умолчанию - 2
  132.         this->size = size;
  133.         pred = new string [size];
  134.         mark = new int [size];
  135.         for (int i = 0; i < size; i++) {
  136.             char a[10];
  137.             //cout<<"1";
  138.             itoa(i, a, 10);
  139.             //cout<<"2";
  140.             string s = "Предмет";
  141.             //cout<<"3";
  142.             s += a;
  143.             // cout<<"4";
  144.             pred[i] = s;
  145.             //cout<<"5";
  146.             //cout<<endl;
  147.         }
  148.         for (int i = 0; i < size; i++) {
  149.             mark[i] = rand() % (5 - 2 + 1) + 2;
  150.         }
  151.     }
  152.  
  153.     Book(int *mark, string *pred, int size = 2) {
  154.         if (size <= 0)throw NegativeException();
  155.         this->pred = new string [size];
  156.         this->mark = new int [size];
  157.         for (int i = 0; i < size; i++) {
  158.             this->pred[i] = pred[i];
  159.         }
  160.         for (int i = 0; i < size; i++) {
  161.             this->mark[i] = mark[i];
  162.         }
  163.         this->size = size;
  164.     }
  165.  
  166.     /**
  167.      * <b>Переопределённый оператор =</b><br>
  168.      * @param b присваеваемый Book
  169.      * @return изменённый объект
  170.      */
  171.     Book& operator=(Book b) {
  172.         //if (*this == b)return *this;
  173.         if (b.size != this->size) {
  174.             delete []this->mark;
  175.             delete []this->pred;
  176.             this->size = b.size;
  177.             this->pred = new string [b.size];
  178.             this->mark = new int [b.size];
  179.         }
  180.         this->copy(b.mark, b.pred);
  181.         return *this;
  182.     }
  183.  
  184.     /**
  185.      * <b>Перенос массива</b>
  186.      * Техническая функция. ВАЖНО: Размер this.v должен совпадать с размером переносимого массива
  187.      * @param v переносимый массив
  188.      */
  189.     void copy(int *v, string *v1) {
  190.         for (int i = 0; i<this->size; i++) {
  191.             this->mark[i] = v[i];
  192.         }
  193.         for (int i = 0; i<this->size; i++) {
  194.             this->pred[i] = v1[i];
  195.         }
  196.     }
  197.  
  198.     Book(const Book& b) {
  199.         pred = new string[b.size];
  200.         mark = new int[b.size];
  201.         size = b.size;
  202.         for (int i = 0; i < size; i++) {
  203.             this->pred[i] = b.pred[i];
  204.         }
  205.         for (int i = 0; i < size; i++) {
  206.             this->mark[i] = b.mark[i];
  207.         }
  208.     }
  209.  
  210.     ~Book() {
  211.         delete []pred;
  212.         delete mark;
  213.     }
  214.  
  215.     void setPred(string s, int i = 0) {
  216.         if (i<this->size) {
  217.             this->pred[i] = s;
  218.         } else cout << "Error";
  219.     }
  220.  
  221.     void setPred(int m, int i = 0) {
  222.         if (i<this->size && m >= 1 && m <= 5) {
  223.             this->mark[i] = m;
  224.         } else cout << "Error";
  225.     }
  226.  
  227.     int getMark(int i = 0) {
  228.         if (i<this->size) {
  229.             return this->mark[i];
  230.         } else cout << "Error";
  231.         //return;
  232.  
  233.     }
  234.  
  235.     string getPredm(int i = 0) {
  236.         if (i<this->size) {
  237.             return this->pred[i];
  238.         } else throw InvalidAdress();
  239.         //return;
  240.  
  241.     }
  242.  
  243.     string getEntry(int i = 0) {
  244.         if (i<this->size) {
  245.             string s = "";
  246.             s += this->pred[i];
  247.             s += " - ";
  248.             char a[2];
  249.             itoa(this->mark[i], a, 10);
  250.             s += a;
  251.             return s;
  252.         } else throw InvalidAdress();
  253.         //return;
  254.     }
  255.  
  256.     double mid() {
  257.         double s = 0;
  258.         for (int i = 0; i<this->size; i++) {
  259.             s += this->mark[i];
  260.         }
  261.         s /= this->size;
  262.         return s;
  263.     }
  264.  
  265. };
  266.  
  267. class Student {
  268. protected:
  269.     int num;
  270.     Human hum;
  271.     Book b;
  272. public:
  273.  
  274.     Student(int num = 1) {
  275.         hum = Human();
  276.         b = Book();
  277.         this->num = num;
  278.     }
  279.  
  280.     Student(Human hum, Book b, int num = 1) {
  281.         this->hum = hum;
  282.         this->b = b;
  283.         this->num = num;
  284.     }
  285.  
  286.     void setNum(int num = 1) {
  287.         this->num = num;
  288.     }
  289.  
  290.     int getNum() {
  291.         return this->num;
  292.     }
  293.  
  294.     string getName() {
  295.         return this->hum.getname();
  296.     }
  297.  
  298.     double getMid() {
  299.         return this->b.mid();
  300.     }
  301.  
  302.     string stip() {
  303.         if ((int) this->b.mid() <= 3)return "0";
  304.         if (this->b.mid() == 4)return "+";
  305.         if (this->b.mid() > 4 && this->b.mid() < 5)return "++";
  306.         else return "+++";
  307.     }
  308.  
  309.     bool grad() {
  310.         if ((int) b.mid() > 3)return true;
  311.         return false;
  312.     }
  313. };
  314.  
  315. int main() {
  316.     setlocale(0, "");
  317.     srand(time(0));
  318.     Human I = Human();
  319.     cout<<I.getname()<<"  рост:"<<I.getrost()<<"  вес:"<<I.getves()<<"  возраст:"<<I.getvozrast()<<endl;
  320.     //cout << I.getname() << endl;
  321.     Book b = Book(5);
  322.     cout << b.getEntry(0) << endl
  323.             << b.getEntry(1) << endl
  324.             << b.getEntry(2) << endl << b.getEntry(3) << endl << b.getEntry(4) << endl;
  325.     Student s = Student(I, b);
  326.  
  327.     cout << endl <<"Cтудент "<< s.getName() << "  средний балл=" << b.mid() << " -> " << s.stip() << endl;
  328.     if(s.grad())cout<<endl<<"Переведён"<<endl;
  329.     else cout<<endl<<"Отчислен А.Г. Тисовским. Лично."<<endl;
  330. }
Advertisement
Add Comment
Please, Sign In to add comment