您的位置:首页 > 编程语言

第九周实验报告(二)

2012-04-16 19:13 323 查看
/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生 

* All rights reserved.

* 文件名称: chongzai.cpp 

* 作 者: 李冠绩

* 完成日期: 2012 年 4 月16 日

* 版 本 号: V1.0

* 对任务及求解方法的描述部分

* 输入描述: 

* 问题描述: 定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。

* 程序输出: 

* 程序头部的注释结束

*/
#include <iostream>

using namespace std;

class CTime

{

private:

 unsigned short int hour;    // 时

 unsigned short int minute;  // 分

 unsigned short int second;  // 秒

public:

 CTime(int h=0,int m=0,int s=0);

 void setTime(int h,int m,int s);

 //void display();

 friend istream & operator >> (istream &in,CTime &t);

 friend ostream & operator << (ostream &out,CTime &t);

 //比较运算符(二目)的重载

 bool operator > (CTime &t);

 bool operator < (CTime &t);

 bool operator >= (CTime &t);

 bool operator <= (CTime &t);

 bool operator == (CTime &t);

 bool operator != (CTime &t);

 //二目运算符的重载

 CTime operator+(CTime &c);//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15

 CTime operator-(CTime &c);//对照+理解

 CTime operator+(int s);//返回s秒后的时间

 CTime operator-(int s);//返回s秒前的时间

 //一目运算符的重载

 CTime operator++(int);//后置++,下一秒

 CTime operator++();//前置++,下一秒

 CTime operator--(int);//后置--,前一秒

 CTime operator--();//前置--,前一秒

 //赋值运算符的重载    

 CTime operator+=(CTime &c);

 CTime operator-=(CTime &c);

 CTime operator+=(int s);//返回s秒后的时间

 CTime operator-=(int s);//返回s秒前的时间

};

//下面实现所有的运算符重载代码。

//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系

CTime::CTime(int h,int m,int s)

{

 hour=h;

 minute=m;

 second=s;

}

void CTime::setTime(int h,int m,int s) 



 hour=h; 

 minute=m; 

 second=s; 



//void CTime::display()

//{

// cout<<hour<<":"<<minute<<":"<<second<<endl;

//}

bool CTime::operator > (CTime &t)

{

 if(hour>t.hour||hour==t.hour&&minute>t.minute||hour==t.hour&&minute==t.minute&&second>t.second)

  return true;

 else

  return false;

}

bool CTime::operator < (CTime &t)

{

 if(hour<t.hour||hour==t.hour&&minute<t.minute||hour==t.hour&&minute==t.minute&&second<t.second)

  return true;

 else

  return false;

}

bool CTime::operator >= (CTime &t)

{

 if(!(hour<t.hour)||hour==t.hour&&!(minute<t.minute)||hour==t.hour&&minute==t.minute&&!(second<t.second))

  return true;

 else

  return false;

}

bool CTime::operator <= (CTime &t)

{

 if(!(hour>t.hour)||hour==t.hour&&!(minute>t.minute)||hour==t.hour&&minute==t.minute&&!(second>t.second))

  return true;

 else

  return false;

}

bool CTime::operator == (CTime &t)

{

 if(hour==t.hour&&minute==t.minute&&second==t.second)

  return true;

 else

  return false;

}

bool CTime::operator != (CTime &t)

{

 if(hour!=t.hour||minute!=t.minute||second!=t.second)

  return true;

 else

  return false;

}

//二目运算符的重载

CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15

{

 CTime a;

 a.second=second+c.second;

 if(a.second>59)

 {

  a.minute++,

   a.second=a.second%60;

 }

 a.minute=a.minute+minute+c.minute;

 if(a.minute>59)

 {

  a.hour++,

   a.minute=a.minute%60;

 }

 a.hour=a.hour+hour+c.hour;

 return a ;

}

CTime CTime::operator-(CTime &c)//对照+理解

{

 CTime a(0,0,0);

 a.hour=hour;

 a.minute=minute;

 a.second=second;

 (int)a.second;

 (int)a.minute;

 (int)a.hour;

 (int)c.second;

 (int)c.minute;

 (int)c.hour;

 if(a.second<c.second)

 {

  a.second=(a.second+60),

   a.minute--;

 }

 if(a.minute<c.minute)

 {

  a.minute=(a.minute+60),

   a.hour--;

 }

 if(a.hour<c.hour)

 {

  a.hour=(a.hour+24);

 }

 a.hour=a.hour-c.hour;

 a.minute=a.minute-c.minute;

 a.second=a.second-c.second;

 (unsigned short int)a.second;

 (unsigned short int)a.minute;

 (unsigned short int)a.hour;

 return a ;

}

CTime CTime::operator+(int s)//返回s秒后的时间

{

 CTime a;

 a.second=second+s;

 a.minute=minute;

 a.hour=hour;

 if(a.second>59)

 {

  a.minute=a.minute+a.second/60,

   a.second=a.second%60;

 }

 if(a.minute> 59)

 {

  a.hour=a.hour+a.minute/60,

   a.minute=a.minute%60;

 }

 return a ;

}

CTime CTime::operator-(int s)//返回s秒前的时间

{

 CTime a;

 a.second=second;

 a.minute=minute;

 a.hour=hour;

 (int)a.second;

 (int)a.minute;

 (int)a.hour;

 a.second=second-s;

 if(a.second<0)

 {

  a.minute=a.minute-((-a.second)/60+1),

   a.second=a.second%60+60;

 }

 if(a.minute<0)

 {

  a.hour=a.hour-((-a.minute)/60+1),

   a.minute=a.minute%60+60;

 }

 (unsigned short int)a.second;

 (unsigned short int)a.minute;

 (unsigned short int)a.hour;

 return a ;

}

//一目运算符的重载

CTime CTime::operator++(int)//后置++,下一秒

{

 CTime temp(*this);

 second++;

 if(second>=60)

 {

  second-=60;

  ++minute;

 }

 return temp;

}

CTime CTime::operator++()//前置++,下一秒

{

 if(++second>=60)

 {

  second-=60;

  ++minute;

 }

 return *this;

}

CTime CTime::operator--(int)//后置--,前一秒

{

 CTime temp(*this);

 (int)second;

 second--;

 if(second<0)

 {

  second=59;

  --minute;

 }

 return temp;

}

CTime CTime::operator--()//前置--,前一秒

{

 (int)second;

 if(--second<0)

 {

  second=59;

  --minute;

 }

 return *this;

}

//赋值运算符的重载    

CTime CTime::operator+=(CTime &c)   

{   

 CTime t1,t;   

 t1.hour =hour;   

 t1.minute =minute ;   

 t1.second =second ;   

 t=t1+c;   

 hour=t.hour ;   

 minute=t.minute ;   

 second=t.second ;   

 return t;   

}   

CTime CTime::operator-=(CTime &c)   

{   

 CTime t1,t;   

 t1.hour =hour;   

 t1.minute =minute ;   

 t1.second =second ;   

 t=t1-c;   

 hour=t.hour ;   

 minute=t.minute ;   

 second=t.second ;   

 return t;   

}   

CTime CTime::operator+=(int s)//返回s秒后的时间    

{   

 CTime t1,t;   

 t1.hour =hour;   

 t1.minute =minute ;   

 t1.second =second ;   

 t=t1+s;   

 hour=t.hour ;   

 minute=t.minute ;   

 second=t.second ;   

 return t;   

}   

CTime CTime::operator-=(int s)//返回s秒前的时间    

{   

 CTime t1,t;   

 t1.hour =hour;   

 t1.minute =minute ;   

 t1.second =second ;   

 t=t1-s;   

 hour=t.hour ;   

 minute=t.minute ;   

 second=t.second ;   

 return t;   

}  

istream & operator >> (istream &in ,CTime &t)

{

 cout<<"时:";

 cin>>t.hour;    // 时

 cout<<"分:";

 cin>>t.minute;  // 分

 cout<<"秒";

 cin>>t.second;  // 秒

 return cin;

}

ostream & operator << (ostream &out ,CTime &t)

{

 cout<<t.hour;    // 时

 cout<<":";

 cout<<t.minute;  // 分

 cout<<":";

 cout<<t.second;  // 秒

 cout<<endl;

 return out;

}

void main()

{

 //CTime t1(8,20,25),t2(11,20,50),t;

 CTime t1,t2,t;

 cout<<"请输入时间t1"<<endl;

 cin>>t1;

 cout<<"请输入时间t2"<<endl;

 cin>>t2;

 cout<<"t1为:";

 //t1.display();

 cout<<t1;

 cout<<"t2为:";

 //t2.display();

 cout<<t2;

 cout<<"下面比较两个时间大小:\n";

 if (t1>t2) cout<<"t1>t2"<<endl;

 if (t1<t2) cout<<"t1<t2"<<endl;

 if (t1==t2) cout<<"t1=t2"<<endl;

 if (t1!=t2) cout<<"t1≠t2"<<endl;

 if (t1>=t2) cout<<"t1≥t2"<<endl;

 if (t1<=t2) cout<<"t1≤t2"<<endl;

 cout<<endl;

 //下面自行设计对其他运算符的重载的测试

 cout<<"对t1后置++,结果为:"; 

 t=t1++; 

 //t.display ();

 cout<<t;

 cout<<"运算结束后,t1的值为:"; 

 //t1.display ();

 cout<<t1;

 cout<<endl; 

 cout<<"对t1前置++,结果为:"; 

 t=++t1; 

 //t.display (); 

 cout<<t;

 cout<<"运算结束后,t1的值为:"; 

 //t1.display ();

 cout<<t1;

 cout<<endl; 

 cout<<"对t1后置--,结果为:"; 

 t=t1--; 

 //t.display (); 

 cout<<t;

 cout<<"运算结束后,t1的值为:"; 

 //t1.display (); 

 cout<<t1;

 cout<<endl; 

 cout<<"对t1前置--,结果为:"; 

 t=--t1; 

 //t.display (); 

 cout<<t;

 cout<<"运算结束后,t1的值为:"; 

 //t1.display (); 

 cout<<t1;

 t=t1+t2;

 cout<<"t1+t2=";

 //t.display();

 cout<<t;

 t=t2-t1;

 cout<<"t2-t1=";

 //t.display();

 cout<<t;

 t=t1+12;

 cout<<"t1+12=";

 //t.display();

 cout<<t;

 t= t1-12;

 cout<<"t1-12=";

 //t.display();

 cout<<t;

 t1+=10;

 cout<<"t1+=10为:";

 //t1.display();

 cout<<t1;

 t=t1+t2;

 cout<<"t1+t2=";

 //t.display();

 cout<<t;

 t1-=12;

 cout<<"t1-=12为:";

 //t1.display();

 cout<<t1;

 system("pause");

}

 
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c system 任务 编程 测试