六周 项目四 静态成员应用
六周 项目4 静态成员应用
#include<iostream> #include<cstdlib> using namespace std; class Time { public: //Time(int=0,int=0,int=0); void setTime(int h=0,int m=0,int s=0); void is_Righttime(); void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm void style_time(); void add_seconds(int); //增加n秒钟 void add_minutes(int); //增加n分钟 void add_hours(int); //增加n小时 static void change24(); //改变静态成员is_24,在12和24时制之间转换 static void changefrom0(); //改变静态成员from0,切换是否前导0 private: static bool is_24; //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5 pm static bool from0; //为true时,前导0,8:23:5显示为08:23:05 int hour; int minute; int second; }; bool Time::is_24=false; bool Time::from0=false; void Time::setTime(int h,int m,int s) { hour=h; minute=m; second=s; } void Time::change24() { is_24=true; } void Time::changefrom0() { from0=true; } void Time::style_time() { int style; cout<<"请选择输出格式:"<<endl; cout<<"1.12小时制,无前导0 2.24小时制,无前导0"<<endl; cout<<"3.12小时制,有前导0 4.24小时制,有前导0"<<endl; cin>>style; switch(style) { case 1: break; case 2: change24(); break; case 3: changefrom0(); break; case 4: change24(); changefrom0(); break; default: cout<<"输入有误,请重新输入:"<<endl; cin>>style; } } void Time::add_seconds(int s) { minute+=s/60; while(minute>=60) minute-=60; hour+=1; hour+=s/3600; while(hour>=24) hour-=24; second+=s%60; if(second>59) { minute=minute+1; second-=60; } } void Time::add_minutes(int m) { hour+=m/60; while(hour>=24) hour-=24; minute+=m%60; while(minute>=60) minute-=60; } void Time::add_hours(int h) { hour+=h%24; while(hour>=24) hour-=24; } void Time::show_time() { bool time; if(!is_24&&!from0) { if(hour>12) { hour-=12; cout<<hour<<":"<<minute<<":"<<second<<"pm"<<endl; } else cout<<hour<<":"<<minute<<":"<<second<<"am"<<endl; } else if(!is_24&&from0) { if(hour>12) { time=false; hour-=12; if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; } else { time=true; cout<<hour<<":"; } if(minute<10) cout<<"0"<<minute<<":"; else cout<<minute<<":"; if(second<10) { if(time) cout<<"0"<<second<<"am"<<endl; else cout<<"0"<<second<<"pm"<<endl; } else { if(time) cout<<second<<"am"<<endl; else cout<<second<<"pm"<<endl; } } else if(is_24&&!from0) cout<<hour<<":"<<minute<<":"<<second<<endl; else { if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; if(minute<10) cout<<"0"<<minute<<":"; else cout<<minute<<":"; if(second<10) cout<<"0"<<second<<endl; else cout<<second<<endl; } } int main() { int chose,sec,min,hour; Time T; cout<<"请输入时间(HH:MM:SS):"<<endl; T.is_Righttime(); while(1) { cout<<"请选择以下命令:"<<endl; cout<<"1.增加n秒 2.增加n分 "<<endl; cout<<"3.增加n时 0.退出 "<<endl; cin>>chose; switch(chose) { case 0: exit(0); case 1: cout<<"请输入增加的秒数:"<<endl; cin>>sec; T.add_seconds(sec); T.style_time(); T.show_time(); break; case 2: cout<<"请输入增加的分数:"<<endl; cin>>min; T.add_minutes(min); T.style_time(); T.show_time(); break; case 3: cout<<"请输入增加的时数:"<<endl; cin>>hour; T.add_hours(hour); T.style_time(); T.show_time(); break; default: cout<<"输入有误,请重新输入:"<<endl; cin>>chose; } } return 0; } void Time::is_Righttime() { int hour,minute,second; char a,b; while(1) { cin>>hour>>a>>minute>>b>>second; if(a!=':'||b!=':') cout<<"格式错误,请重新输入:"<<endl; else if(hour<0||hour>24||minute<0||minute>60||second<0||second>60) cout<<"时间有误,请重新输入:"<<endl; else setTime(hour,minute,second); break; } }