Guest User

Untitled

a guest
Jul 20th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.21 KB | None | 0 0
  1. #ifndef __PROGTEST__
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <string>
  8. using namespace std;
  9.  
  10.  
  11. class InvalidCarException
  12.  {
  13.    public:
  14.       InvalidCarException ( const string & rz ) :
  15.         m_RZ ( rz ) {}
  16.     friend ostream & operator << ( ostream & os, const InvalidCarException & e )
  17.      { return os << e . m_RZ; }
  18.    private:
  19.     string m_RZ;
  20.  };
  21.  
  22. class InvalidDriverException
  23.  {
  24.    public:
  25.       InvalidDriverException ( const string & name, const string & surname ) :
  26.         m_Name ( name ), m_Surname ( surname ) {}
  27.     friend ostream & operator << ( ostream & os, const InvalidDriverException & e )
  28.      { return os << e . m_Name << ' ' << e . m_Surname; }
  29.    private:
  30.     string m_Name;
  31.     string m_Surname;
  32.  };
  33.  
  34. class CTester;
  35. #endif /* __PROGTEST__ */
  36.  
  37.  
  38. class CDriver;
  39. class CCar;
  40.  
  41. class CDriver
  42.  {
  43.    public:
  44.                      CDriver      ( const string    & name,
  45.                                     const string    & surname );
  46.     // operator <<                                
  47.     // dalsi Vase rozhrani
  48.     friend class ::CTester;
  49.    protected:
  50.     struct TLog
  51.      {
  52.        string        m_Date;
  53.        CCar        * m_Car;
  54.      };
  55.     string           m_Name;
  56.     string           m_Surname;
  57.     TLog           * m_Log;
  58.     int              m_LogNr;
  59.  };
  60.  
  61. class CCar
  62.  {
  63.    public:
  64.                      CCar         ( const string    & RZ );
  65.     // operator <<                                
  66.     // dalsi Vase rozhrani
  67.     friend class ::CTester;
  68.    protected:
  69.     struct TLog
  70.      {
  71.        string        m_Date;
  72.        CDriver     * m_Driver;
  73.      };
  74.     string           m_RZ;
  75.     TLog           * m_Log;
  76.     int              m_LogNr;
  77.  };
  78.  
  79. class CDatabase
  80.  {
  81.    public:
  82.                      CDatabase    ( void );
  83.     bool             Add          ( const string    & date,
  84.                                     const string    & name,
  85.                                     const string    & surname,
  86.                                     const string    & RZ );
  87.     const CCar     & FindCar      ( const string    & RZ ) const;
  88.     const CDriver  & FindDriver   ( const string    & name,
  89.                                     const string    & surname ) const;
  90.     // operator <<                                
  91.     // dalsi Vase rozhrani
  92.     friend class ::CTester;
  93.    protected:
  94.     CDriver       ** m_Drivers;
  95.     int              m_DriversNr;
  96.    
  97.     CCar          ** m_Cars;
  98.     int              m_CarsNr;
  99.  };
  100. Ukázka použití tříd:
  101.  
  102. CDatabase    * a, * b, *c;
  103. bool          st;
  104.  
  105. a = new CDatabase;
  106. st = a -> Add ( "2012-03-01", "John", "Nowak", "ABC-12-34" ); // st = true
  107. st = a -> Add ( "2012-03-02", "John", "Nowak", "ABC-12-34" ); // st = true
  108. st = a -> Add ( "2012-03-03", "John", "Nowak", "DEF-56-67" ); // st = true
  109. st = a -> Add ( "2012-03-02", "George", "Smith", "DEF-56-67" ); // st = true
  110. cout << *a;
  111. /*
  112. Drivers:
  113.    John Nowak
  114.       2012-03-01: ABC-12-34
  115.       2012-03-02: ABC-12-34
  116.       2012-03-03: DEF-56-67
  117.    George Smith
  118.       2012-03-02: DEF-56-67
  119. Cars:
  120.    ABC-12-34
  121.       2012-03-01: John Nowak
  122.       2012-03-02: John Nowak
  123.    DEF-56-67
  124.       2012-03-02: George Smith
  125.       2012-03-03: John Nowak
  126. */
  127. cout << a -> FindCar ( "ABC-12-34" );
  128. /*
  129. ABC-12-34
  130.    2012-03-01: John Nowak
  131.    2012-03-02: John Nowak
  132. */
  133. cout << a -> FindDriver ( "John", "Nowak" );
  134. /*
  135. John Nowak
  136.    2012-03-01: ABC-12-34
  137.    2012-03-02: ABC-12-34
  138.    2012-03-03: DEF-56-67
  139. */
  140. cout << a -> FindCar ( "XYZ-99-88" );
  141. // InvalidCarException thrown, cout << e => "XYZ-99-88"
  142. cout << a -> FindDriver ( "John", "Smith" );
  143. // InvalidDriverException thrown, cout << e => "John Smith"
  144. delete a;
  145.  
  146.  
  147. a = new CDatabase;
  148. st = a -> Add ( "2012-03-01", "John", "Nowak", "ABC-12-34" ); // st = true
  149. st = a -> Add ( "2012-03-02", "George", "Smith", "DEF-56-67" ); // st = true
  150. cout << *a;
  151. /*
  152. Drivers:
  153.    John Nowak
  154.       2012-03-01: ABC-12-34
  155.    George Smith
  156.       2012-03-02: DEF-56-67
  157. Cars:
  158.    ABC-12-34
  159.       2012-03-01: John Nowak
  160.    DEF-56-67
  161.       2012-03-02: George Smith
  162. */
  163. st = a -> Add ( "2012-03-01", "John", "Nowak", "XYZ-99-99" ); // st = false
  164. st = a -> Add ( "2012-03-02", "Peter", "McDonald", "DEF-56-67" ); // st = false
  165. cout << *a;
  166. /*
  167. Drivers:
  168.    John Nowak
  169.       2012-03-01: ABC-12-34
  170.    George Smith
  171.       2012-03-02: DEF-56-67
  172. Cars:
  173.    ABC-12-34
  174.       2012-03-01: John Nowak
  175.    DEF-56-67
  176.       2012-03-02: George Smith
  177. */
  178. delete a;
  179.  
  180.  
  181. a = new CDatabase;
  182. b = new CDatabase;
  183. st = a -> Add ( "2012-03-01", "John", "Nowak", "ABC-12-34" ); // st = true
  184. st = a -> Add ( "2012-03-02", "John", "Nowak", "DEF-56-67" ); // st = true
  185. st = a -> Add ( "2012-03-01", "George", "Smith", "DEF-56-67" ); // st = true
  186. st = a -> Add ( "2012-03-02", "George", "Smith", "ABC-12-34" ); // st = true
  187. cout << *a;
  188. /*
  189. Drivers:
  190.    John Nowak
  191.       2012-03-01: ABC-12-34
  192.       2012-03-02: DEF-56-67
  193.    George Smith
  194.       2012-03-01: DEF-56-67
  195.       2012-03-02: ABC-12-34
  196. Cars:
  197.    ABC-12-34
  198.       2012-03-01: John Nowak
  199.       2012-03-02: George Smith
  200.    DEF-56-67
  201.       2012-03-01: George Smith
  202.       2012-03-02: John Nowak
  203. */
  204. *b = *a;
  205. c = new CDatabase ( *a );
  206. st = b -> Add ( "2012-03-03", "Homer", "Simpson", "ABC-12-34" ); // st = true
  207. st = c -> Add ( "2012-03-03", "Homer", "Simpson", "DEF-56-67" ); // st = true
  208. delete a;
  209. cout << *b;
  210. /*
  211. Drivers:
  212.    John Nowak
  213.       2012-03-01: ABC-12-34
  214.       2012-03-02: DEF-56-67
  215.    Homer Simpson
  216.       2012-03-03: ABC-12-34
  217.    George Smith
  218.       2012-03-01: DEF-56-67
  219.       2012-03-02: ABC-12-34
  220. Cars:
  221.    ABC-12-34
  222.       2012-03-01: John Nowak
  223.       2012-03-02: George Smith
  224.       2012-03-03: Homer Simpson
  225.    DEF-56-67
  226.       2012-03-01: George Smith
  227.       2012-03-02: John Nowak
  228. */
  229. cout << *c;
  230. /*
  231. Drivers:
  232.    John Nowak
  233.       2012-03-01: ABC-12-34
  234.       2012-03-02: DEF-56-67
  235.    Homer Simpson
  236.       2012-03-03: DEF-56-67
  237.    George Smith
  238.       2012-03-01: DEF-56-67
  239.       2012-03-02: ABC-12-34
  240. Cars:
  241.    ABC-12-34
  242.       2012-03-01: John Nowak
  243.       2012-03-02: George Smith
  244.    DEF-56-67
  245.       2012-03-01: George Smith
  246.       2012-03-02: John Nowak
  247.       2012-03-03: Homer Simpson
  248. */
  249. delete b;
  250. delete c;
Add Comment
Please, Sign In to add comment