现在的位置: 首页 > 综合 > 正文

第八周实验报告2

2014年02月16日 ⁄ 综合 ⁄ 共 4947字 ⁄ 字号 评论关闭

* 程序的版权和版本声明部分
* Copyright (c) 2012, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称: class time
* 作 者: 于昊
* 完成日期: 2012 年 04月 10 日
* 版 本 号: 1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序

#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):hour(h), minute(m), second(s){};  
    void setTime(int h,int m,int s);  
    void display();  
    //比较运算符(二目)的重载  
    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秒前的时间  
};  
//下面实现所有的运算符重载代码。  
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系  
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)  
    {  
        return true;  
    }  
    else if(minute > t.minute)  
    {  
        return true;  
    }  
    else if(second > t.second)  
    {  
        return true;  
    }  
    else  
    {  
        return false;  
    }  
}  
  
bool CTime::operator < (CTime &t)  
{  
    if(hour < t.hour)  
    {  
        return true;  
    }  
    else if(minute < t.minute)  
    {  
        return true;  
    }  
    else if(second < t.second)  
    {  
        return true;  
    }  
    else  
    {  
        return false;  
    }  
}  
  
bool CTime::operator >= (CTime &t)  
{  
    if((*this) > t || (*this) == t)  
    {  
        return true;  
    }  
    else  
    {  
        return false;  
    }  
}  
  
bool CTime::operator <= (CTime &t)  
{  
    if((*this) < t || (*this) == t)  
    {  
        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)  
{  
    CTime t(*this);  
  
    t.second+=  c.second;  
    if (t.second >= 60)           
    {        
        t.minute+= t.second/60;          
        t.second%= 60;              
    }  
  
    t.minute+=  c.minute;        
    if (t.minute>=60)         
    {        
        t.hour+= t.minute/60;        
        t.minute%= 60;        
    }  
  
    t.hour+= c.hour;  
    if (t.hour>23)   
    {  
        t.hour%=24;  
    }  
    return t;  
}  
  
CTime CTime::operator - (CTime &c)  
{        
    CTime t(*this);  
  
    if (t.second < c.second)           
    {      
        t.second+= 60;  
        t.second-= c.second;  
        t.minute-= 1;     
    }  
    else  
    {  
        t.second-= c.second;  
    }  
            
    if (t.minute < c.minute)         
    {        
        t.minute+= 60;  
        t.minute-=  c.minute;  
        t.hour-= 1;  
    }  
    else  
    {  
        t.minute-=  c.minute;  
    }  
      
    if (t.hour < c.hour)   
    {  
        t.hour+=24;  
        t.hour-= c.hour;  
    }  
    else  
    {  
        t.hour-= c.hour;  
    }  
    return t;  
}  
CTime CTime::operator + (int s)  
{  
    CTime t(*this);  
  
    t.second+= s;   
  
    if(t.second >= 60)    
    {    
        t.minute = second / 60 + minute;   
  
        t.second = second % 60;    
  
        if(t.minute >= 60)    
        {    
            t.hour = hour + minute / 60;  
  
            t.minute = minute % 60;   
  
            if(t.hour >= 24)  
            {  
                t.hour%= 24;  
            }  
        }    
    }   
    return t;  
}  
CTime CTime::operator - (int s)  
{  
    CTime t(*this);  
  
    int x;  
  
    x = t.hour * 3600 + t.minute * 60 + t.second;  
  
    x = x - s;  
  
    t.hour = x / 3600;  
  
    x = x % 3600;  
  
    t.minute = x / 60;  
  
    t.second = x % 60;  
  
    return t;  
}  
  
CTime CTime::operator ++ (int)//后置++,下一秒  
{  
    CTime t(*this);  
  
    int x;  
  
    x = hour * 3600 + minute * 60 + second;  
  
    x = x + 1;  
  
    hour = x / 3600;  
  
    x = x % 3600;  
  
    minute = x / 60;  
  
    second = x % 60;  
  
    return t;  
}  
  
CTime CTime::operator ++ ()//前置++,下一秒  
{  
    CTime t(*this);  
  
    int x;  
  
    x = hour * 3600 + minute * 60 + second;  
  
    x = x + 1;  
  
    hour = x / 3600;  
  
    x = x % 3600;  
  
    minute = x / 60;  
  
    second = x % 60;  
  
    return (*this);  
}  
  
CTime CTime::operator -- (int)//后置--,前一秒  
{  
    CTime t(*this);  
  
    int x;  
  
    x = hour * 3600 + minute * 60 + second;  
  
    x = x - 1;  
  
    hour = x / 3600;  
  
    x = x % 3600;  
  
    minute = x / 60;  
  
    second = x % 60;  
  
    return t;  
}  
  
CTime CTime::operator -- ()//前置--,前一秒  
{  
    CTime t(*this);  
  
    int x;  
  
    x = hour * 3600 + minute * 60 + second;  
  
    x = x - 1;  
  
    hour = x / 3600;  
  
    x = x % 3600;  
  
    minute = x / 60;  
  
    second = x % 60;  
  
    return (*this);  
}  
  
CTime CTime::operator+= (CTime &c)  
{  
    second+=  c.second;               
    if (second >= 60)           
    {        
        minute+= second/60;          
        second%= 60;              
    }  
  
    minute+=  c.minute;        
    if (minute>=60)         
    {        
        hour+= minute/60;        
        minute%= 60;        
    }  
  
    hour+= c.hour;  
    if (hour>23)   
    {  
        hour%=24;  
    }  
    return (*this);  
}  
  
CTime CTime::operator-= (CTime &c)  
{             
    if (second < c.second)           
    {      
        second+= 60;  
        second-= c.second;  
        minute-= 1;     
    }  
    else  
    {  
        second-= c.second;  
    }  
            
    if (minute < c.minute)         
    {        
        minute+= 60;  
        minute-=  c.minute;  
        hour-= 1;  
    }  
    else  
    {  
        minute-=  c.minute;  
    }  
      
    if (hour < c.hour)   
    {  
        hour+=24;  
        hour-= c.hour;  
    }  
    else  
    {  
        hour-= c.hour;  
    }  
    return (*this);  
}  
  
CTime CTime::operator+= (int s)//返回s秒后的时间  
{  
    second+= s;   
  
    if(second >= 60)    
    {    
        minute = second / 60 + minute;   
  
        second = second % 60;    
  
        if(minute >= 60)    
        {    
            hour = hour + minute / 60;  
  
            minute = minute % 60;   
  
            if(hour >= 24)  
            {  
                hour%= 24;  
            }  
        }    
    }   
    return (*this);  
}  
  
CTime CTime::operator-= (int s)//返回s秒前的时间  
{  
    int x;  
  
    x = hour * 3600 + minute * 60 + second;  
  
    x = x - s;  
  
    hour = x / 3600;  
  
    x = x % 3600;  
  
    minute = x / 60;  
  
    second = x % 60;  
  
    return (*this);  
}  
void main()  
{  
    CTime t1(8,20,25),t2(11,20,50),t;  
    cout<<"t1为:";  
    t1.display();  
    cout<<"t2为:";  
    t2.display();  
    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;  
    //下面自行设计对其他运算符的重载的测试  
    t = t1 + t2;  
    cout << "t1+t2=";  
    t.display();  
  
    t = t1 - t2;  
    cout << "t1-t2=";  
    t.display();  
  
    t = t1 + 20;  
    cout << "t1增加20秒:";  
    t.display();  
  
    t = t1 - 30;  
    cout << "t1减少30秒:";  
    t.display();  
  
    t = t1;  
    t++;  
    cout << "t1++=";  
    t.display();  
  
    t = t2;  
    ++t;  
    cout << "++t2=";  
    t.display();  
  
    t = t1;  
    t--;  
    cout << "t1--=";  
    t.display();  
  
    t = t2;  
    --t;  
    cout << "--t2=";  
    t.display();  
  
    t = t1;  
    t+=12;  
    cout << "t1后12秒为:";  
    t.display();  
  
    t = t2;  
    t-=20;  
    cout << "t2前20秒为:";  
    t.display();  
  
    t = t1;  
    t+=t2;  
    cout << "t1+=t2为:";  
    t.display();  
  
    t = t1;  
    t-=t2;  
    cout << "t1-=t2为:";  
    t.display();  
  
    system("pause");  
}  

输出:
* 问题分析:
* 算法设计:……

抱歉!评论已关闭.