Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datumsexpansion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.06.2005, 13:52 Uhr
~bunghole
Gast


Hallo miteinander! Ich habe folgendes Problem:
Ich verstehe zwar größtenteils die Sprachelemente von c++, leider fehlt mir die nötige Übung und auch

das gewisse etwas, was einen Programmierer ausmacht.
Nun soll ich ein kleines Programm mit grafischer Oberfläche schreiben, welches folgende Funktionen hat:

Die Datei "In.txt" enthält einen vorgegebenen Text mit mehreren Datumsangaben im Format
dd.mm.yyyy oder d.m.yyyy bzw. dd.m.yyyy, d.mm.yyyy sowie etliche Datumsangaben in
einem anderen, "falschen" Format, oder auch generell unmögliche Datumsangaben wie
37.12.2001. Die Datei soll gelesen werden und nach entsprechenden gültigen Datumsangaben
durchsucht werden. Wird ein gültiges Datum gefunden, so ist es zu expandieren in der Form:
Wochentag, dd. Monat yyyy.
Als Ausgabe soll dann die Datei "Out.txt" den gleichen Inhalt wie "In.txt", nur eben mit dem

einheitlichen Datumsformat erstellt werden.

Auf gut Deutsch:
Vorgabedatum: 07.05.2005 oder 7.5.2005 oder 07.5.2005 oder 7.05.2005
Ausgabedatum: Samstag, 07. Mai 2005

Dazu verwenden kann ich folgende Dateien, die aus einem ähnlichen Programm stammen, welches jedoch als

Datumsangabe nur das Format dd mm yyyy berücksichtigte.

meindate.cpp


C++:

// ---------------------------- meindate3.cpp -------------------------------
//

#pragma hdrstop
#include <condefs.h>
#include <conio.h>
#include <iostream.h>
#include "mylib.h"

//---------------------------------------------------------------------------
USEUNIT("mylib.cpp");
//---------------------------------------------------------------------------
#pragma argsused

int main(int argc, char* argv[])
{
//mydate *datum = new mydate;
f_date *datum = new f_date;

while (1)
{
while (!datum->get());

datum->print2();
cout<<"\nAktuelles Datum: ";
datum->today();
datum->print2();
getchar();

}
}




mylib.cpp

C++:
//-------------------------------- mylib.cpp --------------------------------
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include "mylib.h"
#include <dos.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
mydate::mydate(void):tag(1),monat(1),jahr(2000)
{}

void mydate::print(void)
{
umwandeln();
cout<<tag<<"."<<monat<<"."<<jahr<<endl;
}

int mydate::get(void)
{
int check;

cout<<"Datum eingeben (dd mm yyyy): ";
cin>>ws;
cin>>tag>>monat>>jahr;

if (0 <= tag && tag <= 31)
     {}
else {
     cout<<"Der eingegebene Tag ist falsch.\n";
     check = 1;
     }

if ((tag > 28) && (monat == 2 ) && ((jahr%4 !=0 ) || (jahr%100 == 0) && (jahr%400 !=0)) )
     {
     cout<< "Jahr ist kein Schaltjahr! "<< endl;
     check = 1;
     }

if ((tag == 0) && (monat == 0) && (jahr == 0))
     {
     check = 1;
     }

if ((tag > 31) || (tag <= 0) || (tag >29) && (monat == 2))
     {
     cout<< "Falsches Tagesformat ! "<< endl;
     check = 1;
     }

if (1 <= monat && monat <= 12)
     {}
else {
     cout<<"Der eingegebene Monat ist falsch.\n";
     check = 1;
     }

if (jahr >= 1900)
     {}
else {
     cout<<"Das eingegebene Jahr ist falsch.\n";
     check = 1;
     }

if (tag == 0 && monat == 0 && jahr == 0)
    exit(1);

if (check == 1)
     return 0;
else return 1;

}

void mydate::today(void)
{
struct date d;

   getdate(&d);
   tag = d.da_day;
   monat = d.da_mon;
   jahr = d.da_year;
}

void mydate::umwandeln(void)
{
  unsigned int ntage;
  int nzykl;
  int njahre;
  int wtag;
  int yy;


  yy= jahr-1900;

  ntage=(unsigned)(30.41666666*(monat-1))+tag;

  if(monat==2)
  ++ntage;

  if((monat>2)&&(monat<8))
  --ntage;

  if((yy%4==0)&&(monat>2))
  ++ntage;
  nzykl=yy/4;
  ntage+=1461*nzykl;
  njahre=yy%4;
  if(njahre>0)
  ntage+=365*njahre+1;
  if(ntage>59)
  --ntage;
  wtag=ntage%7;
  if (wtag == 1)
      cout<<"Montag, der ";
  if (wtag == 2)
      cout<<"Dienstag, der ";
  if (wtag == 3)
      cout<<"Mittwoch, der ";
  if (wtag == 4)
      cout<<"Donnerstag, der ";
  if (wtag == 5)
      cout<<"Freitag, der ";
  if (wtag == 6)
      cout<<"Samstag, der ";
  if (wtag == 0)
      cout<<"Sonntag, der ";
//  return(wtag);
}


void f_date::month(void)
{
  switch (monat)
  {
        case 1:
                cout<< " Januar ";
                break;
        case 2:
                cout<< " Februar ";
                break;
        case 3:
                cout<< " Maerz ";
                break;
        case 4:
                cout<< " April ";
                break;
        case 5:
                cout<< " Mai ";
                break;
        case 6:
                cout<< " Juni ";
                break;
        case 7:
                cout<< " Juli ";
                break;
        case 8:
                cout<< " August ";
                break;
        case 9:
                cout<< " September ";
                break;
        case 10:
                cout<< " Oktober ";
                break;
        case 11:
                cout<< " November ";
                break;
        case 12:
                cout<< " Dezember ";
                break;
  };
}

void f_date::print2(void)
{
umwandeln();
cout<<tag<<".";
month();
cout<<jahr<<endl;
}





mylib.h:

C++:
//--------------------------------- mylib.h ---------------------------------
#ifndef mylibH
#define mylibH
//---------------------------------------------------------------------------

class mydate
{
  public:
        int tag;
        int monat;
        int jahr;
        mydate(void);
        mydate(int,int,int);
        ~mydate(void)
        {
        }
        void print(void);
        void today(void);
        int get(void);
        void umwandeln(void);
        int returnmonth(void);
};

class f_date:public mydate
{
  public:
        void month(void);
        void print2(void);
};
#endif





Ich dachte an eine Verwendung der Funktionen isdigit und ispunct aus der Bibliothek ctype.h

Ich hoffe, ihr könnt mir helfen, da ich alleine mit Büchern, www und meinem vorhandenem Wissen nicht in

der Lage bin dieses zu realisieren.

Viele Grüße und besten Dank im Voraus!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: