1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. #include 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. }