版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1单单 位位 电气与电子工程电气与电子工程 学院学院( (系系) )班班 级级 学学 号号 学生姓名学生姓名 指导教师指导教师 完成日期完成日期 20132013 年年 7 7 月月 8 8 日日C 语言课程设计万年历石家庄铁道大学课程设计2摘要摘要本课程设计报告介绍的是 C 语言实习中的万年历项目。该报告共分五章,第一章介绍选题意义,也就是我选择万年历作为课题项目的理由。第二章是系统的分析,包括系统概述,系统的构成,其中包括各个模块功能的分析介绍,该章节的最后介绍了各部分的功能,即组成程序的各个函数的功能介绍。第三章是系统的实现,即为各个功能的实现而服务的十个自定义函数的流程图,通过这十个流
2、程图,您可以快速地明白程序功能的实现过程。第四章是总结,即本人在设计万年历程序过程中的心得,以及在整个程序设计过程中我的工作过程,也体现了我的设计思路。第五章是参考文献,在这里我主要查阅了C 程序设计(第三版) 中的 C 函数附表,另外有几处欠缺的知识,我借鉴了另一本书上的相关部分。第六章,也是最后一章,我把整个程序的源代码及其注释附上。由于本人水平所限,程序也不可能很完美,必定有一些漏洞和拖沓,还请谅解。好了,从这里开始,我将与你们分享我我在整个万年历程序设计中的所做所想。3目录目录1.选题的意义.4 42系统的分析.5 52.1 系统概述.52.2 系统的构成.52.3 各模块的功能.52
3、.4 系统的运行环境.53系统实现.6 64总结.11115.参考文献.12126.附录(程序源代码).13134第一章第一章选题的意义选题的意义(1) 通过万年历的设计,使我们掌握软件开发过程的问题分析、系统设计、程序编写、测试等基本方法和技能。(2) 通过万年历的设计,熟练掌握 C 语言中的分支、循环、数组、函数、文件操作等的综合运用。(3) 通过万年历的设计,可以培养独立思考、综合运用所学有关相应知识的能力,更好地巩固C 程序设计课程中的所学内容。(4) 通过万年历的设计,可以强化自己的动手编程能力,更加深刻地感受 C 语言的优点。(5) 万年历与我们的生活联系密切,通过万年历的设计,我
4、们可以感受知识与实践相结合的乐趣。5第二章第二章系统的分析系统的分析(1) 系统概述: 该程序可以实现系统当前日期所在月份的日历显示功能,日期查询功能,程序的初始日期设定功能,还有把给定年份的日历输出到 txt 文档中的功能。(2) 系统的构成:1. 日历显示功能。该日历能够根据系统日期自动进行初始化,如果没有任何的输入,则会显示系统日期所在月份的月历,并能突出显示当前日期。2. 日期查询、闰年判断功能。输入日期进行查询,查询后将显示查询日期所在的月份,并突出显示查询日期。如是闰年,则给出提示。3. 日期合法性检查功能。程序还设置有对输入的日期进行合法性检查的功能,如果年份、月份或者天数不合法
5、,查询将被拒绝,并显示提示信息。4. 支持通过键盘设定系统日期。通过键盘的操作调整年份、月份和日期,并显示调整后的日期。还可以通过键盘操作复位到系统所在的日期。5. 输入任意年份,将该年份每月的日历写入文件。(3) 各模块的功能及分析。1. 定义全局变量及数组。2. 程序共由十一个函数构成,其功能分别为:a. showtime() 显示系统日期所在月份的日历。b. refer() 查询日期并显示所在年份是否为闰年。c. setdate() 设定系统的初始日期。d. print() 打印指定年份的每月日历并写入文件。e. nowday() 提取系统所在日期的日f. nowmonth() 提取系统
6、所在日期的月份g. nowyear() 提取系统所在日期的年份h. isleap() 想判断给定年份是否为闰年i. isweek() 判断给定日期是星期几,周日到周六分别为 0 到 6j. errortest() 判断输入的日期是否合法并给出提示k. main() 主函数,程序开始运行并转至 showdate()(4) 系统的运行环境VC+6.06第三章第三章系统的实现系统的实现主流程图:显示系统日期所在月份的日历开始日期查询功能日历设定功能日历输出功能b. showdate()7 开始showdate()利利用用nowday,nowyear,nowmonth提提取取系系统统日日期期的的年年月
7、月日日输输出出当当月月的的日日历历日日期期查查询询日日期期设设定定日日历历打打印印 c. refer() 开始refer()返回主页面输入要查询的日期输出查询日期当月的日历任任意意键键d. setdate()8开始setdate()输入要设定的日期输出设定日期所在月份的日历恢复初始日期任任意意键键 e. nowday()开始nowday()提取系统日输出日结束 f. nowmonth()9 开始nowmonth()提取系统月份输出月份结束 g. nowyear()开始nowyear()提取系统年份输出年份结束 h. isleap()10开始isleap()结束提取yearyear%4=0lea
8、p=1leap=0提取yearyear%400=0year%100 0i.nowweek() 11开始nowweek()提取系统星期输出星期结束 j. errortest()开始errortest()month12|month31|day29Yday28输出“出错”Y结束YNNN输出“出错”Yday30YNmonth=1,3,5,7,8,10,12NNY第四章第四章12总结总结 这个题目,从开始选择到调试完成,我一共花费了五天的时间。第一天,第一天,选题并查阅了相关的资料,由于万年历比较贴近显示生活,要求涉及的知识也比较多,能够更好地锻炼自己的编程能力,所以我选择了万年历作为自己的小学期课题;
9、第二天,第二天,我确定了设计思路,由于该程序要实现的功能相对比较多,所以我计划使用若干个函数把要实现的功能分割开,由此,我拟定了第二章介绍的十个自定义函数,并写下了大致流程;第三天第三天,我只用了一天就实现了第二章介绍的系统构成中的前四项功能,即日历显示功能、日期查询功能、初始日期设定功能、日期输入合法性检测功能。第四天第四天,由于之前没有接触过 C 语言文件的操作,所以第五项日期打印功能的实现最艰难,我查阅了很多资料都没有相关的介绍,所以我仔细翻看了关于文件操作的 C 语言函数,选择了fputs(),计划把要输出的每个月的日历都汇入一个二维字符数组,然后输出到txt 文件,但是经过了几次尝试
10、,这个努力失败了,因为日期内容设计循环,无法输出;第五天第五天,我又发现一种可以输出变量的函数,fprintf(),它可以输出指定格式的变量,于是我将它结合 fputs()使用,放弃了使用二维字符数组的计划,而是将以前的每个向屏幕的输出,分为变量和字符,分别用 fprintf()和 fputs()输出,然后加入了从一月到十二月的循环结构,经过了几次修正,输出一年十二个月的日历的功能终于得以实现,我把这个函数进行了修改后加入了之前编写好的程序之中,简单调试后,程序的各功能得以完美实现。通过万年历程序的设计,让电脑按照我的意思去工作,我体会到了程序设计的乐趣,感受到了前所未有的成就感;让我也明白做
11、事情要用心,失败了也不要气馁,只要我们肯想,方法其实有很多。13第五章第五章参考文献参考文献1.C 程序设计(第 3 版).谭浩强.清华大学出版社.2012.2.C 语言程序设计案例实践.李丹程.清华大学出版社.2009第六章第六章附(程序源代码)附(程序源代码)14万年历:#include#include/*时间和日期*/#include#includetime_t lt;char key;int mon213=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 ;
12、int nowyear() /*系统的年份*/ struct tm*local;lt=time(NULL);local=localtime(<);return local-tm_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=localti
13、me(<);return local-tm_mday ;int isleap(int year) /*判断是否是闰年*/ /*被 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;iyear;i+)if(1=
14、isleap(i) /*闰年有 366 天*/15allday=allday+366;elseallday=allday+365; /*非闰年有 365 天*/for(j=1;j12|month31|day30)printf(输入有错误,按任意键返回,重新输入n);if(getch()system(cls);refer();break;case 2:if(isleap(year)&day29)printf(输入有错误,按任意键返回,重新输入n);if(getch()system(cls);refer(); else if(day28)printf(输入有错误,按任意键返回,重新输入n)
15、;if(getch()system(cls);refer();break;void print()FILE *fp;void showdate();16int i,j=0,z,year,month;char filename10=date.txt;fp=fopen(filename,w);printf(请输入要打印日历的年份,例如:2013: );scanf(%4d,&year);fputs( ,fp);fprintf(fp,%d,year);fputs(年日历nn,fp);for(month=1;month13;month+)fputs(n,fp);fputs( ,fp);fprin
16、tf(fp,%d,month);fputs(月n,fp);fputs( &n,fp);fputs( 日 一 二 三 四 五 六n,fp);fputs( *n,fp);z=isweek(year,month,1);for(i=0;iz;i+)fputs( ,fp);for(i=0;imonisleap(year)month;i+)fprintf(fp,%6d,i+1);if(0=(z+i+1)%7)&(i+1)!=monisleap(year)month)/*每 7 天换一行*/j + ;fputs(n,fp);fputs(n,fp);fputs( *n,fp);fputs(nn
17、,fp);fclose(fp);system(cls);/*清屏*/printf(日期已写入 date.txtn);printf( 按任意键返回主页面n);if(getch()system(cls);showdate();void refer()/*查询日期*/17int i,j=0,z,year,month,day;void showdate(),setdate();printf(请输入要查询的日期,例如:20130705 );scanf(%4d%2d%2d,&year,&month,&day);errortest(year,month,day);system(cls
18、);/*清屏*/printf(n);if(isleap(year)printf( %d 年(闰年) %d 月n,year,month);else printf( %d 年 %d 月n,year,month);printf( n) ;printf( 日 一 二 三 四 五 六n) ;printf( *n) ;z=isweek(year,month,1);for(i=0;iz;i+)printf( );for(i=0;imonisleap(year)month;i+)if(i=day-1)&(i9) printf( %d,i+1);else if(i=day-1) printf( %2d,
19、i+1); else if(i=day) printf(%5d,i+1); else printf(%6d,i+1); if(0=(z+i+1)%7)&(i+1)!=monisleap(year)month) /*每 7 天换一行*/ j + ; printf(n) ; if(j=3) /*令提示语保持在同一行*/ printf(nnnn) ;18 if(j=4) printf(nnn); if(j=5) printf(nn); printf( 按任意键返回主页面n);if(getch()system(cls);showdate();void setdate( ) int i,z,j=
20、0,y,m,d;void showdate();printf(n) ;printf(请输入要设定的日期,例如 20130703:);scanf(%4d%2d%2d,&y,&m,&d);errortest(y,m,d);printf( %d 年 %d 月n,y,m);printf( *n) ;printf( 日 一 二 三 四 五 六n) ;printf( *n) ;z = isweek(y,m,1);for(i=0;iz;i+)printf( );for(i=0;imonisleap(y)m;i+)if(i=d-1)&(i9) /*在系统时间的今天上做记号【】*
21、/printf( %d,i+1);else if(i=d-1) printf(%2d,i+1); else if(i=d) printf(%5d,i+1);19 else printf(%6d,i+1); if(0=(z+i+1)%7)&(i+1)!=monisleap(y)m) /*每 7 天换一行*/ j+; printf(n); if(j=3) /*令提示语保持在同一行*/ printf(nnnn) ; if(j=4) printf(nnn) ; if(j=5) printf(nn) ; printf( 按“1”进入查询页面n);printf( 按“2”恢复系统日期n);printf( 按“3”打印日历n);key=getch();if(key=49)system(cls);refer();/*清屏*/if(key=50)system(cls);showdate();/*清屏*/if(key=51)system(cls);print();/*清屏*/void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园教师游戏指导策略对幼儿深度学习-基于2024年游戏视频指导行为编码分析
- 电力电子技术
- 福建省龙岩市2025-2026学年高二下学期4月期中联考英语试卷
- 会计档案管理实施细则(2026年)
- 2025年全国广播电视编辑记者资格考试(广播电视业务)全真模拟试题及答案
- 【广东】2025年高考广东卷化学高考真题文档版(含答案)-A4答案卷尾
- 停车场共享模式下的风险管理
- 2025-2030年在线社群运营与管理行业深度调研及发展战略咨询报告
- 手机外屏玻璃行业商业模式创新分析报告
- 2025-2030年美发沙龙预约企业制定与实施新质生产力战略分析研究报告
- 2025年贵州省贵阳市初二地理生物会考考试试题及答案
- 2026年宁波市九年级中考语文一模试卷附答案解析
- 2026年江苏南京市高三二模高考物理试卷试题(含答案详解)
- 第13课 每个人都有梦想 课件(内嵌视频)2025-2026学年道德与法治二年级下册统编版
- 2026四川省成都广定发展集团有限公司招聘3人备考题库(含答案详解)
- 2026四川成都市公共交通集团有限公司招聘投资管理专员岗位备考题库附答案详解(b卷)
- 【完整版】施工现场群体性事件应急预案
- 2026年中考历史考前冲刺:小论文 满分方法指导讲义
- 2026年普通高等学校招生全国统一考试语文模拟预测卷(附答案)(2026高考语文终极押卷)
- (完整版)旅游学概论期末试题(附答案)
- 2025年广东省深圳市初二学业水平地理生物会考真题试卷(+答案)
评论
0/150
提交评论