TraffSpot.cpp

gehe zur Dokumentation dieser Datei
00001 
00006 #include "TraffSpot.h"
00007 
00014 TraffSpot::TraffSpot(){
00015         fahrzeugliste_ = 0;
00016         generatorliste_ = 0;
00017         kreuzungsliste_ = 0;
00018         spurenliste_ = 0;
00019 }
00020 
00029 void TraffSpot::takt(){
00030         // Im Universium muessen die Beteiligten aggieren
00031         // Dies sind die Generatoren, Kreuzungen (Ampeln) und die Fahrzeuge
00032         vergangeneZeit_ += taktZeit_;
00033         try{
00034                 kreuzungsliste_->takt( taktZeit_ );
00035                 fahrzeugliste_->takt( taktZeit_ );
00036                 generatorliste_->takt( taktZeit_ );
00037         }
00038         catch( Fehler* fehler ){
00039                 throw( fehler );
00040         }
00041 }
00042 
00051 Liste *TraffSpot::gibFahrzeugliste(){
00052         return fahrzeugliste_;
00053 }
00054 
00063 Liste *TraffSpot::gibGeneratorliste(){
00064         return generatorliste_;
00065 }
00066 
00075 Liste *TraffSpot::gibKreuzungsliste(){
00076         return kreuzungsliste_;
00077 }
00078 
00087 Spur **TraffSpot::gibSpurenliste(){
00088         return spurenliste_;
00089 }
00090 
00099 void TraffSpot::setzeTaktzeit( double taktZeit ){
00100         if( taktZeit >= 0.001 && taktZeit <= 0.1 ){
00101                 taktZeit_ = taktZeit;
00102         }
00103         else{
00104                 Fehler *fehler = new Fehler("Parameter ausserhalb zulaessiger Grenzen.\nDie Taktzeit der TraffSpot darf sich nur in den Grenzen zwischen 0.001 und 0.1 s bewegen.");
00105                 throw(fehler);
00106         }
00107 
00108 }
00109 
00119 void TraffSpot::initialisieren( string xmlDatei ){
00120         try{
00121                 clear();
00122                 xmlDatei_ = xmlDatei;
00123                 oeffneXml();
00124         }
00125         catch( Fehler *fehler ){
00126                 throw( fehler );
00127         }
00128 }
00129 
00130 
00139 void TraffSpot::setzeNamen( string traffSpotName ){
00140         traffSpotName_ = traffSpotName;
00141 }
00142 
00153 void TraffSpot::erstelleStatistikUeberschriften( string cvsDateinameFahrzeuge, string cvsDateinameKreuzungen ){
00154         string dateiname = cvsDateinameFahrzeuge;
00155         ofstream cvsDatei;
00156         time_t zeitstempel;
00157         tm *aktuelleZeit;
00158         zeitstempel = time( 0 );
00159         aktuelleZeit = localtime( &zeitstempel );
00160 
00161         // Datei fuer Fahrzeuge oeffnen
00162         cvsDatei.open( dateiname.c_str(), ios::app );
00163         if( !cvsDatei ){
00164                 Fehler *fehler = new Fehler( "Die CVS-Datei fuer Fahrzeuge konnte nicht geoeffnet werden.\n");
00165                 fehler->ergaenzeMeldung( dateiname );
00166                 throw(fehler);
00167                 return;
00168         }
00169 
00170         // Ueberschriften einfuegen
00171         cvsDatei << "\"TraffSpot:\";\"" << traffSpotName_ << "\";\"Dauer:\";\"" << vergangeneZeit_ << "\"" << endl;
00172         cvsDatei << "\"Fahrzeugstatistiken\";\"\";\"\";\"\"" << endl;
00173         cvsDatei << "\"Datum:\";\"" << aktuelleZeit->tm_mday << "." << (aktuelleZeit->tm_mon+1) << "." << aktuelleZeit->tm_year+1900 << "\";\"\";\"\"" << endl;
00174         cvsDatei << "\"Uhrzeit:\";\"" << aktuelleZeit->tm_hour << ":" << aktuelleZeit->tm_min << ":" << aktuelleZeit->tm_sec << "\";\"\";\"\"" << endl;
00175         cvsDatei << "\"Fahrezug-Id\";\"Typ\";\"Alter in s\";\"Kilometerstand in km\"" << endl;
00176 
00177         // Datei schliessen
00178         cvsDatei.close();
00179 
00180         dateiname = cvsDateinameKreuzungen;
00181         // Datei fuer Kreuzungen oeffnen
00182         cvsDatei.open( dateiname.c_str(), ios::app );
00183         if( !cvsDatei ){
00184                 Fehler *fehler = new Fehler( "Die CVS-Datei fuer Kreuzungen konnte nicht geoeffnet werden.\n");
00185                 fehler->ergaenzeMeldung( dateiname );
00186                 throw(fehler);
00187                 return;
00188         }
00189 
00190         // Ueberschriften einfuegen
00191         cvsDatei << "\"TraffSpot:\";\"" << traffSpotName_ << "\";\"Dauer:\";\"" << vergangeneZeit_ << "\";\"\";\"\"" << endl;
00192         cvsDatei << "\"Kreuzungsstatistiken\";\"\";\"\";\"\";\"\";\"\"" << endl;
00193         cvsDatei << "\"Datum:\";\"" << aktuelleZeit->tm_mday << "." << (aktuelleZeit->tm_mon+1) << "." << aktuelleZeit->tm_year+1900 << "\";\"\";\"\";\"\";\"\"" << endl;
00194         cvsDatei << "\"Uhrzeit:\";\"" << aktuelleZeit->tm_hour << ":" << aktuelleZeit->tm_min << ":" << aktuelleZeit->tm_sec << "\";\"\";\"\";\"\";\"\"" << endl;
00195         
00196         // Datei schliessen
00197         cvsDatei.close();
00198 }
00199 
00200 
00211 void TraffSpot::exportieren( string cvsDateinameFahrzeuge, string cvsDateinameKreuzungen ){
00212         try{
00213                 erstelleStatistikUeberschriften( cvsDateinameFahrzeuge, cvsDateinameKreuzungen );
00214                 kreuzungsliste_->exportieren( cvsDateinameKreuzungen );
00215                 fahrzeugliste_->exportieren( cvsDateinameFahrzeuge );
00216         }
00217         catch( Fehler *fehler ){
00218                 throw( fehler );
00219         }
00220 }
00221 
00231 long int TraffSpot::gibAnzahlSpuren( ){
00232         return anzahlSpuren_;
00233 }
00234 
00243 void TraffSpot::oeffneXml( ){
00244         try{
00245                 SzenarioParser *parser = new SzenarioParser( (char *)xmlDatei_.c_str(), &spurenliste_, generatorliste_, kreuzungsliste_, fahrzeugliste_ );
00246                 anzahlSpuren_ = parser->parseXml();
00247                 delete parser;
00248         }
00249         catch( Fehler *fehler ){
00250                 throw( fehler );
00251         }
00252 }
00253 
00260 void TraffSpot::clear(){
00261         // Erstelle die Listen
00262         if( fahrzeugliste_ != 0 ){
00263                 delete fahrzeugliste_;
00264         }
00265         fahrzeugliste_ = new Liste();
00266         
00267         if( generatorliste_ != 0 ){
00268                 delete generatorliste_;
00269         }
00270         generatorliste_ = new Liste();
00271         
00272         if( kreuzungsliste_ != 0 ){
00273                 delete kreuzungsliste_;
00274         }
00275         kreuzungsliste_ = new Liste();
00276 
00277         // Initialisiere Defaultwerte fuer weitere private Attribute
00278         if( spurenliste_ != 0 ){
00279                 delete spurenliste_;
00280         }
00281         spurenliste_ = 0;
00282 
00283         anzahlSpuren_ = 0;
00284         xmlDatei_ = "";
00285         traffSpotName_ = "unbenannt";   
00286         taktZeit_ = 0.1;
00287         vergangeneZeit_ = 0;
00288 }

Erzeugt am Tue Jun 14 18:36:50 2005 für TraffSpot von  doxygen 1.3.9.1