




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 单单 位位 电气与电子工程电气与电子工程 学院学院( (系系) ) 班班 级级 学学 号号 学生姓名学生姓名 指导教师指导教师 完成日期完成日期 20132013 年年 7 7 月月 8 8 日日 C 语言课程设计 万年历 石家庄铁道大学课程设计 2 摘要摘要 本课程设计报告介绍的是 C 语言实习中的万年历项目。该报告共分五章, 第一章介绍选题意义,也就是我选择万年历作为课题项目的理由。第二章是系 统的分析,包括系统概述,系统的构成,其中包括各个模块功能的分析介绍, 该章节的最后介绍了各部分的功能,即组成程序的各个函数的功能介绍。第三 章是系统的实现,即为各个功能的实现而服务的十个自定义函数的流程图,通 过这十个流程图,您可以快速地明白程序功能的实现过程。第四章是总结,即 本人在设计万年历程序过程中的心得,以及在整个程序设计过程中我的工作过 程,也体现了我的设计思路。第五章是参考文献,在这里我主要查阅了C 程 序设计(第三版) 中的 C 函数附表,另外有几处欠缺的知识,我借鉴了另一本 书上的相关部分。第六章,也是最后一章,我把整个程序的源代码及其注释附 上。由于本人水平所限,程序也不可能很完美,必定有一些漏洞和拖沓,还请 谅解。好了,从这里开始,我将与你们分享我我在整个万年历程序设计中的所 做所想。 3 目录目录 1.选题的意义.4 4 2系统的分析.5 5 2.1 系统概述.5 2.2 系统的构成.5 2.3 各模块的功能.5 2.4 系统的运行环境.5 3系统实现.6 6 4总结.1111 5.参考文献.1212 6.附录(程序源代码).1313 4 第一章第一章 选题的意义选题的意义 (1) 通过万年历的设计,使我们掌握软件开发过程的问题分析、系统设 计、程序编写、测试等基本方法和技能。 (2) 通过万年历的设计,熟练掌握 C 语言中的分支、循环、数组、函数、 文件操作等的综合运用。 (3) 通过万年历的设计,可以培养独立思考、综合运用所学有关相应知 识的能力,更好地巩固C 程序设计课程中的所学内容。 (4) 通过万年历的设计,可以强化自己的动手编程能力,更加深刻地感 受 C 语言的优点。 (5) 万年历与我们的生活联系密切,通过万年历的设计,我们可以感受 知识与实践相结合的乐趣。 5 第二章第二章 系统的分析系统的分析 (1) 系统概述: 该程序可以实现系统当前日期所在月份的日历显示功能, 日期查询功能,程序的初始日期设定功能,还有把给定年份的日历输出 到 txt 文档中的功能。 (2) 系统的构成: 1. 日历显示功能。该日历能够根据系统日期自动进行初始化,如果没有 任何的输入,则会显示系统日期所在月份的月历,并能突出显示当前 日期。 2. 日期查询、闰年判断功能。输入日期进行查询,查询后将显示查询日 期所在的月份,并突出显示查询日期。如是闰年,则给出提示。 3. 日期合法性检查功能。程序还设置有对输入的日期进行合法性检查的 功能,如果年份、月份或者天数不合法,查询将被拒绝,并显示提示 信息。 4. 支持通过键盘设定系统日期。通过键盘的操作调整年份、月份和日期, 并显示调整后的日期。还可以通过键盘操作复位到系统所在的日期。 5. 输入任意年份,将该年份每月的日历写入文件。 (3) 各模块的功能及分析。 1. 定义全局变量及数组。 2. 程序共由十一个函数构成,其功能分别为: a. showtime() 显示系统日期所在月份的日历。 b. refer() 查询日期并显示所在年份是否为闰年。 c. setdate() 设定系统的初始日期。 d. print() 打印指定年份的每月日历并写入文件。 e. nowday() 提取系统所在日期的日 f. nowmonth() 提取系统所在日期的月份 g. nowyear() 提取系统所在日期的年份 h. isleap() 想判断给定年份是否为闰年 i. isweek() 判断给定日期是星期几,周日到周六分别为 0 到 6 j. errortest() 判断输入的日期是否合法并给出提示 k. main() 主函数,程序开始运行并转至 showdate() (4) 系统的运行环境 VC+6.0 6 第三章第三章 系统的实现系统的实现 主流程图: 显示系统日期所 在月份的日历 开始 日期查询功能 日历设定功能 日历输出功能 b. showdate() 7 开始showdate() 利利用用 nowday,nowyear,nowmonth提提 取取系系统统日日期期的的年年月月日日 输输出出当当月月的的日日 历历 日日期期查查询询日日期期设设定定日日历历打打印印 c. refer() 开始refer() 返回主页面 输入要查 询的日期 输出查询日 期当月的日 历 任任意意键键 d. setdate() 8 开始setdate() 输入要设 定的日期 输出设定日期所 在月份的日历 恢复初始日期 任任意意键键 e. nowday() 开始nowday() 提取系统日 输出日 结束 f. nowmonth() 9 开始 nowmonth() 提取系统月份 输出月份 结束 g. nowyear() 开始 nowyear() 提取系统年份 输出年份 结束 h. isleap() 10 开始isleap() 结束 提取year year%4=0 leap=1 leap=0 提取year year%400=0 year%100 0 i.nowweek() 11 开始 nowweek() 提取系统星期 输出星期 结束 j. errortest() 开始errortest() month12|month31|day29 Y day28 输出“出错” Y 结束 Y N N N 输出“出 错” Y day30Y N month=1,3,5,7,8,10,12N N Y 第四章第四章 12 总结总结 这个题目,从开始选择到调试完成,我一共花费了五天的时间。第一天,第一天, 选题并查阅了相关的资料,由于万年历比较贴近显示生活,要求涉及的知识也 比较多,能够更好地锻炼自己的编程能力,所以我选择了万年历作为自己的小 学期课题;第二天,第二天,我确定了设计思路,由于该程序要实现的功能相对比较多, 所以我计划使用若干个函数把要实现的功能分割开,由此,我拟定了第二章介 绍的十个自定义函数,并写下了大致流程;第三天第三天,我只用了一天就实现了第 二章介绍的系统构成中的前四项功能,即日历显示功能、日期查询功能、初始 日期设定功能、日期输入合法性检测功能。第四天第四天,由于之前没有接触过 C 语 言文件的操作,所以第五项日期打印功能的实现最艰难,我查阅了很多资料都 没有相关的介绍,所以我仔细翻看了关于文件操作的 C 语言函数,选择了 fputs(),计划把要输出的每个月的日历都汇入一个二维字符数组,然后输出到 txt 文件,但是经过了几次尝试,这个努力失败了,因为日期内容设计循环,无 法输出;第五天第五天,我又发现一种可以输出变量的函数,fprintf(),它可以输出指 定格式的变量,于是我将它结合 fputs()使用,放弃了使用二维字符数组的计划, 而是将以前的每个向屏幕的输出,分为变量和字符,分别用 fprintf()和 fputs()输 出,然后加入了从一月到十二月的循环结构,经过了几次修正,输出一年十二 个月的日历的功能终于得以实现,我把这个函数进行了修改后加入了之前编写 好的程序之中,简单调试后,程序的各功能得以完美实现。 通过万年历程序的设计,让电脑按照我的意思去工作,我体会到了程序设 计的乐趣,感受到了前所未有的成就感;让我也明白做事情要用心,失败了也 不要气馁,只要我们肯想,方法其实有很多。 13 第五章第五章 参考文献参考文献 1.C 程序设计(第 3 版).谭浩强.清华大学出版社.2012. 2.C 语言程序设计案例实践.李丹程.清华大学出版社.2009 第六章第六章 附(程序源代码)附(程序源代码) 14 万年历: #include #include/*时间和日期*/ #include #include time_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 ; 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=localtime( return local-tm_mday ; int isleap(int year) /*判断是否是闰年*/ /*被 4 整除但不被 100 整除的年时闰年*/ int leap ; /*被 400 整除的是闰年*/ leap=(year%4=0) return leap ; int isweek(int year,int month,int day) /*判断 X 年 X 月 X 日是星期几*/ int i,j,week; int allday=0 ; for(i=0;i28)printf(输入有错误,按任意键返回,重新输入n); if(getch()system(cls);refer();break; void print() FILE *fp; void showdate(); 16 int i,j=0,z,year,month; char filename10=date.txt; fp=fopen(filename,w); printf(请输入要打印日历的年份,例如:2013: ); scanf(%4d, fputs( ,fp); fprintf(fp,%d,year); fputs(年日历nn,fp); for(month=1;month13;month+) fputs(n,fp); fputs( ,fp); fprintf(fp,%d,month); fputs(月n,fp); fputs( 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) fputs(n,fp); fputs(n,fp); fputs( *n,fp); fputs(nn,fp); fclose(fp); system(cls);/*清屏*/ printf(日期已写入 date.txtn); printf( 按任意键返回主页面n); if(getch()system(cls);showdate(); void refer()/*查询日期*/ 17 int i,j=0,z,year,month,day; void showdate(),setdate(); printf(请输入要查询的日期,例如: ); scanf(%4d%2d%2d, errortest(year,month,day); system(cls);/*清屏*/ 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) else if(i=day-1) printf( %2d,i+1); else if(i=day) printf(%5d,i+1); else printf(%6d,i+1); if(0=(z+i+1)%7) 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=0,y,m,d; void showdate(); printf(n) ; printf(请输入要设定的日期,例如:); scanf(%4d%2d%2d, 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) 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) 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)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广州理工学院《数控技术》2023-2024学年第二学期期末试卷
- 安徽涉外经济职业学院《网店运营与管理》2023-2024学年第二学期期末试卷
- 2025年中国通信服务湖南省通信产业服务有限公司招聘笔试参考题库含答案解析
- 2025年浙江温州瑞安市瓯飞建设投资开发有限公司招聘笔试参考题库含答案解析
- 圆形小猪创意美术课件
- 挥手怀念我的父亲
- 点亮创业之星-掌握市场策略遵循法律规定
- 迎接未来-固体饮料制造年终总结-固体饮料发布会
- 家装设计方案讲解要点
- 房产领域年度峰会
- 危险化学品企业安全标准化规范课件
- 体育科研方法试卷试题答案
- 客户退货处理流程图
- 《国家电网公司十八项电网反事故措施(试行)》实施细则
- 中国民主同盟入盟申请表(样表)
- 毕业设计(论文)-轴向柱塞泵设计(含全套CAD图纸)
- 公安机关通用告知书模板
- 山东省初中学业水平考试信息技术学科命题要求
- 年贴现值系数表
- 《呼吸机的使用管理》PPT课件.ppt
- 国民收入核算
评论
0/150
提交评论