c++ 定义一个日期类Date,该类对象存放一个日期

可以提供的操作有:voidGetDate();//取日期值,格式如"2012年2月5"intGetYear();//取年份intGetMonth();//取月份intGe... 可以提供的操作有:
void GetDate();//取日期值,格式如"2012年2月5"
int GetYear();//取年份
int GetMonth();//取月份
int GetDay();//取日期
void SetDate(int y,int m, int d);//设置日期值
void AddOneDay();//日期增加一天
还允许对日期对象作以下定义;
Date d1(2001, 5, 8);//用所给日期定义一个日期变量
Date d2;定义一个日期对象
Date d3(d1);//用已有的日期构造一个新对象
要求本程序用到所有的上述操作和定义,并且日期的输出格式为:
xxxx年xx月xx日 如:2011年6月25日
对于void AddOneDay()函数,要考虑每月的天数有28天,30天,31天的,另外还要考虑每年的最后一天加一天后,变为下一年的第一天。
c++初学者啊,求程序……
展开
 我来答
xingtangcunliu
2015-01-14
知道答主
回答量:9
采纳率:0%
帮助的人:5.5万
展开全部
#include<stdio.h>
#include<iostream.h>
#include "windows.h"
class Date{
private:
int year;
int month;
int day;
int IsCurrentDate(int Year,int Month,int Day);//是不是正确的日期。
public:
Date();
Date(int y,int m,int d);
Date(const Date &other);
void GetDate();
int GetYear();
int GetMonth();
int GetDay();
void SetDate(int y,int m,int d);
void AddOneDay();

};
Date::Date(){//不赋值时,默认当前日期
SYSTEMTIME ct;
    GetLocalTime(&ct);//如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间
    year=ct.wYear;
    month=ct.wMonth;
    day=ct.wDay;
}
Date::Date(int y,int m,int d):year(y),month(m),day(d){
IsCurrentDate(y,m,d);
}
Date::Date(const Date &other){
year=other.year;
month=other.month;
day=other.day;
}
void Date::GetDate(){
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
int Date::GetYear(){
return year;
}
int Date::GetMonth(){
return month;
}
int Date::GetDay(){
return day;
}
void Date::SetDate(int y,int m,int d){
year=y;
month=m;
day=d;
}
void Date::AddOneDay(){
int sign=0;
if ((year%4==0&&year%100!=0)||year%400==0)
{
sign =1;
}
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
             if(day<31){
day=day+1;
}else{
day=1;
month=month+1;
}
break;
case 4:
case 6:
case 9:
case 11:
if(day<30){
day=day+1;
}else{
day=1;
month=month+1;
}
break;
case 2:
if (sign ==1)
if(day<29){
day=day+1;
}else{
day=1;
month=3;
}
else
if(day<28){
day=day+1;
}else{
day=1;
month=3;
}
break;
case 12:
if(day<30){
day=day+1;
}else{
day=1;
month=1;
year=year+1;
}
break;
default:
break;
}
}

int Date::IsCurrentDate(int year,int month,int day){
int sign=0,dayvalid;
if ((year%4==0&&year%100!=0)||year%400==0)
{
sign =1;
}
if (month>=1&&month<=12)
{
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayvalid = 31;
break;
case 4:
case 6:
case 9:
case 11:
dayvalid = 30;
break;
case 2:
if (sign ==1)
dayvalid = 29;
else
dayvalid = 28;
break;
default:
break;
}
if (!(day >0&&day <=dayvalid))
{
cout<<"日期格式错误"<<endl;
return 2;
}
}
else
{
cout<<"月份格式错误"<<endl;
return 1;
}

cout<<"日期格式正确"<<endl;
return 0;
}
int main(){
Date d;
d.AddOneDay();
d.GetDate();
Date dt(2014,2,28);
dt.AddOneDay();
dt.GetDate();
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式