萌新二号
2021-03-26 20:34
采纳率: 50%
浏览 27

C++代码问题(Visual Studio 2010)

偶然看到一个C++万年历代码,拷下来放到本地测试了一下,但是出现了错误,代码段如下:(本人使用的是Visual Studio 2010),碰到的问题是这段判断输入日期是否合法的函数没有执行,该把它放到主函数的哪个地方才能正确执行?

//判断输入的日期是否合法
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 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;
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 对象被抛出 2021-03-26 20:40
    已采纳

    输入的合法性检测建议放在构造函数里面

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 对象被抛出 2021-03-26 20:40

    ....你没调用这个成员函数当然不会执行....

    评论
    解决 无用
    打赏 举报
  • 萌新二号 2021-03-26 20:49
    #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;
    }
    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-03-27 16:14

    您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题