版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计评分表课程设计题目:万年历设计项目内容满分实评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日C语言课程设计之万年历实验报告分享者:仙仙剑一、实验题目:万年历设计二、试验时间:2012年12月28日至2013年1月5日三、实验地点:四、实验目的:本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。五、实验要求:1.每人一题,独立完成;设计要求有界面菜单。2.此次课程设计在规定的时间必须在实验室完成,不得以任何理由在其他地点进行;3.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其他的题目,当然在完成自己的题目之后根据个人兴趣可以继续选做其他的题目;4.每人必须撰写课程设计报告(格式附后)。并上交程序代码电子稿(每位同学先建立一个文件夹,取名规则为“学号+姓名”,文件夹里存放上交电子内容,每班取一文件夹名,取名规则为班级号,内放该班同学上交内容,每班学习委员统一收齐后拷贝给指导老师)。5.课程设计的成绩由两部分组成:考勤(30%)+程序检查成绩(40%)+报告检查成绩(30%)六、具体要求:1、查询某年某月每一天对应星期几2、可以查询某年某月的上个月或是下个月的日历情况3、查询某年某月某日是这一年的第几天,并查询该天是星期几4、判断该年是闰年还是平年,判断这一年的生肖七、实现思路:实现该程序一定要找准一个几点,比如找准2000年1月1日是星期几,然后在此基础上推出具体某天和这个几点之间相差多少天,然后推出该天是星期几,注意显示的时候格式要对齐。
流程图如下:开始主函数:开始主菜单主菜单输入整数select输入整数select1<=select<=41<=select<=4N Yswitch(select)switch(select)6 65432154321退出系统生肖查询闰年与平年查日历查询系统月历查询系统年历查询系统退出系统生肖查询闰年与平年查日历查询系统月历查询系统年历查询系统结束结束
(2)年历查询系统:主菜单主菜单年历查询系统年历查询系统输入年份year输入年份year输出是闰年输出不是闰年NY闰年NYyear>=1输出是闰年输出不是闰年NY闰年NYyear>=1 生肖生肖输出生肖输出生肖输出各月的情况计算各月的情况
(3)月历查询系统:输出各月的情况计算各月的情况主菜单主菜单月历查询系统月历查询系统输入year,month输入year,monthNyear>=1&&1<=month<=12Nyear>=1&&1<=month<=12YY输出此月及上一个月和下一个月的情况的情况输出此月及上一个月和下一个月的情况的情况(4)日历查询系统:主菜单主菜单输出该日的情况YNyear>=1&&1<=month<=12&&1<=day<=maxDay(year,month)输入year,month,day日历查询系统
八、实现过程:输出该日的情况YNyear>=1&&1<=month<=12&&1<=day<=maxDay(year,month)输入year,month,day日历查询系统#include<time.h>/*包含的头文件*/#include<stdio.h>#include<math.h>#include<windows.h>inteachyeartotal(intyear,intmonth,intday);/*函数声明*/intcounterdays(intyear,intmonth,intday);intnowtime(intyear,intmonth,intday);intweek(intyear,intmonth,intday);intmaxDay(intyear,intmonth);voidisleap(intyear);voidshengxiao(intyear);voidwhatweek(intyear,intmonth,intday);voiddisplay(intyear,intmonth);voiddisplay2(intyear,intmonth);voiddisplay3(intyear,intmonth,intday);voidjieri(intyear,intmonth,intday);voiddisplay1(intyear);voidgetmenu();voidmain()/*主函数*/{intyear,month,day,select;while(1){getmenu();printf("请输入相应数字:");/*菜单选择*/scanf("%d",&select);system("cls");/*调用DOS命令,清除屏幕上所有的文字*/switch(select){case1:/*当选择为1时显示年历*/printf("年历显示:输入年(如2012):");scanf("%d",&year);printf("\n");if(year>=1)/*显示年份从公元1年开始*/{isleap(year);shengxiao(year);display1(year);/*调用函数*/} else{system("cls");printf("输入无效,重新输入!\n");}break;case2:/*当选择为2显示月历*/printf("月历显示:输入年月(如2012,6):");scanf("%d,%d",&year,&month);if(year>=1&&month>=1&&month<=12){display2(year,month);}else{system("cls");printf("输入无效,重新输入!\n");}break;case3:/*当选择为3时显示日期*/printf("日期显示:输入年月日(比如2012,6,10):");scanf("%d,%d,%d",&year,&month,&day);if(year>=1&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month)){display3(year,month,day);}else{system("cls");printf("输入无效,重新输入!\n");}break;case4:/*查询闰年与平年*/printf("闰年与平年查询,请输入年份(比如2012):");scanf("%d",&year);printf("\n");if(year>=1){if(year%4==0&&year%100!=0||year%400==0)printf("\n%4d年是闰年\n\n\n",year);elseprintf("\n%4d年是平年\n\n\n",year);}else{system("cls");printf("输入无效,重新输入!\n");}break;case5:/*查询生肖*/printf("生肖查询,请输入年份(比如2012):");scanf("%d",&year);printf("\n");if(year>=1)shengxiao(year);else{system("cls");printf("输入无效,重新输入!\n");}break;case6:exit(0);/*正常结束程序的运行*/default:/*当输入其他数字时,输入无效,重新输入*/system("cls");printf("输入无效,重新输入!\n");}}}voidisleap(intyear)/*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)printf("%4d年是闰年,",year);elseprintf("%4d年是平年,",year);}voidshengxiao(intyear){intx;x=year%12;switch(x){case0:printf("此年的生肖是:猴\n\n");break;case1:printf("此年的生肖是:鸡\n\n");break;case2:printf("此年的生肖是:狗\n\n");break;case3:printf("此年的生肖是:猪\n\n");break;case4:printf("此年的生肖是:鼠\n\n");break;case5:printf("此年的生肖是:牛\n\n");break;case6:printf("此年的生肖是:虎\n\n");break;case7:printf("此年的生肖是:兔\n\n");break;case8:printf("此年的生肖是:龙\n\n");break;case9:printf("此年的生肖是:蛇\n\n");break;case10:printf("此年的生肖是:马\n\n");break;case11:printf("此年的生肖是:羊\n\n");break;}}intmaxDay(intyear,intmonth)/*每月的天数*/{inta[]={31,28,31,30,31,30,31,31,30,31,30,31};/*每个月中的天数*/if(year%4==0&&year%100!=0||year%400==0)a[1]=29;/*闰年2月份有29天*/returna[month-1];}inteachyeartotal(intyear,intmonth,intday)/*判断某天是一年中的第几天*/{inti,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;returnsum;}intweek(intyear,intmonth,intday)/*对天数进行判断确定是星期几*/{intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7;returnnumber;}voiddisplay(intyear,intmonth)/*输出年月*/{intmax,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n","Sun","Mon","Tue","Wed","Thu","Fri","sat");for(i=0;i<number;i++)printf("");/*1号前的星期补空格*/while(j<=max){printf("%6d",j);if(i%7==6)printf("\n");/*每7格换一行*/i++;j++;}printf("\n\n");}voiddisplay1(intyear)/*输出年历*/{inti;printf("各月的情况如下:\n\n");for(i=1;i<=12;i++){printf("%d年%d月\n\n",year,i);display(year,i);}}voiddisplay2(intyear,intmonth)/*输出月历*/{printf("\n%d年%d月\n",year,month);display(year,month);if(month==1){year=year-1;month=12;printf("\n此月的上一个月(即%d年%d月)的情况如下:\n\n",year,month);display(year,month);year=year+1;month=2;printf("\n此月的下一个月(即%d年%d月)的情况如下:\n\n",year,month);display(year,month);month=1;}if(month==12){ month=month-1; printf("\n此月的上一个月(即%d年%d月)的情况如下:\n\n",year,month); display(year,month); year=year+1; month=1;printf("\n此月的下一个月(即%d年%d月)的情况如下:\n\n",year,month); display(year,month); month=12; }if(month>=2&&month<=11){month=month-1;printf("\n此月的上一个月(即%d月)的情况如下:\n\n",month);display(year,month);month=month+2;printf("\n此月的下一个月(即%d月)的情况如下:\n\n",month);display(year,month);}}voiddisplay3(intyear,intmonth,intday)/*输出日历*/{whatweek(year,month,day);printf(“该天是这一年第%3d天”,eachyeartotal(year,month,day));jieri(year,month,day);counterdays(year,month,day);}intcounterdays(intyear,intmonth,intday)/*判断今天距特定日期的天数*/{intyear1,days0,days1,month1,days,day1;time_ttimep;/*函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成structtm类型,该类型的各数据成员分别表示年月日时分秒。*/structtm*p;/*在标准C/C++中,可以通过tm结构来获得日期和时间*/time(&timep);/*time函数原型是:time_ttime(time_t*timer);参数是能返回time_t型对象的指针timer,那里存放着当时时间。通常可以忽略这个参数,用NULL,直接就获得当时时间。(1970年1月1日起算的时间“秒”数)。time_ttimep:如果用别的方法得到时间,存在timep中。time(&timep):返回的就是timep里的值。*/p=gmtime(&timep);/*原型:structtm*gmtime(long*clock);功能:把日期和时间转换为格林威治(GMT)时间的函数。将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。*/year1=(1900+p->tm_year);month1=(1+p->tm_mon);day1=(p->tm_mday);/*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1);days=days0-days1;/*计算出两个日期之间的时间差*/printf("\n今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);returndays;}voidwhatweek(intyear,intmonth,intday)/*判断是星期几*/{intnumber;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachye-artotal(year,month,day);number=number%7;switch(number){case0:printf("\n%d年%d月%d日是星期日,",year,month,day);break;case1:printf("\n%d年%d月%d日是星期一,",year,month,day);break;case2:printf("\n%d年%d月%d日是星期二,",year,month,day);break;case3:printf("\n%d年%d月%d日是星期三,",year,month,day);break;case4:printf("\n%d年%d月%d日是星期四,",year,month,day);break;case5:printf("\n%d年%d月%d日是星期五,",year,month,day);break;case6:printf("\n%d年%d月%d日是星期六,",year,month,day);break;default:system("cls");printf("出现错误!\n");}}voidjieri(intyear,intmonth,intday)/*判断是否公历节日*/{if(month==1&&day==1)printf(",这天是元旦\n");if(year>=1300&&month==2&&day==14)printf(",这天是情人节\n");if(year>=1909&&month==3&&day==8)printf(",这天是妇女节\n");if(year>=1925&&month==3&&day==12)printf(",这天是植树节\n");if(year>=1582&&month==4&&day==1)printf(",这天是愚人节\n");if(year>=1890&&month==5&&day==1)printf(",这天是劳动节\n");if(year>=1950&&month==5&&day==4)printf(",这天是青年节\n");if(year>=1950&&month==6&&day==1)printf(",这天是儿童节\n");if(year>=1941&&month==7&&day==1)printf(",这天是建党日\n");if(year>=1950&&month==8&&day==1)printf(",这天是建军节\n");if(year>=1985&&month==9&&day==10)printf(",这天是教师节\n");if(year>=1950&&month==10&&day==1)printf(",这天是国庆节\n");}voidgetmenu()/*显示菜单选择*/{printf("************主菜单************\n\n");printf("*欢迎进入万年历系统*\n\n");printf("*1、年历显示*\n\n");printf("*2、月历查询*\n\n");printf("*3、日期查询*\n\n");printf("*4、闰年与平年查询*\n\n");printf("*5、生肖查询*\n\n");printf("*6、退出系统*\n\n");printf("******************************\n\n");printf("*******李渊*201220181028******\n\n");}九、实验总结(分析程序的得与失):本次实验的计算是一个难题,函数不易编写,通过去图书馆和上网的方式,查阅了各种资料,花费了大量的时间和精力,终于实现了题目所要求的功能。在查阅的过程中,发现有很多地方看不懂,这一方面是由于平时的基础不扎实,另一方面可能是我们没有学过,我深深体会到了C语言的博大精深,我们现在所掌握的可能只是一点皮毛。正所谓“师父领进门修行在个人”,通过这一个学期的学习,我们初步掌握了C语言最基本的知识,为以后的自学打下了基础,创造了前提;今后我们所面临的任务依然任重而道远,我们在课下要花费大量的功夫把C语言的基础打扎实,继续深造,将C语言运用的更加熟练,从而更好地学习其他语言。本次试验的一个亮点是增添了公历节日的输出和所查询的日期与今天相差多少天等功能。公历节日的输出较为简单,在能力的范围之内,但编写好程序之后,又发现编写得不够严密,例如,输入“1200,10,1”,则程序会输出“该天是国庆节”,但1200年新中国还没有建立,这显然与事实不符。于是把原本用的switch函数,全部改为if语句,并上网查出各个节日的历史起源,从而获得该节日开始的年份,最后终于实现这一功能。从中,我懂得了严谨的重要性,有些东西看似简单,但要把它严谨地做出来却并不是一件容易的事,树立严谨的作风,对于今后的编程是至关重要的。另一个是计算今天距离所查询的日期相差的天数,这一功能对我来说难度较大,我们从未接触过这样的问题。在没有任何头绪的情况下,借助互联网查到了相应的解决方案,需要调用系统时间,然后计算相应的时间差,从中我又学到了如何调用系统时间的方法,获益匪浅。另一方面,本想实现的农历查询功能以及随时返回主菜单功能由于能力、时间等原因未能实现,此为一个遗憾。农历的编写过于复杂,在现有的能力和精力下,实现此功能的确难度很大,这也体现了我们祖先高超的智慧,能编写这样的历法,真是太了不起了,今后有机会一定要实现这一功能。关于随时返回主菜单的功能,考虑到此函数的编写会破坏前面编写的循环系统,而且万年历只有两层内容,不像其他题目有很多层,也不必随时返回主菜单,这样做反而画蛇添足。因此没有编写此函数。十、实验心得:当拿到题目时,同学们都很茫然、不知所措,这样一个大的程序还从未编过,以前做实验时大多是抄书上的,很少自己编,现在真是悔恨不已。本身实验课就不多,再加上元旦冲掉8节实验课,使之雪上加霜,这意味着课下需要下更多的功夫。本想课下多去实验室,可是试验室元旦不开门,大一也不让拿电脑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题推广运营方案
- 民宿灯具订制方案
- 山西公共基础知识16
- 2021云南省昆明市中考物理试卷及答案
- 广东公务员面试模拟13
- 化工公司运营管理策略
- 陕西行政职业能力模拟82
- 北京市西城区2023-2024学年高一上学期期末考试 语文 含答案
- 河北省公务员面试模拟47
- 小学生心理健康教案
- MOOC 自然保护与生态安全:拯救地球家园-暨南大学 中国大学慕课答案
- 初中英语听说能力培养策略研究-课题立项-开题报告+中期论证报告
- 水平定向钻施工机械
- 室内设计行业优势与劣势分析
- 2024年滁州市中级人民法院招考聘用司法辅助人员高频考题难、易错点模拟试题(共500题)附带答案详解
- 城市管理知识竞赛考试题库200题(含答案)
- 北京市东城区六年级(上)期末语文试卷
- 乡村振兴农村设计案例分析报告
- 【体能大循环】聚焦体能循环-探索运动奥秘-幼儿园探究体能大循环有效开展策略课件
- 《化工设备检维修实训》课程标准(煤炭清洁利用技术)
- 乳房下垂个案护理
评论
0/150
提交评论