编写一万年历系统.docx
《编写一万年历系统.docx》由会员分享,可在线阅读,更多相关《编写一万年历系统.docx(9页珍藏版)》请在冰豆网上搜索。
编写一万年历系统
一、课程设计的内容
要求:
模仿现实生活中的挂历.
当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对
应的星期几).
当系统日期变到下一月时,系统自动翻页到下一月
二、课程设计的要求与数据
1、进一步掌握和利用C语言进行程设计的能力;
2、进一步理解和运用结构化程序设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图或N-S图表示算法;
6掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作
1、编写完成相应题目的程序;
2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:
1)需求分析:
包括设计题目、设计要求以及系统功能需求分析;
2)总体设计:
包括系统总体设计框架和系统功能模块图;
3)详细设计:
包括主要功能模块的算法设计思路以及对应的工作流程图;
4)调试分析过程描述:
包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);
5)总结:
课程设计完成了哪些功能,有没有什么扩展功能还有哪些地方需要改进课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;
6)附录:
主要源程序代码,含必要的注释。
3、答辩:
在实验室建立程序运行的环境,并在指导教师的监督下,独立解决问题、运行程序和回答教师提出的问题。
四、课程设计进程安排
序号
设计各阶段内容
地点
起止日期
1
下达任务书,说明设计要求;收集资料
实验3#517
2
总体方案设计、详细设计
实验3#517
3
编写程序,调试分析
实验3#517
4
撰写报告并上交,答辩
实验3#517
五、应收集的资料及主要参考文献
[1]谭浩强.C程序设计(第三版)[M],北京:
清华大学出版社,
[2]谭浩强.C程序设计题解与上机指导(第三版)[M],北京:
清华大学出版社,
[3]刘振安孙忱刘燕君.C程序设计课程设计.北京:
机械工业出版社,
主管院长签章:
1目的与要求
1.课程设计的目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。
2.课程设计的内容及要求
利用学到的编程知识和编程技巧,通过设计编写一个万年历系统,帮助熟悉程序编写,及时查究错误,独立完成。
要求:
模仿现实生活中的挂历•
当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期
几).
当系统日期变到下一月时,系统自动翻页到下一月
2总体设计
[程序〕
——f获取系统日期
3详细设计
1.由于要以系统当前日期的月份为准显示当前月的每一天,所以用如下
”获取系统当前日期”并分别赋值给变量year,month,day:
time_ttoday;
structtm*p;
time(&today);
p=localtime(&today);
year=p->tm_year+1900;
month=p->tm_mon+1;
day=p->tm_mday;
注意1,由于返回的是1900到现在的秒数,所以year后面要加上1900,又起始是1月,所
以mon要加1;
注意2,头文件#include<>不能忘了.
2•对得到的系统日期进行处理,算出当天是星期几
if(year>=0)
elseprintf(日期错误\n”)
流程图:
rN打印日期
错误
if(day>1)
k=(7-(day-n+6)%7)%7;
印输出本月当前月历:
printf("sunmontuewenthufrisat\n");
for(o=0;oprintf("");for(o=k;o{printf("%4d",o-k+1);if(o%7==6)printf("\n");
}
流程图
4调试分析
1,在当天的系统时间(06年7月21号)运行后;
2,为了验证是否是日期跳到下个月是自动跳换的,我改了系统时间,设定为07年7月21
号,运行结果如下:
_7
1
31
可以看到,几次试运行都是成立的,而且根据设计,这个万年历可以显示的月历可以
到公元元年!
当然调试过程中也遇到了一些问题,如:
发现这是k被赋予了7的结果,所以我就在k=7-(day-n+6)%7;的基础上做了修改:
k=(7-(day-n+6)%7)%7;所以遇到的问题就解决了!
以考虑使用long型,不过必要性不是很大所以忽略
5总结
基本完成了设计的要求内容(模仿显示生活中的挂历,当前页以系统当前日期的月份为准显示当前月的没一天(显示出日期对应的星期几),当系统日期变到下一月时,系统自动翻页到下一月),不过显示页面有待改进,可以更加人性化一些。
还有的问题就是现在的是获取系统时间自动换页显示日历,不过没有实现人工换页的功能,如果实现的话,应该要定义变量year,month,day;为可以直接赋值的,那样的话便可以随意查询任意一个月的日历了!
在本次课程设计中,我体会到了很多C语言学习中的心得,我深深体会到查找资料的重要性,因为本次设计需要比较全面的C语言知识,需要从书本查找大量的帮助资料,所以很考大家自我学习提高的能力。
在此设计前,我都不敢想象自己可以用学到的C语言做出这样的程序出来,总觉得自
信不够,但通过这次设计,经过了几夜鏖战最后把程序运行出来时,内心的喜悦是难以言表的。
这次的成功不仅给了我学号C语言用好C语言的动力,也给了我更加深入的学习C
语言的动力,C语言确实是一门很实际的计算机语言!
通过这次设计也使自己对C语言的掌握提高到了一个新的水平,能够利用C语言编写
出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力,以及自我动手能力等等。
这对以后学习和工作中遇到问题也是很有帮助的,毕竟我曾经战胜过它!
7.附录
#include<>
#include<>
intmain(void)
{intyear,month,day;
intdays=0,i,j,n,m,k,o;
intm1[]={31,28,31,30,31,30,31,31,30,31,30,31};
intm2[]={31,29,31,30,31,30,31,31,30,31,30,31};
time_ttoday;
structtm*p;
time(&today);p=localtime(&today);
elseprintf(“日期错误\n”);
if(day>1)
k=(7-(day-n+6)%7)%7;//通过转换算出此月第一天是星期几elseif(day==1)
k=n;
printf("sunmontuewenthufrisat\n");
for(o=0;oprintf("");//1号前的星期所对应的天数用空格打掉for(o=k;o{
printf("%4d",o-k+1);//从1号到这个月的月底按排序打出来if(o%7==6)
return0;
7答辩记录
序号
问题
回答
1
2
3
4
5
8指导教师意见
指导教师签名: