最新万年历显示程序综合程序课程设计.docx

上传人:b****1 文档编号:14896826 上传时间:2023-06-28 格式:DOCX 页数:22 大小:64.64KB
下载 相关 举报
最新万年历显示程序综合程序课程设计.docx_第1页
第1页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第2页
第2页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第3页
第3页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第4页
第4页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第5页
第5页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第6页
第6页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第7页
第7页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第8页
第8页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第9页
第9页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第10页
第10页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第11页
第11页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第12页
第12页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第13页
第13页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第14页
第14页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第15页
第15页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第16页
第16页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第17页
第17页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第18页
第18页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第19页
第19页 / 共22页
最新万年历显示程序综合程序课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最新万年历显示程序综合程序课程设计.docx

《最新万年历显示程序综合程序课程设计.docx》由会员分享,可在线阅读,更多相关《最新万年历显示程序综合程序课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

最新万年历显示程序综合程序课程设计.docx

最新万年历显示程序综合程序课程设计

综合程序课程设计说明书

 

课程设计名称:

综合程序课程设计

课程设计题目:

万年历显示程序

学院名称:

信息工程学院

专业:

电子信息科学与技术班级:

学号:

姓名:

评分:

教师:

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

 

第一章设计要求及思路

2.1设计要求

1).输入任一年将显示出该年的所有月份日期,对应的星期

2).注意闰年情况

其显示格式要求如下:

1)月份:

中文英文都可以,

2)下一行显示星期,从周日到周六,中英文都可以

3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐

2.2设计思路

在拿到题目时,有以下设计思路及整体设计大纲

1.输入年份,月份,日期

2.设计公式判断输入的年份第一天是星期几

3.设计公式判断该年是闰年还是平年

4.设计子函数判断每个月的有多少天,每个月的1号是星期几,保留最后一天对应的日期,作为下次函数调用的时的传出值

5.设计子函数分析输入的月份是月份日期,将得到的星期送到输入界面显示出来

6.设计子函数并调用出子函数显示输出分割线,星期几,日期,要整齐排列

7.结束程序

 

第二章分模块介绍

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;

{for(i=0;i

voidshuchu(chara[8])//定义一个显示月份和分割线的子函数

{printf("----------------------------------------\n");

printf("%s\n",&a[0]);

printf("SunMonTueWedThuFriSat\n");

 

2.32打印当前日期对应的星期以及打印给定的星期

在2.22节中,由求到的aa的值可将输出的空格数后进行输出从1~(30,31,29,28)的输出。

每当输出的日期(rr+aa-1)%7时,进行换行输出。

到下一月时,重新输出sunmontuewedthrfrisat

再新起一行,输出空格键,再重新由一号开始输出。

当日期<10时,输出日期+3个空格

当日期>=10时,输出日期+2个空格

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.4日历显示模块

日历显示模块模块是系统的核心模块,是用来显示指定年份所在月份的月历。

将日历上的日期按照如上排布显示出来

a=fun(a,30);

elsea=fun(a,29);

shuchu(b);/调用显示月份和分割线的函数

a=fun(a,32);//调用显示月份全部排版的子函数

shuchu(c);

a=fun(a,31);

shuchu(d);

a=fun(a,32);

shuchu(e);

a=fun(a,31);

shuchu(f);

a=fun(a,32);

shuchu(g);

a=fun(a,32);

shuchu(h);

a=fun(a,31);

shuchu(p);

a=fun(a,32);

shuchu(q);

a=fun(a,31);

shuchu(s);

a=fun(a,32);

gotojieshu;

通过反复调用子函数显示出一年十二个月份的月历。

第三章调试过程

1.调试过程中,发现日期不能正常按照规律的显示,总会有错位

解决方法:

在反复检查过程中发现,日期的显示开始时在数字后面加了三位空格,当数字大于等于10时,其有两个字符。

而当数字小于10时,只有一个字符,后面也跟三位空格。

所以造成了错位的显示。

后来在当数字大于等于10时,后面跟两位空格。

2.在调试时,发现当月的最后一天的星期值与下月第一天的星期值不能相对应。

解决方法:

经过同学帮助检查算法时反复验算,发现算法出现错误。

经过更改将算法调整为(rr+aa-1)%7,得到了正确的结果。

3.算法不能对应地求出该日对应的星期值

解决方法:

在老师的提醒和指导下,将程序进一步完善,当输入年月日之后对应地在下面一行显示出该日在该年中为星期几,并新添了报错功能,虽然结构并没有复杂很多,但进一步地完善了万年历的功能,更具有显示实用意义

 

第四章运行结果

当输入的值是2012年时程序判断出来该年为闰年,2月有29天,且该年的第一天刚好为星期日。

输入2月29日,经过调用panduan函数,在屏幕上显示出来2012年2月29日刚好为星期三。

后经过反复调用显示程序和月份处理fun函数,得到月份的正常输出。

输出值如图4.1,4.2

图4.12012年的日历

图4.22012年日历

当输入的值是2013年时程序判断出来该年为平年,2月有28天,且该年的第一天刚好为星期二。

输入2月29日,经过后面的判断日期输入的合法性,经过合法性检验发现日期输入错误。

在屏幕上提示“ERRORINPUTDAY”,重新输入2月21日。

在屏幕上显示出来2012年2月21日为星期四。

后经过反复调用显示程序和月份处理fun函数,得到月份的正常输出。

输出值如图4.3,4.4

图4.32013年日历显示

图4.42013年日历显示

当输入年月是2013.13时,经过程序后面的合法性校验,发现13为不合法的月份值,在屏幕上显示出“ERRORINPUTMONTH”,程序重新进入输入,再进行合法性校验。

在屏幕上显示出来2013年12月2日为星期一。

后经过反复调用显示程序和月份处理fun函数,得到月份的正常输出。

输出值如图4.5,4.6

图4.52013年日历显示

图4.62013年日历显示

第五章实验总结

此次课设所选取的课设题目不是很难,然而经历了这次设计和制作的整个过程,才发现平日里知识的贫乏和知识面的狭窄,原本以为不就是一个小小的课程设计,很容易就可以搞定,可是到了后来实际的操作的时候可是花费了我九牛二虎之力,不说其他的,只说时间上面,就花费了大把的时间,当然也从中体会了很多平时不能收获的东西。

经过两个星期的自己设计和编程,经过查阅书籍,上网查询等各种途径,完成了这次的编写。

其中遇到了很多问题,一一解决的过程并学会了很多。

然在这次课设中对C语言有了更深的了解,使用起来也更加的熟练。

其次,找了不少的资料,找专业的书籍、上网找各方面的资料,学到了一些书本中学不到的知识,增长了见识。

这次的课程设计收获具体如下,一方面巩固了C语言知识,是一次原来所学的课程的温故而知新。

另一方面,在这次的课程设计中,有多次遇到不会的难题时,积极向同学们求助。

众人拾柴火焰高,很多原来觉得棘手的问题在与同学们的讨论中变得简单,由此可见,积极请教与团结互助的重要性。

通过这次的设计,经过自己亲自动手编程设计增加了对软件学习的兴趣与信心,更是增加了自己那么点小小的成就感,虽然也有不足之处,但是也是及时改正了过来,圆满完成了老师交代的任务。

 

参考文献

[1]谭浩强.C程序设计(第四版).北京:

清华大学出版社,2010.6

[2]姜仲秋.C语言程序设计.南京:

南京大学出版社,1998年1月

[3]谭浩强.C语言程序设计题解与上机指导.北京:

清华大学出版社,2000.11

[4]刘振安.C语言程序设计.北京:

机械工业大学出版社,2004

[5]张长海.C语言程序设计.北京:

高等教育出版社,2006

[6]于帆.程序设计基础.北京:

清华大学出版社,2006

[7]谭明金.C语言程序设计实例精粹:

电子工业出版社,2009

[8]谭宗璞.C语言程序设计.徐州:

中国矿业大学出版社,2007.1

[9]路俊维.C语言程序设计:

中国铁道工业出版社,2009.06

[10]李丽娟.C语言程序设计教程.北京:

人民邮电出版社,2013.9

 

附件一:

源程序代码

#include

#include

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;}

voidshuchu(chara[8])//定义一个显示月份和分割线的子函数

{printf("----------------------------------------\n");

printf("%s\n",&a[0]);

printf("SunMonTueWedThuFriSat\n");}

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);}

voidmain()

{intyear,month,i=0,j=0,k=1,a=0,m;

intaa,bb,cc,dd;

charn[]="Feb2",b[]="Mar3",c[]="Apr4",d[]="May5",e[]="Jun6",f[7]="Jul7",g[7]="Aug8",h[7]="Sep9",p[7]="Oct10",

q[7]="Nov11",s[7]="Dec12";

printf("****************************************\n");

printf("inputtheyear:

");

scanf("%d",&year);

shuruyue:

printf("\ninputthemonth:

");

scanf("%d",&month);

if(month>

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2