All pastes #564998 Raw Edit

tulzscha

public cpp v1 · immutable
·published 2007-06-13 20:29 UTC
rendered paste body
   1.      #include <iostream>   2.      #include <stdio.h>   3.      #include <time.h>   4.      #include <math.h>   5.      #include <stdlib.h>   6.      #include <sys/types.h>   7.      #include <sys/stat.h>   8.      #include <fcntl.h>   9.      using namespace std;  10.         11.      main() {  12.        struct tm startday; //Structure des Startdatums  13.        struct tm finalday; //Structure des Enddatums  14.        int freeSundays=0; //Anzahl der freien sonntage  15.        int freeSaturdays=0; //Anzahl der freien Samstage  16.        int arbeitstage=0; //Anzahl der Arbeitstage  17.        double dts=0; //Zeitunterschied in Sekunden  18.        int dtt=0; //Zeitunterschied in Tagen  19.        int startmonat=0;  //Startmonat  20.        int starttag=0;  //Starttag  21.        int finalmonat=0;  //Endmonat  22.        int finaltag=0;  //Endtag  23.        /*Hier dann über CIN >> die startmonat,starttag,finalmonat,finaltag einfüllen*/  24.         25.        //Jetzt Structure erzeugen  26.        startday.tm_year = 2008-1990; //weil Jahr 2008  27.        finalday.tm_year = startday.tm_year;  28.        startday.tm_mon = (startmonat-1); //Jänner=0  29.        finalday.tm_mon = (finalmonat-1); //s.o.  30.        startday.tm_mday = starttag;  31.        finalday.tm_mday = finaltag;  32.        startday.tm_hour = 0;  33.        finalday.tm_hour = 0;  34.        startday.tm_min = 0;  35.        finalday.tm_min = 0;  36.        startday.tm_sec = 1;  37.        finalday.tm_sec = 1;  38.        startday.tm_isdst = -1;  39.        finalday.tm_isdst = -1;  40.        //So das datum ist jetzt in die structure übertragen  41.        dts = difftime(mktime(&finalday),mktime(&startday)); //Damit wird gleichzeitig der Zeitunterschied in Sekunden ausgerechnet, als auch die fehlenden Felder von finalday und startday vervollständigt  42.        dts = dts+(60*60*24); //Ich rechne einen ganzen Tag dazu, weil ich inklusive Start und Endtag rechne  43.        dtt = (int)((double)dts/(double)(60*60*24)); //Zeitunterschied in Tagen ausrechnen (lieber auf Nr. sicher mit typecast)  44.        if(dts < 0) { //Enddatum befindet sich vor dem Anfangsdatum  45.          return -1;  46.        }  47.        else if(dts == 0){ //Enddatum und Anfangsdatum sind gleich (oder nie eingegeben worden)  48.          return 0;  49.        }  50.        else { //Datum soweit korrekt: Freie Samstage und Sonntage zählen  51.          if(startday.tm_wday == 0) {  52.            freeSundays++; //Schon ein freier Sonntag  53.          }  54.          if(dtt < (6-startday.tm_wday)+1) { //Weniger Zeit als bis zum nächsten Samstag  55.            arbeitstage = dtt-freeSundays;  56.          }  57.          else {  58.            dtt= dtt-(6-startday.tm_wday)-1; //Zeit bis Samstagwird abgezogen  59.            arbeitstage = (6-startday.tm_wday)+1; //Und als arbeitstage gewertet  60.            freeSaturdays++; //Weil wir den ersten freien Samstag erreicht haben.  61.            freitemp = (int)(floor(dtt/7)); //Weil alle 7 Tage kommt ein Sa dazu  62.            freeSaturdays = freeSaturdays+freitemp; //So viele Samstage sind zusätzlich frei  63.            freeSundays = freeSundays+freitemp; //Weil es werden gleich viele So wie Sa auf jeden Fall erwischt  64.            if(dtt%7!=0) { //Endet nicht genau auf Samstag  65.              freeSundays++; //Ein Sonntag wird mehr erwischt als Samstage  66.            }  67.            arbeitstage = arbeitstage+dtt-freeSundays; //Sonntage werden abgezogen  68.            arbeitstage=arbeitstage-freeSaturdays; //Samstage werden abgezogen  69.            //hier dann die feiertage berechnen lassen//  70.          }  71.        }  72.      }