上海松江招工信息:请高手来看看这个c++程序

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 18:27:24
这个程序是想输入年,月,日
然后输入一个天数
输出日期加上和减去这个天数所得到的日期
还要将一个日期转换成天数
还要将一个天数转换成日期
#include<iostream.h>
class date
{
int year,mouth,day;
public:
date operator+(int );
date operator-(int );
date operator-(date &b);
int leap(int);
int dton(date &rdate);
date ntod(int);
date(int a=1,int b=1,int c=1)
{year=a;mouth=b;day=c;}
void input();
void output();
};
int date::leap(int y)
{
int a;
if(y%4==0&&y%100!=0||y%400==0)
a=1;
else
a=0;
return a;
}
int date::dton(date &rdate)
{
int n=leap(rdate.year),a=0;
for(int i=1;i<rdate.year;i++)
{n=leap(i);
if(n==1)
a+=366;
else
a+=365;
}
for(int j=1;j<rdate.mouth;j++)
{switch(j)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
a+=31;break;
case 4:case 6:case 9:case 11:
a+=30;break;
case 2:
if(n==1)
a+=29;
else
a+=28;
break;
default:break;
}
}
a+=rdate.day;
return a;
}
date date::ntod(int r)
{
date rjxl;
int m=leap(rjxl.year+1);
if(m==1)
{
if(r>=366)
{
rjxl.year++;r-=366;rjxl=ntod(r);
}
else
switch(rjxl.mouth)
{
case 2:case 4:case 6:case 9:case 11:
if(r>=31)
{
rjxl.mouth++;r-=31;rjxl=ntod(r);
}
case 3:case 5:case 7:case 8:case 10:case 12:
if(r>=30)
{
rjxl.mouth++;r-=30;rjxl=ntod(r);
}
case 1:
if(r>=28)
{
rjxl.mouth++;r-=29;rjxl=ntod(r);
}
default:break;
}
}
else
{
if(r>=365)
{
rjxl.year++;r-=365;rjxl=ntod(r);
}
else
switch(rjxl.mouth)
{
case 2:case 4:case 6:case 9:case 11:
if(r>=31)
{
rjxl.mouth++;r-=31;rjxl=ntod(r);
}
case 1:
if(r>=28)
{
rjxl.mouth++;r-=28;rjxl=ntod(r);
}
case 3:case 5:case 7:case 8:case 10:
if(r>30)
{
rjxl.mouth++;r-=30;rjxl=ntod(r);
}
case 12:
if(r>30)
{
rjxl.mouth=1;rjxl.year++;r-=30;rjxl=ntod(r);
}
default:break;
}
}
return rjxl;
}
date date::operator+(int h)
{
date njxl;
int x=dton(njxl);
x=x+h;
njxl=ntod(x);
return njxl;
}
date date::operator-(int h)
{
date mjxl;
int y=dton(mjxl);
y=y-h;
mjxl=ntod(y);
return mjxl;
}
date date::operator-(date &b)
{
date ljxl;
int z=dton(ljxl);
int l=dton(b);
z=z-l;
ljxl=ntod(z);
return ljxl;
}
void date::input()
{
cout<<"年份为:";
cin>>year;
cout<<"月份:";
cin>>mouth;
cout<<"日期:";
cin>>day;
}
void date::output()
{
cout<<"年份为:"<<year<<endl<<"月份为:"<<mouth<<endl<<"日期为:"<<day<<endl;
}
哦........
@的问题我还是第一次见,给你带来了麻烦.真是不好意思.
这个主函数是这样的:
void main()
{
date jxl;int days;
cout<<"请输入日期及你要加的数:"<<endl;
jxl.input();
cout<<"天数为:";
cin>>days;
jxl=jxl+days;
jxl.output();
cout<<"请输入日期及你要减的数:"<<endl;
jxl.input();
cout<<"天数为:";
cin>>days;
jxl=jxl-days;
jxl.output();
cout<<"请输入要相减的两个日期:"<<endl;
date jjj,xxx;
jjj.input();
xxx.input();
jjj=jjj-xxx;
jjj.output();
cout<<"请输入要转换的日期:"<<endl;
jxl.input();
cout<<"转换后为:"<<jxl.dton(jxl)<<endl;
cout<<"请输入要转换的天数:"<<endl;
cin>>days;
jxl=jxl.ntod(days);
jxl.output();
}
当输入年,月,日后,再输入天数,
本想得到相加后的天数,但却输出1年1月1日.

网页上把原来的程序的一些()括号都弄乱了。
怎么可能有®这个符号?下次发的时候里面加个空格应该就不会了。我正在猜这个符号原来是什么样的。
(r)

知道了,原来是( r)

解答如下:
在程序里最下面添加测试主程序:
void main()
{
date test;
test.input();
test.output();

}
显示
年份为:(输入2005)
月份: (输入12)
日期:(输入15)

输出:
年份为:2005
月份: 12
日期:15

结果正确。

你测试得一直都输出1可能是你的构造函数中的
date(int a=1,int b=1,int c=1)
{year=a;mouth=b;day=c;}
起的作用,而你在测试的时候没有改变它的值。

网页上把原来的程序的一些()括号都弄乱了。
怎么可能有®这个符号?下次发的时候里面加个空格应该就不会了。我正在猜这个符号原来是什么样的。
®

知道了,原来是( r)

解答如下:
在程序里最下面添加测试主程序:
void main()
{
date test;
test.input();
test.output();

}
显示
年份为:(输入2005)
月份: (输入12)
日期:(输入15)

输出:
年份为:2005
月份: 12
日期:15

结果正确。

你测试得一直都输出1可能是你的构造函数中的
date(int a=1,int b=1,int c=1)
{year=a;mouth=b;day=c;}
起的作用,而你在测试的时候没有改变它的值

我不知道你的问题在哪儿?只知道你让人帮你看程序?是欣赏你的程序?