1、C语言课程设计汇报书万年历系统设计学院:理学院专业:信息和计算科学 姓名: 指导老师:序言 经过一个学期对C程序设计学习,同学们全部认为真正学到了有用知识,可能有部分人学不够理想,但不管怎样,这些知识全部为我们下一步学习打下了坚实基础。做这么一个课程设计,首先是为了检验我们一个学期来我们学习结果,其次也是为了让我们深入掌握和利用它,同时也让我们认清自己不足之处和微弱步骤,加以填补和加强。 本程序是一个万年历程序,能够查询1970年1月1日到211月1日中任意一天是星期几,只要在运行程序时根据要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也能够输入一个年份和30天份,程序就会把该月
2、份月历显示在屏幕上,使人一目了然。该程序能和现在天文学研究中所采取多种日历程序所能计算结果相一致。还有很多功效等着你去探讨。 这个程序花费了很多时间,用了一天时间去设计程序和调试程序,而在调试程序过程中,常常会出现部分不如意地方,所以程序就要修改。所以这么经过一次又一次修改以后,程序更显得人性化。经过这一次程序设计,让我深深感受到程序员辛劳。 6月11日 【课程设计题目:万年历系统】【要求】1:程序功效多样;2:输入日期能够判定该日期是星期几;3:输入一个年份能够显示出该年全部月历;4:输入一个年月能够显示该月月历;5:输入一个年份能够判定该年是闰年还是平年;6:能够退出。 进入程序【系统总体
3、功效设计框架】 1:日期查询2:十二个月月历查询3:月历查询4:闰年判定5:退出1、输入年,月,日(1970,1-2100,1)2、输入年(0-5000)3、输入年,月(0,15000,12)4、输入年(0-5000)闰、平年该月月历12个月历星期*屏幕显示继续Y,yN退出程序【系统功效模块图】关键功效模块1:输入year,month,day计算month和当年1月间隔了多少天rr=r+(year/4)*1461+(year%4)*365+dayr=r%7r=0r=1r=2r=3r=4r=5r=6SatSunMonTueWedThuFirY或y返回菜单其它输入均退出程序代码:printf(pl
4、ease input the day you want(2100,1,1*,*,*1970,1,1):);scanf(%d,%d,%d,&year,&month,&day);for(b=0,r=0;b) days=(year-)*365+count_leap(year)+monthdays(month,year); weekday=days%7; else if(year) days=(-year)*365+count_leap(year)+monthdays(month,year); weekday=7-days%7; else days=monthdays(month,year);week
5、day=days%7; for (i=1;iweekday+2;i+) printf (t); for (i=1;i=y;i+) if (i+weekday-1)%7=0) printf (nt%3dt,i); else printf (%3dt,i); 关键功效模块3: 输入年份 判定从定义年到输入年份中每个年份是否为闰年是 否闰年每十二个月为366天 平年每十二个月为365天 返回该年天数程序代码: int i; if (year%4=0&year%100!=0|year%400=0) i=1; else i=0; return i;【用到语句】1., /*头文件*/2.main() /*
6、主函数*/3.printf(),4.scanf()5.a /*数组*/6.if 语句7.for 语句8.void /*要调用到函数*/【源程序代码】#include#include int main() /主函数 int leap_year(int y); int count_leap(int year);int monthdays(int month,int year);void monthprint(int year,int month);int year,month,day,b,r,number; /定义变量char choose;int a=0,31,28,31,30,31,30,31
7、,31,30,31,30,31;printf(*mainMeun*n);printf( 1:ri qixing qi ji.n);printf( 2:yue li.n);printf( 3:ri li.n);printf( 4:run nian pan duan. n);printf( 5:exitn);printf(n);printf(*n);printf ( please input the number:);scanf(%d,&number);if(number=1)printf(please input the day you want(2100,1,1*,*,*1970,1,1):)
8、; scanf(%d,%d,%d,&year,&month,&day); /输入要查询日期for(b=0,r=0;b*0):); scanf(%d,&year); /输入要查询年份 for(month=1;month*,*1970,1):); scanf(%d,%d,&year,&month); /输入要查询年,月 printf( %dyear %dmonthn,year,month); printf(*n); printf( Sun Mon Tue Wen Thu Fri Satn); monthprint(year,month); / printf(n); printf(*n); choo
9、se=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(%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(%
10、c,&choose); if (choose=y|choose=Y) main(); else /选择其它则退出return 0;int leap_year(int year) /判定是否闰年 int i; if (year%4=0&year%100!=0|year%400=0) i=1; else i=0; return i;int count_leap(int year) int i=0,j,min,max; if(year) min=;max=year; else min=year+1;max=; for(j=min;j=) static int t12=31,0,31,30,31,30
11、,31,31,30,31,30,31; j=month-1; if(leap_year(year) t1=29; else t1=28; for(i=0;ij;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) days=(year-)*365+count_leap(year)+monthdays(month,year); weekday=days%7; else if(y
12、ear) days=(-year)*365+count_leap(year)+monthdays(month,year); weekday=7-days%7; else days=monthdays(month,year);weekday=days%7; for (i=1;iweekday+2;i+) /输出该月第一天所在位置之前空格 printf (t); for (i=1;i=y;i+) /输出该月月历 if (i+weekday-1)%7=0) printf (nt%3dt,i); else printf (%3dt,i);【调试及分析过程】1:在代码编辑器上输入以上程序代码后,保留并f
13、9到tc3.0上运行结果输出:分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。输入2,则是查询某年12个月历。输入3,则是查询某年某月月历。4,则是判定输入年是闰年还是平年。5,退出。2:选择1后,再依据提醒输入*,*,*:,10,28 结果输出:分析:输入你要查询年月以后,程序会经过计算输出该日星期号。然后,输出结果后,系统会问询你是否继续,输入y或Y,继续;输入N或n或其它字母全部会直接退出。3:选择y后结果输出:4:选择2后,再依据提醒输入你想查询年份*:结果输出:分析:输入你要查询年份后,系统会经过计算得出每个月月历,然后输出。但因为输出窗口限制,结果只能看到部分
14、。一样,输出结果后,系统仍然会问询是否继续。5:选择3后,再依据提醒输入你要查询月份*,*:,6结果输出:分析:输入你要查询月份后,系统会经过计算得出该月月历图,然后输出。一样系统仍然会问询是否继续。6:选择4后,再依据提醒输入你要查询年份*:2100结果输出:7:在程序成功测试之前出现关键问题是:错误:程序经计算后得出月历开头第一行对不上下面。分析:原因是在给每个月第一天前面空格时多空了一个位只要将“i=weekday;”改为“iweekday;”即可。【总结】经历了这次课程设计设计和制作整个过程,我才发觉我知识贫乏和知识面狭窄,真实感受到程序设计困难性,只说时间上面,我总共花了二十多个小时
15、。这次作课程设计我也是收获很大,首先,我对C语言有了更深了解,使用起来也愈加熟练,原来有部分不知道和不熟悉函数,我学会用了。其次,我这一次找了不少资料,找专业书籍、上网找各方面资料,也使我学到了部分书本中学不到知识,让我长了见识。同时我们同学之间也相互探讨,也促进了我们同学之间感情。这次作这一个设计,即使我自己觉很有成就感,不过这必竟是我第一次作C语言课程设计,肯定会有很多不足之处有待改善,相信以后我一定会做愈加好。对C语言在编写程序时用处有了更明确认识,知道了编写C程序通常法方步骤。最大收获是,编写程序时一定要有信心和勇气,要相信自己一定能够把这个程序编写出来。分析问题做出算法,想好思绪,在心里有个大致框架,然后按部就班记下自己想到每一点内容,把写下东西认真整理,查缺补漏,把部分细节地方补上,就这么一个貌似极难程序就写出来了。其实编程并不难,关键是要投入,要钻到里面去。下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句读,看是否能输出自己想要输出结果,假如发觉错误要立即改过来,再接着向下读,直到把程序调试完美无缺为止。