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

下载本文档

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

文档简介

1、语言课程设计报扌万年历系统设计学院:理学院专业:信息与计算科学名:指导教师:卜、 、 序言经过一个学期对C程序设计的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如 何,这些知识都为我们的下一步学习打下了坚实的基础。做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥 补和加强。本程序是一个万年历程序,可以查询1970 年 1 月 1 日到 2100 年 1 月 1 日中任意一天是星期几,只要在运行程序 时按照要求输入年,月,日,程序就会把这一天是星期几显 示子啊屏

2、幕上;也可以输入一个年份和一个月份,程序就会 把该月份的月历显示在屏幕上,使人一目了然。该程序能与目前天文学研究中所采用的各种日历程 序所能计算的结果相一致。还有许多功能等着你去探讨。这个程序花费了很多时间,用了一天的时间去设计程序和调试程序,而在调试程序的过程中,经常会出现一些不 如意的地方,所以程序就要修改。所以这样经过一次又一次 的修改之后,程序更显得人性化。通过这一次程序的设计,让我深深的感受到程序员的辛苦。2012年6月11 日课程设计题目:万年历系统】【要求】1:程序的功能多样;2 :输入日期能够判断该日期是星期几;3 :输入一个年份能够显示出该年的全部月历;4 :输入一个年月能够

3、显示该月的月历;5 :输入一个年份能够判断该年是闰年还是平年;6 :能够退出。【系统总休功能设计框架】进入程序4、输入年1、输入年,月,日(星期* 1970,1 -2100,1 (继N续1:日期查询2: 一年月历查2、输入年询0-5000()3、输入年,月5000,12( 0,1)3:月历查询该月月12个月4:闰年判断屏幕显示5 :退出退出程序0-500 闰、平 y【系统功能模块图】主要功能模块1 :输入 year, month,day计算month与当年的1月间隔了多少天rr=r+ (yeai74)*1461+(year%4)*365+dayr=r%7r=0r=1r=2r=3r=4r=5r=

4、6SatSunMonTueWedThuFirY或y返回菜单其他输入均退岀程序代码:p rintf( please input the day you want(2100,1,1>*,*,*>1970,1,1):); scanf(%d,%d,%d, &year,&month, &day);for(b=0,r=0;bvmonth;b+)r=ab+r;year=year-1972;=叶(year/4)*1461+(year%4)*365+day;if(r%7=0) printfToday is Saturday.'n);Today is Sunday.n)

5、;else if(r%7=1) printf(Today is Monday.n);else if(r%7=2) printf(Today is Tuesday.n);Today is Wednesday.n);else if(r%7=3) printf(else if(r%7=4) printf(Today is Thursday.'n);else if(r%7=5 )p rintf(Today is Firday.n); choose=getchar();elsep rintf(p rintf(Continue?(y/n):n);scanf(%c,& choose);if

6、(choose='y'|choose='Y') main();主要功能模块2 :输入的年月判断输入年是否为定义年是总天数S=1总天数S为定义年到输入年的总天数加上该年一月到输入月份的天数,把 S判断输入的月份是否为闰年中的月份 1再加否该月是否大于二月 否是把S加上该年一月 到输入月份的天数S再加上该 把年一月到输 入的月份的 天数1再加加上该年把S 一月到输入月 份的天数总天数为S判断S的最后一天为星期几从这一天起依次输岀输入月份的天数直到该月底为止程序代码:static int t12=31,0,31,30,31,30,31,31,30,31,30,31;i

7、nt i,y,weekday=0;long days=0;if(leap_year(year) t1=29;else t1=28;y=tmo nth-1;if(year>2006)days=(yeaF2006)*365+co un t_lea p( year)+m on thdays(m on th,year); weekday=days%7;else if(year<2006)days=(2005year)*365+co un t_lea p( year)+m on thdays(m on th,year); weekday=7Fdays%7;elsedays=mon thday

8、s(m on th,year);weekday=days%7;for (i=1;i<weekday+2;i+);for (i=1;i<=y;i+)if (i+weekday-t=t,i);else printf (=t,i);主要功能模块3 :输入的年份判断从定义年到输入的年份中每个年份是否为闰年否是闰年每年为366天平年每年为365天返回该年的天数程序代码: int i;if (year%4=0&&year_xOO1O_O!=O|yearO=O) i=1; else i=0;return i;【用到的语句】1. <stdio.h>,<co nio

9、.h>2. ma in()3. prin tf(),4. sca nf()5. a6.if 语句7. for语句8. void/*/*/*/*头文件*/主函数*/数组*/要调用到的函数*/【源程序代码】#in clude<stdio.h> #in clude <coni o.h>/主函数int mai n() int lea p_year(i nt y);int cou nt_lea p(i nt year);int mon thdays(i nt mon th,i nt year);void monthprin t(i nt year,i nt mon th);

10、int year,month,day,b,r,number;/ 定义变量char choose;int a=0,31,28,31,30,31,30,31,31,30,31,30,31;n);printf( printf( printf( printf( printf(1:ri qi>>>xing qi ji.n);2:yue li.n);3:ri li.n);4:run nian pan duan. n);5:exitn););n); printf ( scanf(%d,&number); if(number=1)printf(please input the day

11、 you want(2100,1,1>*,*,*>1970,1,1):); 输入要查询的日期 / scanf(%d,%d,%d,&year,&month,&day); for(b=0,r=0;b<month;b+)r=ab+r; year=year-1972;r=r+(year/4)*1461+(year%4)*365+day; 多少天please input the number:);/ 计算输入月份与但年月份间隔了多少天/ 计算输入日期与 1970,1,1 间隔了if(r%7=0)printf (else if(r%7=1)printf(else

12、if(r%7=2)printf(else if(r%7=3)printf(else if(r%7=4)printf(else if(r%7=5)printf(else printf( choose=getchar();printf(Continue?(y/n):n); scanf(%c,&choose); if (choose='y'|choose='Y') main(); else if(number=2) printf(scanf(%d,&year);Today is Saturday.n);Today is Sunday.n);Today

13、is Monday.n);Today is Tuesday.n);Today is Wednesday.n);Today is Thursday.n);Today is Firday.n);/ 主函数调用主函数本身/ 选择是否继续for(month=1;month<13;month+) printf(please input the year(5000>*>0):);/ 输入要查询的年份/ 循环输出 12 个月份的月历%dyear %dmonthn,year,month);printf(*n );Sun);printf(monthprint(year,month);MonTu

14、e WenThuFriSatn);printf(*n );choose=getchar();printf(Continue?(y/n):nn);scanf(%c,&choose);if (choose='y'|choose='Y') main();else if(number=3) printf(please input the year and month(2100,1>*,*>1970,1):);scanf(%d,%d,&year,&month);printf(/ 输入要查询的年,月 %dyear %dmonthn,yea

15、r,month);printf(*n);printf( Sun Mon Tue Wen ThuSunMonTueWenFriSatn);monthprint(year,month);/);printf(*n);choose=getchar();printf(Continue?(y/n):nn);scanf(%c,&choose);if (choose='y'|choose='Y') main(); else if(number=4) printf( please input a year5000>*>0:);/ 输入要查询的年份scanf(%

16、d,&year); if(leap_year(year) printf(This is runyear.n);else printf(This is pingyear.n); choose=getchar();printf(Continue?(y/n):nn); scanf(%c,&choose);if (choose='y'|choose='Y') main(); else/ 选择其他则退出return 0; int leap_year(int year) int i;if (year%4=0&&year_x0010_0!=0|

17、year0=0) i=1;/ 判断是否闰年else i=0; return i;int count_leap(int year) int i=0,j,min,max;if(year>2006) min=2006;max=year;else min=year+1;max=2006;for(j=min;j<max;j+)if(leap_year(j) i+;return i;/ 该月的天数int monthdays(int month,int year) int sum=0,i,j;if(year>=2006) static int t12=31,0,31,30,31,30,31

18、,31,30,31,30,31; j=month -1;if(leap_year(year) t1=29;else t1=28;for(i=0;i<j;i+)sum=sum+ti;else static int t112=31,30,31,30,31,31,30,31,30,31,0,31; j=12-month;if(leap_year(year) t110=29;else t110=28;for(i=0;i<=j;i+)sum=sum+t1i;return sum;/ 输出该月的月历void monthprint(int year,int month) static int t

19、12=31,0,31,30,31,30,31,31,30,31,30,31;int i,y,weekday=0;long days=0;if(leap_year(year) t1=29;else t1=28;y=tmonth -1;if(year>2006) days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;else if(year<2006)days=(2005 -year)*365+count_leap(year)+monthdays(month,year); weekday=7

20、 -days%7;elsedays=monthdays(month,year);weekday=days%7;/ 输出该月第一天所在位置之前/ 输出该月的月历for (i=1;i<weekday+2;i+)的空格);for (i=1;i<=y;i+)if (i+weekday - t=t,i);else printf (=t,i); ;调试及分析过程】1:在代码编辑器上输入以上程序代码后,保存并 f9 到 tc3.0 上运行 结果输出:分析:运行后出现“菜单” ,选项意思是:输入 1,则确定一个日期是星期几。 输入 2,则是查询某年的 12 个月历。输入 3,则是查询某年某月的月历

21、。 4,则 是判断输入年是闰年还是平年。 5,退出。2:选择 1 后,再根据提示输入 * ,* ,* :2011,10,28 结果输出: 分析:输入你要查询的年月日后,程序会经过计算输出该日的星期号。然后,输 出结果后,系统会询问你是否继续,输入 y或丫,继续;输入N或n或其他字母 都会直接退出。3:选择 y 后结果输出:42012: * 后,再根据提示输入你想查询的年份 2:选择 结果输出: 分析:输入你要查询的年份后,系统会经过计算得出每月的月历,然后输出。但 因为输出窗口限制,结果只能看到部分。同样的,输出结果后,系统仍然会询问 是否继续。5:选择 3 后,再根据提示输入你要查询的月份 * , * :2012,6 结果输出: 分析:输入你要查询的月份后,系统会经过计算得出该月的月历图,然后输出。 同样的系统依然会询问是否继续。6:选择 4 后,再根据提示输入你要查询的年份 * :2100 结果输出:7:在程序成功测试之前出现主要的

温馨提示

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

评论

0/150

提交评论