Advertisement
Guest User

Untitled

a guest
Jul 21st, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 21.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <iomanip>
  5. using namespace std;
  6. // Глобальная константа и переменная:
  7. // Объявите (не определяйте!) Пять классов с именем Bill, Customer, Date, Order и Room.
  8.  // Определите постоянный переменный отель как строку с именем «Duisburg Happy Sleeping»,
  9.  // постоянное переменное numberOfRooms как натуральное число со значением 4,
  10.  // поле с именем комнаты с номеромOfRooms Указатели типа Room, указатели клиентов,
  11.  // инициализированные нулем типа Customer и указатель инициализирует порядки с NULL типа Order.
  12.  
  13.     string Hotelname = "Duisburg Happy Sleeping";
  14.     int const numberOfRooms = 4;
  15. // Класс  Customer :
  16. //  Определить класс с именем Customer with
  17. //  Два частных атрибута с именем для имени и телефона для номера телефона как типа строки.
  18. //  частный атрибут с именем следующего указателя типа для клиента.
  19. //  публичный конструктор с двумя строковыми параметрами и указатель типа Customer для инициализации трех атрибутов.
  20.  // Имя всегда должно быть указано, вторым параметром для номера телефона должна быть пустая строка «» в качестве
  21.  // параметра по умолчанию, третий параметр по умолчанию должен иметь нулевое значение NULL в качестве значения по
  22.  // умолчанию и служить для создания списка любого числа клиентов.
  23. //  два общедоступных метода с именем get_name и get_next, которые возвращают соответствующие значения частных
  24.  // атрибутов в качестве значения функции.
  25. //  дружественный перегруженный оператор << для вывода ссылки на объект класса в качестве второго параметра,
  26.  // в теле которого имя, за которым следуют «, телефон:» и номер телефона клиента, записываются в выходной поток данных,
  27.  // переданный в качестве первого параметра ( см. примеры ниже).
  28. class Customer{
  29.     private:
  30.     string name;
  31.     string phone;
  32.     Customer *next;
  33.     vector<Customer*> clist = {};
  34.     public:
  35.     Customer(string name,string phone = " ",Customer *next = nullptr):
  36.     name(name),phone(phone),next(next){
  37.     }
  38.     string get_name()const{return this->name;}
  39.     string get_phone()const{return this->phone;}
  40.     Customer get_next(){return this->next;}
  41.     void add_customer(){
  42.        
  43.         cout<<"\nname of customer\t: ";cin >>name;cin.ignore(32000, '\n');
  44.         cout<<"\nphone number: ";cin >>phone;cin.ignore(32000, '\n');
  45.         Customer * c = new Customer{name,phone};
  46.         clist.push_back(c);
  47.      }
  48.    
  49.  
  50.     friend ostream& operator<<(ostream &os, const Customer &c);
  51. };
  52. // Класс  Дата:
  53. // Определите класс с именем Date с:
  54. //  три частных атрибута с естественным номером, день, месяц и год.
  55. //  перегруженный публичный (по умолчанию) конструктор с тремя параметрами по умолчанию для даты 09.01.2015, который инициализирует три атрибута.
  56. //  дружественный перегруженный оператор >> для ввода даты из входного потока.
  57. //  дружественный перегруженный оператор << для вывода даты в выходной поток. Дата должна всегда указываться в двух цифрах за день, месяц и четыре цифры за год, как в следующих примерах: 08.02.2015, 13.02.2015, 01.11.2015, 31.12.2015).
  58. //  дружественный перегруженный оператор == для сравнения двух объектов этого класса с возвращаемым значением Boolean.
  59. class Date{
  60.     private:
  61.         int tag;
  62.         int monat;
  63.         int jahr;
  64.    
  65.     public:
  66.         Date(int tag,int monat, int jahr ):tag(tag), monat(monat), jahr(jahr){}
  67.        
  68.     void showDate(){
  69.         cout << setfill('0');
  70.         cout << setw(2) << tag << '.'
  71.         << setw(2) << monat << '.'
  72.         << setw(4) << jahr << endl;
  73.         }
  74.        
  75.        
  76. };
  77.  
  78. ostream& operator<<(ostream &os, const Customer &c){
  79.         os<< "Name of Customer:"<<c.name<<endl;
  80.         os<<"Phone of Customer:"<<c.phone<<endl;
  81.         return os;
  82.     }
  83. // Класс Room :
  84. // Определите класс с именем Room с:
  85. //  два частных атрибута с натуральным номером, обозначенные номером номера и кроватями для номера кроватей.
  86. //  частный логический атрибут с именем балкон, который указывает, есть ли в номере балкон.
  87. //  публичный конструктор с тремя параметрами для инициализации трех атрибутов объекта.
  88. //  открытый метод get_beds, который возвращает количество кроватей в качестве значения функции.
  89. //  публичный метод с именем print, в котором строка «номер комнаты», номер комнаты с запятой отделяет
  90.  // количество кроватей и «кровати (кровати)», а дополнительно «балкон» проводится,
  91.  // если в номере есть балкон (см. примеры ниже).
  92.  
  93.  // class Room{
  94.      // int no;
  95.      // int beds;
  96.      // bool balcony;
  97.      // public:
  98.      // Room *numberOfRooms;
  99.      // Room(int no,int beds,bool balcony = false): no(no), beds(beds), balcony(balcony){
  100.      // }
  101.      // int get_beds() const{return this->beds;}
  102.      // void print(){
  103.          // cout<<"Room no:"<<no<<", "<<beds<<"bed(s)";
  104.          // if(balcony){
  105.              // cout<<",balcony";
  106.          // }
  107.          // cout<<"\n";
  108.      // }
  109.  // };
  110.  // Класс подзадачи Breakfast :
  111. // Определите класс с именем Breakfast , полученный из класса Order
  112. //  публичный конструктор с датой и указателем на клиента в качестве параметра
  113.  // и третьим параметром по умолчанию указателем типа заказа со значением по умолчанию NULL
  114.  // (завтрак является дополнительным дополнительным бронированием в списке всех заказов).
  115. //  публичный виртуальный метод get_price, который возвращает 9,90 $ за завтрак (см. Пример ниже).
  116. //  публичный виртуальный метод с именем print, который печатает дату завтрака,
  117.  // правомерное исправление в 10 символов с 2 десятичными знаками, цена,
  118.  // вызванная с помощью вышеуказанной функции, и «EUR: завтрак» за ней (см. Пример ниже).
  119.  
  120.  // class Breakfast{
  121.      
  122.  // };
  123. // Класс подзадачи Order
  124. // Определите абстрактный класс с именем Order with
  125. //  частный атрибут с именем bookedFor типа Date.
  126. //  частный счет на счете типа Bill.
  127. //  частный указатель с именем клиента типа Customer.
  128. //  частный указатель, названный следующим типом Order.
  129. //  публичный конструктор с тремя параметрами. Первым параметром должен быть объект типа Date,
  130.  // второй - указатель на клиента, третий - параметр по умолчанию со значением NULL при бронировании типа Order
  131.  // для создания списка любого количества сообщений. Связанные три атрибута должны быть инициализированы значениями,
  132.  // связанными векселями счета с NULL.
  133. //  два общедоступных метода с именем get_bookedFor и get_customer, которые возвращают соответствующие значения
  134. // частных атрибутов в качестве значения функции.
  135. //  Открытый метод с именем invoiced, который должен возвращать true, если это бронирование уже выставлено,
  136.  // поэтому счет указателя указывает на объект типа Bill, иначе false.
  137. //   открытый метод с именем set_bill с параметром указателя на счет-фактуру, который устанавливает значение атрибута
  138.  // с тем же именем и ссылки на эту запись на счет-фактуру. 
  139. //  Открытый виртуальный метод с именем get_room без параметров, который всегда возвращает NULL в качестве указателя
  140. // на объект класса Room.
  141. //  публичный абстрактный виртуальный метод с именем get_price без параметров и двойной как возвращаемое значение.
  142. //  Открытый абстрактный виртуальный метод с именем print без параметров и без возвращаемого значения.
  143. // class Order{
  144.      // Date bookedFor;
  145.      //Bill *bill;
  146.      // Customer *name;
  147.      // Order *next;
  148.      
  149.      // public:
  150.      //Order(Date *bookedFor,Customer *name,Bill *bill):?????????????
  151.      
  152.      // Date get_bookedFor(){}
  153.      // Customer get_customer(){}
  154.      // int get_next(){}
  155.      // bool invoiced(){}
  156.      // set_bill(){}
  157.      // int get_room(){}
  158.      // int get_price(){}
  159.      // print(){}
  160.  // };
  161.  
  162. // Accomodation:
  163. // Определите абстрактный класс с именем Accomodation, полученный из абстрактного класса Order, с:
  164. //  частный логический атрибут с именем «гараж».
  165. //  частный указатель, названный номером комнаты.
  166. //  публичный конструктор с пятью параметрами для инициализации атрибутов. Первые три параметра должны быть
  167.  // датой ночного пребывания, указателем на клиента и указателем на (все еще свободную) комнату.
  168.  // Последние два параметра должны быть параметрами по умолчанию для гаража в качестве значения
  169.  // по умолчанию и указателем типа Order со значением по умолчанию NULL.
  170. //  защищенный метод priceForParking без параметров, который возвращает 15,00 долларов США в случае арендованного гаража,
  171.  // в противном случае - 0,00 доллара США в качестве двойного.
  172. //  Открытый виртуальный метод с именем get_room без параметров, который возвращает указатель с тем же именем.
  173. //  Открытый виртуальный метод с именем print, который печатает дату для ночлега,
  174. // правовое обоснование в 10 символов с 2 знаками после запятой, стоимость ночного пребывания определяется
  175. // функцией get_price и за ней «EUR:». После этого зарезервированное для этого место должно быть потрачено и «гараж»,
  176. // если гараж был забронирован (см. Пример ниже).
  177.  
  178.  
  179. // Класс подзадачи Single:
  180. // Определите класс с именем Single, полученный из абстрактного класса Accomodation с
  181. //  публичный конструктор с пятью параметрами для инициализации атрибутов. Первые три параметра должны быть
  182.  // датой ночного пребывания, указателем на клиента и указателем на (все еще свободную) комнату.
  183.  // Последние два параметра должны быть параметрами по умолчанию для гаража в качестве значения
  184.  // по умолчанию и указателем типа Order со значением по умолчанию NULL.
  185. //  Открытый виртуальный метод с именем get_price, который возвращает $ 49,00 за одну ночь (см. Пример ниже).
  186. //  Открытый виртуальный метод с именем print, который вызывает функцию печати по принципу «супер-класс» и
  187. // печатает строку «(как одиночную)» за ней (см. Пример ниже, двухместные номера также могут быть забронированы на одну ночь).
  188. // class Single:public Accomodation{
  189.      
  190.  // };
  191. // Класс подзадачи Double
  192. //  Определите класс с именем Double, полученный из абстрактного класса Accomodation с
  193. //  публичный конструктор с пятью параметрами для инициализации атрибутов. Первые три параметра
  194. // должны быть датой ночного пребывания, указателем на клиента и указателем на (все еще свободную) комнату.
  195.  // Последние два параметра должны быть параметрами по умолчанию для гаража в качестве значения по умолчанию и
  196.  // указателем типа Order со значением по умолчанию NULL. Если количество кроватей в комнате не менее 2,
  197.  // должно быть выдано текстовое сообщение «дополнительная кровать».
  198. //  Открытый виртуальный метод get_price, который возвращает $ 69,00 за двухдневную ночь (см. Пример ниже).
  199. //  общедоступный виртуальный метод с именем print, который вызывает функцию печати с прямым доступом к суперклассу и
  200.  // печатает строку «(как двойную») за ней (см. Пример ниже, отдельные комнаты можно забронировать с дополнительной кроватью
  201.  // для двухдневного пребывания).
  202.  // class Double: public Accomodation{
  203.      
  204.  // };
  205.  // class Bill{
  206.     // Bill *bill;
  207.     // Bill *next;
  208.  // };
  209.  // Глобальная функция подзадачи searchFreeRoom:
  210. // Реализация функции
  211. // Room* searchFreeRoom(Date date, unsigned int beds);
  212. // В этом свободная комната с по крайней мере кроватями в дату даты, которую нужно искать, и указывается в качестве указателя.
  213.  // Если в эту дату нет места с достаточным количеством кроватей, нулевой указатель должен быть возвращен.
  214. // Примечания: глобальный полевой номер содержит указатели numberOfRooms в номере номерной комнаты отеля
  215. // (всегда используйте это const Variable numberOfRooms, а не прямое значение 4) при программировании.
  216.  // Вы можете проверить (внешний) цикл для каждой комнаты, будь то для этого
  217.  // (простое сравнение соответствующих указателей с номерами в элементе поля и объектом бронирования)
  218.  // в глобальных списках заказов всех заказов на ночь в эту дату (используйте оператор, указанный выше = = дата сравнения для двух объектов)
  219.  // (для этого требуется второй внутренний цикл).
  220.    
  221.  
  222. // Основная Funktion main :
  223. // Напишите функцию main:
  224. //  В первом цикле создайте numberOfRooms / 2 новых комнаты в Heap
  225. // номер комнаты 1, 2, ... с 1 кроватью и без балкона и
  226. // соответствующий указатель на них, соответственно, первые элементы numberOfRooms / 2
  227. // комната тоже.
  228. //  Во втором цикле создайте numberOfRooms / 2 новых комнаты в Heap
  229. // с последовательным номером номера numberOfRooms / 2 + 1, numberOfRooms / 2 + 2, ... с
  230. // каждый 2 кровати и с балконом, и имеют соответствующий указатель на каждый
  231. // второе числоOfRooms / 2 элемента поля из комнаты в.
  232. //  В третьем цикле выведите все номера номеров в отеле отеля.
  233.             // Duisburg Happy Sleeping
  234.             // room no. 1, 1 bed(s)
  235.             // room no. 2, 1 bed(s)
  236.             // room no. 3, 2 bed(s), balcony
  237.             // room no. 4, 2 bed(s), balcony
  238.  
  239.     // void menu(){
  240.        
  241.     // int i = -1;
  242.    
  243.     // while(i){
  244.         // c.print_menu();
  245.         // cout << "\nyour choice: "; cin >> i; cin.ignore(32000, '\n');
  246.         // switch(i){
  247.             // case 1 : //add_custemer();
  248.                      // break;
  249.             // case 2 : //c.print_all_customer();
  250.                      // break;
  251.             // case 3 : //accomodation_booking();
  252.                      // break;
  253.             // case 4 : //breakfast_booking();
  254.                      // break;
  255.             // case 5 : //c.show_all_orders();
  256.                      // break;
  257.            
  258.             // default : break;
  259.         // }
  260.     // }
  261. // };
  262. void print_menu(){
  263.        
  264.         cout << "--------------------Welcom to " << Hotelname << " -----------------------" << endl;
  265.         string menu[] ={
  266.                          "n new custemer\t\t1",
  267.                          "p print all customer\t2",
  268.                          "a accomodation booking\t3",
  269.                          "b breakfast booking\t4",
  270.                          "s show all orders\t5",
  271.                          "e end of programm\t0",
  272.                          "\nyour choice: "
  273.                          
  274.                         }; 
  275.         for(int i=0;i<7;i++)
  276.         {
  277.             cout <<menu[i]<< endl;
  278.         };
  279. }
  280.     void menu(){
  281.         print_menu();
  282.         int i = -1;
  283.        
  284.         cin >> i;cin.ignore(32000, '\n');
  285.  
  286.         switch(i){
  287.             case 1 :cout<<"\nyour choice: "<<i;
  288.             Cuctomer.add_customer();
  289.                    
  290.                      break;
  291.             case 2 : cout<<"\nyour choice: "<<i;//c.print_all_customer();
  292.                      break;
  293.             case 3 : cout<<"\nyour choice: "<<i;//accomodation_booking();
  294.                      break;
  295.             case 4 : cout<<"\nyour choice: "<<i;//breakfast_booking();
  296.                      break;
  297.             case 5 : cout<<"\nyour choice: "<<i;//c.show_all_orders();
  298.                      break;
  299.            
  300.             default : break;
  301.         }
  302.    
  303. };
  304.  
  305. int main(){
  306. menu();
  307.  
  308.     Customer c {"tom","011"};
  309.     cout<<c<<endl;
  310.    
  311.     cout << "--------------------Welcom to " << Hotelname << " -----------------------" << endl;
  312.     // cout<< "Name of Customer:";cin>>c.get_name();
  313.     // cout<<"Phone of Customer:";cin>>c.get_phone();
  314.    
  315.    
  316.      
  317.     // cout<<c<<endl;
  318.     // Accomodation *a = new Accomodation{};
  319.     // a->priceForParking();
  320.    
  321.         // Datum *p = new Datum{04,12,2012};
  322.             // p->showDate();
  323.         // cout <<"=======" << endl;
  324.        
  325.         // Room *rb = new Room{1,2,true};
  326.             // rb->print();
  327.         // Room *r = new Room{2,2};
  328.             // r->print();
  329.             return 0;
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement