课程设计实验报告--简单万年历.doc_第1页
课程设计实验报告--简单万年历.doc_第2页
课程设计实验报告--简单万年历.doc_第3页
课程设计实验报告--简单万年历.doc_第4页
课程设计实验报告--简单万年历.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

C+课程设计简单万年历制作C+语言程序设计课程设计报告设计题目:简单万年历 专 业:网络工程 班 级:12级 姓 名:杨茂林 学 号:121124028 联系方式目 录1.设计目标32.设计思想33.类及函数的实现34.程序流程图35.程序源代码116.调试记录307.调试语录338.总结34简单万年历程序1.1设计题目描述 本程序是一个简单的实现时间系统功能的万年历程序,此程序是为了遵循用户的意愿与指示对用户输入的日期进行简单的处理,输出所要查询的日期的信息,如:当时的时间,年月日,生肖,天干地支,以及输出所要查询的日期日历并以日历形式排列出来。1.2设计目标本程序有以下目标要实现:用户可以进行选择,是要进行万年历时间校对系统还是万年历的查询系统,用户可以随时退出系统;:显示本地时间,并征询用户的意见是否要进行时间调整,如果进行了时间调整,要输出调整后的时间;:查询某年的万年历,并输出当年的年历,并显示所要查询的年份,显示出一年的日历、当年的天干地支、生肖、并判断是否为闰年;:将的功能具体到月份;:将的功能具体到日,并判断出用户所要查询的日期当天是什么节日,以及用户所要查询的节日距今天有多少天; :用户多次进行输入,知道用户满意为止。2.设计思想本程序中,因为要用到万年历的时间校对系统,所以,在设计的时候,我定义了一个时间类:clock类;由于系统要同步到本地的时间(即为运行时电脑上显示的时间),这里用到了 struct time结构体,接下来就是万年历的查询系统功能里面的函数,这些函数要实现的有指导用户进行操作的选项的界面,有计算该月的1号是星期几的函数,有输出每周即每月的表头函数、判断是否为闰年、判断每个月有多少天、要查询的那天距今天有多少天、判断所要查询的年份有多少天、计算指定日期距今天有多少天等函数。其中,共含一个主函数文件、三个功能文件、一个功能函数头文件、界面文件以及时钟类文件。其中,功能函数是主要的函数实现部分,时钟类则主要是实现万年历时间系统。3.类及函数的实现在此只涉及部分函数的实现细节,其他函数详看程序源代码:1.1本程序中,我只设计了一个clock类,类里面有实现时间系统校对功能的私有量,在进行时间校对的过程中,我选择了重载的方法,以达到自己想要的结果。1.2函数部分的实现则是比较普通的,没有什么特殊的地方。其中有如下函数需要实现:int week(int y,int m);/计算该月一号是星期几void printweek();/输出每周表头void printmonth(int m);/输出每月表头int leep(int y);/判断该年是否闰年int md(int y,int m);/判断该月有多少天void other(int year);int days1(int y,int m,int d);/计算该天时这一年的第几天int days2(int y);/判断该年有多少天int days3(int y);/计算从元年到该之年前总天数int totaldays(int y,int m,int d);/计算指定日期距今天的天数int yi();/实现万年历的时间校对功能 int er();/进入万年历的系统功能 int first();/实现第一个功能int second();/实现第二个功能void third();/实现第三功能/int tiangandizhi();int jiemian1();/界面1int jiemian2();在jiemian(),int md()及void third()的实现过程中,我选用了 switch-case套用switch-case语句;在int week()函数中,我采用了蔡勒公式用于计算每个月的星期一是多少,其他函数的实现详看源代码。 1.3在这个程序设计中,有好多知识是我以前没有接触过得,这一点还是比较欣慰的吧,例如,system(“pause”)有着清屏作用,还有就是计算每个月的1号是星期几的问题以及程序运行后背景与字体颜色的变换要用到system(“color”, 9b)4.程序流程图开始进入欢迎页面选择相应的系统功能选择相应按任意键继续进行1.万年历时间校对功能2.万年历时间查询功能3.退出时间校对的实现万年历三个查询功能的实现显示结果按任意键继续进行万年历时间校对系统的实现显示当地时间是否要进行时间调整按y任意键调大还是调小按m要增加的小时的个数要增加的分钟的个数要增加的秒的个数按n要减少的小时的个数要减少的分钟的个数要减少的秒的个数显示结果时间校对系统结束万年历的三个查询系统功能的实现1.查询某年的日历2查询某年某月的日历3.查询某年某月某日的日历输入要查询的年份输入要查询的年月输入要查询的年月日显示结果点任意键返回查询系统的第一个功能界面输入要查询的月份输出所要查询的年份的天干地支,生肖,是否为闰年定义月份变量m,并付初始值m=1判断该月天数根据年月由蔡勒公式计算出该月1号是星期几输出月份和每周的表头用循环输出前面空白的部分用循环输出该月的日历m=12m+第一个功能结束用循环输出前面空白的部分输出月份和每周的表头根据年月由蔡勒公式计算出该月1号是星期几判断该月天数输出所要查询的年份的天干地支,生肖,是否为闰年输入要查询的年月查询系统的第二个功能界面用循环输出该月的日历第二个功能结束输入要查询的年月日查询系统的第三个功能界面输出所要查询的年份的天干地支,生肖,是否为闰年距今天多少天判断该日期是星期几判断该日期是不是公历节日输入的日期距元年1月1日的天数系统的日期距元年1月1日的天数蔡勒公式计算,并用switch语句判断余数,输出对应的语句用switch语句判断是否为公历节日,并输出对应的语句第三个功能结束5.程序源代码#include#include/文件输出#include/清屏#include/控制宽度#include /这两个头文件是为了调用系统时间的#include #include#includeusing namespace std;int week(int y,int m);/计算该月一号是星期几void printweek();/输出每周表头void printmonth(int m);/输出每月表头int leep(int y);/判断该年是否闰年int md(int y,int m);/判断该月有多少天void other(int year);/以下六个函数是第三个功能里的int days1(int y,int m,int d);/计算该天时这一年的第几天int days2(int y);/判断该年有多少天int days3(int y);/计算从元年到该之年前总天数int totaldays(int y,int m,int d);/计算指定日期距今天的天数int yi();/实现万年历的时间校对功能 int er();/进入万年历的系统功能 int first();/实现第一个功能int second();/实现第二个功能void third();/实现第三功能/int tiangandizhi();int jiemian1();/界面1int jiemian2();int jiemian() system(cls); system(color 9d);/控制程序背景和字体的颜色,均为16进制,9背景颜色,d字体颜色 coutsetw(6) =endl; coutsetw(6) =endl; coutsetw(6) - - endl; coutsetw(6) endl; coutsetw(6) 欢迎进入万年历的页面 endl; coutsetw(6) endl; coutsetw(6) endl; coutsetw(6) endl; coutsetw(6) endl; coutsetw(6) endl; coutsetw(6) *-该万年历有以下功能供您选择-* endl; coutsetw(6) endl; coutsetw(6) *.1.万年历的时间校对系统.* endl; coutsetw(6) *.2.万年历的查询系统.* endl; coutsetw(6) *.0.退出.* endl; coutsetw(6) . endl; coutsetw(6) =WvWvWWvWvW=endl; coutendlendl; cout请输入您要使用的功能的序号(回车键确认):; coutn;switch(n)case 1:yi();break;case 2:er();break;case 0:exit(0); system(pause); system(cls); return 0; class Clock public: Clock(int a=0,int b=0,int c=0):hour(a),minute(b),second(c) void settime(int a=0,int b=0,int c=0) hour=a; minute=b; second=c; void showtime() cout现在时间为hour:minute:secondendl; coutendlshi;strftime(temp,30,%M,now);istringstream input4(temp);input4fen; strftime(temp,30,%S,now); istringstream input5(temp); input5miao; Clock myclock; myclock.settime(shi,fen,miao); myclock.showtime(); cout是否要调整时间,如果是请按y,按其他键继续返回主菜单endl; coutendl; a=getch(); if(a=y) cout请问是要将现在的时间调大还是调小,如果调大请按m,否者按nendl; do i=getch(); if(i=m) cout请输入要增加小时的个数:; coutb; b*=3600; while(b-) myclock+; cout请输入要增加分钟的个数:; coutc; c*=60; while(c-) myclock+; cout请输入要增加的秒数:; coutd; while(d-) myclock+; myclock.showtime(); system(pause); else if(i=n) coutb; b*=3600; while(b-) myclock-; coutc; c*=60; while(c-) myclock-; coutd; while(d-) myclock-; myclock.showtime(); system(pause); else cout输入有误,请重新输入endl; while(i!=m&i!=n); jiemian(); int er() coutjiemian1()endl; coutjiemian2()endl;int main() coutjiemian()endl;/调用jiemian函数,到达页面 coutyi()endl; system(cls);return 0;int jiemian1() coutendlendl; coutsetw(6) =endl;coutsetw(6) *endl;coutsetw(6) endl;coutsetw(6) (二)现在进入万年历查询系系统 endl;coutsetw(6) endl;coutsetw(6) 该系统有以下功能可供您选择 endl;coutsetw(6) endl;coutsetw(6) =endl; coutendlendlendl;system(pause); system(cls);jiemian2();int jiemian2()coutendl;coutsetw(6) =endl;coutsetw(6) =endl;coutsetw(6) endl;coutsetw(6) 系统功能 endl;coutsetw(6) 1、查询某年的日历 endl;coutsetw(6) 2、查询某年某月的日历 endl;coutsetw(6) 3、查询某年某月某日的信息 endl;coutsetw(6) 4、返回 endl;coutsetw(6) endl;coutsetw(6) =endl;coutendlendl;coutn;switch(n)case 1:first();break;case 2:second();break;case 3:third();break;case 4:jiemian();break; default:cout输入有误,请重新输入endl; while(n4);coutendl;cout点任意键返回主菜单endl;system(pause);system(cls);jiemian(); int first()/第一个功能,查询某年的日历ofstream outfile(第一个功能.txt,ios:out);/定义一个文件输出流对象outfile int y,m,w,d,i,day;couty;cout您所查询的内容如下:endl;coutendl;couty年日历endl;other(y);outfiley年日历endl;/输出到文件for(m=1;m=12;m+)int m1,y1;/m1是指月份,y1是指年份 m1=m;y1=y;if(m13)m1+=12;y1-;/在蔡勒公式中,某年的1,2月份要看作是上一年的13,14月份 w=week(y1,m1);/调用week函数,计算该月一号是星期几day=md(y,m);/调用md函数,判断该月有多少天printmonth(m);/调用printmonth函数,输出月份表头outfilem月份endl;/输出到文件printweek();/输出每周表头outfilesetw(8)Sunsetw(8)Monsetw(8)Tuessetw(8)Wedsetw(8)Thurssetw(8)Frisetw(8)Satendl;/输出到文件for(i=0;iw;i+)/若每个月前面有空的,将其空出,w是指每个月的1号是星期几 coutsetw(8) ;outfilesetw(8) ;/输出到文件for(d=1;d=day;d+,w+)/输出该月的日历,day是指每个月的天数 coutsetw(8)d;outfilesetw(8)d;/输出到文件if(w%7=6)coutendl;outfileendl;/输出到文件coutendl;coutendl;coutendl;outfileendlendlendl;/输出到文件outfile.close();/关闭文件return 0;int second()/第二个功能查询某年某月的日历ofstream outfile(第二个功能.txt,ios:out);int y,m,w,d,i,day;coutym;cout您所查询的内容如下:endl;w=week(y,m);day=md(y,m);coutendl;other(y);couty年m月endl;outfiley年m月endl;printweek();outfilesetw(8)Sunsetw(8)Monsetw(8)Tuessetw(8)Wedsetw(8)Thurssetw(8)Frisetw(8)Satendl;/输出到文件for(i=0;iw;i+)coutsetw(8) ;outfilesetw(8) ;for(d=1;d=day;d+,w+)coutsetw(8)d;outfilesetw(8)d;if(w%7=6)/w%7是判断换行不行的,星期日在第一位 ,星期六在最后一位coutendl;outfileendl;coutendl;outfileendl;return 0;void third()/第三个功能,查询某年某月某日的信息 /couttiangandizhi()endl;ofstream outfile(第三个功能.txt,ios:out);int y,m,d,n;coutymd;cout您所查询的内容如下:endl;coutendl;n=totaldays(y,m,d);/计算指定日期距今天的天数outfile距离今天还有n天endl;coutendl;outfileendl;int month,day;month=(y+y/4+5-42+26*(m+1)/10+d)%7;/蔡勒公式,用于计算星期几 switch (m) case 1: switch (d) case 1: cout这天是 元旦!; break; break; case 2: switch (d) case 2: cout这天是 世界湿地日!; break; case 14: cout这天是 情人节!; break; break; case 3: switch (d) case 3: cout这天是 全国爱耳日!; break; case 5: cout这天是 青年志愿者服务日!; break; case 8: cout这天是 国际妇女节!; break; case 9: cout这天是 保护母亲河日!; break; case 12: cout这天是 中国植树节!; break; case 14: cout这天是 白色情人节,国际警察日!; break; case 15: cout这天是 世界消费者权益日!; break; case 21: cout这天是 世界森林日,世界睡眠日!; break; case 22: cout这天是 世界水日!; break; case 23: cout这天是 世界气象日!; break; case 24: cout这天是 世界防治结核病日!; break; break; case 4: switch (d) case 1: cout这天是 愚人节!; break; case 5: cout这天可能是 清明节!; break; case 7: cout这天是 世界卫生日!; break; case 22: cout这天是 世界地球日!; break; case 26: cout这天是 世界知识产权日!; break; break; case 5: switch (d) case 1: cout这天是 国际劳动日!; break; case 3: cout这天是 世界哮喘日!; break; case 4: cout这天是 中国青年节!; break; case 8: cout这天是 世界红十字日!; break; case 12: cout这天是 国际护士节!; break; case 15: cout这天是 国际家庭日!; break; case 17: cout这天是 世界电信日!; break; case 20: cout这天是 全国学生营养日!; break; case 23: cout这天是 国际牛奶日!; break; case 24: cout这天是 世界防治结核病日!; break; break; case 6: switch (d) case 1: cout这天是 国际儿童节!; break; case 5: cout这天是 世界环境日!; break; case 6: cout这天是 全国爱眼日!; break; case 17: cout这天是 世界防治荒漠化和干旱日!; break; case 23: cout这天是 国际奥林匹克日!; break; case 25: cout这天是 全国土地日!; break; case 26: cout这天是 国际禁毒日!; break; break; case 7: switch (d) case 1: cout这天是 中国共产党诞生日,国际建筑日!; break; case 7: cout这天是 中国人民抗日战争纪念日!; break; case 11: cout这天是 世界人口日!; break; break; case 8: switch (d) case 1: cout这天是 中国人民解放军建军节!; break; case 12: cout这天是 国际青年节!; break; break; case 9: switch (d) case 8: cout这天是 国际扫盲日!;

温馨提示

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

评论

0/150

提交评论