日期計算器

2021-08-25 19:22:30 字數 4122 閱讀 7125

注意:此日曆只能用於計算2023年10月15日以及以後的日期

1.日期+/-天數=返回日期(處理:1.如果+/-乙個負的天數的情況 2.如果加之後,或減之後的日期非法)

2.兩個日期之間間隔的天數,日期-日期=返回的天數(處理:返回的天數不能為負)

3.列印某年某月本月的日曆(處理:2023年十月份)

功能測試:

(1)對輸入日期合法性的測試--------------------邊界值等價類

1.年份是否合法

2.月份是否合法

3.天數是否合法

4.年份月份天數結合是否合法

(2)對日期+天數=返回日期功能的測試

1.對於普通月份加的測試

2.測試平年/閏年2月份加減的測試

3.對於加乙個負數,是否可以處理

4.如果加上乙個數,日期小於2023年10月15,是否處理

(3)對日期-天數=返回日期功能的測試

1.對於普通月份減的測試

2.測試平年/閏年2月份減的測試

3.對於減乙個負數,是否可以處理

4.如果減上乙個數,日期小於2023年10月15,是否處理

(4)對於日期-日期=日期的功能性測試

1.測試相減之後的日期是否合法

(5)對於輸入日期,列印本月日曆的功能性測試-------邊界值/等價類

1.測試輸入2023年10月的日曆列印

2.測試大於2023年10月的日曆列印

3.測試小於2023年10月即非法日期日曆列印的測試

介面測試:

(1)介面是否美觀,清楚

(2)如果輸入錯誤,錯誤提示字樣是否正常輸出

(3)如果輸入錯誤,是要重新輸入本次,還是要全部重新輸入

class date

void printfmonth()//列印該日期所在月份日曆

else

}//d+10

date operator+(int day)

date operator-(int day)

int operator-(const date& d) //日期-日期=返回天數

bool operator==(const date& d)const //只要實現》 ==其他的都可以全部復用

bool operator >(const date& d)const

else if (_year == d._year)

else if (_month == d._month)

}return false;

} }bool operator

bool operator >=(const date& d)const

bool operator<=(const date& d)const

int judge()

if (_year == 1582)

if (_month == 10 && (_day <15 || _day >= getmonthday(_year, _month)))

}return 0;

}private:

date& operator++()//前置 返回加加之後的值

//d++ d.opeartor++(&d,0)

date operator++(int i)//後製

int daynum(const date& d)

//int day = 0;

//while (*min < *max)//自定義型別前置++好

////return day*flag;//判斷是正數,負數。

date max = *this;

date min = d;

if (*this < d)

int day = 0;

while (min < max)

return day;

} date& operator+=(int day)

_day += day;

while (_day > getmonthday(_year, _month))

}return *this;

} date& operator-=(int day)

_day -= day;

while (_day <= 0)

_day += getmonthday(_year, _month);

}return *this;

} void _printfmonth()//列印某個日期當月日曆

//******************以下**只考慮2023年10月4日之後的月曆列印***************

//蔡勒公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

//w:星期; w對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六

//y:年(年數後兩位數)c:世紀-1(年數前兩位數)d:日

int c = int(year / 100);

int y = year - 100 * c;

//計算當前月份第一天為星期幾,d==1

int w = y + int(y / 4) + int(c / 4) - 2 * c + (26 * (month + 1) / 10) + 1 - 1;//***一定要注意帶方括號取整數的算式,要加上int的強制型別轉換

w = (w % 7 + 7) % 7;//處理負數的情況

for (int i = 0; i= 4)

else

}cout << endl;

int count = 0;

for (int i = 16; i< getmonthday(_year, _month); i++)

}cout << endl;

} int getmonthday(int year, int month)

;//每次來都不動

int day = days[month];

if ((month == 2) && ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))//如果不是二月就不用走後面了

return day;

} private:

int _year;

int _month;

int _day;

};ostream& operator<

istream& operator>>(istream&is, date& d)

void menu()

cout << n << "天以後的日期是:" << (d1 + n) << endl;

cout << "請繼續使用" << endl;

break;

} case 2:

cout << "請輸入天數:";

cin >> n;

ret = (d2- n).judge();//判斷減之後的日期是否合法

if (ret == 1)

cout << n << "天以前的日期是:" << ret << endl;

cout << "請繼續使用" << endl;

break;

} case 3:

end4:

cout << "請輸入終止日期:";

cin >> d4;

ret=d4.judge();

if (ret == 1)

cout << "兩個日期之前相差:" << d4 - d3 << "天" << endl;

cout << "請繼續使用" << endl;

break;

} case 4:

cout << "本月的日曆為:" << endl;

d5.printfmonth();

break;

} case 0:

break;

default:

cout << "輸入錯誤!" << endl;

goto end6;

} }}

int main()//測試用例 +乙個負數

日期計算器

define crt secure no warnings include includeusing namespace std class date bool operator const date d 小於運算子的過載 bool operator const date d 等於運算子的過載 bo...

日期計算器

日期計算器 生活中我們可能要計算一些距某乙個時間還有多少天的時候,但是在日曆裡算起來可能要麻煩一下,在學了c 的類之後可以很好的解決這一類的問題。例如距高考還有多少天 100天之後是幾號等。接下來就用日期類完成這些基本的日期運算功能 1.include 2.using namespace std 3...

日期計算器

class date return this 賦值操作已經完成,為什麼有個返回值?因為賦值運算子的過載支援三個數,i j k k先賦給j後有乙個返回值j,將這個返回值賦給i,返回的是同型別物件,所以型別為date 但此時如果沒有給函式型別加引用,就是傳值返回,不會直接返回,會建立乙個臨時物件。會多一...