实验12-运算符重载-
题目描述
定义一个学生类Student,包含该学生的姓名、出生年、月、日 ,重定义 “-”号实现两个学生之间相差多少天的比较。并利用重载的“-”运算符,求所有学生中年龄相差最大的两个人的名字以及相差天数。
输入
第一行:输入所需要输入的学生个数;
第二行开始,依次输入每个学生的姓名、出生年、月、日。
输出
输出年龄相差最大的两个人的名字以及相差天数。
输入样例
3
Tom 1995 1 1
Joe 1995 2 28
Jimmy 1996 1 8
输出样例
Tom和Jimmy年龄相差最大,为372天。
计算时间差值的方法很重要
#include<iostream>
using namespace std;
class Cdate
{
int year,month,day;
public:
Cdate(int y,int m,int d):year(y),month(m),day(d){}
int leap(int y)//如果是闰年返回1,如果不是返回0
{
int x;
if((y%4==0&&y%100!=0)||(y%100==0&&y%400==0))
x=1;
else
x=0;
return x;
}
int daysbetween(Cdate c,int flag)
{
int sum,i;
int days[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int daysleap[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(c.year))//是闰年
{
if(flag)
{
sum=c.day;
for(i=0;i<c.month-1;i++)
sum+=days[i];
}
else
{
sum=days[c.month-1]-c.day;
for(i=c.month;i<12;i++)
sum+=days[i];
}
}
else
{
if(flag)
{
sum=c.day;
for(i=0;i<c.month-1;i++)
sum+=days[i];
}
else
{
sum=daysleap[c.month-1]-c.day;
for(i=c.month;i<12;i++)
sum+=daysleap[i];
}
}
return sum;
}
int date(Cdate c1,Cdate c2)//最终得出结果的函数->两个日期之间相差多少天
{
int y,days;
if(c1.year!=c2.year)
{
days=daysbetween(c1,0);
for(y=c1.year+1;y<=c2.year;y++)
{
if(leap(y))
days+=366;
else
days+=365;
}
days-=daysbetween(c2,0);
}
else if(c1.year==c2.year&&c1.month!=c2.month)
days=daysbetween(c1,0)-daysbetween(c2,0);
else if(c1.year==c2.year && c1.month==c2.month && c1.day!=c2.day)
days=c2.day-c1.day;
return days;
}
friend class student;
};
class student
{
string name;
int year,month,day;
public:
student(){}
student(string n,int y,int m,int d):name(n),year(y),month(m),day(d){}
void setstu(string n,int y,int m,int d)
{
name=n;year=y;month=m;day=d;
}
int operator-(student &s)
{
Cdate s1(year,month,day);
Cdate s2(s.year,s.month,s.day);
int sum=s2.date(s1,s2);
//cout<<name<<" "<<s.name<<sum<<" "<<endl;
return sum;
}
void print(student &s1,student &s2,int max)//岁数大的在前
{
cout<<s2.name<<"和"<<s1.name<<"年龄相差最大,为"<<s2-s1<<"天。"<<endl;
}
};
int main()
{
int n,i,y,m,d,j;
string name;
cin>>n;
student s[n];
for(i=0;i<n;i++)
{
cin>>name>>y>>m>>d;
s[i].setstu(name,y,m,d);
}
int max=-1;
student s1,s2;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j);//自己不与自己比较
else
{
if(s[j]-s[i]>max)
{
max=s[j]-s[i];
s1=s[i];s2=s[j];
}
}
}
s1.print(s1,s2,max);
return 0;
}