/***************************************************************************
                          menge.h  -  Interface Klasse CDokumentenmenge
                             -------------------                                         
    begin                : Wed Aug 4 1999                                           
    copyright            : (C) 1999 by Stephan Uhlmann                         
    email                : suhlmann@gmx.de                                     
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   * 
 *                                                                         *
 ***************************************************************************/


#ifndef __MENGE_H__
#define __MENGE_H__

#include <qdatastream.h>

#include "dokument.h"  /* Import Klasse CDokument */
#include "formular.h"  /* Import Klasse CFormular */
#include "vertrag.h"   /* Import Klasse CVertrag */
#include "dauerauf.h"  /* Import Klasse CDauerauftrag */


/**
 * Die Klasse CDokumentenmenge stellt die Daten und Methoden
 * zur Verfuegung um eine Dokumentenmenge verwalten.
 * Hier werden in einer polymorphen Liste alle Dokumenttypen
 * verwaltet.
 */


class CDokumentenmenge
{
 private:
  /** einfach verkettete Liste */
  typedef struct TElement
   { CDokument* Objekt; /* Inhalt des Listenelementes */
      struct TElement* next;  /* naechstes Listenelement */
   } TElement;
  /** Anzahl der Dokumente in der Dokumentenmenge */
  unsigned int Anzahl;
  /** erstes Element in der Dokumentenmenge */
  TElement* first;

 public:

  /** Konstruktor */
  /* pre: this existiert nicht */
  /* post: this existiert und ist gueltig */
  CDokumentenmenge();
  
  /** Destruktor */
  /* pre: this existiert */
  /* post: this existiert nicht */
  ~CDokumentenmenge(); /* Destruktor */

  /** generiert eine neue Dokumentenmenge und gibt einen Zeiger darauf zurueck */
  /* pre: CDokumentenmenge existiert nicht */
  /* post: CDokumentenmenge existiert und ist gueltig */
  CDokumentenmenge* Generate();
  
  /** gibt eine Dokumentenmenge frei */
  /* pre: this existiert */
  /* post: this ist ungueltig */
  void Free();
  
  /** ueberprueft die Klasseninvarianz des Objekts */
  /* pre: this existiert */
  /* post: TRUE wenn this gueltig, sonst FALSE */
  bool ClassInvariant() const;

  /** kopiert in die aktuelle Dokumentenmenge die Dokumentenmenge src */
  /* pre: this existiert; src ist gueltig */
  /* post: this ist gueltig; this ist gleich src */
  bool Copy(CDokumentenmenge* src);

  /** vergleicht zwei Dokumentenmengen miteinander */
  /* pre: this und src existieren und sind gueltig */
  /* post: TRUE wenn Inhalt von this gleich Inhalt von src, sonst FALSE */
  bool EqualValue(CDokumentenmenge* src) const;

  /** gibt die Anzahl der Dokumente in der Dokumentenmenge zurueck */
  /* pre: this existiert und ist gueltig */
  /* post:  */
  unsigned int LiefereAnzahl() const;

  /** fuegt ein Dokument in die Dokumentenmenge ein */
  /* pre: this existiert und ist gueltig */
  /* post: TRUE wenn das Dokument eingefuegt werden konnst, sonst FALSE */
  bool EinfuegeDokument(CDokument* src);

  /** loescht ein Dokument aus der Dokumentenmenge */
  /* pre: this existiert und ist gueltig */
  /* post: TRUE wenn das Dokument geloescht werden konnst, sonst FALSE */
  bool LoescheDokument(QString Schluessel);

  /** Sucht ein Dokument in der Dokumentenmenge und gibt das entsprechende Element zurueck */
  /* pre: this existiert und ist gueltig */
  /* post: NULL wenn Dokument nicht enthalten, sonst Zeiger auf das Element in der Liste */
  CDokumentenmenge::TElement* SucheDokument(QString Schluessel) const;

  /** prueft ob das Dokument in der Dokumentenmenge enthalten ist */
  /* pre: this existiert und ist gueltig */
  /* post: TRUE wenn das Dokument enthalten ist, sonst FALSE */
  bool DokumentInMenge(QString Schluessel) const;

  /** gibt das erste Element der Dokumentenmenge zurueck */
  /* pre: this existiert */
  /* post: NULL wenn keine Elemente enthalten, sonst Zeiger auf erstes Element */
  CDokumentenmenge::TElement* LiefereErstes();


  /** schreibt den Inhalt der Dokumentenmmenge in den angegebenen stream */
  /* pre: this existiert und ist gueltig */
  /* post: TRUE wenn die CDokumentenmenge geschrieben werden konnte, sonst FALSE */
  bool readData(QDataStream* stream);

  /** laedt den Inhalt der Dokumentenmenge aus dem angegebenen stream */
  /* pre: this existiert und ist gueltig */
  /* post: TRUE wenn die CDokumentenmenge geladen werden konnte, sonst FALSE */
  bool writeData(QDataStream* stream) const;


};

#endif /* __MENGE_H__ */






























Documentation generated by uhlmann@fara2 on Mon Aug 30 20:37:52 MEST 1999