100分求这道C语言题怎么解!!!!!!!!!!!在线等!

1.设计一个Date类,其结构如下:私有数据成员char*pYMD;//指向字符串的指针,表示“****年**月**日”;公有成员函数&#... 1. 设计一个Date类,其结构如下:
 私有数据成员char* pYMD;//指向字符串的指针,表示“****年**月**日”;
 公有成员函数
 重载构造函数实现数据成员初始化;(带参数和Copy构造)
 重载“=”运算符,实现对象直接赋值;
 Date& Add([参数列表]);//计算n天以后是“****年**月**日”;
 Date& Sub([参数列表]);//计算n天以前是“****年**月**日”;
 void Display();//输出Date对象的数据“****年**月**日”;
注意,这两题是要求C++做的,设计程序,如果回答的好的话我愿意提高悬赏!多谢大家啦
2.设计一个Date类的派生类Time,其结构如下:
 私有数据成员char* pTime;//指向字符串的指针,表示“**时**分**秒”;
 公有成员函数
 重载构造函数实现数据成员初始化;(带参数和Copy构造)
 重载“=”运算符,实现对象直接赋值;
 Time& Add([参数列表]);//计算H时M分S秒以后是“****年**月**日**时**分**秒”;
Time & Sub([参数列表]);//计算H时M分S秒以前是“****年**月**日**时**分**秒”;
展开
 我来答
安克鲁
2010-01-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:4165
采纳率:33%
帮助的人:2604万
展开全部
#include<iostream.h>
int day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,31,30,31,30,31}};
// day_tab 二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
class Date
{
int year,month,day;
int leap(int);
int dton(Date &);
Date ntod(int);
public:
Date(){}
Date(int y,int m,int d)
{
year=y;month=m;day=d;
}
void setday(int d){day=d;}
void setmonth(int m){month=m;}
void setyear(int y){year=y;}
int getday(){return day;}
int getmonth(){return month;}
int getyear(){return year;}
Date operator+(int days)
{
static Date date;
int number=dton(*this)+days;
date=ntod(number);
return date;
}
Date operator-(int days)
{
static Date date;
int number=dton(*this);
number-=days;
date=ntod(number);
return date;
}
int operator-(Date &b)
{
int days=dton(*this)-dton(b)-1;
return days;
}
void disp()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
};
int Date::leap(int year)
{
if(year%4==0&&year%100!=0||year%400==0) // 是闰年
return 1;
else // 不是闰年
return 0;
}
int Date::dton(Date &d)
{
int y,m,days=0;
for(y=1;y<=d.year;y++)
if(leap(y))
days+=366;
else
days+=365;
for(m=0;m<d.month-1;m++)
if(leap(d.year))
days+=day_tab[1][m];
else
days+=day_tab[0][m];
days+=d.day;
return days;
}
Date Date::ntod(int n)
{
int y=1,m=1,d,rest=n,lp;
while(1)
{
if(leap(y))
{
if(rest<=366)
break;
else
rest-=366;
}
else
{
if(rest<=365)
break;
else
rest-=365;
}
y++;
}
y--;
lp=leap(y);
while(1)
{
if(lp)
{
if(rest>day_tab[1][m-1])
rest-=day_tab[1][m-1];
else
break;
}
else
{
if(rest>day_tab[0][m-1])
rest-=day_tab[0][m-1];
else
break;
}
m++;
}
d=rest;
return Date(y,m,d);
}
void main()
{
Date now(2002,6,12),then(2003,2,10);
cout<<"now:"; now.disp();
cout<<"then:"; then.disp();
cout<<"相差天数:"<<(then-now)<<endl;
Date d1=now+100,d2=now-100;
cout<<"now+100:"; d1.disp();
cout<<"now-100:"; d2.disp();
}

本程序的执行结果如下:
now:2002.6.12
then:2003.2.10
相差天数:242
now+100:2002.9.20
now-100:2002.3.4

#include<iostream.h>
class Time
{
int hour,minute,second;
public:
Time(){}
Time(int h,int m,int s)
{
hour=h;minute=m;second=s;
}
Time(int h,int m)
{
hour=h;minute=m;second=0;
}
void sethour(int h){hour=h;}
void setminute(int m){minute=m;}
void setsecond(int s){second=s;}
int gethour(){return hour;}
int getminute(){return minute;}
int getsecond(){return second;}
Time operator+(Time);
Time operator-(Time);
void disp()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
};
Time Time::operator+(Time t)
{
int carry,hh,mm,ss;
ss=getsecond()+t.getsecond();
if(ss>60)
{
ss-=60;
carry=1; // 进位标记
}
else carry=0;
mm=getminute()+t.getminute()+carry;
if(mm>60)
{
mm-=60;
carry=1;
}
else carry=0;
hh=gethour()+t.gethour()+carry;
if(hh>24)
hh=24;
static Time result(hh,mm,ss);
return result;
}
Time Time::operator-(Time t)
{
int borrow,hh,mm,ss;
ss=getsecond()-t.getsecond();
if(ss<0)
{
ss+=60;
borrow=1; // 借位标记
}
else borrow=1;
mm=getminute()-t.getminute()-borrow;
if(mm<0)
{
mm+=60;
borrow=1;
}
else borrow=0;
hh=gethour()-t.gethour()-borrow;
if(hh<0)
hh+=24;
static Time result(hh,mm,ss);
return result;
}
void main()
{
Time now(2,24,39);
Time start(17,55);
Time t1=now-start,t2=now+start;
cout<<"输出结果:"<<endl;
cout<<" now: "; now.disp();
cout<<" start:"; start.disp();
cout<<" 相差: "; t1.disp();
cout<<" 相加: "; t2.disp();
}
本程序的执行结果如下:
输出结果:
now:2:24:39
start:17:55:0
相差:8:28:39
相加:20:19:39
寒寒家
2009-12-18 · TA获得超过2919个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1949万
展开全部
我以前写过一个这个,包括了你所说的那些功能
只不过我的日期是用day month year三个int数据变量记录的
希望能对你有所帮助。

//********date.h******
#include<iostream.h>
//using namespace std;
class Date
{
private:
int month;
int day;
int year;
int n;//之后进行日期的加减运算
public:
Date(int y=1970,int m=1,int d=1)
{
year=y;month=m;day=d;
}
void setDay();
void set(int y,int m,int d);
int isleapyear();
int isleapyear1(int yea);
void print();
void nextDay();
void day1();//计算星期几的方法
int dtoi();//计算相差多少天的方法
void itod(int n);/
Date add(int);//,,加上n天之后的日期
Date sub(int);//,,减去,,,,,
void getyear(int y);
void getmonth(int m);
void getday(int d);
int rightornot();

void operator +(int i);
int operator -(Date d);
friend Date operator +(int &i,Date &d);
};
*********date.cpp*********
#include<iostream.h>
#include"Date.h"
//using namespace std;
//加上n天之后的日期
Date Date::add(int n)
{
Date d;
for(n;n>0;n--)
{nextDay();}
d.year=year;
d.month=month;
d.day=day;
return d;
}
void Date::set(int y,int m,int d)
{
month=m;
day=d;
year=y;
}
int Date::isleapyear()
{
return(year%4==0&&year%100!=0||year%400==0);
}
int Date::isleapyear1(int yea)
{
return(yea%4==0&&yea%100!=0||yea%400==0);//两个判断是否为闰年的函数用得地方不同

}
void Date::print()
{
cout<<year<<" "<<month<<" "<<day<<endl;
}
void Date::nextDay()
{
day++;
if(day==32&&(month==1||month==3||month==5||month==7||month==8||month==10||month==12)){day=1;month++;}
if(month==4&&day==31){day=1;month++;}
if(month==6&&day==31){day=1;month++;}
if(month==9&&day==31){day=1;month++;}
if(month==11&&day==31){day=1;month++;}
if(isleapyear()==0&&month==2&&day==29){day=1;month++;}
if(isleapyear()==1&&month==2&&day==30){day=1;month++;}
if(month==13){month=1;year++;}
//cout<<year<<" "<<month<<" "<<day<<endl;
}
//新添的:计算星期几,加上多少天后的日期
int Date::dtoi()
{
int mon[12]={31,28,30,30,31,30,31,31,30,31,30,31};
int n=1970;
int sum=0;
for(n;n<year;n++)
{
sum=365*(isleapyear1(n)+1)+sum;
}
if(isleapyear1(n))mon[1]=29;
for(n=0;n<(month-1);n++)
{
sum=sum+mon[n];

}
sum+=day;
return sum;
}
void Date::itod(int n)
{
switch(n%7)
{
case 0:cout<<"mon";break;
case 1:cout<<"tue";break;
case 2:cout<<"wen";break;
case 3:cout<<"thu";break;
case 4:cout<<"fri";break;
case 5:cout<<"sta";break;
case 6:cout<<"sun";break;
}
cout<<endl;
}
void Date::day1()
{
int n;
n=dtoi();
itod(n);
}
void Date::getyear(int y)
{
year=y;
}
void Date::getmonth(int m)
{
month=m;
}
void Date::getday(int d)
{
day=d;
}

//判断通过setDay输入日期是否正确
void Date::setDay()
{
cin>>year>>month>>day;
for(;rightornot()!=0;)
{
cout<<"请重新输入"<<endl;
cin>>year>>month>>day;
}
}
//运算符重载
void Date:: operator +(int i)
{
add(i);
}
int Date::operator -(Date d)
{
cout<<dtoi()<<endl;
cout<<d.dtoi()<<endl;
long sum=dtoi()-d.dtoi();
if(sum<0)return -sum-1;//这里是相差几天应该再减1
else return sum-1;
}
Date operator +(int &i,Date &d)
{
return d.add(i);
}
**********一个判断输入日期是否正确的函数************

//判断输入的日期是否正确
#include<iostream.h>
#include"Date.h"
//using namespace std;
int Date::rightornot()
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:return(day>31||day<1);
case 2:{if(isleapyear())return(day>29||day<1);else return(day>28||day<1);}
case 4:
case 6:
case 9:
case 11:return(day>30||day<1);

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
java_2009
2010-01-02 · TA获得超过310个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:0
展开全部
标记一下先,做完了再联系你。
需要的话Hi我。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
挺进616
2009-12-18 · TA获得超过288个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:228万
展开全部
类---C语言?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
呼娟呼博裕
2019-04-14 · TA获得超过3547个赞
知道大有可为答主
回答量:3049
采纳率:26%
帮助的人:153万
展开全部
#include<iostream.h>
int
day_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,31,30,31,30,31}};
//
day_tab
二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
class
Date
{
int
year,month,day;
int
leap(int);
int
dton(Date
&);
Date
ntod(int);
public:
Date(){}
Date(int
y,int
m,int
d)
{
year=y;month=m;day=d;
}
void
setday(int
d){day=d;}
void
setmonth(int
m){month=m;}
void
setyear(int
y){year=y;}
int
getday(){return
day;}
int
getmonth(){return
month;}
int
getyear(){return
year;}
Date
operator+(int
days)
{
static
Date
date;
int
number=dton(*this)+days;
date=ntod(number);
return
date;
}
Date
operator-(int
days)
{
static
Date
date;
int
number=dton(*this);
number-=days;
date=ntod(number);
return
date;
}
int
operator-(Date
&b)
{
int
days=dton(*this)-dton(b)-1;
return
days;
}
void
disp()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
};
int
Date::leap(int
year)
{
if(year%4==0&&year%100!=0||year%400==0)
//
是闰年
return
1;
else
//
不是闰年
return
0;
}
int
Date::dton(Date
&d)
{
int
y,m,days=0;
for(y=1;y<=d.year;y++)
if(leap(y))
days+=366;
else
days+=365;
for(m=0;m<d.month-1;m++)
if(leap(d.year))
days+=day_tab[1][m];
else
days+=day_tab[0][m];
days+=d.day;
return
days;
}
Date
Date::ntod(int
n)
{
int
y=1,m=1,d,rest=n,lp;
while(1)
{
if(leap(y))
{
if(rest<=366)
break;
else
rest-=366;
}
else
{
if(rest<=365)
break;
else
rest-=365;
}
y++;
}
y--;
lp=leap(y);
while(1)
{
if(lp)
{
if(rest>day_tab[1][m-1])
rest-=day_tab[1][m-1];
else
break;
}
else
{
if(rest>day_tab[0][m-1])
rest-=day_tab[0][m-1];
else
break;
}
m++;
}
d=rest;
return
Date(y,m,d);
}
void
main()
{
Date
now(2002,6,12),then(2003,2,10);
cout<<"now:";
now.disp();
cout<<"then:";
then.disp();
cout<<"相差天数:"<<(then-now)<<endl;
Date
d1=now+100,d2=now-100;
cout<<"now+100:";
d1.disp();
cout<<"now-100:";
d2.disp();
}
本程序的执行结果如下:
now:2002.6.12
then:2003.2.10
相差天数:242
now+100:2002.9.20
now-100:2002.3.4
#include<iostream.h>
class
Time
{
int
hour,minute,second;
public:
Time(){}
Time(int
h,int
m,int
s)
{
hour=h;minute=m;second=s;
}
Time(int
h,int
m)
{
hour=h;minute=m;second=0;
}
void
sethour(int
h){hour=h;}
void
setminute(int
m){minute=m;}
void
setsecond(int
s){second=s;}
int
gethour(){return
hour;}
int
getminute(){return
minute;}
int
getsecond(){return
second;}
Time
operator+(Time);
Time
operator-(Time);
void
disp()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
};
Time
Time::operator+(Time
t)
{
int
carry,hh,mm,ss;
ss=getsecond()+t.getsecond();
if(ss>60)
{
ss-=60;
carry=1;
//
进位标记
}
else
carry=0;
mm=getminute()+t.getminute()+carry;
if(mm>60)
{
mm-=60;
carry=1;
}
else
carry=0;
hh=gethour()+t.gethour()+carry;
if(hh>24)
hh=24;
static
Time
result(hh,mm,ss);
return
result;
}
Time
Time::operator-(Time
t)
{
int
borrow,hh,mm,ss;
ss=getsecond()-t.getsecond();
if(ss<0)
{
ss+=60;
borrow=1;
//
借位标记
}
else
borrow=1;
mm=getminute()-t.getminute()-borrow;
if(mm<0)
{
mm+=60;
borrow=1;
}
else
borrow=0;
hh=gethour()-t.gethour()-borrow;
if(hh<0)
hh+=24;
static
Time
result(hh,mm,ss);
return
result;
}
void
main()
{
Time
now(2,24,39);
Time
start(17,55);
Time
t1=now-start,t2=now+start;
cout<<"输出结果:"<<endl;
cout<<"
now:
";
now.disp();
cout<<"
start:";
start.disp();
cout<<"
相差:
";
t1.disp();
cout<<"
相加:
";
t2.disp();
}
本程序的执行结果如下:
输出结果:
now:2:24:39
start:17:55:0
相差:8:28:39
相加:20:19:39
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式