C语言万年历专业课程设计方案报告书.docx
《C语言万年历专业课程设计方案报告书.docx》由会员分享,可在线阅读,更多相关《C语言万年历专业课程设计方案报告书.docx(17页珍藏版)》请在咨信网上搜索。
C语言课程设计汇报书 万年历系统设计 学院:理学院 专业:信息和计算科学 姓名: 指导老师: 序言 经过一个学期对《C程序设计》学习,同学们全部认为真正学到了有用知识,可能有部分人学不够理想,但不管怎样,这些知识全部为我们下一步学习打下了坚实基础。做这么一个课程设计,首先是为了检验我们一个学期来我们学习结果,其次也是为了让我们深入掌握和利用它,同时也让我们认清自己不足之处和微弱步骤,加以填补和加强。 本程序是一个万年历程序,能够查询1970年1月1日到211月1日中任意一天是星期几,只要在运行程序时根据要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也能够输入一个年份和30天份,程序就会把该月份月历显示在屏幕上,使人一目了然。该程序能和现在天文学研究中所采取多种日历程序所能计算结果相一致。还有很多功效等着你去探讨。 这个程序花费了很多时间,用了一天时间去设计程序和调试程序,而在调试程序过程中,常常会出现部分不如意地方,所以程序就要修改。所以这么经过一次又一次修改以后,程序更显得人性化。 经过这一次程序设计,让我深深感受到程序员辛劳。 6月11日 【课程设计题目:万年历系统】 【要求】 1:程序功效多样; 2:输入日期能够判定该日期是星期几; 3:输入一个年份能够显示出该年全部月历; 4:输入一个年月能够显示该月月历; 5:输入一个年份能够判定该年是闰年还是平年; 6:能够退出。 进入程序 【系统总体功效设计框架】 1:日期查询 2:十二个月月历查询 3:月历查询 4:闰年判定 5:退出 1、输入年,月,日(1970,1--2100,1) 2、输入年 (0--5000) 3、输入年,月 (0,1—5000,12) 4、输入年 (0--5000) 闰、平年 该月月历 12个月历 星期** 屏幕显示 继续 Y,y N 退出程序 【系统功效模块图】 关键功效模块1: 输入year,month,day 计算month和当年1月间隔了多少天r r=r+(year/4)*1461+(year%4)*365+day r=r%7 r==0 r==1 r==2 r==3 r==4 r==5 r==6 Sat Sun Mon Tue Wed Thu Fir Y或y返回菜单 其它输入均退出 程序代码: {printf("please input the day you want(2100,1,1>****,**,**>1970,1,1):"); scanf("%d,%d,%d",&year,&month,&day); for(b=0,r=0;b<month;b++) { r=a[b]+r; } year=year-1972; r=r+(year/4)*1461+(year%4)*365+day; if(r%7==0)printf (" Today is Saturday.\n"); else if(r%7==1)printf(" Today is Sunday.\n"); else if(r%7==2)printf(" Today is Monday.\n"); else if(r%7==3)printf(" Today is Tuesday.\n"); else if(r%7==4)printf(" Today is Wednesday.\n"); else if(r%7==5)printf(" Today is Thursday.\n"); else printf(" Today is Firday.\n"); choose=getchar(); printf("Continue?(y/n):\n"); scanf("%c",&choose); if (choose=='y'||choose=='Y') main(); } 关键功效模块2: 输入年月 判定输入年是否为定义年 是 否 总天数S=1 总天数S为定义年到输入年总天数 把S加上该年一月到输入月份天数,再加1 判定输入月份是否 为闰年中月份 是 否 该月是否大于二月 是 否 把S加上该 年一月 到输入月份天数 把S再加上该 把S加上该年年一月到输入 一月到输入月 月份天数 份天数 再加1 总天数为S 判定S最终一天为星期几 从这一天起依次输出输入月份天数直到该月底为止 程序代码: { static int t[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)) t[1]=29; else t[1]=28; y=t[month-1]; if(year>) { 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);weekday=days%7;} for (i=1;i<weekday+2;i++) printf ("\t"); for (i=1;i<=y;i++) {if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i); else printf ("%3d\t",i);}; } 关键功效模块3: 输入年份 判定从定义年到输入年份中 每个年份是否为闰年 是 否 闰年 每十二个月为366天 平年 每十二个月为365天 返回该年天数 程序代码: { int i; if (year%4==0&&year%100!=0||year%400==0) i=1; else i=0; return i; } 【用到语句】 1.<stdio.h>,<conio.h> /*头文件*/ 2.main() /*主函数*/ 3.printf(), 4.scanf() 5.a[] /*数组*/ 6.if 语句 7.for 语句 8.void /*要调用到函数*/ 【源程序代码】 #include<stdio.h> #include <conio.h> 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,31,30,31,30,31}; printf("*********************************mainMeun***********************************\n"); printf(" 1:ri qi>>>xing qi ji.\n"); printf(" 2:yue li.\n"); printf(" 3:ri li.\n"); printf(" 4:run nian pan duan. \n"); printf(" 5:exit\n"); 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):"); scanf("%d,%d,%d",&year,&month,&day); //输入要查询日期 for(b=0,r=0;b<month;b++) //计算输入月份和但年月份间隔了多少天 {r=a[b]+r;} year=year-1972; r=r+(year/4)*1461+(year%4)*365+day; //计算输入日期和1970,1,1间隔了多少天 if(r%7==0)printf (" Today is Saturday.\n"); else if(r%7==1)printf(" Today is Sunday.\n"); else if(r%7==2)printf(" Today is Monday.\n"); else if(r%7==3)printf(" Today is Tuesday.\n"); else if(r%7==4)printf(" Today is Wednesday.\n"); else if(r%7==5)printf(" Today is Thursday.\n"); else printf(" Today is Firday.\n"); choose=getchar(); printf("Continue?(y/n):\n"); //选择是否继续 scanf("%c",&choose); if (choose=='y'||choose=='Y') main(); //主函数调用主函数本身 } else if(number==2) { printf(" please input the year(5000>****>0):"); scanf("%d",&year); //输入要查询年份 for(month=1;month<13;month++) //循环输出12个月份月历 { printf(" %dyear %dmonth\n",year,month); printf("****************************************************************************\n"); printf(" Sun Mon Tue Wen Thu Fri Sat\n"); monthprint(year,month); printf("\n"); printf("****************************************************************************\n"); } choose=getchar(); printf("Continue?(y/n):\n\n"); 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 %dmonth\n",year,month); printf("************************************************************************\n"); printf(" Sun Mon Tue Wen Thu Fri Sat\n"); monthprint(year,month); // printf("\n"); printf("************************************************************************\n"); choose=getchar(); printf("Continue?(y/n):\n\n"); 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):\n\n"); scanf("%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<max;j++) if(leap_year(j)) i++; return i; } int monthdays(int month,int year) //该月天数 { int sum=0,i,j; if(year>=) { static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31}; j=month-1; if(leap_year(year)) t[1]=29; else t[1]=28; for(i=0;i<j;i++) sum=sum+t[i]; } else { static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31}; j=12-month; if(leap_year(year)) t1[10]=29; else t1[10]=28; for(i=0;i<=j;i++) sum=sum+t1[i]; } return sum; } void monthprint(int year,int month) //输出该月月历 { static int t[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)) t[1]=29; else t[1]=28; y=t[month-1]; if(year>) {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);weekday=days%7;} for (i=1;i<weekday+2;i++) //输出该月第一天所在位置之前空格 printf ("\t"); for (i=1;i<=y;i++) //输出该月月历 {if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i); else printf ("%3d\t",i); }; } 【调试及分析过程】 1:在代码编辑器上输入以上程序代码后,保留并f9到tc3.0上运行 结果输出: 分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。输入2,则是查询某年12个月历。输入3,则是查询某年某月月历。4,则是判定输入年是闰年还是平年。5,退出。 2:选择1后,再依据提醒输入****,**,**:,10,28 结果输出: 分析:输入你要查询年月以后,程序会经过计算输出该日星期号。然后,输出结果后,系统会问询你是否继续,输入y或Y,继续;输入N或n或其它字母全部会直接退出。 3:选择y后 结果输出: 4:选择2后,再依据提醒输入你想查询年份****: 结果输出: 分析:输入你要查询年份后,系统会经过计算得出每个月月历,然后输出。但因为输出窗口限制,结果只能看到部分。一样,输出结果后,系统仍然会问询是否继续。 5:选择3后,再依据提醒输入你要查询月份****,**:,6 结果输出: 分析:输入你要查询月份后,系统会经过计算得出该月月历图,然后输出。一样系统仍然会问询是否继续。 6:选择4后,再依据提醒输入你要查询年份****:2100 结果输出: 7:在程序成功测试之前出现关键问题是: 错误:程序经计算后得出月历开头第一行对不上下面。 分析:原因是在给每个月第一天前面空格时多空了一个位 只要将“i<=weekday;”改为“i<weekday;”即可。 【总结】 经历了这次课程设计设计和制作整个过程,我才发觉我知识贫乏和知识面狭窄,真实感受到程序设计困难性,只说时间上面,我总共花了二十多个小时。 这次作课程设计我也是收获很大,首先,我对C语言有了更深了解,使用起来也愈加熟练,原来有部分不知道和不熟悉函数,我学会用了。其次,我这一次找了不少资料,找专业书籍、上网找各方面资料,也使我学到了部分书本中学不到知识,让我长了见识。同时我们同学之间也相互探讨,也促进了我们同学之间感情。 这次作这一个设计,即使我自己觉很有成就感,不过这必竟是我第一次作C语言课程设计,肯定会有很多不足之处有待改善,相信以后我一定会做愈加好。对C语言在编写程序时用处有了更明确认识,知道了编写C程序通常法方步骤。最大收获是,编写程序时一定要有信心和勇气,要相信自己一定能够把这个程序编写出来。分析问题做出算法,想好思绪,在心里有个大致框架,然后按部就班记下自己想到每一点内容,把写下东西认真整理,查缺补漏,把部分细节地方补上,就这么一个貌似极难程序就写出来了。其实编程并不难,关键是要投入,要钻到里面去。下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句读,看是否能输出自己想要输出结果,假如发觉错误要立即改过来,再接着向下读,直到把程序调试完美无缺为止。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 万年历 专业课程 设计方案 报告书
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文