河南城建学院
《C++语言程序设计》课程设计说明书
设计题目: 万年历
专 业: 计算机科学与技术
班 级: 0814132
设计人员: 张宁博、杨文利、郭秀丽
指导教师: 张星 魏新红 张芳芳
计算机科学与工程学院
20##年 1 月 5 日
一、 课程设计目的及要求
1、 设计目的
掌握一种编程工具和面向程序设计的基本思想和方法,培养我们的综合利用某种语言进行程序设计的能力、利用系统提供的功能进行创新设计的能力以及充分利用计算机的功能和特点分析实际问题及解决实际问题的能力。
我认为,这个课程设计的目的不是为了单独的课堂学习,而是要让我们掌握程序的基本思想及方法。一方面,在课程设计过程中,可以进行一对一的辅导,还能对所学的知识得到运用,更重要的是可以让我们对“面向对象”有一个更为清楚地认识、了解和掌握。
2、 设计具体内容及要求
设计一个日期类“Date”,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、减去天数、两日期相差的天数等(假定输入日期数据是合法的,考虑闰年的情况)。
在Date类中设计如下重载运算符函数:
Date operator-(int days);返回一日起减去天数得到的日期。
int operator-(Date &b);返回两日期相差的天数。
void displayMonth (Date &b);显示指定日期所在的月历,美观。
void displayYear(Date &b);显示指定日期所在的年历,美观。
在实现这些重载运算符函数调用一下私有成员函数:
leap(int);判断指定的年份是否是闰年。
dton(Date &);转换指定日期为从0年0月0日起的天数
数据成员为:int year, month , day;
按照如上的设计要求,做一个面向对象的设计完成所要求的操作。
二、 类的声明和涉及的函数
1、类的声明
class Date{
public:
Date(){};
Date(int newyear,int newmonth,int newday):
year(newyear),month(newmonth),day(newday){}
Date operator+(int days);
Date operator-(int days);
int operator-(Date &c);
void displayMonth();
void displayYear();
void display()
{cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;}
private:
int year,month,day;
int leap(int year0);
int dton();};
2、 涉及的函数
1)、函数
void menu();
void goback();
void adddays();
void resucedays();
void apartdate();
void display1();
void display2();
int main();
三、主要流程图
四、运行及调试结果
1、 各步运行结果截图与说明
计算日期减天数
输入当前日期,输入要减去的天数,即可显示得到的新的日期。
计算日期加天数
输入当前日期,输入要加上的天数,即可显示得到的新的日期。
计算两日期相差的天数
分别输入两个日期,按回车键,即可显示两日期相差的天数。
显示月历
输入要显示的月历的年份和月份,按回车键,即可显示该年该月的月历。
显示年历
输入要显示的年历的年份,按回车键,即可显示该年的年历。
2、 调试及解决问题
五、小结及感悟
六、源程序
# include<iostream>
# include<cmath>
# include<iomanip>
# include<stdlib.h>
using namespace std;
namespace{
const int DAYS_BEFORE_MONTH[]=
{0,31,59,90,120,151,181,212,243,273,304,334};//存储平年中的某个月1日之前有多少天。
}
void menu(){
cout<<" 欢迎进入万年历系统"<<endl;
cout<<"**********************************************"<<endl;
cout<<" 万年历"<<endl;
cout<<"**********************************************"<<endl;
cout<<"1.计算日期减天数 2.计算日期加天数"<<endl;
cout<<"3.计算两日期相差的天数 4.显示月历"<<endl;
cout<<"5.显示年历 0.退出程序"<<endl;
cout<<"**********************************************"<<endl;
cout<<"请输入您的选择:";
}
void goback()
{
getchar();
cout<<endl<<endl;
cout<<"按回车键返回主菜单"<<endl;
getchar();
system("cls");
menu();
}
class Date{
public:
Date(){};//无参的构造函数
Date(int newyear,int newmonth,int newday):
year(newyear),month(newmonth),day(newday){}
Date operator+(int days);
Date operator-(int days);
int operator-(Date &c);
void displayMonth();
void displayYear();
void display()
{cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl; }
private:
int year,month,day;
int leap(int year0);
int dton();
};
int Date::leap(int year0){
if((year0%4==0&&year0%100!=0)||year0%400==0)
return 1;
else return 0;
}
int Date::dton(){
int days;
int years=year-1;
days=years*365+years/4-years/100+years/400+DAYS_BEFORE_MONTH[month-1]+day;
if(leap(year)==1&&month>2)days++;//考虑闰年时,若月份大于2,都加一天。
return days;
}
Date Date::operator+(int days){
while(days!=0){
day++;
if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&days>31){
month+=1;
day=1;
}
else if(month==2&&leap(year)==1&&day>29){
month+=1;
day=1;
}
else if(month==2&&leap(year)==0&&day>28){
month+=1;
day=1;
}
else if(day>30){
month+=1;
day=1;
}
if(month>12){
year+=1;
month=1;
}
days--;
}
Date r;
r.year=year;
r.month=month;
r.day=day;
return r;
}
Date Date::operator-(int days){
while(days!=0){
day--;
if(day==0){
month-=1;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
day=31;
}
else if(month==2&&leap(year)==1){
day=29;
}
else if(month==2&&leap(year)==0){
day=28;
}
else day=30;
}
if(month==0){
year-=1;
month=12;
day=31;
}
days--;
}
Date a;
a.year=year;
a.month=month;
a.day=day;
return a;
}
int Date::operator-(Date &c){
return abs(dton()-c.dton());
}
void adddays(){
cout<<"*********************"<<endl;
cout<<" 欢迎进入时光机"<<endl;
cout<<"*********************"<<endl;
int year,month,day,days;
cout<<"请输入当前日期:";
cin>>year>>month>>day;
cout<<"请输入天数:";
cin>>days;
Date date(year,month,day);
date=date+days;
cout<<"时光机穿梭到:";
date.display();
}
void reducedays(){
int year,month,day,days;
cout<<"请输入日期:";
cin>>year>>month>>day;
cout<<"请输入天数:";
cin>>days;
Date date(year,month,day);
date=date-days;
cout<<year<<"年"<<month<<"月"<<day<<"日-"<<days<<"天-->";
date.display();
}
void apartdate(){
int year1,year2,month1,month2,day1,day2,days;
cout<<"请输入第一个日期:";
cin>>year1>>month1>>day1;
cout<<"请输入第二个日期:";
cin>>year2>>month2>>day2;
Date date1(year1,month1,day1);
Date date2(year2,month2,day2);
days=date2-date1;
cout<<"两日期相减的天数是:"<<days<<endl;
}
void Date::displayMonth(){
int i,j,monthdays;
int w=0;
w=dton()%7;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
monthdays=31;
else if(leap(year)==1&&month==2)
monthdays=29;
else if(leap(year)==0&&month==2)
monthdays=28;
else monthdays=30;
cout<<" "<<year<<"年"<<" "<<month<<"月"<<endl;
cout<<"--------------------------------"<<endl;
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)<<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
for(i=0;i<w;i++)
cout<<" ";
for(i=1;i<8-w;i++)
cout<<setw(4)<<i;
cout<<endl;
for(i=8-w,j=1;i<=monthdays;i++,j++){
cout<<setw(4)<<i;
if(j%7==0)cout<<endl;
}
cout<<endl<<"----------------------------------"<<endl;
}
void Date::displayYear(){
int i;
for(i=1;i<=12;i++){
Date c(year,i,1);
c.displayMonth();
cout<<endl;
}
}
void display1(){
int year5,month5;
cout<<"请输入要显示的月历:";
cin>>year5>>month5;
cout<<endl<<"-----------------------------"<<endl;
Date date5(year5,month5,1);
date5.displayMonth();
}
void display2(){
int year;
cout<<"请输入要显示的年份:";
cin>>year;
Date date(year,1,1);
date.displayYear();
}
int main()
{
int a;
int d=1;
system("color 3F");
menu();
do
{
cin>>a;
if(a<0||a>5){
cout<<"选择错误请重新选择..."<<endl;
cout<<"请选择:"<<endl;
cin>>a;
}
switch(a)
{
case 1:
system("cls");
reducedays();
goback();break;
case 2:
system("cls");
adddays();
goback();break;
case 3:
system("cls");
apartdate();
goback();break;
case 4:
system("cls");
display1();
goback();break;
case 5:
system("cls");
display2();
goback();break;
case 0:system("cls");exit(0);break;
}
}while(d==1);
return 0;
}
重庆电力高等专科学校计算机科学系实训报告一、实训任务:1、看实训要求,计划出自己实训所要用元件,在网上查找资料。2、思考仿真原理图…
实验6基于命令行窗口的日历查询程序综合性实验1引言11实验目的1了解程序开发环境调试工具的使用2掌握小型系统的开发过程学会用C语言…
设计题目电子万年历设计任务与要求1显示年月日时分秒及星期信息2具有可调整日期和时间功能3增加闰年计算功能方案比较方案一系统分为主控…
河南城建学院C语言程序设计课程设计说明书设计题目万年历专业计算机科学与技术班级设计人员张宁博杨文利郭秀丽指导教师张星魏新红张芳芳计…
洛阳理工学院课程设计报告洛阳理工学院单片机课程设计题目姓名学号专业班级指导老师洛阳理工学院课程设计报告目录摘要21课设要求32硬件…
C语言课程设计报告万年历设计人贾伟涛学号20xx010912班级13电信应电班指导老师张伟日期20xx年6月9日内容提要通过大一下…
C语言课程设计报告设计名称C语言课程设计专业班级姓名学号指导教师实习时间成绩目录一设计目的2二设计内容3三详细设计说明4四软件使用…
课程设计评分表课程设计题目:万年历设计C语言课程设计之万年历实验报告分享者:##一、实验题目:万年历设计二、试验时间:20##年1…
哈尔滨工程大学实验报告实验名称电子系统设计实验班级20xx0822学号20xx082228姓名王嘉博实验时间成绩指导教师李北明实验…
xxxxx毕业论文设计开题报告题目基于年历设计学院电气工程学院年级xxx级专业电子信息工程姓名宋飞学号20xx588693指导教师…