C程序设计万年历说明书Word文档格式.doc
《C程序设计万年历说明书Word文档格式.doc》由会员分享,可在线阅读,更多相关《C程序设计万年历说明书Word文档格式.doc(12页珍藏版)》请在冰豆网上搜索。
二.应用程序要求、目的
主题:
目的:
实现对年月的查询
三.应用程序简介
(1)基本结构:
整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。
在主函数中运用while语言与switch语句的嵌套,是程序拥有了循环的功能。
用fflush(stdin);
语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。
万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
所以会改变day_of_month[]数组中的二月份的数值。
二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。
而对于判断周几,需要运用公式:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。
通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码。
(2)源程序代码:
#include<
stdio.h>
#include<
string.h>
time.h>
math.h>
windows.h>
intyear,month,day;
intday_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
intcurrent_year,current_month,current_day;
voidcls_screen()
{
printf("
请按任意键返回!
\n"
);
getchar();
system("
cls"
}
intjudgement(inty)
if(y%400==0||(y%100!
=0&
&
y%4==0))
return1;
elsereturn0;
intshow_week(intyear,intmonth,intday)
/*公式:
w=(y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1)%7*/
intw,k;
intyear_last=year%100,c=year/100,m=month;
if(month==1)
year_last-=1;
elseif(month==2)
year_last-=1;
w=(year_last+year_last/4+c/4-2*c+26*(m+1)/10+day-1);
if(w<
0)
k=(w%7+7)%7;
elsek=w%7;
returnk;
voidprint_year(intyear)
inti,k,x,first_week;
printf("
请输入想要查询的年份(格式如2012):
"
scanf("
%d"
&
year);
=======================%d年===========================\n"
year);
if(judgement(year))
day_of_month[1]=29;
elseday_of_month[1]=28;
for(i=1;
i<
13;
i++)
first_week=show_week(year,i,1);
=====================%d月日历如下========================\n"
i);
Sun\tMon\tTue\tWed\tThu\tFri\tSat\n"
for(x=1;
x<
=first_week;
x++)
\t"
if(x%7==0)printf("
for(k=1;
k<
=day_of_month[i-1];
k++)
%d\t"
k);
x++;
voidprint_year_month()
intk,x,first_week;
请输入想要查询的年月(格式如201212):
do
%d%d"
year,&
month);
if(month<
1||month>
12)
您输入的月份有误哦~请输入正确的月份\n"
}while(1>
month||month>
12);
=====================%d年%d月======================\n"
year,month);
first_week=show_week(year,month,1);
=day_of_month[month-1];
voidmain()
intchoice,year,month,day,flag=1,option;
charc,k,ch;
while
(1)
===========================欢迎来到XXX的万年历============================\n"
请选择:
********1.查找某一年的年历********\n"
********2.查找某一月的月历********\n"
********0.退出********\n"
==============================================================================\n"
请输入您的选择:
"
scanf("
option);
switch(option)
case1:
print_year(year);
cls_screen();
doyouwanttocontinue?
(Y/N)"
fflush(stdin);
%c"
ch);
if(ch=='
N'
||ch=='
n'
)
break;
case2:
print_year_month();
case0:
}}}
2:
程序的运行环境
本程序运行环境为VC
选择“1”并查询2012年的日历。
显示2012年的日历:
可以按任意键返回。
出现“是否继续的提示语”按y可继续查询某年的日历。
按n可返回开始时的画面,再继续选择。
选择“2”,查询2012年9月的月历。
此程序开始有提示语问候,使用户使用时亲切便捷,并实现了循环的过程,可以无限循环的查询你想知道年份月份的日历,在循环的过程中加有清屏的效果。
在编译程序时,对蔡勒公式的不熟悉,导致程序在年月之间的错误,但在之后的调试中逐步掌握了这个公式,并解决了这一系列的问题。
12