收藏 分销(赏)

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

上传人:天**** 文档编号:2420676 上传时间:2024-05-30 格式:DOC 页数:37 大小:342.50KB 下载积分:12 金币
下载 相关 举报
专业课程设计实验报告万年历.doc_第1页
第1页 / 共37页
专业课程设计实验报告万年历.doc_第2页
第2页 / 共37页


点击查看更多>>
资源描述
专业课程设计实验报告万年历 《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:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服