




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上 课程设计 课程名称 语言程序课程设计 题目名称 编写万年历系统 学生学院 专业班级 学 号 学生姓名 指导教师 2009 年 06 月 04日广东工业大学课程设计任务书题目名称 编写万年历系统 学生学院专业班级姓名学号一、 课程设计的内容二、 课程设计的要求与数据、进一步掌握和利用语言进行程序设计的能力;、进一步理解和运用结构化程序设计的思想和方法;、初步掌握开发一个小型实用系统的基本方法;、学会调试一个较长程序的基本方法;、学会利用流程图或图表示法;、掌握书写程序设计开发文档能力。三、 课程设计应完成的工作、编写完成相应题目程序;、编写课程设计报告,课程设计报告的
2、内容包括一下个部分:)需求分析:包括设计题目、设计要求以及系统功能需求分析;)总体设计:包括系统总体设计框架和系统功能模块图;)详细设计:包括主要功能模块的算法设计思路以及对应的工程流程图;)调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);)总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改经?课程设计过程中的学习体会和收获、对本次课程设计的认识以及自己的建议等内容;)附录:主要源代码,含必要的注释。、答辩:在实验式建立程序运行的环境,并在指导老师的监督下,独立解决问题
3、、运行程序和回答老师问题。四、课程设计进程安排序号设计各阶段内容地点起止日期下达任务书,说明设计要求;收集资料实验3#51316周前总体方案设计,详细设计实验3#51716周前编写程序,调试分析实验3#51715、16周撰写报告并上交,答辩实验3#51716周五、应收集的资料及主要参考文献发出任务日期:年月日指导老师签名:计划完成日期:年月日基层教学单位负责人签章:主管院长签章:目录目的与要求4总体方案5系统设计5.1功能模块设计5调试分析9总结和展望9附录10答辩记录16指导教师意见17目的与要求目的:编写一个一万年历系统,为学生提供一个动手动脑、独立实践的机会,将课本上的理论知识和实际应用
4、问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。总体要求:1)对系统进行功能模块分析、控制模块分析正确;2)系统分析要实用;3)编程简练,可用,功能全面,具有较好的健壮性;4)说明书、流程图要清楚; 题目要求:模仿现实生活中的挂历。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。总体方案要模仿现实生活中的挂历,因此我认为程序功能至少要以下方面:1) 显示系统的年、月、日和时间(时间为可选模块,因为题目不作要求);2) 模仿现实挂历的外表,即每7天换一行,每一天对应当天是星期几;3) 每
5、月天数及星期几要与现实一致;4) 最好有查询功能,能够查询某年某月的挂历;5) 在各功能间切换时要自然,并有相应的文字提示;6) 界面友好、美观。7) 程序函数合理,简洁,名称含义明了,有相应注释。系统设计.1功能模块设计1)定义全局变量和全局数组、指针等;2)把程序分为若干个函数,分别为:1·showtime ( ) : 显示系统时间 ;2·nowyear ( )、nowmonth ( )、nowday ( ) : 得到系统时间的年、月、日。3·getkey1 ( int year , int key )、getkey2 ( int month , int ke
6、y ) : 检测按键,若按了上下左右方向键就return 给下一个应用它的函数。4·isleap ( int year ) :计算该年份是否为闰年,因为闰年和非闰年的2月份天数不同。5·isweek ( int year , int month , int day ) :计算某年某月某天为星期几,在本程序中他有两个作用,1是计算某月的第一天星期几,以决定前面有多少个空格,2是计算系统时间当天是星期几。6·showdata ( ) :显示系统时间当月的挂历题目要求之一。7·checkdata ( ) :显示要查询月的挂历。8·reno ( ) :
7、刷新系统时间和当月的挂历,能够实现题目中“当系统时间变为下一月时自动翻到下一月。9·str( ) :显示要查询月的挂历并实现循环查询。10·main( ) :主函数,整合其它函数实现显示系统时间、查询月挂历等一系列功能。3) 流程图: 主流程:getkey1(int year,int key)getkey2(int month,int key) :showtime( ):Isleap(int year ):nowyear( )、nowmonth( )、nowday( ):int showdata ( ) :main( ) :int isweek(int year,int m
8、onth,int day):int reno ( ) :int str( ) :int checkdata ( ) :各个函数互相嵌套,并最终汇集到main( )函数下,共同实现目的功能(1)显示系统时间并能够自动翻页;(2)查询某年某月功能;(3)两模块间无缝连接,自由切换。调试分析按题目的要求,我最初制作了一个挂历,完全满足题目要求显示当前月的挂历、时间变后自动翻页。但是我认为这个最初的作品不够完美,偏短(只有几十行),因此后来我在最初作品的基础上加入了新的功能并加以完善,最终完成了我现在的作品。在原基础上,我加入了3个新的功能(1)显示时间精确到秒,并每秒刷新一次,即保持与系统时间一致;
9、(2)加入查找功能,通过方向键可以查询公元后的任何一个月的挂历;(3)显示当月挂历模块与查询模块之间实现无缝转换。在制作过程中也遇到了很多问题,通过努力都一一得到解决:1) 许多函数以前没见过,最终通过百度获取到时间函数time(NULL)、localtime(<)、ctime(<) ;刷屏函数clrscr( ) ;检测键盘输入函数getch( )、!kbhit( ),等等。2) 最初在函数isweek( )中,用week = allday % 7 - 1 来计算当天是星期几,在调试中发现,有时正常有时出错,经检查发现是上述代码有问题:当星期六时结果是-1,很明显错误。
10、后来改为week = (allday-1) % 7 后恢复正常。3) 调试过程中发现在查询模式下只能查询当前月(年)的前一个月(年)和后一个月(年),经研究发现是因为变量不在str()函数中而是在另一个函数中,修改值无法保存,因此每次循环后年和月就初始化了。后来我把年和月的变量放到str( )函数中,问题解决。······经过最终调试,本程序已经可以完美的实现上述各个功能。总结和展望经过本次任务,我对C语言的制作有了更深层次的了解,制作技巧也相应有了提高,也熟悉了很多以前没学过、考试不会考但很实用的函数、制作方法等。更重要的是,这是我
11、的第一次C语言大作业,它令我从以前的最多编写几十行的程序的程度进步到能够编写几百行的代码,学会宏观的思考如何编写一个大程序,学会全面思考问题。通过这次作业,我也增加了对C语言的兴趣,相信我以后会有更多进步。我还有更多的想法去改进我的这个程序,由于时间有限,这次无法实现。我期待在有空后能修改出一个更完美的程序。附录#include "stdio.h"#include "time.h"int key ;int year , month ;int mon213 = 0,31,28,31,30,31,30,31,31,30,31,30,31 , /*定义各个月的
12、天数*/ 0,31,29,31,30,31,30,31,31,30,31,30,31 ;time_t lt;int showtime ( ) /*显示系统时间*/ lt = time(NULL) ;printf(" 星期/月/日 时间 年n") ;printf(" %s",ctime(<) ; /*输出字符串形式的系统时间*/int nowyear ( ) /*系统的年份*/ struct tm *local ;lt = time (NULL) ;local = localtime (<) ;return local->tm
13、_year + 1900 ; /*系统年份从1900年为0年开始计算*/int nowmonth ( ) /*系统的月份*/struct tm *local ;lt = time ( NULL ) ;local = localtime ( < ) ;return local->tm_mon + 1 ;int nowday ( ) /*系统在哪一天*/struct tm *local ;lt = time ( NULL ) ;local = localtime ( < ) ;return local->tm_mday ;int getkey1 ( int ye
14、ar , int key ) /*检测键盘的上下方向键*/if ( 72 = key ) /*上方向键代码是72*/year+ ;else if ( 80 = key ) /*下方向键代码是80*/year- ;return year ; int getkey2 ( int month , int key ) /*检测键盘的左右方向键*/if ( 77 = key ) /*右方向键代码是77*/month+ ;else if ( 75 = key ) /*左方向键代码是75*/month- ;return month ;int isleap ( int year ) /*判断是否是闰年*/ /
15、*被4整除但不被100整除的年时闰年*/int leap ; /*被400整除的是闰年*/leap = (year % 4 = 0) && (year % 100 != 0) | (year % 400 = 0) ;return leap ;int isweek ( int year , int month , int day ) /*判断X年X月X日是星期几*/int i , j , week ;int allday = 0 ;for ( i = 0 ; i < year ; i+ )if (1 = isleap ( i ) /*闰年有366天*/allday = al
16、lday + 366 ;elseallday = allday + 365 ; /*非闰年有365天*/for ( j = 1 ; j < month ; j+ )allday = allday + mon isleap( year ) j ;allday = allday + day ;week = ( allday -1 ) % 7 ; /*计算当天为星期几,星期日至六为0至6*/return week ;int showdata ( ) /*显示系统月份的挂历*/ int i , z ;int j = 0 ;printf("n") ;printf("
17、%d年 %d月n" , nowyear( ) , nowmonth( ) ) ;printf(" *n") ;printf(" Sun Mon Tues Wed Thur Fri Satn") ;printf(" *n") ; z = isweek ( nowyear( ) , nowmonth( ) , 1 ) ; for ( i = 0 ; i < z ; i+ ) printf(" ") ; for ( i=0 ; i < mon isleap( nowyear( ) ) nowmont
18、h( ) ; i+ ) if (i = nowday( ) - 1) && (i < 9) /*在系统时间的今天上做记号【】*/ printf(" %d" , i + 1 ) ; else if ( i = nowday( ) - 1 ) printf(" %2d" , i + 1 ) ; else if ( i = nowday( ) ) printf("%5d" , i + 1 ) ; else printf( "%6d" , i + 1 ) ; if ( 0 = ( z + i + 1
19、) % 7 ) && ( i + 1) != mon isleap( nowyear( ) nowmonth( ) ) /*每7天换一行*/ j + ; printf( "n") ; if ( j = 3 ) /*令提示语保持在同一行*/ printf("nnnn") ; if ( j = 4 ) printf("nnn") ; if ( j = 5 ) printf("nn") ; printf(" 按方向键进入查询状态") ; int checkdata ( ) /*显示要查
20、询的月份的挂历*/int i , z ;int j = 0 ;printf("nnn") ;printf(" %d年 %d月n" , year , month ) ;printf(" *n") ;printf(" Sun Mon Tues Wed Thur Fri Satn") ;printf(" *n") ; z = isweek( year , month , 1 ) ; for ( i = 0 ; i < z ; i+ ) printf(" ") ; for (
21、i = 0 ; i < mon isleap ( year ) month ; i+ ) printf( "%6d" , i+1 ) ; if ( 0 = ( z + i + 1 ) % 7 ) && ( i + 1 ) != mon isleap ( year ) month ) j + ; printf( "n") ; if ( j = 3 ) /*令提示语保持在同一行*/ printf("nnnn") ; if ( j = 4 ) printf("nnn") ; if ( j = 5 ) printf("nn") ; printf(" 按上下方向键查询年,按左右方向键查询月n") ; printf(" 按ESC键退回系统时间") ;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村苗木租赁合同范例
- 《案例刑法学》课件第16章
- 入职担保合同范例
- 2020年中考物理一轮复习初中物理所有基础知识点总结全面
- 俱乐部技术陪练合同范例
- 亮化合同范例
- 2025年生物统计学专业研究生入学考试试卷及答案
- 《中国文化概论(第三版)》课件第九章第一节(一)
- 2025二手公寓买卖合同模板
- 写字楼隔断墙拆除合同范例
- 老年人误吸的预防团体标准试题
- 电缆管廊敷设施工方案及流程
- 中风的早期识别和急救处理方法
- pets5历年真题(口语)
- 2024年广东省中山市教学共进联盟中考一模数学试题(含答案)
- 2024年司法考试真题及答案
- 口腔护士进修总结汇报
- 2023年11月2024中咨公司校园公开招聘笔试历年高频考点-难、易错点荟萃附答案带详解
- 软件项目投标技术方案
- 成人气管切开拔管中国专家共识解读
- 活性炭滤池的设计计算
评论
0/150
提交评论