注意:此日曆只能用於計算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 但此時如果沒有給函式型別加引用,就是傳值返回,不會直接返回,會建立乙個臨時物件。會多一...