专业课程设计实验报告万年历.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专业课程 设计 实验 报告 万年历
- 资源描述:
-
专业课程设计实验报告万年历 《C++课程设计——简单万年历制作》 《C++语言程序设计》 课程设计报告 设计题目:简单万年历 专 业:网络工程 班 级:12级 姓 名:杨茂林 学 号:121124028 联系方式:13213501410 目 录 1.设计目标……………………………………………3 2.设计思想……………………………………………3 3.类及函数的实现……………………………………3 4.程序流程图…………………………………………3 5.程序源代码…………………………………………11 6.调试记录……………………………………………30 7.调试语录……………………………………………33 8.总结…………………………………………………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();//界面1 int 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<=12 m++ 第一个功能结束 用循环输出前面空白的部分 输出月份和每周的表头 根据年月由蔡勒公式计算出该月1号是星期几 判断该月天数 输出所要查询的年份的天干地支,生肖,是否为闰年 输入要查询的年月 查询系统的第二个功能界面 用循环输出该月的日历 第二个功能结束 输入要查询的年月日 查询系统的第三个功能界面 输出所要查询的年份的天干地支,生肖,是否为闰年 距今天多少天 判断该日期是星期几 判断该日期是不是公历节日 输入的日期距元年1月1日的天数–系统的日期距元年1月1日的天数 蔡勒公式计算,并用switch语句判断余数,输出对应的语句 用switch语句判断是否为公历节日,并输出对应的语句 第三个功能结束 5.程序源代码 #include<iostream> #include<fstream>//文件输出 #include<stdlib.h>//清屏 #include<iomanip>//控制宽度 #include <time.h> //这两个头文件是为了调用系统时间的 #include <stdio.h> #include<conio.h> #include<sstream> using 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();//界面1 int jiemian2(); int jiemian() { system("cls"); system("color 9d");//控制程序背景和字体的颜色,均为16进制,9背景颜色,d字体颜色 cout<<setw(6)<<" "<<"====================================================================="<<endl; cout<<setw(6)<<" "<<"==========★=======================================★================"<<endl; cout<<setw(6)<<" "<<"╬---★ ★ ★ ★ ★ ★ ★ ★--------╬ "<<endl; cout<<setw(6)<<" "<<"╬ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★ 欢迎进入万年历的页面 ★ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★ ★ ★ ★ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★ ★ ★ ★ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★ ★ ★ ★ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★ ★ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ *****----该万年历有以下功能供您选择----***** ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ╬ "<<endl; cout<<setw(6)<<" "<<"╬ *★*....1.万年历的时间校对系统....*★* ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★*....2.万年历的查询系统.........★* ╬ "<<endl; cout<<setw(6)<<" "<<"╬ *★*..0.退出..................*★* ╬ "<<endl; cout<<setw(6)<<" "<<"╬ ★......................★ ╬ "<<endl; cout<<setw(6)<<" "<<"========================WvWvW★★★WvWvW============================="<<endl; cout<<endl<<endl; cout<<"请输入您要使用的功能的序号(回车键确认):"; cout<<endl; int n; cin>>n; 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<<":"<<second<<endl; cout<<endl<<endl;} void operator++(int){ second++; if(second==60){ second=0; minute++;} if(minute==60){ minute=0; hour++;} if(hour==24) hour=0;} void operator--(int){ second--; if(second==-1){ second=59; minute--;} if(minute==-1){ minute=59; hour--;} if(hour==-1) hour=23;} private: int hour,minute,second;}; int yi(){ char a,i,temp[30]; int b,c,d,shi,fen,miao; time_t t; time(&t); struct tm *now; //tm结构体,得到本地时间 now=localtime(&t); strftime(temp,30,"%H",now); istringstream input3(temp); input3>>shi; strftime(temp,30,"%M",now); istringstream input4(temp); input4>>fen; strftime(temp,30,"%S",now); istringstream input5(temp); input5>>miao; Clock myclock; myclock.settime(shi,fen,miao); myclock.showtime(); cout<<"是否要调整时间,如果是请按y,按其他键继续返回主菜单"<<endl; cout<<endl; a=getch(); if(a=='y'){ cout<<"请问是要将现在的时间调大还是调小,如果调大请按m,否者按n"<<endl; do{ i=getch(); if(i=='m'){ cout<<"请输入要增加小时的个数:"; cout<<endl; cin>>b; b*=3600; while(b--) myclock++; cout<<"请输入要增加分钟的个数:"; cout<<endl; cin>>c; c*=60; while(c--) myclock++; cout<<"请输入要增加的秒数:"; cout<<endl; cin>>d; while(d--) myclock++; myclock.showtime(); system("pause"); } else if(i=='n'){ cout<<"请输入要减少小时的个数:"; cin>>b; b*=3600; while(b--) myclock--; cout<<"请输入要减少分钟的个数:"; cin>>c; c*=60; while(c--) myclock--; cout<<"请输入要减少的秒数:"; cin>>d; while(d--) myclock--; myclock.showtime(); system("pause"); } else cout<<"输入有误,请重新输入"<<endl; }while(i!='m'&&i!='n'); } jiemian(); } int er(){ cout<<jiemian1()<<endl; cout<<jiemian2()<<endl; } int main(){ cout<<jiemian()<<endl;//调用jiemian函数,到达页面 cout<<yi()<<endl; system("cls"); return 0; } int jiemian1() { cout<<endl<<endl; cout<<setw(6)<<" "<<"=============================================================="<<endl; cout<<setw(6)<<" "<<"╬***********************************************************╬"<<endl; cout<<setw(6)<<" "<<"╬ ╬"<<endl; cout<<setw(6)<<" "<<"╬ (二)现在进入万年历查询系系统 ╬"<<endl; cout<<setw(6)<<" "<<"╬ ╬"<<endl; cout<<setw(6)<<" "<<"╬ 该系统有以下功能可供您选择 ╬"<<endl; cout<<setw(6)<<" "<<"╬ ╬"<<endl; cout<<setw(6)<<" "<<"=============================================================="<<endl; cout<<endl<<endl<<endl; system("pause"); system("cls"); jiemian2(); } int jiemian2() { cout<<endl; cout<<setw(6)<<" "<<"=============================================================="<<endl; cout<<setw(6)<<" "<<"=============================================================="<<endl; cout<<setw(6)<<" "<<"╬ ╬"<<endl; cout<<setw(6)<<" "<<"╬ 系统功能 ╬"<<endl; cout<<setw(6)<<" "<<"╬ 1、查询某年的日历 ╬"<<endl; cout<<setw(6)<<" "<<"╬ 2、查询某年某月的日历 ╬"<<endl; cout<<setw(6)<<" "<<"╬ 3、查询某年某月某日的信息 ╬"<<endl; cout<<setw(6)<<" "<<"╬ 4、返回 ╬"<<endl; cout<<setw(6)<<" "<<"╬ ╬"<<endl; cout<<setw(6)<<" "<<"=============================================================="<<endl; cout<<endl<<endl; cout<<"请输入您要使用的功能的序号(回车键确认):"; int n; do{ cin>>n; switch(n) { case 1:first();break; case 2:second();break; case 3:third();break; case 4:jiemian();break; default:cout<<"输入有误,请重新输入"<<endl; }}while(n<1||n>4); cout<<endl; cout<<"点任意键返回主菜单"<<endl; system("pause"); system("cls"); jiemian(); } int first()//第一个功能,查询某年的日历 { ofstream outfile("第一个功能.txt",ios::out);//定义一个文件输出流对象outfile int y,m,w,d,i,day; cout<<"请输入你要查询的年份:"; cin>>y; cout<<"您所查询的内容如下:"<<endl; cout<<endl; cout<<y<<"年日历"<<endl; other(y); outfile<<y<<"年日历"<<endl;//输出到文件 for(m=1;m<=12;m++) { int m1,y1;//m1是指月份,y1是指年份 m1=m; y1=y; if(m1<3) { m1+=12; y1--; }//在蔡勒公式中,某年的1,2月份要看作是上一年的13,14月份 w=week(y1,m1);//调用week函数,计算该月一号是星期几 day=md(y,m);//调用md函数,判断该月有多少天 printmonth(m);//调用printmonth函数,输出月份表头 outfile<<m<<"月份"<<endl;//输出到文件 printweek();//输出每周表头 outfile<<setw(8)<<"Sun"<<setw(8)<<"Mon"<<setw(8)<<"Tues"<<setw(8)<<"Wed"<< setw(8)<<"Thurs"<<setw(8)<<"Fri"<<setw(8)<<"Sat"<<endl; //输出到文件 for(i=0;i<w;i++)//若每个月前面有空的,将其空出,w是指每个月的1号是星期几 { cout<<setw(8)<<" "; outfile<<setw(8)<<" ";//输出到文件 } for(d=1;d<=day;d++,w++)//输出该月的日历,day是指每个月的天数 { cout<<setw(8)<<d; outfile<<setw(8)<<d;//输出到文件 if(w%7==6) { cout<<endl; outfile<<endl;//输出到文件 } } cout<<endl; cout<<endl; cout<<endl; outfile<<endl<<endl<<endl;//输出到文件 } outfile.close();//关闭文件 return 0; } int second()//第二个功能查询某年某月的日历 { ofstream outfile("第二个功能.txt",ios::out); int y,m,w,d,i,day; cout<<"请输入你要查询的年月:"; cin>>y>>m; cout<<"您所查询的内容如下:"<<endl; w=week(y,m); day=md(y,m); cout<<endl; other(y); cout<<y<<"年"<<m<<"月"<<endl; outfile<<y<<"年"<<m<<"月"<<endl; printweek(); outfile<<setw(8)<<"Sun"<<setw(8)<<"Mon"<<setw(8)<<"Tues"<<setw(8)<<"Wed"<< setw(8)<<"Thurs"<<setw(8)<<"Fri"<<setw(8)<<"Sat"<<endl; //输出到文件 for(i=0;i<w;i++) { cout<<setw(8)<<" "; outfile<<setw(8)<<" "; } for(d=1;d<=day;d++,w++) { cout<<setw(8)<<d; outfile<<setw(8)<<d; if(w%7==6)//w%7是判断换行不行的,星期日在第一位 ,星期六在最后一位 { cout<<endl; outfile<<endl; } } cout<<endl; outfile<<endl; return 0; } void third()//第三个功能,查询某年某月某日的信息 { //cout<<tiangandizhi()<<endl; ofstream outfile("第三个功能.txt",ios::out); int y,m,d,n; cout<<"请输入您要查询的年月日:"; cin>>y>>m>>d; cout<<"您所查询的内容如下:"<<endl; cout<<endl; n=totaldays(y,m,d);//计算指定日期距今天的天数 outfile<<"距离今天还有"<<n<<"天"<<endl; cout<<endl; outfile<<endl; 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:展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




专业课程设计实验报告万年历.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2420676.html