1. 程式人生 > >第5周專案2—時間類

第5周專案2—時間類

/*   
02.*煙臺大學計算機學院   
03.*檔名稱:xiangmu2.cpp   
04.*作    者:李亞輝   
05.*完成日期:2016年5月24日   
06.*版 本 號:vc++6.0   
07.*   
08.*問題描述:編寫並呼叫成員函式,分別使時間進行增加 
09.*輸入描述: 現在的時間(時、分、秒)  
10.*程式輸出:經過呼叫成員函式後的時間
*/




#include<iostream>
using namespace std;
class Time
{
public:
	void set_time();
	void show_time();
    inline void add_a_sec();//增加1秒
    inline void add_a_minute();//增加一分鐘
	inline void add_an_hour();//增加一小時
    void add_seconds(int);//增加n秒
    void add_minutes(int );//增加n分鐘
    void add_hours(int );//增加n小時
private:
	bool is_time(int ,int ,int );//私有的成員函式
	int hour;
	int minute;
	int sec;
};
void Time::set_time()
{
	char c1,c2;
	cout<<"請輸入時間";
	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()//增加1秒鐘
{
       ++sec;//sec+1後在呼叫
	   if(sec>59)//是否超過合理範圍
	{
		sec=0;//因為增加一秒鐘,使分鐘發生變化
		add_a_minute();//增加一分鐘是否會引起小時的變化,在該函式中解決
	} 
}
inline void Time:: add_a_minute()//增加一分鐘
{
	++minute;
	if(minute>59)
	{
		minute=0;
		add_an_hour();
	}
	
}
inline void Time::add_an_hour()//增加一小時
{

	++hour;
	if(hour>23)
		hour=0;//到第2天了
}
void Time::add_seconds(int n)//增加n秒
{
	sec+=n;//直接加上增加的秒數
	if(sec>59)
	{
		add_minutes(sec/60);
		sec%=60;
	}

}
void Time::add_minutes(int n)//增加n分鐘
{
	minute+=n;
	if(minute>59)
	{
		add_hours(minute/60);
		minute%=60;

	}
}
void Time::add_hours(int n)//增加n小時
{
	hour+=n;
	if(hour>23)
		hour%=24;//此程式不涉及日期
}
int main()
{
	Time t1;
	Time &t2=t1;
	t1.set_time();
	cout<<"現在的時間是:";

	t2.show_time();
	t1.add_a_sec();//增加1秒鐘
	cout<<"增加1秒鐘後:";
	t1.show_time();

	t1.add_a_minute();//增加1分鐘
	cout<<"增加1小時後:";
	t2.show_time();

	t1.add_an_hour();//增加1小時
	cout<<"增加1小時後:";
	t1.show_time();

	t1.add_an_hour();//增加40秒鐘
		cout<<"增加40秒後:";
	t1.show_time();

	t1.add_minutes(127);//增加127分鐘
	cout<<"增加127分鐘後:";
	t1.show_time();

	t1.add_hours(8);//增加8小時
	cout<<"增加8小時後:";
	t1.show_time();
	return 0;
}
/*學習心得:
我認為這個專案,最難的是分辨增加一秒或一分後,是否會引起時間和分鐘的變化,這個過程在編寫時需要自己條理清晰,否則很難做出正確的編寫,
同時也說明,變成最重要的是思維模式,是演算法,不是他的結構,每一種語言都有他特有的結構模式,然而演算法是永恆不變的,總算明白,為什麼老師
經常說演算法是程式的靈魂,演算法確實是一個程式的核心思維,不論這個程式是使用什麼語言編寫的,他的核心思維就在那裡,演算法就在那裡,比的就是
誰的演算法更加精妙,更能提高效率。
*/