一个C++万年历代码,出现了错误,代码段如下:(本人使用的是Visual Studio 2010),碰到的问题是判断输入日期是否合法的函数(InputDayIsTrue)没有执行,该把它放到哪里?
#include "Date.h"
#include <iostream>
using namespace std;
int DateUtil :: NowToDay(int year,int month ,int day){
int DiDay , i ;
for( i = 1800 , DiDay = 0 ; i < year ; i++) // 闰年 单独+ 366 天
if( IsLeapYear( i ) )
DiDay += 366 ;
else
DiDay += 365 ;
for( i = 1 ; i < month ; i++ )
DiDay += GetMonthDayNumber( year , i );
DiDay += day - 1 ;
return DiDay;
}
bool DateUtil ::InputDayIsTrue( int year , int month , int day ){
int daynumber ;
if( month > 13 || day > 31 ){ // 如果输入的日期大于13月或大于31 天则返回错误
cout<<"输入有误!";
return false;
}else{
daynumber = GetMonthDayNumber( year, month ); // 如果输入的天数比该月的实际天数大则返回错误
if( day > daynumber )
cout<<"输入有误!";
return false ;
}
return true;
}
int DateUtil ::DisplayMonth(int year,int month ){
int Excur , i , TotalDay ;
SpaceSize = 4 ;
Excur = ( NowToDay(year,month,1 ) + 3 ) % 7 ; // 首先计算 这个月的 1 日 是星期几 然后在这个基础上自加天数
cout << year << "年 " << month << "月" << endl;
cout << setw( SpaceSize ) <<"日" << setw( SpaceSize ) <<"一" << setw( SpaceSize ) <<"二" ;
cout << setw( SpaceSize ) <<"三" << setw( SpaceSize ) <<"四" << setw( SpaceSize ) <<"五" ;
cout << setw( SpaceSize ) <<"六" << endl; //设置日期的显示格式
for( i = 1 ; i <= Excur ; i++)
cout<< setw( SpaceSize ) << " " ; //首先输出 多余的空格
TotalDay = GetMonthDayNumber( year , month );
for( i = 1 ; i <= TotalDay ; i++){ // 然后自加,当然长度大于七的时候换行
cout << setw( SpaceSize ) << i ;
if( 0 == ( i + Excur ) % 7 ) //换行条件
cout<< endl;
}
cout << endl ;
return 0;
}
int DateUtil::FindDayWeekend(int year , int month ,int day ){ //查找某一天 是星期几
int TotalDay ;
char Weekend[ 7 ][ 4 ]={{"日"},{"一"},{"二"},{"三"},{"四"},{"五"},{"六"} } ;
TotalDay = NowToDay(year,month,day) ;
cout << year <<"年 "<<month<<"月 "<<day<<"日 是星期" << Weekend[( TotalDay + 3 ) % 7 ]<<endl;
return 0;
}
int DateUtil::DisplayYear ( int year ){
int i , j, k , n , month1 ,month2 ,month3 ; // 按照 一个季度输出 日历 month1 month2 month3 是 该月应该有天数
int Excur1 , Excur2 , Excur3 ;// i , j , k 分别表示 三个月的 天数值 Excur1,Excur2,Excur3 表示偏移量
int sea;
char Months[12][10]={{"一月"},{"二月"},{"三月"},{"四月"},{"五月"},{"六月"},{"七月"},{"八月"},{"九月"},{"十月"},{"十一月"},{"十二月"}};
SpaceSize = 3 ;
cout<< year << " 年 " << endl;
for( sea = 1 ; sea <= 12 ; sea += 3 ){ // 分四个季度显示
Excur1 = ( NowToDay(year,sea , 1 ) + 3 ) % 7 ; // 分别计算 3 个月的偏移量
Excur2 = ( NowToDay(year,sea+1 , 1 ) + 3 ) % 7 ;
Excur3 = ( NowToDay(year,sea+2 , 1 ) + 3 ) % 7 ;
month1 = GetMonthDayNumber( year ,sea ); // 分别计算 3个月的 天数
month2 = GetMonthDayNumber( year ,sea + 1 );
month3 = GetMonthDayNumber( year ,sea + 2 ); //显示三个月的 星期
cout << Months[ sea - 1 ] << setw( 21 ) <<" " <<Months[ sea ] << setw( 20 ) <<" " <<Months[ sea + 1 ] << endl;
cout << setw( SpaceSize ) <<"日" << setw( SpaceSize ) <<"一" << setw( SpaceSize ) <<"二" ;
cout << setw( SpaceSize ) <<"三" << setw( SpaceSize ) <<"四" << setw( SpaceSize ) <<"五" ;
cout << setw( SpaceSize ) <<"六" << setw( SpaceSize ) <<" ";
cout << setw( SpaceSize ) <<"日" << setw( SpaceSize ) <<"一" << setw( SpaceSize ) <<"二" ;
cout << setw( SpaceSize ) <<"三" << setw( SpaceSize ) <<"四" << setw( SpaceSize ) <<"五" ;
cout << setw( SpaceSize ) <<"六" << setw( SpaceSize ) <<" ";
cout << setw( SpaceSize ) <<"日" << setw( SpaceSize ) <<"一" << setw( SpaceSize ) <<"二" ;
cout << setw( SpaceSize ) <<"三" << setw( SpaceSize ) <<"四" << setw( SpaceSize ) <<"五" ;
cout << setw( SpaceSize ) <<"六" << endl;
for( n = 1 ; n <= Excur1 ; n++) // 第一行 单独处理 首先输出 多余的空格 然后在输出天数
cout<< setw( SpaceSize ) << " " ; // i ,j , k 单独保存当前的日期
for( n ; n <= 7 ; n++)
cout<< setw( SpaceSize ) << n - Excur1 ;
cout<< setw( SpaceSize ) << " " ;
i = n - Excur1 ;
for( n = 1 ; n <= Excur2 ; n++)
cout<< setw( SpaceSize ) << " " ;
for( n ; n <= 7 ; n++)
cout<< setw( SpaceSize ) << n - Excur2 ;
cout<< setw( SpaceSize ) << " " ;
j = n - Excur2 ;
for( n = 1 ; n <= Excur3 ; n++)
cout<< setw( SpaceSize ) << " " ;
for( n ; n <= 7 ; n++)
cout<< setw( SpaceSize ) << n - Excur3 ;
cout<< endl ;
k = n - Excur3 ;
while ( i <= month1 || j <= month2 || k <= month3){ // 当三个月的日期都大于 应有的天数后 循环结束
for( n = i ; i < n + 7; i++) // 接下来的 7 天输出一次。但是 大于天数的部分输出空格
if( i <= month1 )
cout<< setw( SpaceSize )<< i ;
else
cout<< setw( SpaceSize )<<" " ;
cout<< setw( SpaceSize )<<" " ;
for( n = j ; j < n + 7; j++)
if( j <= month2 )
cout<< setw( SpaceSize )<< j ;
else
cout<< setw( SpaceSize )<<" " ;
cout<< setw( SpaceSize )<<" " ;
for( n = k ; k < n + 7; k++)
if( k <= month3 )
cout<< setw( SpaceSize )<< k ;
else
cout<< setw( SpaceSize )<<" " ;
cout<< endl;
}
cout<< endl;
}
cout << endl;
return 0;
}
int main()
{
DateUtil date;
int year,month,day;
cout<<"请输入要查询的年:"<<endl;
cin >> year;
date.DisplayYear(year);
cout<<"------------------------"<<endl;
cout<<"请输入要查询的年 月,以空格分割:"<<endl;
cin >> year >> month;
date.DisplayMonth(year, month);
cout<<"------------------------"<<endl;
cout<<"请输入要查询的年 月 日,以空格分割:"<<endl;
cin >> year >> month >> day;
date.FindDayWeekend(year, month, day);
return 0;
}
DateUtil 是一个类,你的代码不全,只有类方法实现部分