Advertisement
Guest User

Untitled

a guest
Jan 26th, 2012
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.05 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. #include <string>
  5. #include <cstddef>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. //Globale Funktionen wie diese hier müssen ganz oben (vor allen anderen klassen und funktionen deklariert werden, damit
  11. //sie verwendet werden können (dem compiler bakannt sein)
  12. void error(string msg)
  13. {
  14.   cerr << msg << endl;
  15.   exit(-1);
  16. }
  17.  
  18. class Time
  19. {  
  20.  
  21.     int hour,          // 0 .. 23
  22.         day,           // 1 .. 31
  23.         month;         // 1 .. 12
  24.  
  25.   public:
  26.     // allgemeiner Konstruktor und Standardkonstruktor
  27.     // Falls die Wertebereiche für die Attribute nicht eingehalten werden,
  28.     // wird das Programm mit einer Fehlermeldung abgebrochen.
  29.     Time(int h = 0, int d = 1, int m = 1);
  30.  
  31.    /*  Kopierkonstruktor und überladene Wertzuweisung
  32.      werden vom Compiler automatisch erzeugt */
  33.  
  34.     virtual ~Time();
  35.  
  36.     // die Zeit einstellen
  37.     // Falls die Wertebereiche für die Attribute nicht eingehalten werden,
  38.     // wird das Programm mit einer Fehlermeldung abgebrochen.
  39.     void set(int h, int d, int m);
  40.  
  41.     // die Zeit auf den Bildschirm ausgeben
  42.     virtual void display() const; // MUSS DEFINIERT WERDEN...ausschließlich '= 0' ...also rein virtuelle Methoden werden nicht definiert
  43.  
  44.   /* vergleicht das aktuelle Objekt mit dem übergebenen Objekt t
  45.      liefert einen Wert < 0, wenn das aktuelle Objekt kleiner als t ist
  46.                         > 0, wenn das aktuelle Objekt größer als t ist
  47.                           0, wenn das aktuelle Objekt gleich t ist */
  48.     /*int compareTo(const Time& t) const; */
  49.  
  50.     bool operator<(const Time& t) const;
  51.     bool operator==(const Time& t) const;
  52. };
  53.  
  54. Time::Time(int h, int d, int m)
  55. {
  56.     hour = h;
  57.     day = d;
  58.     month = m;
  59. }
  60.  
  61. Time::~Time()
  62. {
  63.  
  64. }
  65.  
  66. void Time::set(int h, int d, int m)
  67. {
  68.     month = m;
  69.     hour = h;
  70.     day = d;
  71. }
  72.  
  73. void Time::display() const
  74. {
  75.     cout << hour  << endl
  76.          << day   << endl
  77.          << month << endl;       
  78. }
  79.  
  80. bool Time::operator==(const Time& t) const
  81. {
  82.     if (&t == NULL)
  83.         error("Übergebene Referenz ist leer !");
  84.  
  85.     if (this == &t)
  86.         return true;
  87.     else
  88.         return false;
  89.  
  90. }
  91.  
  92. bool Time::operator<(const Time& t) const
  93. {
  94.     if (&t == NULL)
  95.         error("Übergebene Referenz ist leer !");
  96.  
  97.     if (this < &t)
  98.         return true;
  99.     else
  100.         return false;
  101. }
  102.  
  103.  
  104.  
  105.  
  106. //a
  107. //Implementieren  Sie  die  folgende  Klasse  Event  (zu  deutsch  Ereignis  oder  Termin),  die  von  der
  108. //Klasse  Time  erbt.  Ein  Objekt  vom  Typ  Event  ist  also  durch  eine  Zeit  (Time)  und  einen  Text
  109. //definiert, z.B. hour == 13,  day == 4,  month == 2,  text == "Klausur C++".
  110.  
  111. class Event : public Time
  112. {
  113.     // ein Zeichenketten-Objekt vom C++-Standard-Typ string
  114.     string text;
  115.  
  116.   public:
  117.     // allgemeiner Konstruktor, der auch als Standardkonstruktor dient
  118.     Event(int h = 0, int d = 1, int m = 1, string s = "weiss nicht");
  119.      
  120.     // Kopierkonstruktor und überladene Wertzuweisung
  121.     // werden vom C++-Compiler automatisch generiert
  122.  
  123.     virtual ~Event();
  124.  
  125.     // einen Termin festlegen
  126.     void set(int h, int d, int m, string s);
  127.  
  128.     // einen Termin auf den Bildschirm ausgeben
  129.     void display() const;
  130.  
  131.     // zwei Termine sind gleich, wenn sowohl die Zeit  
  132.     // als auch der Text übereinstimmen
  133.     bool operator==(const Event& e) const;
  134. };
  135.  
  136. Event::Event(int h, int d, int m, string s) : Time(h, d, m)
  137. {
  138.     this->text = s;
  139. }
  140.  
  141. Event::~Event()
  142. {
  143. }
  144.  
  145. void Event::set(int h, int d, int m, string s)
  146. {
  147.     Time::set(h, d, m);
  148.     text = s;
  149. }
  150.  
  151. bool Event::operator==(const Event& e) const
  152. {
  153.     if (&e == NULL)
  154.         error("Übergebene Referenz ist leer !");
  155.  
  156.     if (this == &e)
  157.         return true;
  158.     else
  159.         return false;
  160. }
  161.  
  162. void Event::display() const
  163. {
  164.     Time::display();
  165.     cout << text  << endl
  166.          << "---------------" << endl;
  167. }
  168.  
  169. //b)   Implementieren  Sie  die  folgende  Klasse  Calendar,  die  einen  Terminkalender  beschreibt,  der
  170. //Termine  vom  Typ  Event  verwaltet.  Die  Termine  stehen  nicht  chronologisch  geordnet,  sondern
  171. //entsprechend der Reihenfolge ihrer Eingabe im Puffer buf.  
  172. //
  173.  
  174. class Calendar
  175. {
  176.     Event *buf;        // Zeiger auf Array mit Termineinträgen (Auch als dynamisches Element bekannt)
  177.     int maxSize;       // Anzahl der maximal möglichen Einträge
  178.     int count;         // aktuelle Anzahl der Einträge
  179.  
  180.     // falls ein Termin mit der Zeit des Termins e vorhanden ist,
  181.     // wird der entsprechende Index geliefert, ansonsten -1
  182.     int findTime(const Event& e) const;
  183.  
  184.     // falls ein Termin mit der Zeit und dem Text des Termins e
  185.     // vorhanden ist, wird der entsprechende Index geliefert, ansonsten -1
  186.     int findEvent(const Event& e) const;
  187.  
  188.     // gibt den Index des nächsten Termins zurück;
  189.     // der nächste Termin ist derjenige mit der kleinsten Zeit;
  190.     // falls das Array buf leer ist, wird -1 zurückgegeben
  191.     int findNext() const;
  192.  
  193.   public:
  194.     Calendar(int size = 100);
  195.     Calendar(const Calendar& c);
  196.     ~Calendar();
  197.     Calendar& operator=(const Calendar& c);
  198.  
  199.     // Termin e eintragen;
  200.     // falls die entsprechende Zeit schon belegt ist, dann keine Aktion
  201.     void enter(const Event& e);
  202.  
  203.     // alle eingetragenen Termine auf den Bildschirm ausgeben
  204.     // und zwar in der Reihenfolge, in der sie im Array buf stehen
  205.     void display() const;
  206.  
  207.     // Termin e löschen;
  208.     // beim Vergleich sollen sowohl Zeit als auch Text übereinstimmen;
  209.     // falls der Termin nicht vorhanden ist, dann keine Aktion;
  210.     // die eventuell entstehende Lücke im Feld buf wird durch den letzten  
  211.     // Eintrag im Feld ersetzt, falls es mindestens einen weiteren Eintrag gibt
  212.     void cancel(const Event& e);
  213.  
  214.     // eine Kopie des nächsten Termins liefern;
  215.     // der nächste Termin ist derjenige mit der kleinsten Zeit
  216.     Event readNext() const;
  217. };
  218.  
  219. int Calendar::findTime(const Event& e) const
  220. {
  221.     for (int i = 0; i < maxSize; i++)
  222.     {
  223.         if ((Time)buf[i] == (Time)e)
  224.             return i;
  225.     }
  226.  
  227.     return -1;
  228. }
  229.  
  230. int Calendar::findEvent(const Event& e) const
  231. {
  232.     for (int i = 0; i < maxSize; i++)
  233.     {
  234.         if (buf[i] == e)
  235.             return i;
  236.     }
  237.  
  238.     return -1;
  239. }
  240.  
  241. int Calendar::findNext() const
  242. {
  243.     if (buf == NULL)
  244.         return -1;
  245.  
  246.     int i = 0;
  247.    
  248.     Time* temp = &buf[i];
  249.  
  250.     while (i < maxSize)
  251.     {
  252.         if (temp[i] < temp[i+1])
  253.             temp = &(Time)buf[i];
  254.  
  255.         i++;
  256.     }
  257.  
  258.     return i;
  259. }
  260.  
  261. //Konstruktor
  262. Calendar::Calendar(int size)
  263. {
  264.     maxSize = size;
  265.     count = 0;
  266.     buf = new Event[maxSize]; //Speicherplatz für n vektorelemente reservieren
  267.  
  268. }
  269.  
  270. //Kopierkonstruktor
  271. Calendar::Calendar(const Calendar& c)
  272. {
  273.     if (&c == NULL)
  274.         error("Zugewiesener Calender ist NULL !");
  275.    
  276.     buf = new Event[maxSize];
  277.  
  278.     for (int i = 0; i < maxSize; i++)
  279.         buf[i] = c.buf[i];
  280.  
  281.     this->maxSize = c.maxSize;
  282.     this->count = c.count;
  283. }
  284.  
  285. //Destruktor
  286. Calendar::~Calendar()
  287. {
  288.     delete [] buf;
  289. }
  290.  
  291. Calendar& Calendar::operator=(const Calendar& c)
  292. {
  293.     if (this != &c)
  294.     {
  295.         delete [] buf;
  296.  
  297.         buf = new Event[c.maxSize];
  298.         for (int i = 0; i < maxSize; i++)
  299.             buf[i] = c.buf[i];
  300.  
  301.         maxSize = c.maxSize;
  302.         count = c.count;
  303.     }
  304.  
  305.     return *this;
  306. }
  307.  
  308. void Calendar::enter(const Event& e)
  309. {  
  310.     if (findEvent(e) == -1)
  311.         return;
  312.     else
  313.     {          
  314.         if (count < maxSize)
  315.         {          
  316.             buf[count++] = e;   //i increase the counter by one        
  317.         }      
  318.     }
  319. }
  320.  
  321. void Calendar::display() const
  322. {  
  323.     if (buf== NULL)
  324.         return;
  325.        
  326.     for (int i = 0; i < count; i++) //maxSize
  327.     {          
  328.         buf[i].display();
  329.     }
  330.     cout << count; //TEEEEST...Why do i get 0 ??
  331. }
  332.  
  333. void Calendar::cancel(const Event& e)
  334. {
  335.     for (int i = 0; i < count; i++)
  336.     {
  337.         if (buf[i] == e)
  338.         {
  339.             if (count > 1)
  340.                 buf[i] = buf[count];
  341.             else
  342.                 buf[i] = NULL;
  343.         }
  344.  
  345.         count--;
  346.     }
  347. }
  348.  
  349. Event Calendar::readNext() const
  350. {
  351.     return findNext();
  352. }
  353.  
  354.  
  355. int _tmain(int argc, _TCHAR* argv[])
  356. {
  357.     Calendar c = Calendar(5);
  358.     Event e = Event(13, 10, 2, "C++ Klausur");
  359.  
  360.     c.enter(e); //add one element (add the counter by one)
  361.     c.display(); //doesn't display anything...says counter is still zero
  362.  
  363.     char f;
  364.     cin >> f;
  365.     return 0;
  366. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement