问题及代码:
#include <iostream>
using namespace std;
class Time
{
public:
void set_time( );
void show_time( );
inline void add_a_sec();
inline void add_a_minute();
inline void add_an_hour();
void add_secs(int);
void add_minutes(int);
void add_hours(int);
private:
bool is_time(int, int, int); //这个成员函数设置为私有的,是合适的,请品味
int hour;
int minute;
int sec;
};
void Time::set_time( )
{
char c1,c2;
cout<<"请输入时间(格式hh:mm:ss)";
while(1)
{ cin>>hour>>c1>>minute>>c2>>sec;
if(c1!=':'||c2!=':')
cout<<"格式不正确,请重新输入"<<endl;
else if (!is_time(hour,minute,sec))
cout<<"时间非法,请重新输入"<<endl;
else
break;
}
}
void Time::show_time( )
{
cout<<hour<<":"<<minute<<":"<<sec<<endl;
}
bool Time::is_time(int h,int m, int s)
{
if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)
return false;
return true;
}
inline void Time::add_a_sec()
{
if(sec<59)
sec+=1;
else
{
sec=0;
add_a_minute();
}
}
inline void Time::add_a_minute()
{
if(minute<59)
minute+=1;
else
{
minute=0;
add_an_hour();
}
}
inline void Time::add_an_hour()
{
if(hour<23)
hour+=1;
else
hour=0;
}
void Time::add_secs(int n)
{
int j;
j=(sec+n)/60;
if(sec+n<60)
sec+=n;
else
{
sec=sec+n-j*60;
add_minutes(j);
}
}
void Time::add_minutes(int n)
{
int j;
j=(minute+n)/60;
if(minute+n<60)
minute+=n;
else
{
minute=minute+n-j*60;
add_hours(j);
}
}
void Time::add_hours(int n)
{
if(hour+n<24)
hour+=n;
else
{
hour=hour+n-(hour+n)/24*24;
}
}
int main( )
{
Time t1;
t1.set_time( );
t1.show_time( );
t1.add_a_sec();
t1.add_a_minute();
t1.add_an_hour();
t1.show_time( );
t1.add_secs(200);
t1.show_time( );
t1.add_minutes(200);
t1.show_time( );
t1.add_hours(100);
t1.show_time( );
return 0;
}
运行结果:
学习小结:
这个编的略久
刚开始自认为一切都对的时候,显示的时间竟是负数,想了许久未果,在去吃饭的路上想到了j的赋值应该用/号而不是%