NextDate()函数实现(80行代码)-C/C++超基础

一、问题描述

NextDate (int month, int day, int year)函数规定:输入三个整数:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日,year满足1920≤year≤2050。

二、实现步骤

第一步,写一个判断输入数据是否合规的函数:bool is_YMD(int y,intm,int d);代码如下:

//判断输入数据是否合格
bool is_YMD(int y, int m, int d) {
	//判定年份不合规 ,并返回false 
	if (!(y >= 1920 && y <= 2050)){
		//cout<<"年份出错!"<<endl;
		return false;
	}

	//判定月份不合规 ,并返回false 
	else if (!(m >= 0 && m <= 12)) {
		//cout<<"月份出错!"<<endl;
		return false;
	}

	//判定小月天数合规 ,并合规返回true
	else if (((m == 4 || m == 6 || m == 9 || m == 11) && (d >= 0 && d <= 30))) {
		return true;
	}

	//判定大月天数合规 ,并返回true
	else if (((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && (d >= 0 && d <= 31))) {
		return true;
	}

	//判定瑞二月天数合规 ,并返回true 
	else if (((m == 2) && (d >= 0 && d <= 29) && (is_Run(y) == 1))) {
		return true;
	}

	//判定平年二月天数合规,并返回true 
	else if (((m == 2) && (d >= 0 && d <= 28) && (is_Run(y) == 0))) {
		return true;
	}

	//天数不合规,返回false 
	else {
		//cout<<"天数错误"<<endl; 
		return false;
	}
}

其中判断闰年的函数为 int is_Run(int y)代码如下:

//判断是否为闰年 
int is_Run(int y) {
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
		return 1;
	}
	else {
		return 0;
	}

}

第二步,将日期退迟后一天,函数为:void NextDate(int y,int m,int d);代码为:

//日期退迟
void NextDate(int y, int m, int d) {
	d = d + 1;//日期延后一天 
	if (!is_YMD(y, m, d)) //判断天数是否合规,若不合格则天数溢出,需处理 
	{
		m = m + 1;          // 月份+1 
		d = 1;           //   天数初始化,置1 

		if (!is_YMD(y, m, d)) {  //判断月份是否合规,若不合格则月份溢出,需处理 
			y = y + 1;   //    年份+1 
			m = 1;     //   月份初始化,置1

			if (!is_YMD(y, m, d)) {  //判断年份是否合规,若不合格则年份溢出,无需处理,返回错误信息 
				cout << "年份溢出!" << endl;
				return;
			}
		}
	}
	cout << "后一天的日期为:" << y << "年" << m << "月" << d << "日" << endl; //输出后一天日期 
}

第三步,写一个运行函数包括不断循环输入数据,直到输入的数据合规为止:work();代码如下:

//输入数据,并调用NextDate() 
void work() {
	int year = 1;
	int month = 1;
	int date = 1;
	int cin_count = 0;   //输入错误数据的次数
	cout << "请输入年份、月份、天数" << endl;  //提示信息
	
		cout << "年份:";
		cin >> year;
		while (!is_YMD(year, month, date)) {     //输入有效年份,无效输入将强制重输
			cout << "输入年份无效请重新输入:";
			cin >> year;
			cin_count++;
		}

		cout << "月份:";
		cin >> month;
		while (!is_YMD(year, month, date)) {    //输入有效月份,无效输入将强制重输
			cout << "输入月份无效请重新输入:";
			cin >> month;
			cin_count++;
		}

		cout << "天数:";
		cin >> date;
			while (!is_YMD(year, month, date)) {   //输入有效天数,无效输入将强制重输
				cout << "输入天数无效请重新输入:";
				cin >> date;
				cin_count++;
			}

			if (cin_count != 0) {
				cout << "恭喜你!经过你坚持不懈地输错" << cin_count << "次后" << endl    //显示最终输入数据,提示信息
					<< "终于输对了数据:" << year << "年" << month << "月" << date << "日"<<endl;
			}
    	
	NextDate(year, month, date);
}

总代码:

#include <iostream>
using namespace std;
//判断是否为闰年 
int is_Run(int y) {
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
		return 1;
	}
	else {
		return 0;
	}

}
//判断输入年份、月份、天数是否合规 
bool is_YMD(int y, int m, int d) {
	//判定年份不合规 ,并返回false 
	if (!(y >= 1920 && y <= 2050)){
		//cout<<"年份出错!"<<endl;
		return false;
	}

	//判定月份不合规 ,并返回false 
	else if (!(m >= 0 && m <= 12)) {
		//cout<<"月份出错!"<<endl;
		return false;
	}

	//判定小月天数合规 ,并合规返回true
	else if (((m == 4 || m == 6 || m == 9 || m == 11) && (d >= 0 && d <= 30))) {
		return true;
	}

	//判定大月天数合规 ,并返回true
	else if (((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && (d >= 0 && d <= 31))) {
		return true;
	}

	//判定瑞二月天数合规 ,并返回true 
	else if (((m == 2) && (d >= 0 && d <= 29) && (is_Run(y) == 1))) {
		return true;
	}

	//判定平年二月天数合规,并返回true 
	else if (((m == 2) && (d >= 0 && d <= 28) && (is_Run(y) == 0))) {
		return true;
	}

	//天数不合规,返回false 
	else {
		//cout<<"天数错误"<<endl; 
		return false;
	}
}

//日期推算 
void NextDate(int y, int m, int d) {
	d = d + 1;//日期延后一天 
	if (!is_YMD(y, m, d)) //判断天数是否合规,若不合格则天数溢出,需处理 
	{
		m = m + 1;          // 月份+1 
		d = 1;           //   天数初始化,置1 

		if (!is_YMD(y, m, d)) {  //判断月份是否合规,若不合格则月份溢出,需处理 
			y = y + 1;   //    年份+1 
			m = 1;     //   月份初始化,置1

			if (!is_YMD(y, m, d)) {  //判断年份是否合规,若不合格则年份溢出,无需处理,返回错误信息 
				cout << "年份溢出!" << endl;
				return;
			}
		}
	}
	cout << "后一天的日期为:" << y << "年" << m << "月" << d << "日" << endl; //输出后一天日期 
}

//输入数据,并调用NextDate() 
void work() {
	int year = 1;
	int month = 1;
	int date = 1;
	int cin_count = 0;   //输入错误数据的次数
	cout << "请输入年份、月份、天数" << endl;  //提示信息
	
		cout << "年份:";
		cin >> year;
		while (!is_YMD(year, month, date)) {     //输入有效年份,无效输入将强制重输
			cout << "输入年份无效请重新输入:";
			cin >> year;
			cin_count++;
		}

		cout << "月份:";
		cin >> month;
		while (!is_YMD(year, month, date)) {    //输入有效月份,无效输入将强制重输
			cout << "输入月份无效请重新输入:";
			cin >> month;
			cin_count++;
		}

		cout << "天数:";
		cin >> date;
			while (!is_YMD(year, month, date)) {   //输入有效天数,无效输入将强制重输
				cout << "输入天数无效请重新输入:";
				cin >> date;
				cin_count++;
			}

			if (cin_count != 0) {
				cout << "恭喜你!经过你坚持不懈地输错" << cin_count << "次后" << endl    //显示最终输入数据,提示信息
					<< "终于输对了数据:" << year << "年" << month << "月" << date << "日"<<endl;
			}
    
	NextDate(year, month, date);
}
int main() {
	work();
	system("pause");
	return 0;
}

三、运行结果和总结

   总的实现都是自己编写的函数,加上注释也只有120行不到。抛去空格,注释,还有自己加的描述到底输错了几次数据的提示信息,总的代码不会超过80行。旨在新手小白的练习,大神不喜勿喷!!!

运行结果如下:

最后还麻烦老铁们,点个赞吧。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值