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

C语言实现万年历

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

C语言实现万年历

**Readme:**在本程序中使用了结构体数组来存储多个月份的信息,结构体中除包含月份的二维数组外,还有记录模式以及其所对应的年份和月份。程序输入的话有四个参数,第一个参数是字符串为指令,第二个参数为要查看的年份和月份,注意这里的月份占位为二,第三个参数为想从当前的月份查看后几个月,第四个参数为日期的模式,按照“一、二、三···日”的顺序还是“日、一、二···六”的顺序。这里涉及到的参数均未校验,后续校验功能还需继续完善。
tips: 1.日历的表头”一“”二“”三“···使用二维字符数组来存储 2.ASC码为32的时候输出的是空格
程序运行结果展示:

程序源代码:

#include
#include
#include
//定义日历结构体
struct calendar {
	//参数p3,1为从周一开始,0为从周日开始, 默认从周一开始
	int p3=1;
	//当前日历的年份和月份
	int year;
	int month; 
	//声明数组并初始化
	int data[5][7]= {{32,32,32,32,32,32,32},{32,32,32,32,32,32,32},{32,32,32,32,32,32,32},{32,32,32,32,32,32,32},{32,32,32,32,32,32,32}};
};
//按照格式打印输出
void print(struct calendar calendarList[],int count);
//计算与原点相差的天数
int week();
//填充数据
void fill(struct calendar calendarList[],int count,int week);
//判断是闰年还是平年的函数
int judge(int year);
//全局变量 年,月,与相差的天数
int year,month,sum=0;
//闰年和平年每个月的天数
int leap[12]= {31,29,31,30,31,30,31,31,30,31,30,31};
int ordinary[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
int main() {
	long start,end;//定义计时变量
	char s[16];
	char mode[3];
	//记录输出几个月
	int count;
	//传入参数,用字符数组接收
	scanf("%s",&s);
	//输入开始的年份和月份
	scanf("%4d%2d",&year,&month);
	//输入要从当前月份开始几个月
	scanf("%d",&count);
	//输入模式
	scanf("%s",&mode);
	//直接声明数量为count的结构体数组
	struct calendar calendarList[count];
	//如果要从周日开始的话,需要改变一下参数
	if (strcmp(mode,"sun")==0) {
		for (int i=0; i=3) {
				printf("n%d年%d月                     %d年%d月                     %d年%d月",calendarList[i].year,calendarList[i].month,calendarList[i+1].year,calendarList[i+1].month,calendarList[i+2].year,calendarList[i+2].month);
				printf("n一  二  三  四  五  六  日    一  二  三  四  五  六  日    一  二  三  四  五  六  日n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+1].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+1].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+2].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+2].data[j][k]);
						}
					}
					printf("n");
				}
				i+=3;
				count-=3;
			} else if (count==1) {
				printf("n%d年%d月",calendarList[i].year,calendarList[i].month);
				printf("n一  二  三  四  五  六  日n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("n");
				}
				count-=1;
			} else if (count==2) {
				printf("n%d年%d月                     %d年%d月",calendarList[i].year,calendarList[i].month,calendarList[i+1].year,calendarList[i+1].month);
				printf("n一  二  三  四  五  六  日    一  二  三  四  五  六  日n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+1].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+1].data[j][k]);
						}
					}
					printf("n");
				}
				count-=2;
			}
		}
	}
	//若为sun模式
	else {
		while(count!=0) {
			if (count>=3) {
				printf("n%d年%d月                     %d年%d月                     %d年%d月",calendarList[i].year,calendarList[i].month,calendarList[i+1].year,calendarList[i+1].month,calendarList[i+2].year,calendarList[i+2].month);
				printf("n日  一  二  三  四  五  六  日    一  二  三  四  五  六  日    一  二  三  四  五  六n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+1].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+1].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+2].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+2].data[j][k]);
						}
					}
					printf("n");
				}
				i+=3;
				count-=3;
			} else if (count==1) {
				printf("n%d年%d月",calendarList[i].year,calendarList[i].month);
				printf("n日  一  二  三  四  五  六n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("n");
				}
				count-=1;
			} else if (count==2) {
				printf("n%d年%d月                     %d年%d月",calendarList[i].year,calendarList[i].month,calendarList[i+1].year,calendarList[i+1].month);
				printf("n日  一  二  三  四  五  六  日    一  二  三  四  五  六n");
				for (int j=0; j<5; j++) {
					for (int k=0; k<7; k++) {
						if (calendarList[i].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i].data[j][k]);
						}
					}
					printf("  ");
					for (int k=0; k<7; k++) {
						if (calendarList[i+1].data[j][k]==32) {
							printf("    ");
						} else {
							printf("%-4d",calendarList[i+1].data[j][k]);
						}
					}
					printf("n");
				}
				count-=2;
			}
		}
	}
}
int week() {
	//2021年1月1日是星期五,初始化为星期五
	int day=5;
	//定义余数和星期的对照表
	int y1[7]= {5,6,7,1,2,3,4};
	int y2[7]= {5,4,3,2,1,7,6};
	//如果是在2021年1月之后的时间的话,那么正着算
	if ((year>2021)||((year==2021)&&(month>1))) {
		//首先计算年天数
		for (int i=2021; i=leap[month-1]) {
					//首先填充第一行
					o=1;
					for (int n=week-1; n<7; n++) {
						calendarList[i].data[0][n]=o;
						o++;
					}
					//填充下边四行
					for (int m=1; m<5; m++) {
						for (int n=0; n<7; n++) {
							if (o>leap[month-1]) {
								break;
							}
							calendarList[i].data[m][n]=o;
							o++;
						}
						if (o>leap[month-1]) {
							break;
						}
					}
				} else {
					//首先填充第一行
					o=pond+1;
					for (int n=0; n=ordinary[month-1]) {
					//首先填充第一行
					o=1;
					for (int n=week-1; n<7; n++) {
						calendarList[i].data[0][n]=o;
						o++;
					}
					//填充下边四行
					for (int m=1; m<5; m++) {
						for (int n=0; n<7; n++) {
							if (o>ordinary[month-1]) {
								break;
							}
							calendarList[i].data[m][n]=o;
							o++;
						}
						if (o>ordinary[month-1]) {
							break;
						}
					}
				} else {
					//首先填充第一行
					o=pond+1;
					for (int n=0; n12) {
				year++;
				month=1;
			}
		}
	}
	//如果填充模式为sun的话
	else {
		for (int i=0; i=leap[month-1]) {
					//首先填充第一行
					o=1;
					week2=week;
					if (week2==7) {
						week2=0;
					}
					for (int n=week2; n<7; n++) {
						calendarList[i].data[0][n]=o;
						o++;
					}
					//填充下边四行
					for (int m=1; m<5; m++) {
						for (int n=0; n<7; n++) {
							if (o>leap[month-1]) {
								break;
							}
							calendarList[i].data[m][n]=o;
							o++;
						}
						if (o>leap[month-1]) {
							break;
						}
					}
				} else {
					//首先填充第一行
					o=pond+1;
					for (int n=0; n=ordinary[month-1]) {
					//首先填充第一行
					o=1;
					week2=week;
					if (week2==7) {
						week2=0;
					}
					for (int n=week2; n<7; n++) {
						calendarList[i].data[0][n]=o;
						o++;
					}
					//填充下边四行
					for (int m=1; m<5; m++) {
						for (int n=0; n<7; n++) {
							if (o>ordinary[month-1]) {
								break;
							}
							calendarList[i].data[m][n]=o;
							o++;
						}
						if (o>ordinary[month-1]) {
							break;
						}
					}
				} else {
					//首先填充第一行
					o=pond+1;
					for (int n=0; n12) {
				year++;
				month=1;
			}
		}
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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