栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++提示开学周数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++提示开学周数

 1. 运行时直接显示当前第几周

2. 输入日期后显示该日期是第几周

3. 支持设置开学日期4. 也可以输入周的序号,比如 18,显示是几号到几号

#include  
#include 
#include 
#include 


int abs(int a, int b);
int IsLeap(int year);
int Days(int y, int m, int d);
int DiffDays(int y1, int m1, int d1, int y2, int m2, int d2);

主函数 

int main() {

	int	start_y, start_m, start_d;
	int end_y=-1, end_m=-1, end_d=-1;
	int day_dif, delta, weeks;
	printf("-------时间格式 yyyy mm dd----------输错重输---------------------n");
	printf("输入你的选择n");
	printf("1  输入时间,查询周数n");
	printf("2  输入周数字,得到时间段n");
	printf("3  重新输入开学时间n");
	printf("-------时间格式 yyyy mm dd----------输错重输---------------------n");
	printf("输入开学时间");
	int start_time = scanf("%d %d %d", &start_y, &start_m, &start_d);
	while (start_m > 12 || start_d > 31) {
		printf("日期格式错误n");
		printf("输入开学时间");
		int start_time = scanf("%d %d %d", &start_y, &start_m, &start_d);
		if (start_m < 12 || start_d <= 31)
			break;
	}
	while (1) {
		printf("-------时间格式 yyyy mm dd----------输错重输---------------------n");
		printf("输入你的选择n");
		printf("1  输入时间,查询周数n");
		printf("2  输入周数字,得到时间段n");
		printf("3  重新输入开学时间n");
		printf("-------时间格式 yyyy mm dd----------输错重输---------------------n");
		int val;
		scanf("%d", &val);

		if (val == 1) {
//输入时间,查询周数 
			printf("输入查询时间");
			int end_time = scanf("%d %d %d", &end_y, &end_m, &end_d);
			day_dif = DiffDays(start_y, start_m, start_d, end_y, end_m, end_d);
			printf("%d", day_dif);
			delta = day_dif % 7;
			weeks = day_dif / 7;
			if (delta != 0) {
				weeks += 1;
			}
			printf("当前第%d周 n", weeks);
		}
		else if (val == 2) {
//输入周数字,得到时间段
			printf("输入一个数字:");
			int week;
			int end_days;
			int start_days;
			scanf("%d", &week);
			int de = (abs(DiffDays(2021, 1, 3, start_y, start_m, start_d))) % 7;
			if(week==1){
				start_days = 0;
				end_days = 7-de;
			}
			else {
				start_days = week*7-de+1;
				end_days =week*7+de+1;
			}
			for (int a=start_y;a < 2100;a++) {
				for (int b = start_m;b < 12;b++) {
					for (int c = 1;c < 31;c++) {
						if (DiffDays(start_y, start_m, start_d, a, b, c) == start_days) {
							if(Days(a, b, c)>=Days(start_y, start_m, start_d))
							printf("%d年 %d月 %d日 至", a,b,c);
							break;
						}
							
					}
				}
			}
			for (int a1 = start_y;a1 < 2100;a1++) {
				for (int b1 = start_m;b1 < 12;b1++) {
					for (int c1 =1;c1 < 31;c1++) {
						if (DiffDays(start_y, start_m, start_d, a1, b1, c1) == end_days) {
							if (Days(a1, b1, c1) >=Days(start_y, start_m, start_d))
							printf("%d年 %d月 %d日n", a1, b1, c1);
							break;
						}
							
					}
				}
			}

		}
		else if (val == 3) {
//重新输入开学时间	
			printf("输入开学时间");
			int start_time = scanf("%d %d %d", &start_y, &start_m, &start_d);
			while (start_m > 12 || start_d > 31) {
				printf("日期格式错误n");
				printf("输入开学时间");
				int start_time = scanf("%d %d %d", &start_y, &start_m, &start_d);
				if (start_m < 12 || start_d <= 31)
					break;
			}
			day_dif = DiffDays(start_y, start_m, start_d, end_y, end_m, end_d);
			printf("%d", day_dif);
			delta = day_dif % 7;
			weeks = day_dif / 7;
			if (delta != 0) {
				weeks += 1;
			}
			printf("当前第%d周 n", weeks);
		}
	}
	return 0;
}

 一开始写的时候在网上找的算法,用于计算两个日期之间的天数;


int abs(int a, int b)
{
    if (a >= b)
        return (a - b);
    else
        return (b - a);
}

int IsLeap(int year)
{
    if (((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0)
        return 1;
    else
        return 0;
}

int Days(int y, int m, int d)
{
    int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int i;
    int sum = 0;
    if (IsLeap(y))
        days[2] = 29;
    for (i = 0; i < m; i++)
        sum = sum + days[i];
    sum = sum + d - 1;
    return sum;
}

int DiffDays(int y1, int m1, int d1, int y2, int m2, int d2)
{
    int s1, s2;
    int count;
    int sum = 0;
    int t, t1, t2;
    if (y1 == y2)
    {
        s1 = Days(y1, m1, d1);
        s2 = Days(y2, m2, d2);
        return abs(s1, s2);
    }
    else if (y1 > y2)
    {
        count = y1 - y2;
        if (count == 1)
        {
            t1 = Days(y1, m1, d1);
            t2 = Days(y2, 12, 31) - Days(y2, m2, d2);
            return (t1 + t2 + count);
        }
        else
        {
            for (t = y2 + 1; t < y1; t++)
                sum = sum + Days(t, 12, 31);
            cout << sum << endl;
            t2 = Days(y2, 12, 31) - Days(y2, m2, d2);
            t1 = Days(y1, m1, d1);
            return (sum + t1 + t2 + count);
        }
    }
    else
    {
        count = y2 - y1;
        if (count == 1)
        {
            t2 = Days(y2, m2, d2);
            t1 = Days(y1, 12, 31) - Days(y1, m1, d1);
            return (t1 + t2 + count);
        }
        else
        {
            for (t = y1 + 1; t < y2; t++)
                sum = sum + Days(t, 12, 31);
            t2 = Days(y2, m2, d2);
            t1 = Days(y1, 12, 31) - Days(y1, m1, d1);
            return (sum + t1 + t2 + count);
        }
    }

}

这是运行界面

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号