c语言课程设计报告万历_第1页
c语言课程设计报告万历_第2页
c语言课程设计报告万历_第3页
c语言课程设计报告万历_第4页
c语言课程设计报告万历_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计报告 万年历 设计人:贾伟涛 学号: 2013010901 班级: 13电信应电班 指导老师:张伟 日期: 2014年 6月 11 日 内容提要 这个你最好自己写) 通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。学习的 过程虽然有很多困惑, 但是当自己能够独立的看懂和独立的完成一个简单的程序 时,心中就会收获无限的喜悦和成就感。 我虽然可以看懂一些简单的程序, 编写 一些简单的计算程序, 更多的是学会了一种思想编程, 它让我在去思考很多 日常生活中的事物是怎么样通过一个个小小的函数实现功能的, 激发我对 c 语言 的兴趣。 C语言是近年在国内外得到迅速推广应用的一种

2、机器语言。 C语言功能丰富, 表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有 咼级语言的优点,又具有低级语言的许多特点。因此,C语言特别适合于编写各 种软件。 在这次的课程设计中我将把日常生活中最经常接触的日历的查询, 利用 C语言的程序编成一个简单的万年历查询系统。 通过这个小小的系统可以实现很 接下来就 多功能。在程序中你能看到很多熟悉的 C语言关键字,同时也加入了很多自己课 外了解到的一些关键字。 在不断的调试中最终才获得最为完整的程序。 是我的C语言课程设计的具体内容来了,大家拭目以待吧! 目录 、 系统功能和数据说明 、 问题分析 、 程序总体设计及功能结构框

3、图 四、程序流程图 五、源程序代码 六、使用说明 七、个人心得 八、参考文献 、系统功能和数据说明 一)功能简介 在日常生活中能接触到很多不同类型的日历, 在日历上我们通常希望它能简单明了 的给我们最想要的日期信息。 在我的万年历系统当中, 就是将日历, 月历做的简单明了, 很方便我们的查询使用。下面是它要实现的一些基本功能: C语言编写万年历查询系统: (1) 输入年份,判断是否为闰年 (2) 输入年月日,判断是星期几 (3) 输入年份,打印出 12 个月的月历 (4) 输入年月,打印出本月的日历 (5) 输入指令错误的提示 二)程序中的数据说明 un sig ned int run 12

4、=31,29,31,30,31,30,31,31,30,31,30,31; unsigned int ping12=31,28,31,30,31,30,31,31,30,31,30,31; 这是定义的关于每个月天数的数组, 根据大小月以及二月份的特殊情况将每个月的 天数变为数组中的元素存入数组当中。 其中 run1=29, 是将闰年二月的天数 28 天作为 初始元素存入。另一个 ping1=28, 是将平年二月的天数 28 天作为初始元素存入。 char month_str10= 一月, 二月, 三月, 四月, 五月, 六月 , 七月, 八月, 九月, 十月 II II 一月 , 十二月 ;

5、这个数组 是定义 1 2个月份的数组。 二、问题分析 对于闰年的判断,能被 4整除但不能被100整除,或者能被400整除的年份为 闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。 程序难点在于判断星期,但根据公式,我们可以很容易地用年月日推断出星期: c=days+day; 求星期公式 w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7;/ 其中year:要查询的年份 day:从该年的一月一日起到该天的天数 w:得出的星期数。 在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过一 定长度输出日期,在遇到某天时星期

6、天时,就换行输出,因此可以按照月历的格式 输出。 判断日期是否合法, if(n ia n6000)|( nian=0)|(yue12)|(yue=0川(ri31川(ri=0) printf(”输入错误,请重新输入n); goto zailai; 可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 , 如果通过此判断合法,再判断是否是闰年,如果是闰年,则判断二月份是否满足要 求,闰年二月份不能超过 29天,平年二月份不能超过 28天。在查询过程中,如果 发现输入不合法或者不满足输入要求,则提示错误, 并返回主菜单。 、程序总体设计及功能结构框图 (一)功能结构框图 二)程序设计

7、头文件: #include/ 基本输入输出函数 #include / 调用清屏函数 #include/ 调用延时函数 在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。其中有: int menu()/ 选择菜单 void nian_yue()/ 输入年月函数 void in_nian()/ 只输入年函数 void _in()/年, 月,日输入,范围判别 int _nian2(int year)/ 判断是否为闰年 int yue_day(int year,int month)/ 计算某年某月有多少天函数 int xingqi_(int year,int month,int day)/

8、判断某年某月某日是星期几的函数 void _4(int year,int month)/ 第四功能:显示某月的月历 int _3( int year)/ 第三功能:显示某年的月历 void _2()/ 第二功能:计算某年是否为闰年 void _1()/ 第一功能:计算某年某月某日是星期几 这些函数的定义及其相应的内部程序共同构筑起了这个万年历查询系统的总程序。 其中 int _nian2 函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方 面;int xingqi函数则是为了实现判断星期而编写的;void _4 函数则是为了实现单 个月的月历而编写的, int _3 函数则是为了实现

9、某年的月历而编写的。 四、程序流程图 (一)总流程图 开始 按键1? 是 按键2? 按键3和4 是 计算星期为闰年 1 r V 输出星期 数 计算星否为闰年 F 输出是: 闰年 否为/ 是 计算编辑接收到 的数据 (二)算法说明 1.总天数的算法: * 输出具体年 历和月历 * 按 键 是 结束退出 int _nian2函数的使用,判断出了输入年份是否为闰年的信息。判断一年是否为闰 年的方法是:该年分而能被 4整除但不能被100整除,或者是能被400整除。 判断是否为闰年的流程图: 2.输入日期计算星期几: 利用intxingqi_函数可以判断出星期,然后对于输入的日期可以通过公式 c=day

10、s+day; w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7 计算就可以输出相应的星期 数。 /*判断某年某月某日是星期几的函数,返回星期对应的数字,如返回对应星期天 int xingqi_(int year,int month,int day) */ int c,i,days=O,t,w; for(i=1;ivmonth;i+)/ t=yue_day(year,i);/ days+=t; 月份循环 调用求某年某月有多少天函数 c=days+day; w=(year-1+(year-1)/4-(year-1)/100+(year-1)/4

11、00+c)%7;/ return w; 求星期公式 3. 对输入信息的汇总: void _4( int year, int month) / 打印某年某月的月历 , int _3( int year) / 打 印某年的月历。 /* 第四功能:显示某月的月历 */ void _4(int year,int month) int i,temp,k; temp=xingqi_(year,month,1);/ 调用判断某年某月某日是星期几的函数 printf(n %d-%dn,year,month); printf(n0 1 2 3 4 5 6n); printf(nS M T W T F Sn);

12、/* 以下是月历排版 */ for(i=1;i=temp;i+) printf( ); for(k=1;k=yue_day(year,month);k+,i+) printf(%-2d ,k); if(i%7=0) printf(n); /*- 第三功能:显示某年的月历 */ int _3( int year) int temp; int i,j,k; printf(nn%d 年 n,year); for(i=1;i=12;i+) printf(nn%s(%d)n,month_stri-1,i); printf(0 1 2 3 4 5 6n); printf(S M T W T F S nn)

13、; temp=xingqi_(year,i,1);/ 调用判断某年某月某日是星期几的函数 /* 以下是月历排版 */ for(j=1;j=temp;j+) printf( ); for(k=1;k=yue_day(year,i);j+,k+) printf(%-2d ,k); if(j%7=0) printf(n); 五、 源程序代码 #include/ 基本输入输出函数 #include / 调用清屏函数 #include/ 调用延时函数 / 全局变量 unsigned int nian,yue,ri; unsigned int run12 =31,29,31,30,31,30,31,31,

14、30,31,30,31; unsigned int ping12=31,28,31,30,31,30,31,31,30,31,30,31; char month_str10= 一月, 二月, 三月 , 四月 , 五月, 六月 , 七月, 八月 , 九月, 十月, 十一月 , 十二月; /*选择菜单*/ int menu() int a; printf(nn 万年历 printf( 1. 计算某年某月某日是星期几 printf( 2. 计算某年是否为闰年 n); printf( 3. 显示某年的月历 n); printf( 4. 显示某月的日历 n); printf( 5. 退出系统 nn);

15、printf( 请输入相应的数字,并回车 请输入 scanf(%d, printf( 您输入的是 %d n,a); printf( 请稍后 ,正在执行 .); Sleep(1000);/ 延时秒 system(cls);/ 清屏 return(a); / 返回值 n); ); nnn); /* 输入年月函数 */ void nian_yue() printf( 请输入要显示的年,月 并以逗号隔开 n); printf(n 例如: n); printf( 要显示 2014 年月 则输入: 2014,6回车 n); printf( 请输入 ); printf(n例如: n); printf(要计算

16、年月日输入格式为: 2014,6,11 回车 nn); printf(请输入: ); scanf (%d,%d, /* 只输入年函数 */ void in_nian() printf( 请输入年份,并回车 n); printf( 请输入 ); scanf(%d, /* 年, 月,日输入,范围判别 */ void _in() zailai: / 跳转标志 printf( 请输入要计算的年份,输入的年,月,日请以逗号隔开 n); scanf(%d,%d,%d, if(nian6000)|(nian=0)|(yue12)|(yue=0)|(ri31)|(ri=0) printf( 输入错误,请重新输

17、入 n); goto zailai; /* 判断是否为闰年 方式二,是返回,否则返回 */ int _nian2(int year) if(year%400=0|year%4=0 else return 0; /* 求某年某月有多少天 */ int yue_day(int year,int month) int mon_day=31,28,31,30,31,30,31,31,30,31,30,31; if(_nian2(year) else return(mon_daymonth-1); */ /* 判断某年某月某日是星期几的函数,返回星期对应的数字,如返回对应星期天 int xingqi_(

18、int year,int month,int day) int c,i,days=0,t,w; for(i=1;imonth;i+)/ 月份循环 t=yue_day(year,i);/ 调用求某年某月有多少天函数 printf(n %d-%dn,year,month); printf(n0 1 2 3 4 5 6n); printf(nS M T W T F Sn); days+=t; 求星期公式 c=days+day; w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7;/ return w; /* 第四功能:显示某月的月历 */ void

19、 _4(int year,int month) int i,temp,k; temp=xingqi_(year,month,1);/ 调用判断某年某月某日是星期几的函数 /* 以下是月历排版 */ for(i=1;i=temp;i+) printf( ); for(k=1;k=yue_day(year,month);k+,i+) printf(%-2d ,k); printf(nn%s(%d)n,month_stri-1,i); printf(0 1 2 3 4 5 6n); printf(S M T W T F S nn); if(i%7=0) printf(n); /* 第三功能:显示某年

20、的月历 */ int _3( int year) int temp; int i,j,k; printf(nn%d 年 n “,year); for(i=1;i=12;i+) temp=xingqi_(year,i,1);/ 调用判断某年某月某日是星期几的函数 printf(%d 年是闰年 n,nian); printf(%d 年是平年 n,nian); /* 以下是月历排版 */ for(j=1;j=temp;j+) printf( ); for(k=1;k=yue_day(year,i);j+,k+) printf(%-2d ,k); if(j%7=0) printf(n); /* 第二功

21、能:计算某年是否为闰年 */ void _2() in_nian();/ 输入年函数 printf(nn); if(_nian2(nian)=1) else /* 第一功能:计算某年某月某日是星期几 */ printf(输入 1 并回车 , 返回主菜单 n); printf(输入 2 并回车,重新输入 n); printf(输入其他则退出程序 n); void _1() _in();/ 输入年月日函数 printf(nn); printf(%d年d月 1日是星期 dnn,nian,yue,ri,xingqi_(nian,yue,ri); /* 主函数 */ void main() int x;

22、 system(cls);/ 清屏 star:/ 菜单重选跳转标志 switch (menu() case 1: G1:/G1 跳转标志 _1();/ 启动第一功能计算某年某月某日是星期几 printf( 请输入 ); scanf(%d, case 2: system(cls);/ if(x=1) goto star; if(x=2) goto G1; break; G2:/G2 跳转标志 _2(); printf( printf( printf( printf( case 3: 清屏 /goto 语句跳转到菜单重选跳转标志 /goto 语句跳转到 G1 / 第二功能:计算某年是否为闰年 输入

23、 1 并回车 , 返回主菜单 n); 输入其他则退出程序 n); 输入 2 并回车,重新输入 n); 请输入 ); scanf(%d, system(cls);/ if(x=1) goto star; if(x=2) goto G2; break; 清屏 /goto 语句跳转到菜单重选跳转标志 /goto 语句跳转到 G2 G3:/G3 跳转标志 in_nian();/ 输入年 _3(nian);/ 启动第三功能 printf(nn); printf( 输入 1 并回车 , 返回主菜单 n); printf( 输入 2 并回车,重新输入 n); printf( 输入其他则退出程序 n); pr

24、intf( 请输入 ); printf(nn); printf( 输入 1并回车 ,返回主菜单 n); printf( 输入 2并回车,重新输入 n); scanf(%d, system(cls);/ 清屏 if(x=1) goto star; /goto 语句跳转到菜单重选跳转标志 if(x=2) goto G3; /goto 语句跳转到 G3 break; case 4: G4:/G4 跳转标志 nian_yue();/ 输入年月 _4(nian,yue);/ 启动第四功能 printf( 输入其他则退出程序 n); case 5: printf( 请输入 ); scanf(%d, system(cls);/ if(x=1) goto star; if(x=2) goto G4; break; 清屏 /goto 语句跳转到菜单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论