Problem B: 时间类的错误数据处理

本文详细介绍了如何设计并实现一个时间类Time,该类支持多种时间处理功能,包括构造、读写时间、输入输出时间等。通过具体示例,展示了如何在main函数中使用Time类进行时间数据的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

封装一个时间类Time,用于时间处理的相关功能,支持以下操作:
1. Time::Time()无参构造方法。
2. Time::Time(int,int,int)构造方法:传递时分秒的三个参数构造对象。
3. Time::Time(const T&)拷贝构造方法。
4. 成员读函数:
   Time::hour()  :返回Time的小时数;
   Time::minute():返回Time的分钟数;
   Time::second():返回Time的秒数。
5. 成员写函数:
   Time::hour(int)  :传参修改Time的小时数;
   Time::minute(int):传参修改Time的分钟数;
   Time::second(int):传参修改Time的秒数。
6. 对象整体读写方法:
   Time::setTime(int,int,int)方法:传递时分秒三个参数修改Time对象的时分秒数。该方法返回修改后的对象。
   Time::setTime(const T&)方法:传递一个参数修改Time对象的时分秒数。该方法返回修改后的对象。
   Time::getTime()方法:返回对象自身的引用。其实,t.getTime()即t。
   仅在Time类中的Time::getTime()方法实在是多余,在组合或者继承关系时才会有机会用到。
7. Time::inputTime()方法:按格式从标准输入读取数据修改Time对象的时分秒数值。该方法返回修改后的对象。
8. Time::showTime()方法:输出“hh:mm:ss”,不足两位的要前面补0。如果对象不是合法的时间,则输出“Time error”。
你设计一个时间类Time,使得main()函数能够正确运行。
函数调用格式见append.cc。
append.cc中已给出main()函数。main()函数内容稍微繁复,仅为测试对象的各种调用情况。

Input

输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在int范围内。

Output

每组测试数据对应一组输出“hh:mm:ss”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“Time error”。格式见sample。

Sample Input

6
0 0 1
0 59 59
1 1 60
23 0 0
23 59 59
24 1 0

Sample Output

00:00:01
00:59:59
Time error
23:00:00
23:59:59
Time error

HINT

输出格式用头文件<iomanip>中流操作算子:

setw(w)   :设置数据的输出宽度为w个字符

setfill(c):设置用字符c作为填充字符

Append Code

#include<iostream>
#include<iomanip>
using namespace std;
class Time
{
private :
     int x,y,z;
public :
     Time():x(0),y(0),z(0){}
     Time( int a, int b, int c):x(a),y(b),z(c){}
     Time( const Time &q):x(q.x),y(q.y),z(q.z){} //cout<<"There was a call to the copy constructor : "<<x<<","<<y<<","<<z<<endl;}
     int hour(){ return x;}
     int minute(){ return y;}
     int second(){ return z;}
     void hour( int a){x=a;}
     void minute( int a){y=a;}
     void second( int a){z=a;}
     Time &setTime( int a, int b, int c){x=a;y=b;z=c; return * this ;}
     Time &setTime( const Time &q){x=q.x;y=q.y;z=q.z; return * this ;}
     Time &getTime(){ return * this ;}
      Time inputTime()
      {
          int a,b,c;
          cin>>a>>b>>c;
          x=a;y=b;z=c;
          return * this ;
      }
     void showTime(){
         if (x<24&&x>=0&&y>=0&&y<60&&z>=0&&z<60)
         cout<<setw(2)<<setfill( '0' )<<x<< ":" <<setw(2)<<setfill( '0' )<<y<< ":" <<setw(2)<<setfill( '0' )<<z<<endl;
         else
             cout<< "Time error" <<endl;
         }
};
 
int main()
{
     Time t;
     int cases;
     cin>>cases;
     for ( int i = 1; i <= cases; ++i)
     {
         if (i % 4 == 0)
         {
             int hour, minute, second;
             cin>>hour>>minute>>second;
             Time tt(hour, minute, second);
             tt.showTime();
         }
         if (i % 4 == 1)
         {
             int hour, minute, second;
             cin>>hour>>minute>>second;
             t.setTime(hour, minute, second).showTime();
         }
         if (i % 4 == 2)
             t.inputTime().showTime();
         if (i % 4 == 3)
         {
             int hour, minute, second;
             cin>>hour>>minute>>second;
             t.hour(hour);
             t.minute(minute);
             t.second(second);
             t.showTime();
         }
     }
}

转载于:https://www.cnblogs.com/TogetherLaugh/p/6556075.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值