希望各位大佬們幫忙改改我的程式



日期類CDate,包含三個私有成員資料year,month,day(均是整數),分別代表年、月、日。
成員函式的宣告如下:(前2個是私有的)
int IsLeapYear(int y); //回傳y年是否閏年,是回傳1,否則回傳0
int DaysOfMonth(int y,int m);//回傳y年m月的天數
CDate();//建構式,默認為2015年5月7日,同時輸出資訊“Default constructor is called!”
CDate(int y,int m,int d);//建構式,年月日分別為y,m,d,同時輸出資訊“Constructor is called!”
void SetDate(int y,int m,int d);//設定修改日期為y年m月d日,同時輸出資訊“Date is reset!"
int GetYear(); //回傳年份
int GetMonth(); //回傳月份
int GetDay(); //回傳日
void Show(); //按照指定格式(見Sample Output)輸出日期資訊
CDate IncOneDay(); //回傳本日期后面一天所對應的年月日
設計上述類,并采用下面的main函式進行測驗(提交時只需提交除main函式外的代碼部分)
int main()
{
CDate d1;
d1.Show();
d1.SetDate(2015,2,28);
d1.IncOneDay().Show();
d1.Show();
CDate d2(2016,12,31);
d2.Show();
d1=d2.IncOneDay();
d1.Show();
d2.Show();
d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
d1.Show();
return 0;
}
Sample Output
Default constructor is called!
2015-5-7
Date is reset!
2015-3-1
2015-2-28
Constructor is called!
2016-12-31
2017-1-1
2016-12-31
Date is reset!
2016-12-31
[程式]
#include <iostream>
using namespace std;
class CDate
{
private:
int year,month,day;
int IsLeapYear(int y)
{
int leap=0;
if((y%4==0&&y%100==0)||y%400==0)
leap=1;
return leap;
}
int DaysOfMonth(int y,int m)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(y))
a[2]+=1;
return a[m];
}
public:
CDate():year(2015),month(5),day(7)
{
cout<<"Default constructor is called!"<<endl;
}
CDate(int y,int m,int d):year(y),month(m),day(d)
{
cout<<"Constructor is called!"<<endl;
}
void SetDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
cout<<"Date is reset!"<<endl;
}
int GetYear() const
{
return year;
}
int GetMonth() const
{
return month;
}
int GetDay() const
{
return day;
}
void Show() const
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
CDate IncOneDay()
{
day++;
if(IsLeapYear(year))//判斷閏年二月的情況
{
if(month == 2 && day==30)
{
day=1;
month+=1;
}
}
else if(month==2 && day==29)
{
day=1;
month++;
}
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
{ //大月的情況
if(day>31)
{
day-=31;
month+=1;
}
if(month>12)
{
year+=1;
month-=12;
}
}
else if(month==4 || month==6 || month==9 || month==11 )
{//小月的情況
if(day>30)
{
day-=30;
month+=1;
}
}
return CDate(year,month,day);
}
};
int main()
{
CDate d1;
d1.Show();
d1.SetDate(2015,2,28);
d1.IncOneDay().Show();
d1.Show();
CDate d2(2016,12,31);
d2.Show();
d1=d2.IncOneDay();
d1.Show();
d2.Show();
d1.SetDate(d2.GetYear(),d2.GetMonth(),d2.GetDay());
d1.Show();
return 0;
}
[運行結果]
Default constructor is called!
2015-5-7
Date is reset!
Constructor is called!
2015-3-1
2015-3-1
Constructor is called!
2016-12-31
Constructor is called!
2017-1-1
2017-1-1
Date is reset!
2017-1-1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278206.html
標籤:C++ 語言
下一篇:救救我吧?
