C语言实验专周——万年历

万年历
编写一个万年历软件,实现以下基本功能:
(1)日历显示,根据系统日期进行初始化,显示系统日期所在月份的月历,并突
出显示当前日期。此外,还将显示当前年份是否为闰年。
(2)日期查询,输入日期进行查询,查询后将显示查询日期所在月份的月历,并
突出显示查询日期。此外,还将显示查询日期所在年份是否为闰年。
(3)提供返回当前日期的功能。
(4)每个日期应标注星期几。
(5)合理组织排列各项功能,界面可使用键盘操作。
难点:如何知道当前日期为周几
分析:查询万年历可知1900年1月1日为周一,将其作为基准年份,计算当前日期与其差值,计算出当前日期为周几,需要注意的是平年与闰年的差别。

#include
#include
#include
#include
int  Mainmenu();//主菜单
void Dispnow();//当前日期
void Queryday();//查询日期
void display(int year, int month, int day)//显示函数
bool Isrun(int year);//判断闰年
int Distance(int year, int month);//计算当前为周几
char week[7][5] = {
      "MON","TUS","WED","THU","FRI","SAT","SUN" };
int run[12] = {
      31,29,31,30,31,30,31,31,30,31,30,31 };
int ping[12] = {
      31,28,31,30,31,30,31,31,30,31,30,31 };
int Day[5][7];
int main()
{
        
	while (1)
	{
     
		system("cls");
		switch (Mainmenu())
		{
     
		case 1: Dispnow(); break;
		case 2: Queryday(); break;
		case 3: return 0; break;
		}
		
	}
	return 0;
}
int  Mainmenu()
{
     
	printf("		   \t\t\t *****************************\n");
	printf("		\t\t\t|*	    万年历           *|\n");
	printf("		\t\t\t|*	1.日历显示	     *|\n	");
	printf("	\t\t\t|*      2.日期查询	     *|\n	");
	printf("	\t\t\t|*      3.退出	             *|\n	");
	printf("	\t\t\t *****************************\n");
	int i;
	while (1)
	{
        

		printf("输入你的选择\n");
		scanf("%d", &i);
		if (i == 1 || i == 2||i==3)break;
		else printf("error\n");
	}
	return i;
}
void Dispnow()
{
     
	system("cls");
	time_t now;
	struct tm* t;
	now = time(NULL);
	t = localtime(&now);
	display(t->tm_year+1900, t->tm_mon+1, t->tm_mday);
	int c;
	printf("1.查询日期\n");
	printf("2.返回主菜单\n");
	while (1)
	{
     
		scanf("%d", &c);
		if (c == 1) {
      Queryday(); break; }
		else if (c == 2)return;
		else printf("输入错误\n");
	}
}
void Queryday()
{
     
	system("cls");
	printf("请输入要查询的日期\n");
	int year, month, day;
	scanf("%d%d%d", &year, &month, &day);
	display(year, month, day);
	int c;
	printf("1.返回当前日期\n");
	printf("2.返回主菜单\n");
	while (1)
	{
     
		scanf("%d", &c);
		if (c == 1) {
      Dispnow(); break; }
		else if (c == 2)return;
		else printf("输入错误\n");
	}
	

}
void display(int year, int month, int day)
{
     
	printf("\t\t\t%d.%d月\n", year, month);
	if (Isrun(year))printf("%d是闰年\n", year);
	else printf("%d年不是闰年\n", year);
	printf("");
	for (int i = 0; i <= 6; i++)
		printf("%s\t", week[i]);
	printf("\n");
	for(int i=0;i<5;i++)
		for (int j = 0; j < 5; j++)
			Day[i][j] = 0;
	int dis = Distance(year, month);
	int x = dis % 7,y=7-x,i;
	for (i = 0; i <x; i++)
		printf("   \t");
	for (i = 1; i <= (Isrun(year) ? run[month-1] : ping[month-1]);i++)
	{
     
		if (i == day)printf("*");
		printf("%d\t",i);
		if ((i-y )% 7 == 0||i==y)printf("\n");
	}
	printf("\n");
	
}
bool Isrun(int year)
{
     
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)return true;
	else return false;
}
int Distance(int year, int month)
{
     
	int sum = 0, i;
	for (i = 1900; i < year; i++)
	{
     
		if (Isrun(i))sum += 366;
		else sum += 365;
	}
	for (i = 0; i < month - 1; i++)
	{
     
		if (Isrun(year))sum += run[i];
		else sum += ping[i];
	}
	return sum;
}

C语言实验专周——万年历_第1张图片
C语言实验专周——万年历_第2张图片
C语言实验专周——万年历_第3张图片

你可能感兴趣的:(新手C语言实战项目)