C++程序课程设计_万年历
- 格式:doc
- 大小:305.00 KB
- 文档页数:12
合肥工业大学课程设计报告课程名称C++语言课程设计课题名称万年历专业信息与计算科学班级09-1班学号********姓名王豹指导教师陈老师2011 年6月6 日目录一、目的与要求………………………………………………………………公布、描述课程设计的目的,约束条件,要求达到的目标等内容一致。
二、工具/准备工作………………………………………………………在开放做课程设计项目前,应回顾或复习的相关内容:需要的硬件设施与需要的安装哪些c++集成开发软件。
三、分析………………………………………………………………………分析课程设计项目的实现方法,并写出类申明的核心算法和实现代码。
四、实现步骤…………………………………………………………………详细介绍项目的操作步骤五、测试与结果………………………………………………………………课程设计程序的屏幕显示,并加以简单的文字说明,注意程序运行要覆盖算法的各种情况,最后说明课程设计是否满足课程设计的要求六、课程设计总结…………………………………………………………主要说明程序设计的特点,进行了哪些功能的拓展,特别是独创或创新的部分,相关课程设计项目最有价值的内容,在哪些方面需要进一步的了解或得到帮助,以及编程实现课程设计的感悟等内容。
一、目的与要求显示公元后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似一般的挂历,二、工具/准备工作实验开始前,先回顾和复习相关内容在自己的电脑上安装Visual C++,Dev-C++等集成开发软件三、分析1.主菜单程序是通过类的成员函数void operate();来实现对主菜单的输入与输出的处理。
2.数据功能程序是由类的成员函数void printYear();实现各年的输出;由void printMonth(); 来实现按月的输出;由void printDay();实现每天的星期。
3.退出模拟游戏功能使程序退出工作状态。
定义头文件#include"stdafx.h"#include<iostream>#include<iomanip>#include<string>using namespace std;定义类:class PerpetualCalendar{public:int getYear();int getMonth();int getDay();void setYear();void setMonth();void setDate();int getWeek();void printMonth();void printYear();void printDay();void operate();PerpetualCalendar();PerpetualCalendar(int y,int m,int d);private:int year;int month;int day;bool isLeap(int y);int getDays();};四、实现步骤int PerpetualCalendar::getYear(){return year;}int PerpetualCalendar::getMonth(){return month;}int PerpetualCalendar::getDay(){return day;}void PerpetualCalendar::setYear(){do{cout<<"输入年份:"<<endl;cin>>year;if(year<0||year>9999) cout<<"Input Error!"<<endl; }while(year<0||year>9999);month=1;day=1;}void PerpetualCalendar::setMonth(){{cout<<"输入年,月:"<<endl;cin>>year>>month;if(year<0||year>9999||month<=0||month>12) cout<<"Input Error!"<<endl;}while(year<0||year>9999||month<=0||month>12);day=1;}void PerpetualCalendar::setDate() //改变日期do{cout<<"输入年,月,日:"<<endl;cin>>year>>month>>day;if(year<0||year>9999||month<=0||month>12||day<=0||day>31)cout<<"Input Error!"<<endl;}while(year<0||year>9999||month<=0||month>12||day<=0||day>31);}int PerpetualCalendar::getWeek() //用于计算所输入的年月日的星期数,返回0到6中的一个数字{int week=getDays()%7;week+=5;week%=7;return week;}void PerpetualCalendar::printMonth(){int i;int tempDay=day;day=1;int week=getWeek();day=tempDay;int setLine=week;string leapYear;if(isLeap(year)) leapYear="(闰年)";else leapYear="(非闰年)";cout<<endl<<" "<<"公元"<<year<<"年"<<month<<"月"<<leapYear<<endl; //输出标括题琣XX年XX月?cout<<" 日一二三四五六<<endl;switch(week)case 0:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0&&setLine!=0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;case 1:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;case 2:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;case 3:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;case 4:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;cout<<endl;break;case 5:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;case 6:for(i=1;i<=daysOfMonth[month];i++,setLine++){if(setLine%7==0) cout<<endl<<" ";if(i==1) cout<<" "<<setw(4)<<setiosflags(ios::left)<<i;else cout<<setw(4)<<setiosflags(ios::left)<<i;}cout<<endl;break;default:cout<<"ERROR!"<<endl;}}void PerpetualCalendar::printYear(){int tempMonth=month;for(int i=1;i<=12;i++){month=i;printMonth();}month=tempMonth;}void PerpetualCalendar::printDay(){switch(getWeek()){case 0: cout<<year<<"年"<<month<<"月"<<day<<"日星期日"<<endl; break;case 1: cout<<year<<"年"<<month<<"月"<<day<<"日星期一"<<endl; break;case 2: cout<<year<<"年"<<month<<"月"<<day<<"日星期二"<<endl; break;case 3: cout<<year<<"年"<<month<<"月"<<day<<"日星期三"<<endl; break;case 4: cout<<year<<"年"<<month<<"月"<<day<<"日星期四"<<endl; break;case 5: cout<<year<<"年"<<month<<"月"<<day<<"日星期五"<<endl; break;case 6: cout<<year<<"年"<<month<<"月"<<day<<"日星期六<<endl; break;}}void PerpetualCalendar::operate(){int i,choose;bool chooseFlag=false;while(1)//while开始{while(!chooseFlag){cout<<"…-…-…-…-…-…-…-…-欢迎使用万年历…-…-…-…-…-…-…-…-\n"<<endl;cout<<"…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-…-\n"<<endl;cout<<"使用说明÷:"<<endl<<"1.输入年,显示该年万年历<<endl<<"2.输入年,月,显示该月万年历<<endl<<"3.输入年月日,查询ˉ该日为星期几"<<endl<<"4.退出"<<endl;cout<<endl<<"请选择你要的操作"<<endl;cin>>choose;for(i=1;i<=4;i++){if(choose==i) { chooseFlag=true; break;}else chooseFlag=false;}if(!chooseFlag) cout<<"Error Input!"<<endl;} //end while(!chooseFlag)if(choose==1) //if 开始{setYear();printYear();}else if(choose==2){setMonth();printMonth();else if(choose==3){setDate();printDay();}else if(choose==4){cout<<"程序结束"<<endl;break;}else{cout<<"错误"<<endl;}//end ifchooseFlag=0;}//end while(1)}PerpetualCalendar::PerpetualCalendar()//默认构造函数{year=1;month=1;day=1;}PerpetualCalendar::PerpetualCalendar(int y,int m,int d)//重载构造函数{year=y;month=m;day=d;}bool PerpetualCalendar::isLeap(int y) //判断是否为闰年的成员函数{if((y%4==0&&y%100!=0)||(y%400==0)) return true;else return false;}int PerpetualCalendar::getDays() //用于计算所输入的年月日从0年以来的总天数int i,sumDays=1;if (year<1832){ for(i=1;i<year;i++){if(isLeap(i)) sumDays+=366;else sumDays+=365;}if(isLeap(year)) daysOfMonth[2]=29; for(i=1;i<month;i++)sumDays+=daysOfMonth[i];sumDays+=(day-1);//cout<<sumDays;return sumDays;}else{ for(i=1;i<year;i++){if(isLeap(i)) sumDays+=366;else sumDays+=365;}if(isLeap(year)) daysOfMonth[2]=29; for(i=1;i<month;i++)sumDays+=daysOfMonth[i];sumDays+=(day-1);sumDays+=2;return sumDays;}}int _tmain(int argc, _TCHAR* argv[]) {PerpetualCalendar test;test.operate();return 0;//end mainreturn 0;}五、测试与结果数据处理测试,如图所示1 年的输出2 年月的输出3年月日的输出六、课程设计总结拓展功能:不仅能算出每次运行的结果,而且能计算出各年的具体月份的情况以及具体天的星期感悟:已经是第二次接触 C++了,感觉还是有些朦胧,但通过老师的悉心教导和跟同学们之间的沟通与交流后,学会了很多东西。