版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计报告 万年历设计人:贾伟涛学号: 2013010912班级: 13 电信应电班指导老师:张伟日期: 2014年6月 9日内容提要通过大一下学期对 C 语言的学习,了解到了很多 C语言的相关知识。学习的过 程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时, 心中就会收获无限的喜悦和成就感。我虽然可以看懂一些简单的程序,编写一些简 单的计算程序,更多的是学会了一种思想编程,它让我在去思考很多日常生活 中的事物是怎么样通过一个个小小的函数实现功能的,激发我对 c 语言的兴趣。C语言是近年在国内外得到迅速推广应用的一种机器语言。C 语言功能丰富, 表达能力强, 使用
2、灵活方便, 应用面广, 目标程序效率高, 可移植性好, 既具有高级语 言的优点,又具有低级语言的许多特点。因此,C语言特别适合于编写各种软件。在这次的课程设计中我将把日常生活中最经常接触的日历的查询,利用语言的程序编成一个简单的万年历查询系统。通过这个小小的系统可以实现很多功 能。在程序中你能看到很多熟悉的 C 语言关键字,同时也加入了很多自己课外了解 到的一些关键字。在不断的调试中最终才获得最为完整的程序。接下来就是我的 C 语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明 二、问题分析 三、程序总体设计及功能结构框图 四、程序流程图 五、源程序代码 六、使用说明 七、
3、个人心得 八、参考文献 一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历, 在日历上我们通常希望它能简单明了的给我们最想要的日期信息。在我的万年历系统当中,就是将日历,月历做的简单明了,很方便我们的查询使用。下面是它要实现的一些基本功能:C语言编写万年历查询系统:(1) 输入年份,判断是否为闰年(2) 输入年月日,判断是星期几(3) 输入年份,打印出 12 个月的月历(4) 输入年月,打印出本月的日历另新增:(1) 对输入指令错误的提示(2) 加入了调用系统时间函数(3) 还添加了欢迎界面并进行界面优化(二)程序中的数据说明int days12 = 31, 28, 3
4、1, 30, 31, 30, 31, 31, 30, 31, 30, 31;这是定义的关于每个月天数的数组,根据大小月以及二月份的特殊情况将每个 月的天数变为数组中的元素存入数组当中。其中 days1=28, 是将闰年二月的天数 28 天作为初始元素存入。在经过 yearMonth 函数后就可以给 days1 中存入正确的 月天数。 tm *tp;char *week= 一, 二, 三 , 四, 五, 六, 日 ;这两组数据设计都利用了指针定义,利用指针可以提高程序的可读性,可以更 方便使用。 这两个数组的作用是用于调用系统时间, 而定义的星期数组 *week 和年 月日变量 *tp ,由于还
5、没学到指针,在这里查阅了很多资料,并也借鉴了前辈们的很 多程序。二、问题分析对于闰年的判断, 能被 4整除但不能被 100整除,或者能被 400 整除的年份 为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。程序难点在于判断星期, 但根据公式, 我们可以很容易地用年月日推断出星 期:weekday=(day+2*month+3*(month+1)/5+year+year/4- year/100+year/400)%7;其中 year :要查询的年份day:从该年的一月一日起到该天的天数weekday:得出的星期数。在打印月历时, 只要知道第一天的星期, 就可以依次输入后面的日期,
6、 通过一定长度输出日期, 在遇到某天时星期天时, 就换行输出, 因此可以按照月历的格式输出对于初始输入当前系统时间, 可以通过 中的 time 和 localtime 函数取出系统时间进行初始化判断日期是否合法, if(year=3000|year=12|month=31|day=0)system(CLS);printf( 输入错误,系统及即将返回!);Sleep(3000);goto tz;可以先判断年月日是否有小于 0 的值,月和日是否有超出最大值 12 和 31 ,如 果通过此判断合法, 再判断是否时闰年, 如果时闰年, 则判断二月份是否满足要 求,闰年二月份不能超过 29 天,平年二月
7、份不能超过 28 天。在查询过程中,如 果发现输入不合法或者不满足输入要求,则提示错误,并返回主菜单。三、程序总体设计及功能结构框图一)功能结构框图星期查输出年二)程序设计标系准统输时入间输显出函数头文件: #include/#include/ 清屏函数 system() #include/ 延时函数 Sleep() #include / 调用系统时间函数 time ()在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。其中有:int isLeapYear(int year)/ 判断是否为闰年void hy()/ 欢迎信息;void Time() / 获取系统时间;int which
8、Weekday(int year, int month, int day)/ 判断某天为星期几;void yearMonth(int year, int month)/打印某年某月的月历;void monthDay(int year)/ 输入年份,打出个月历;void menu()/ 主菜单;void main()/ 主函数;这些函数的定义及其相应的内部程序共同构筑起了这个万年历查询系 统的总程序。 其中 isLeapYear 函数是用来判断输入的年份是否为闰年, 实现了预计 功能的第一个方面; whichWeekday 函数则是为了实现判断星期而编写的; yearMonth 函数则是为了实现
9、月历而编写的; Time()函数则是为调用系统时间而编写, 该 Time ()函数采用指针形式定义了 *week 数组和 *tp 变量 ; yearMonth ,monthDay 这两个 函数的共同使用就能够完成输出年历的功能。四、程序流程图(一)总流程图(二)算法说明1. 总天数的算法:isLeapYear 函数的使用,判断出了输入年份是否为闰年的信息。判断一年是否为闰年的方法是:该年分而能被 4整除但不能被 100 整除,或者是能被 400整除。判断是否为闰年的流程图:2. 输入日期计算星期几:利用 whichWeekday 函数可以判断出星期,然后对于输入的日期可以通过公式weekday
10、=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7计 算就可以输出相应的星期数。int whichWeekday(int year, int month, int day)/判断某天为星期几int weekday;if (month = 1 | month = 2)/公式中要把月和月换成是上一年的月和月month += 12;year -= 1;weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; / 计算星期的公式return weekda
11、y+1;3. 对输入信息的汇总:void yearMonth( int year, int month) / 打 印 某 年 某 月 的 月 历 , void monthDay(int year) / 输入年份,打出个月历; 通过这两个函数可以将输入数据的 具体信息通过完整日历的形式表示出来。void yearMonth(int year, int month)/打印某年某月的月历int i,j=0;int weekday; / 计算这个月第一天是星期几weekday = whichWeekday(year, month, 1);printf(n%d 年%d月n,year,month);pri
12、ntf( n);printf( 星期一星期二星期三星期四星期五星期六星期天 n);if(isLeapYear(year) & month = 2) days1 = days1 + 1;printf( );for(i = 1; i weekday; i +)printf( );for(i = 0; i 8 - weekday; i +)printf(%6d, i+1);printf( );printf(n );for(i = 9-weekday; i = daysmonth-1; i +,j+)if(j = 7)j = 0;printf(n );printf(%6d , i);n);每月的天数,
13、闰年printf(nvoid monthDay(int year)/输入年份,打出个月历int i;for(i = 0; i 12; i +)yearMonth(year,i+1);printf(nn);五、源程序代码#include/ 标准输入输出函数#include/ 清屏函数 system()#include/ 延时函数 Sleep()#include / 调用系统时间函数 time ()int days12=31,28,31,30,31,30,31,31,30,31,30,31;/二月要加int isLeapYear(int year)/判断是否为闰年if(year%4 = 0 & y
14、ear%100 != 0 | year%400 = 0)return 1;elsereturn 0;void hy()/ 欢迎信息printf(nSleep(700);/ 延时毫秒printf(Sleep(1000);printf(Sleep(1000);欢迎使用万年历查询系统 nn);祝您每天好心情! nnn);版本: v2.0nnn);printf(正在进入功能菜单,请稍候n);Sleep(5000);/ 延时秒void Time() / 获取系统时间time_t t;struct tm *tp;static char *week=一, 二, 三, 四, 五, 六 , 日;t=time(N
15、ULL);tp=localtime(&t);printf(t n);printf(tt 系 统 时 间 日 期 :%d 年 %d 月 %d 日 ,tp-tm_year+1900,tp-tm_mon+1,tp-tm_mday);printf( %d:%d:%d ,tp-tm_hour,tp-tm_min,tp-tm_sec);printf( 星期 %sn,week(tp-tm_wday)-1);n);printf(tint whichWeekday(int year, int month, int day)/判断某天为星期几int weekday;if (month = 1 | month =
16、2)/公式中要把月和月换成是上一年的月和月month += 12;year -= 1;weekday=(day+2*month+3*(month+1)/5+year+year/4- year/100+year/400)%7; / 计算星期的公式return weekday+1;void yearMonth(int year, int month)/ 打印某年某月的月历int i,j=0;int weekday; / 计算这个月第一天是星期几 weekday = whichWeekday(year, month, 1);printf(n%d 年%d月n,year,month);printf( n
17、);printf( 星期一星期二星期三星期四星期五星期六星期天 n);if(isLeapYear(year) & month = 2) days1 = days1 + 1;printf( );for(i = 1; i weekday; i +)printf( );for(i = 0; i 8 - weekday; i +)printf(%6d, i+1);printf( ););printf(nfor(i = 9-weekday; i = daysmonth-1; i +,j+)if(j = 7)j = 0;printf(n );printf(%6d , i);printf(n n);void
18、 monthDay(int year)/ 输入年份,打出个月历int i;for(i = 0; i =3000|year=3000|year=12|month=31|day=3000|year=3000|year=12|month0)system(CLS);printf( 输入错误,系统及即将返回! );Sleep(3000);goto tz;yearMonth(year,month);if(isLeapYear(year) & month = 2)/ 如果年份为闰年,则月加天出请按 n 请选择:days1 = days1 + 1;printf( 提示 :n 如继续运行请按 n 如回首菜单请按 n 如退 );ch=getch();if(ch=1)goto t4;if(ch=2)goto tz;if(ch=0)exit(0);break;case 5:printf(n 是否确定退出? n); printf(确定请按,取消请按 );ch=getch();if(ch = 2)goto tz;elseprintf( );exit(0);/ 退出break;default:system(CLS);printf( 您的输入的指令有误 , 请重新输入 !nn); printf( 提示 :n 如回首菜单请按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产教融合数智赋能实施方案
- 代理商签合同还协议
- 公务员面试协议合同
- 个人分红协议书范本
- 临时摊位买卖协议书
- 临时工合同三方协议
- 代理商授权合同范本
- 橡胶钢渣沥青混合料自愈合特性研究
- 位打包搬运合同范本
- 城市排水系统分区优化方案
- 降低阴式分娩产后出血发生率-PDCA
- GB/T 985.2-2008埋弧焊的推荐坡口
- GB/T 40548-2021煤层气井分层控压合层排采技术规范
- 第六章旅游环境管理
- 突发环境事件应急隐患排查治理制度
- 生物质资源及其开发利用课件
- 山东入额考试试卷B答案定稿
- 软著授权-软件著作权授权-软著授权书模板
- 建筑安全员c证考试题库含答案
- 普通高中数学课程标准
- 建立评估模型 实施预警监控
评论
0/150
提交评论