版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4 t.j r-,#课程设计课程名称C语言程序课程设计题目名称编写万年历系统学生学院 专业班级学生姓名 指导教师2009 年06月04日广东工业大学课程设计任务书题目名称编写万年历系统学生学院 专业班级一、课程设计的内容二、课程设计的要求与数据1、进一步掌握和利用C语言进行程序设计的能力;2、进一步理解和运用结构化程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、学会利用流程图或N-S图表示法;6、掌握书写程序设计开发文档能力。三、课程设计应完成的工作1、编写完成相应题目程序;2、编写课程设计报告,课程设计报告的内容包括一下6个部分:1
2、)需求分析:包括设计题目、设计要求以及系统功能需求分析;2)总体设计:包括系统总体设计框架和系统功能模块图;3)详细设计:包括主要功能模块的算法设计思路以及对应的工程流程图;4)调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、 出错原因、解决方法及效果等,适当的包含结果截图)5)总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改经?课程设计过程中的学习体会和收获、对 本次课程设计的认识以及自己的建议等内容;6)附录:主要源代码,含必要的注释。3、答辩:在实验式建立程序运行的环境,并在指导老师的监督下,独立解决问题、运行
3、程序和回答老师问题。四、课程设计进程安排序号设计各阶段内容地点起止日期1下达任务书,说明设计要求;收集资料实验3#51316周前2总体方案设计,详细设计实验16周前3#5173编写程序,调试分析实验3#51715、 16 周4撰写报告并上交,答辩实验3#51716周五、应收集的资料及主要参考文献发出任务日期:日指导老师签名:计划完成日期:年 月曰 基层教学单位负责人签章:主管院长签章:目录目的与要求 总体方案 系统设计.1功能模块设计调试分析10总结和展望 附录16177答辩记录指导教师意见1 目的与要求目的:编写一个一万年历系统,为学生提供一个动手动脑、独立实践的机会,将课本上的理论知识和实
4、际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。总体要求:1)对系统进行功能模块分析、控制模块分析正确;系统分析要实用;编程简练,可用,功能全面,具有较好的健壮性;说明书、流程图要清楚;题目要求:模仿现实生活中的挂历。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日 及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。2 总体方案要模仿现实生活中的挂历,因此我认为程序功能至少要以下方面:1)显示系统的年、月、日和时间(时间为可选模块,因为题目不作要求);模仿现实挂历的外表,即每7天换一行,每一天对应当天是星期几;每月天数及星期几要
5、与现实一致;最好有查询功能,能够查询某年某月的挂历;在各功能间切换时要自然,并有相应的文字提示;界面友好、美观。程序函数合理,简洁,名称含义明了,有相应注释。3 系统设计.1功能模块设计定义全局变量和全局数组、指针等;把程序分为若干个函数,分别为:1 showtime ():显示系统时间;2 nowyear ( ) 、nowmonth ( )、nowday ():得到系统时间的年、月、日。3 getkey1 ( int year , int key )、getkey2 ( int mon th , int key ):检测按键, 若按了上下左右方向键就return给下一个应用它的函数。4 is
6、leap ( int year ):计算该年份是否为闰年,因为闰年和非闰年的2月份天数不同。5 week ( int year , int month , int day ):计算某年某月某天为星期几,在本程序中他有两个作用,1是计算某月的第一天星期几,以决定前面有多少个 空格,2是计算系统时间当天是星期几。6 showdata ():显示系统时间当月的挂历题目要求之一。7 checkdata ():显示要查询月的挂历。8reno ():刷新系统时间和当月的挂历,能够实现题目中“当系统时间变为下一月时自动翻到下一月。9str():显示要查询月的挂历并实现循环查询。10main():主函数,整合
7、其它函数实现显示系统时间、查询月挂历等一系列功能。3)流程图:主流程:r喷 EEB?统当月的日 濟时Iffl显示fi询冃的L方向ti<t毎利剧新一战 込亍芟聲月;抿示语showtime():getkey1(i nt year,i nt key) getkey2(i nt mon th,i nt key):y=nj-ye3cr-1轲出产H /nowyear()、nowmon th()、no wday():开姑/输出/int isweek(i nt year,int mon th,i nt day):Islea p(i nt year ):int showdata ():int reno (
8、)I幵始IthoMtime ()函缴 r Chovja xa()AyI干正迟1科'I清屏II结雨Iint checkdata ():int str()幵始IfeIB.- 开,t亠F lUjnttUCE. 义为系 銃B寸闾/yenr 义为系 纭旳间按两讦/各个函数互相嵌套,并最终汇集到main()函数下,共同实现目的功能(1)显示系统时间并能够自动翻页;(2 )查询某年某月功能;(3)两模块间无缝连接,自由切换。4 调试分析按题目的要求,我最初制作了一个挂历,完全满足题目要求一一显示当前 月的挂历、时间变后自动翻页。但是我认为这个最初的作品不够完美,偏短(只有几十行),因此后来我在最初作
9、品的基础上加入了新的功能并加以完善,最终完成了我现在的作品。在原基础上,我加入了3个新的功能一一(1 )显示时间 精确到秒,并每秒刷新一次,即保持与系统时间一致;(2)加入查找功能,通 过方向键可以查询公元后的任何一个月的挂历;(3)显示当月挂历模块与查询 模块之间实现无缝转换。在制作过程中也遇到了很多问题,通过努力都一一得到解决:许多函数以前没见过,最终通过百度获取到时间函数time(NULL) 、localtime(<) 、ctime(<);刷屏函数clrscr();检测键盘输入函数getch( )、!kbhit(),等等。最初在函数isweek()中,用week
10、= allday % 7 - 1 来计算当天是星期几,在调试中发现,有时正常有时出错,经检查发现是上述代码有问题:当星期六时结果是-1,很明显错误。后来改为weeklday-1) % 7后恢复正常。调试过程中发现在查询模式下只能查询当前月(年)的前一个月(年)和后一个月(年),经研究发现是因为变量不在str ()函数中而是在另一个函数中,修改值无法保存,因此每次循环后年和月就初始化了。后来我把年和月的变量放到str()函数中,问题解决。经过最终调试,本程序已经可以完美的实现上述各个功能。5 总结和展望经过本次任务,我对C语言的制作有了更深层次的了解,制作技巧也相应有了提高,也熟悉了很多以前没学
11、过、考试不会考但很实用的函数、制作方法等。更重要的是,这是我的第一次 C语言大作业,它令我从以前的最多编写几十行的程序的程度进步到能够编写几百行的代码,学会宏观的思考如何编写一个大程 序,学会全面思考问题。通过这次作业,我也增加了对 C语言的兴趣,相信我以后会有更多进步。我还有更多的想法去改进我的这个程序,由于时间有限,这次无法实现。我期待在有空后能修改出一个更完美的程序。6 附录#in elude "stdio.h"#i nclude "time.h"int key ;/*定义各个月的天数*/int year , month ;int mon 213
12、= 0,31,28,31,30,31,30,31,31,30,31,30,31,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 no wyear ()/*系统的年份*/struct tm *local ;lt = time (NULL);/*系统年份从1900年为0年开始计算*/local = localti
13、me (<);retur n local->tm_year + 1900 ;int nowmonth ()/*系统的月份*/struct tm *local ;It = time ( NULL );local = localtime ( & It );retur n local->tm_ mon + 1 ;int no wday ()/*系统在哪一天*/struct tm *local ;lt = time ( NULL );local = localtime ( & It );retur n local->tm_mday ;int getkey1
14、 ( int year , int key )/*检测键盘的上下方向键*/if ( 72 = key )/*上方向键代码是72*/year+ ;else if ( 80 = key )/*下方向键代码是 80*/year-;retur n year ;int getkey2 ( int month , int key )/*检测键盘的左右方向键*/if ( 77 = key )/*右方向键代码是77*/mon th+ ;else if ( 75 = key )/*左方向键代码是 75*/mon th-;return month ;int islea p ( int year )/*判断是否是闰
15、年*/*被4整除但不被100整除的年时闰年*/int leap ;/*被400整除的是闰年*/leap = (year % 4 = 0) && (year % 100 != 0) | (year % 400 = 0);return lea p ;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 = islea p ( i )/*闰年有366天*/elseallday
16、 = allday + 366 ;allday = allday + 365 ;/*非闰年有365天*/for ( j = 1 ; j < mon th ; j+ )allday = allday + mon islea p( year ) j ;allday = allday + day ;week = ( allday -1 ) % 7 ;/*计算当天为星期几,星期日至六为0 至 6*/retur n week ;int showdata ()/*显示系统月份的挂历*/int i , z ;int j = 0 ;prin tf("n");printf(”%d 年
17、%d 月 n" , nowyear( ) , nowmonth();printf(" *n")prin tf("Sun Mon Tues Wed Thur Fri Satn");prin tf(" *n");z = isweek ( no wyear( ) , nowmon th( ) , 1 );for ( i = 0 ; i < z ; i+ )");printf(”for ( i=0 ; i < mon islea p( no wyear( ) ) nowmon th( ) ; i+ )/*在系统
18、时间的今天上做记号【】*/if (i = nowday( ) - 1) && (i < 9)printf(”%d" , i + 1 );else if ( i = no wday( ) - 1 )printf(”%2d" , i + 1 );else if ( i = no wday()prin tf("%5d" , i + 1 );elseprin tf( "%6d" , i + 1 );if ( 01)%7)&&( i +1)!=mon islea p( no wyear( ) nowmon
19、th()/*每7天换一行*/j + ;prin tf( "n");if ( j = 3 )/*令提示语保持在同一行*/prin tf("nnnn");if ( j = 4 )prin tf("nnn");if ( j = 5 )prin tf("nn");printf(”按方向键进入查询状态");int checkdata ()/*显示要查询的月份的挂历*/int i , z ;int j = 0 ;printf(”nnn");printf(”%d 年 d 月 n" , year ,
20、mon th );printf(" *n");prin tf("Sun Mon Tues Wed Thur Fri Satn");printf(" *n"); z = isweek( year , month , 1 );for ( i = 0 ; i < z ; i+ )”);printf(”for ( i = 0 ; i < mon islea p ( year ) month ; i+ )prin tf( "%6d" , i+1 );if ( 0 = ( z + i + 1 ) % 7 ) &&( i + 1 ) != monisleap(year ) month )j + ;prin tf( "n");if ( j = 3 )/*令提示语保持在同一行*/prin tf("nnnn");if ( j = 4 )prin tf("nnn");if ( j = 5 )prin tf("nn");printf(”按上下方向键查询年,按左右方向键查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智慧教育平台搭建承担连带责任担保借款合同4篇
- 2025年度船舶保险理赔服务合同
- 2025年度食品进口代理合同示范文本3篇
- 个人知识产权出售合同示例3
- 2025版二手车买卖合同之车辆过户与登记手续协议
- 二零二五年度临时聘用合同:农业科技研发项目临时聘用范本2篇
- 2025版学生宿舍安全管理与服务规范合同范本3篇
- 商业垃圾清运合同:2025年度合作条款与条件
- 2025年度木工职业健康监测与防护协议4篇
- 2025年度船舶二手市场评估与交易中介合同4篇
- 高校铸牢中华民族共同体意识教育的路径研究
- 《面神经炎护理措施分析》3900字(论文)
- 城市微电网建设实施方案
- 企业文化融入中华传统文化的实施方案
- 9.1增强安全意识 教学设计 2024-2025学年统编版道德与法治七年级上册
- 《化工设备机械基础(第8版)》全套教学课件
- 人教版八年级数学下册举一反三专题17.6勾股定理章末八大题型总结(培优篇)(学生版+解析)
- 2024届上海高考语文课内古诗文背诵默写篇目(精校版)
- DL-T5024-2020电力工程地基处理技术规程
- 初中数学要背诵记忆知识点(概念+公式)
- 驾照体检表完整版本
评论
0/150
提交评论