版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计报告 -万年历设计人:贾伟涛 学号:2013010901班级:13电信应电班指导老师:张伟日期:2014年6月11日内容提要(这个你最好自己写)通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。C语言是近年在国内外得到迅速推广应用的一种机器语言。C语言功能丰富,表达能力强,使用灵活方便
2、,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。因此,C语言特别适合于编写各种软件。在这次的课程设计中我将把日常生活中最经常接触的日历的查询,利用C语言的程序编成一个简单的万年历查询系统。通过这个小小的系统可以实现很多功能。在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。在不断的调试中最终才获得最为完整的程序。接下来就是我的C语言课程设计的具体内容来了,大家拭目以待吧!目录一、 系统功能和数据说明-二、 问题分析-三、 程序总体设计及功能结构框图-四、 程序流程图-五、 源程序代码-六、使用说明-七、个人心得-八、参考
3、文献-一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。在我的万年历系统当中,就是将日历,月历做的简单明了,很方便我们的查询使用。下面是它要实现的一些基本功能:C语言编写万年历查询系统:(1)输入年份,判断是否为闰年(2)输入年月日,判断是星期几(3)输入年份,打印出12个月的月历(4)输入年月,打印出本月的日历(5)输入指令错误的提示(二)程序中的数据说明unsigned int run12 =31,29,31,30,31,30,31,31,30,31,30,31;unsigned int ping12=31
4、,28,31,30,31,30,31,31,30,31,30,31;这是定义的关于每个月天数的数组,根据大小月以及二月份的特殊情况将每个月的天数变为数组中的元素存入数组当中。其中run1=29,是将闰年二月的天数28天作为初始元素存入。另一个ping1=28,是将平年二月的天数28天作为初始元素存入。 char month_str10="一月","二月","三月","四月","五月","六月","七月","八月","九月&qu
5、ot;,"十月","十一月","十二月" 这个数组是定义12个月份的数组。二、问题分析对于闰年的判断,能被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(nian>6000)|(nian=0)|(yue>12)|(yue=0)|(ri>31)|(ri=0)printf("输入错误,请重新输入n");goto zailai;可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否是闰年,如果是闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,
7、则提示错误,并返回主菜单。三、程序总体设计及功能结构框图(一)功能结构框图主菜单闰年判断输出年历输出月历星期查询(二)程序设计头文件:#include<stdio.h>/基本输入输出函数#include <stdlib.h>/调用清屏函数#include<windows.h>/调用延时函数在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。其中有:int menu()/选择菜单void nian_yue()/输入年月函数void in_nian()/只输入年函数void _in()/年,月,日输入,范围判别int _nian2(int year)/判
8、断是否为闰年int yue_day(int year,int month)/计算某年某月有多少天函数int xingqi_(int year,int month,int day)/判断某年某月某日是星期几的函数void _4(int year,int month)/ 第四功能:显示某月的月历int _3( int year)/ 第三功能:显示某年的月历void _2()/第二功能:计算某年是否为闰年void _1()/第一功能:计算某年某月某日是星期几这些函数的定义及其相应的内部程序共同构筑起了这个万年历查询系统的总程序。其中int _nian2函数是用来判断输入的年份是否为闰年,实现了预计功
9、能的第一个方面;int xingqi函数则是为了实现判断星期而编写的;void _4函数则是为了实现单个月的月历而编写的,int _3函数则是为了实现某年的月历而编写的。 四、程序流程图(一)总流程图开始计算是否为闰年计算星期数按键1?按键3和44输出星期数输出是否为闰年计算编辑接收到的数据输出具体年历和月历按键1?是是是是计算是否为闰年计算星期数按键2?是是是计算星期数计算是否为闰年是是是是结束 退出(二)算法说明1. 总天数的算法:int _nian2函数的使用,判断出了输入年份是否为闰年的信息。判断一年是否为闰年的方法是:该年分而能被4整除但不能被100整除,或者是能被400整除。判断是
10、否为闰年的流程图:2.输入日期计算星期几:利用int xingqi_函数可以判断出星期,然后对于输入的日期可以通过公式c=days+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=0,t,w; for(i=1;i<month;i+)/月份循环 t=yue_day(year,i);/调用求某年某月有多少天函数 days+=
11、t; c=days+day; w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+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,mon
12、th);printf("n0 1 2 3 4 5 6n");printf("nS M T W T F Sn");/*以下是月历排版*/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("
13、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");temp=xingqi_(year,i,1);/调用判断某年某月某日是星期几的函数/*以下是月历排版*/for(j=1;j<=temp;j+)printf(" " );for(k=1;k<=yue_day(year,i);j+,k+) printf(&q
14、uot;%-2d ",k); if(j%7=0) printf("n");五、 源程序代码#include<stdio.h>/基本输入输出函数#include <stdlib.h>/调用清屏函数#include<windows.h>/调用延时函数unsigned int nian,yue,ri;/全局变量unsigned int run12 =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;ch
15、ar month_str10="一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"/*-选择菜单-*/int menu()int a;printf("nn - 万年历系统-nnn");printf("1.计算某年某月某日是星期几n");printf(
16、"2.计算某年是否为闰年n");printf("3.显示某年的月历n");printf("4.显示某月的日历n");printf("5.退出系统nn");printf("请输入相应的数字,并回车请输入");scanf("%d",&a);printf("您输入的是%d n",a);printf("请稍后,正在执行.");Sleep(1000);/延时秒system("cls");/清屏return(a);/返回
17、值/*-输入年月函数-*/void nian_yue()printf("请输入要显示的年,月并以逗号隔开n");printf("n例如:n");printf("要显示2014年月则输入: 2014,6回车n");printf("请输入");scanf ("%d,%d",&nian,&yue);/*-只输入年函数-*/void in_nian()printf("请输入年份,并回车n");printf("请输入");scanf("%d
18、",&nian);/*-年,月,日输入,范围判别-*/void _in()zailai:/跳转标志printf("请输入要计算的年份,输入的年,月,日请以逗号隔开n");printf("n例如:n");printf("要计算年月日输入格式为:2014,6,11 回车nn");printf("请输入:");scanf("%d,%d,%d",&nian,&yue,&ri);if(nian>6000)|(nian=0)|(yue>12)|(yue=
19、0)|(ri>31)|(ri=0)printf("输入错误,请重新输入n");goto zailai;/*-判断是否为闰年 方式二,是返回,否则返回-*/int _nian2(int year) if(year%400=0|year%4=0&&year%100!=0)/计算闰年return 1 ;elsereturn 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)&&am
20、p;month=2)/如果为闰年,月加return 29;elsereturn(mon_daymonth-1);/*判断某年某月某日是星期几的函数,返回星期对应的数字,如返回对应星期天*/int xingqi_(int year,int month,int day) int c,i,days=0,t,w; for(i=1;i<month;i+)/月份循环 t=yue_day(year,i);/调用求某年某月有多少天函数 days+=t; c=days+day; w=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+c)%7;/求星期公式 retur
21、n w;/*-第四功能:显示某月的月历-*/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");/*以下是月历排版*/for(i=1;i<=temp;i+)printf(" ");for(k=1;k<=yue_day(yea
22、r,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")
23、;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");/*-第二功能:计算某年是否为闰年-*/void _2()in_nian();/输入年函数printf("nn");if(_nian2(nian)=1)printf("%d年是闰
24、年n",nian);elseprintf("%d年是平年n",nian);/*-第一功能:计算某年某月某日是星期几-*/void _1()_in();/输入年月日函数printf("nn");printf("%d年%d月%d日是星期%dnn",nian,yue,ri,xingqi_(nian,yue,ri);/*-主函数-*/void main()int x;system("cls");/清屏star:/菜单重选跳转标志switch (menu()case 1:G1:/G1跳转标志_1();/启动第一功能
25、计算某年某月某日是星期几printf("输入1 并回车,返回主菜单n");printf("输入2 并回车,重新输入n");printf("输入其他则退出程序n");printf("请输入");scanf("%d",&x);system("cls");/清屏if(x=1)goto star;/goto语句跳转到菜单重选跳转标志if(x=2)goto G1;/goto语句跳转到G1break;case 2:G2:/G2跳转标志_2();/第二功能:计算某年是否为闰年pri
26、ntf("输入1 并回车,返回主菜单n");printf("输入其他则退出程序n");printf("输入2 并回车,重新输入n");printf("请输入");scanf("%d",&x);system("cls");/清屏if(x=1)goto star;/goto语句跳转到菜单重选跳转标志if(x=2)goto G2;/goto语句跳转到G2break;case 3:G3:/G3跳转标志in_nian();/输入年_3(nian);/启动第三功能printf(&
27、quot;nn");printf("输入1 并回车,返回主菜单n");printf("输入2 并回车,重新输入n");printf("输入其他则退出程序n");printf("请输入");scanf("%d",&x);system("cls");/清屏if(x=1)goto star;/goto语句跳转到菜单重选跳转标志if(x=2)goto G3;/goto语句跳转到G3break;case 4: G4:/G4跳转标志nian_yue();/输入年月_4(nian,yue);/启动第四功能printf("nn");printf("输入1 并回车,返回主菜单n");printf("输入2 并回车,重新输入n");printf("输入其他则退出程序n");pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年涂料项目立项申请报告模板
- 土木工程专业实习报告4篇
- 下车间实习报告模板十篇
- 2025年数字电视有条件接收设备项目申请报告模范
- 小学生演讲稿集合4篇
- 难忘那份爱初二作文600字5篇
- 转作风提效能心得体会三篇
- 新员工转正述职报告15篇
- 九年级化学下册 第十单元 酸和碱 课题1 常见的酸和碱 10.1.3 几种常见的碱教学实录 (新版)新人教版
- 个人实习自我鉴定范文10篇
- 2023年MCU销售工程师年度总结及下年工作展望
- 国家开放大学2023年7月期末统一试《11130卫生法学》试题及答案-开放本科
- 管网工程施工方案
- 2023年1月高考真题浙江卷地理试卷
- 商店进销存管理系统
- 《mc入门教程》课件
- 广东省深圳市六年级上学期语文期末试卷(含答案)
- 刑法学(上册)(第二版) 教案全套 第1-15章 刑法概说-刑罚制度
- 泡沫沥青就地冷再生
- 公关专业团队建设方案
- 玻璃幕墙更换玻璃施工方案
评论
0/150
提交评论