c语言课程设计报告万年历Word文件下载.docx
- 文档编号:18364948
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:17
- 大小:81.89KB
c语言课程设计报告万年历Word文件下载.docx
《c语言课程设计报告万年历Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告万年历Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。
在我的万年历系统当中,就是将日历,月历做的简单明了,很方便我们的查询使用。
下面是它要实现的一些基本功能:
C语言编写万年历查询系统:
(1)输入年份,判断是否为闰年
(2)输入年月日,判断是星期几
(3)输入年份,打印出12个月的月历
(4)输入年月,打印出本月的日历
(5)输入指令错误的提示
(二)程序中的数据说明
①unsignedintrun[12]={31,29,31,30,31,30,31,31,30,31,30,31};
unsignedintping[12]={31,28,31,30,31,30,31,31,30,31,30,31};
;
这是定义的关于每个月天数的数组,根据大小月以及二月份的特殊情况将每个月的天数变为数组中的元素存入数组当中。
其中run[1]=29,是将闰年二月的天数28天作为初始元素存入。
另一个ping[1]=28,是将平年二月的天数28天作为初始元素存入。
②charmonth_str[][10]={"
一月"
"
二月"
三月"
四月"
五月"
六月"
七月"
八月"
九月"
十月"
十一月"
十二月"
};
这个数组是定义12个月份的数组。
二、问题分析
对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
日期的查询,就是直接打印改天所在月份的月历。
程序难点在于判断星期,但根据公式,我们可以很容易地用年月日推断出星期:
c=days+day;
w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7;
//求星期公式
其中year:
要查询的年份
day:
从该年的一月一日起到该天的天数
w:
得出的星期数。
在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过一定长度输出日期,在遇到某天时星期天时,就换行输出,因此可以按照月历的格式输出。
判断日期是否合法,
if((nian>
6000)||(nian==0)||(yue>
12)||(yue==0)||(ri>
31)||(ri==0))
{
printf("
输入错误,请重新输入\n"
);
gotozailai;
}可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31,如果通过此判断合法,再判断是否是闰年,如果是闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。
在查询过程中,如果发现输入不合法或者不满足输入要求,则提示错误,并返回主菜单。
三、程序总体设计及功能结构框图
(一)功能结构框图
(二)程序设计
头文件:
#include<
stdio.h>
//基本输入输出函数
#include<
stdlib.h>
//调用清屏函数
windows.h>
//调用延时函数
在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。
其中有:
intmenu()//选择菜单
voidnian_yue()//输入年月函数
voidin_nian()//只输入年函数
void_in()//年,月,日输入,范围判别
int_nian2(intyear)//判断是否为闰年
intyue_day(intyear,intmonth)//计算某年某月有多少天函数
intxingqi_(intyear,intmonth,intday)//判断某年某月某日是星期几的函数
void_4(intyear,intmonth)//第四功能:
显示某月的月历
int_3(intyear)//第三功能:
显示某年的月历
void_2()//第二功能:
计算某年是否为闰年
void_1()//第一功能:
计算某年某月某日是星期几
这些函数的定义及其相应的内部程序共同构筑起了这个万年历查询系统的总程序。
其中int_nian2函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;
intxingqi函数则是为了实现判断星期而编写的;
void_4函数则是为了实现单个月的月历而编写的,int_3函数则是为了实现某年的月历而编写的。
四、程序流程图
(一)总流程图
(二)算法说明
1.总天数的算法:
int_nian2函数的使用,判断出了输入年份是否为闰年的信息。
判断一年是否为闰年的方法是:
该年分而能被4整除但不能被100整除,或者是能被400整除。
判断是否为闰年的流程图:
2.输入日期计算星期几:
利用intxingqi_函数可以判断出星期,然后对于输入的日期可以通过公式c=days+day;
w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7计算就可以输出相应的星期数。
/*判断某年某月某日是星期几的函数,返回星期对应的数字,如返回对应星期天*/
intxingqi_(intyear,intmonth,intday)
{
intc,i,days=0,t,w;
for(i=1;
i<
month;
i++)//月份循环
t=yue_day(year,i);
//调用求某年某月有多少天函数
days+=t;
}
c=days+day;
returnw;
}
3.对输入信息的汇总:
void_4(intyear,intmonth)//打印某年某月的月历,int_3(intyear)//打印某年的月历。
/*--------------第四功能:
显示某月的月历--------*/
void_4(intyear,intmonth)
{
inti,temp,k;
temp=xingqi_(year,month,1);
//调用判断某年某月某日是星期几的函数
printf("
\n%d--%d\n"
year,month);
\n0123456\n"
\nSMTWTFS\n"
/*以下是月历排版*/
=temp;
i++)
"
for(k=1;
k<
=yue_day(year,month);
k++,i++)
%-2d"
k);
if(i%7==0)
\n"
/*--------------第三功能:
显示某年的月历--------*/
int_3(intyear)
inttemp;
inti,j,k;
printf("
\n\n%d年\n"
year);
for(i=1;
=12;
\n\n%s(%d)\n"
month_str[i-1],i);
0123456\n"
SMTWTFS\n\n"
temp=xingqi_(year,i,1);
/*以下是月历排版*/
for(j=1;
j<
j++)
);
for(k=1;
=yue_day(year,i);
j++,k++)
if(j%7==0)
五、源程序代码
unsignedintnian,yue,ri;
//全局变量
unsignedintrun[12]={31,29,31,30,31,30,31,31,30,31,30,31};
charmonth_str[][10]={"
/*---------------选择菜单--------*/
intmenu()
inta;
\n\n----------------万年历系统----------------\n\n\n"
1.计算某年某月某日是星期几\n"
2.计算某年是否为闰年\n"
3.显示某年的月历\n"
4.显示某月的日历\n"
5.退出系统\n\n"
请输入相应的数字,并回车请输入"
scanf("
%d"
&
a);
您输入的是%d\n"
a);
请稍后,正在执行..."
Sleep(1000);
//延时秒
system("
cls"
//清屏
return(a);
//返回值
/*------------------输入年月函数------------------*/
voidnian_yue()
请输入要显示的年,月并以逗号隔开\n"
\n例如:
要显示2014年月则输入:
2014,6回车\n"
请输入"
scanf("
%d,%d"
nian,&
yue);
/*-----------------只输入年函数-----------------*/
voidin_nian()
请输入年份,并回车\n"
nian);
/*----------------年,月,日输入,范围判别--------*/
void_in()
zailai:
//跳转标志
请输入要计算的年份,输入的年,月,日请以逗号隔开\n"
要计算年月日输入格式为:
2014,6,11回车\n\n"
请输入:
"
%d,%d,%d"
yue,&
ri);
if((nian>
/*------判断是否为闰年方式二,是返回,否则返回------*/
int_nian2(intyear)
if(year%400==0||year%4==0&
&
year%100!
=0)//计算闰年
return1;
else
return0;
/*---------------求某年某月有多少天------------*/
intyue_day(intyear,intmonth)
intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(_nian2(year)&
month==2)//如果为闰年,月加
return29;
return(mon_day[month-1]);
/*--------------第二功能:
计算某年是否为闰年--------*/
void_2()
in_nian();
//输入年函数
\n\n"
if(_nian2(nian)==1)
%d年是闰年\n"
nian);
%d年是平年\n"
/*--------------第一功能:
计算某年某月某日是星期几----*/
void_1()
_in();
//输入年月日函数
%d年%d月%d日是星期%d\n\n"
nian,yue,ri,xingqi_(nian,yue,ri));
/*-------------------主函数------------------*/
voidmain()
intx;
star:
//菜单重选跳转标志
switch(menu())
case1:
G1:
//G1跳转标志
_1();
//启动第一功能计算某年某月某日是星期几
printf("
输入1并回车,返回主菜单\n"
输入2并回车,重新输入\n"
输入其他则退出程序\n"
scanf("
x);
system("
if(x==1)
{gotostar;
}//goto语句跳转到菜单重选跳转标志
if(x==2)
{gotoG1;
}//goto语句跳转到G1
break;
case2:
G2:
//G2跳转标志
_2();
//第二功能:
{gotoG2;
}//goto语句跳转到G2
case3:
G3:
//G3跳转标志
in_nian();
//输入年
_3(nian);
//启动第三功能
{gotoG3;
}//goto语句跳转到G3
case4:
G4:
//G4跳转标志
nian_yue();
//输入年月
_4(nian,yue);
////启动第四功能
{gotoG4;
}//goto语句跳转到G4
case5:
你确定要退出吗?
确定退出按,取消退出按!
{exit(0);
}//退出
六、使用说明
运行程序,进入主菜单界面,可看到以下界面
----------------万年历系统----------------
1.计算某年某月某日是星期几
2.计算某年是否为闰年
3.显示某年的月历
4.显示某月的日历
5.退出系统
请输入相应的数字,并回车请输入
1、在“请输入相应的数字,并回车请输入”后面输入功能序号,如需“.计算某年某月某日是星期几”,请输入“1”,其他功能相同。
2、进入附属界面后会出现以下界面:
请输入要计算的年份,输入的年,月,日请以逗号隔开
例如:
要计算2014年6月11日输入格式为:
2014,6,11回车
3、可在“请输入:
”语句后输入年份”2014,6,11”,会出现下面界面:
2014,6,11
2014年6月11日是星期3
输入1并回车,返回主菜单
输入2并回车,重新输入
输入其他则退出程序
请输入
4、可在“请输入”后面填写序号,即可得到相应的提示功能。
5、其他功能做法于上相同,就不一一赘述。
七、个人心得
(略)
八、参考文献
[1]谭浩强。
C程序设计(第四版).北京:
清华大学出版社,2010
[2]杜恒。
C程序程序设计(理实一体化教程).北京:
机械工业出版社,2013
[3]部分资料来源网络,作者不详。
在这里对他们表示由衷的感谢
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言课程设计报告 万年历 语言 课程设计 报告