万年历显示程序综合程序课程设计.docx
- 文档编号:6986276
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:18
- 大小:65.07KB
万年历显示程序综合程序课程设计.docx
《万年历显示程序综合程序课程设计.docx》由会员分享,可在线阅读,更多相关《万年历显示程序综合程序课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
万年历显示程序综合程序课程设计
综合程序课程设计说明书
课程设计名称:
综合程序课程设计
课程设计题目:
万年历显示程序
学院名称:
信息工程学院
专业:
电子信息科学与技术班级:
学号:
姓名:
评分:
教师:
2016年3月13日
综合程序课程设计任务书
2015-2016学年第2学期 第1周-2周
题目
学生成绩管理系统
内容及要求
1)输入任一年将显示出该年的所有月份日期,对应的星期
2)注意闰年情况
其显示格式要求如下:
1)月份:
中文英文都可以,
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐
进度安排
2016年2月29日,分小组任选题目;
2016年3月1日至3月9日,查阅资料并编写程序实现功能;
2016年3月10日至3月13日,检查。
学生姓名:
指导时间2016年2月29至2016年3月13日
指导地点:
综合楼中505
任务下达
2016年2月29日
任务完成
2016年3月13日
考核方式
1.评阅□ 2.答辩□3.实际操作□ 4.其它□
指导教师
高建波
系(部)主任
摘要
这次的综合课程设计主要是让同学们能够将学习到的软件知识通过设计实际生活应用或者通过设计管理系统巩固所学知识,同时也在设计过程中提升了学生们对软件学习的信心和兴趣。
本课题包括4个模块,分别是功能控制模块、打印输出模块、日历显示模块和键值获取模块。
键值获取模块接受键盘操作,获取键值,来进行输入年份,月份,日期。
功能控制模块用于实现日期有效性检查、判断是否是闰年和返回指定日期对应的星期,月份第一天所对应的星期。
打印输出模块主要是进行输出显示,包括打印指定个数的空格、打印分隔线、打印当前日期对应的星期以及打印给定的星期。
日历显示模块模块是系统的核心模块,是用来显示指定年份所在月份的月历。
每个模块地设立都是由子函数调用功能实现的,通过返回不同的数值来控制程序的下一步进行。
万年历是生活必需品,本次设计的万年历在输入年份后就可查询该年中的所有月份,日期和相对应的星期,进一步输入该年的某个日期就可显示该日对应的星期。
简单便捷,实用性强可直接投入到现实生产应用中。
关键词:
万年历的设计软件分模块子函数的调用
目录
第一章设计要求及思路5
1.1设计要求5
1.2设计思路5
第二章分模块介绍6
2.1键盘输入模块6
2.2功能控制模块6
2.2.1合法性校验功能6
2.2.2输入日期为星期几的处理8
2.2.3每月1号星期值的处理10
2.3打印输出模块11
2.3.1指定空格的个数和分割线的打印11
2.3.2打印当前日期对应的星期以及打印给定的星期12
2.4日历显示模块12
第三章调试过程14
第四章运行结果15
第五章实验总结18
参考文献19
附录一20
第1章设计要求及思路
2.1设计要求
1).输入任一年将显示出该年的所有月份日期,对应的星期
2).注意闰年情况
其显示格式要求如下:
1)月份:
中文英文都可以,
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐
2.2设计思路
在拿到题目时,有以下设计思路及整体设计大纲
1.输入年份,月份,日期
2.设计公式判断输入的年份第一天是星期几
3.设计公式判断该年是闰年还是平年
4.设计子函数判断每个月的有多少天,每个月的1号是星期几,保留最后一天对应的日期,作为下次函数调用的时的传出值
5.设计子函数分析输入的月份是月份日期,将得到的星期送到输入界面显示出来
6.设计子函数并调用出子函数显示输出分割线,星期几,日期,要整齐排列
7.结束程序
第2章分模块介绍
2.1键盘输入模块
键值获取实现的是从键盘输入日期。
当在下面的功能模块判断出现错误返回输入功能重新输入。
printf("inputtheyear:
");
scanf("%d",&year);
//输入年
printf("\ninputthemonth:
");
scanf("%d",&month);
//输入月
printf("\ninputtheday:
");
scanf("%d",&aa);
//输入日
2.2功能控制模块
2.21.合法性校验功能
键盘输入功能将输入的值传递到功能控制模块。
功能控制模块将对于传递来的值进行判断。
对该值进行合法性检验。
当月份大于或等于十三时,报出错误提醒,键盘输入月份值继续传递到功能模块,继续进行合法校验。
当传入月份合法时,键盘输入日,传递到功能模块继续进行合法性校验,其中包括输入的月份是大月,小月,平月,若是输入的月份是二月份还要进行输入年份的闰年,平年判断。
输入不合法时,报出错误提醒,返回输入功能继续输入日,重回功能模块,进行合法性检验。
当输入合法时,继续下一步功能。
例如输入2008.2.29则会报出错误提醒,因为2008年是闰年,2月没有29天,则会报出错误提醒重新输入。
当输入重新输入为2008.2.28时则进入下一步:
if(month>=13)gotoerror1;
error1:
printf("\nERRORINPUTMONTH.\n");
printf("****************************************\n");
printf("inputtheyear:
%d\n",year);
gotoshuruyue;
//月份输入合法性检验,并报错返回输入月份界面
if(year%4==0&&year%100!
=0||year%400==0)
//闰年,平年的判断
{if(month==2&&aa>=30)//对闰年二月输入日期合法性检验
gotoerror2;}
else{if(month==2&&aa>=29)//对平年二月输入日期合法性的检验
gotoerror2;}
if(month==1&&aa>=32)
gotoerror2;
if(month==3&&aa>=32)
gotoerror2;
if(month==4&&aa>=31)
gotoerror2;
if(month==5&&aa>=32)
gotoerror2;
if(month==6&&aa>=31)
gotoerror2;
if(month==7&&aa>=32)
gotoerror2;
if(month==8&&aa>=32)
gotoerror2;
if(month==9&&aa>=31)
gotoerror2;
if(month==10&&aa>=32)
gotoerror2;
if(month==11&&aa>=31)
gotoerror2;
if(month==12&&aa>=32)
gotoerror2;
//对十二个月份输入的日期分别进行合法性校验
error2:
printf("\nERRORINPUTDAY.\n");
printf("****************************************");
printf("\ninputtheyear:
%d\n",year);
printf("\ninputtheyear:
%d\n",month);
gotoshururi;
//报错程序并返回输入日期界面
2.22输入日期为星期几的处理
将输入的年份进行处理,可知年份的规律为十九年一次循环,根据循环规律计算出每年的第一天为星期几,设该星期值为dd,保存得到的星期值,将整年365或者366看成一个在星期一到星期日之间的循环。
泽当输入的月份分别为1,2,3,4等月份时,则若要计算某输入日期的为星期几。
则判断输入的月份:
当输入为月份为1时,设日为rr输入日的星期值为:
(rr+dd-1)%7
当输入为月份为2时,设日为rr输入日的星期值为:
(31+rr+dd-1)%7
当输入为月份为3时,若该年是闰年输入日的星期值为:
(31+29+dd-1)%7
若该年是平年输入日的星期值为:
(31+28+dd-1)%7
以此类推。
得到输入值后将其返回输入界面之后,输出得到的星期值。
dd=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;
//判断一年的第一天的星期值
voidpanduan(intdd,intyuefen,intri,intyear)
//设立子函数求得输入日期的星期值
{inti,j=0,sum=0,k[]={31,29,31,30,31,30,31,31,30,31,30,31};
intb;
inta[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%4==0&&year%100!
=0||year%400==0)
{for(i=1;i sum=sum+k[j];} else{for(i=1;i sum=sum+a[j];} sum=sum+ri; b=(sum+dd-1)%7; if(b==0)printf("\n%d年%d月%d日是星期日",year,yuefen,ri); if(b==1)printf("\n%d年%d月%d日是星期一",year,yuefen,ri); if(b==2)printf("\n%d年%d月%d日是星期二",year,yuefen,ri); if(b==3)printf("\n%d年%d月%d日是星期三",year,yuefen,ri); if(b==4)printf("\n%d年%d月%d日是星期四",year,yuefen,ri); if(b==5)printf("\n%d年%d月%d日是星期五",year,yuefen,ri); if(b==6)printf("\n%d年%d月%d日是星期六",year,yuefen,ri);} 2.23每月1号的星期值处理 在下面的显示界面我们将按月显示,那么显示每月第一天星期几,如何衔接排列就至关重要。 在这步功能的控制中,采用了调用子函数的功能。 在2.22节中,求到了每年第一天也就是1月1号的星期值。 利用循环的思路和求余的方法(31+dd-1)%7将一月的最后一天的星期值也保存下来,在计算下个月初时的星期值时再利用循环思路和求余方法将最后一天的星期值保存,将该值设置为aa。 反复传递调用日期与星期转换的子函数。 最终将十二个月的功能都表达出来。 intfun(inta,inttianshu)//定义一个月份日期和星期几并显示的子函数 {inti,k; {for(i=0;i for(i=a+1,k=1;i {if(k<10)printf("%d",k); elseprintf("%d",k); k++; if(i%7==0)printf("\n");}//当i为7时,换行 printf("\n");} a=(i-1)%7;//a为该月份结束时最后一个日期是星期几 returna;} 2.3打印输出模块 打印输出模块主要是进行输出显示,包括打印指定个数的空格、打印分隔线、打印当前日期对应的星期以及打印给定的星期。 2.31指定空格的个数和分割线打印 由于每个月的第一天所在的星期未必相同,所以在如下的格式显示中: Sunmontuewedthrfrisat 中会出现不同的变化,而这时需要通过控制输出的空格键的个数来进行显示。 而这时输出空格键的个数则是由aa的数值来控制的。 若是aa的值为1,则输出四个空格键,若是为2,则为输出8个空格键,以此类推。 打印分割线 每当输出一个月的月份时都会输出一段如下的分割线: 编程程序如下: ntfun(inta,inttianshu) {inti,k;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万年历 显示 程序综合 程序 课程设计