C++第四次上机作业
2016-05-20 10:50
295 查看
一、友元类
1.代码:/* * 文件名称:时间的友元类 * 作 者: 袁明杰 * 完成日期:2016 年 5 月 20日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: * 输入描述:无 * 问题描述:要求用友元类; * 程序输出:略 * 问题分析:略 * 算法设计:略 */ #include<iostream> #include<math.h> using namespace std; class Date { public: Date(int m=1,int d=1,int y=2000):month(m),day(d),year(y) {} friend class Time; //Time为Date的友元类 private: int month; int day; int year; }; class Time { public: Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s) {} void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年 void display(Date &); //显示时间,格式:月/日/年 时:分:秒 private: int hour; int minute; int sec; }; void Time::add_a_second(Date &t) { int a[7]={1,3,5,7,8,10,12}; int b[4]={4,6,9,11}; int i; sec=sec+1; if(sec>60) {minute+=1;sec=0;} if(minute>=60) { hour+=1;minute=0;} if(hour>=24) { t.day+=1;hour=0;} for(i=0;i<7;i++) { if(t.day>31&&t.month==a[i]) {t.month+=1;t.day=1;} } for(i=0;i<4;i++) { if(t.day>30&&t.month==b[i]) {t.month+=1;t.day=1;} } if(t.month==2&&t.year%4==0) { if(t.day>29) {t.month+=1;t.day=1;} } if(t.month==2&&t.year%4!=0) { if(t.day>28) {t.month+=1;t.day=1;} } if(t.month>12) { t.year+=1;t.month=1;} } void Time::display(Date &p) { cout<<p.month<<"/"<<p.day<<"/"<<p.year<<" "<<hour<<":"<<minute<<":"<<sec<<endl; } int main( ) { Time t1(23,59,55); Date d1(12,31,2013); //测试时,再试试Date d1(2,28,2013)会如何 for(int i=0; i<=65; i++) { t1.add_a_second(d1); t1.display(d1); } return 0; }
运行结果:
二、静态成员应用
1.代码:
/* * 文件名称:时间类 * 作 者:袁明杰 * 完成日期:2016 年 5 月 20日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分: * 输入描述:无 * 问题描述:要求用静态数据成员; * 程序输出:略 * 问题分析:略 * 算法设计:略 */ #include<iostream> using namespace std; class Time { public: Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s) {} void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm void add_seconds(int n); //增加n秒钟 void add_minutes(int n); //增加n分钟 void add_hours(int n); //增加n小时 static void change24(int n); //改变静态成员is_24,在12和24时制之间转换 static void changefrom0(int n); //改变静态成员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 sec; }; bool Time::is_24=true; bool Time::from0=false; void Time::show_time() { if(is_24==1&&from0==0) { cout<<"24小时制,不前导:"<<endl; cout<<hour<<":"<<minute<<":"<<sec<<endl; } else if(from0==0&&is_24==0) { cout<<"12小时制,不前导:"<<endl; if(hour<=12) cout<<hour<<":"<<minute<<":"<<sec<<" am"<<endl; else { hour=hour-12; cout<<hour<<":"<<minute<<":"<<sec<<" pm"<<endl; } } else if(from0==1&&is_24==1) { cout<<"24小时制,前导:"<<endl; if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; if(minute<10) cout<<"0"<<minute<<":"; else cout<<minute<<":"; if(sec<10) cout<<"0"<<sec; else cout<<sec; cout<<endl; } else if(from0==1&&is_24==0) { cout<<"12小时制,前导:"<<endl; if(hour>12) { hour=hour-12; if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; if(minute<10) cout<<"0"<<minute<<":"; else cout<<minute<<":"; if(sec<10) cout<<"0"<<sec; else cout<<sec; cout<<" pm"<<endl; } else { if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; if(minute<10) cout<<"0"<<minute<<":"; else cout<<minute<<":"; if(sec<10) cout<<"0"<<sec; else cout<<sec; cout<<" am"<<endl; } } } void Time::add_seconds(int n) { sec=sec+n; if(sec>60) sec-=60; } void Time::add_minutes(int n) { minute=minute+n; if(minute>60) minute-=60; } void Time::add_hours(int n) { hour=hour+n; if(hour>24) hour=hour-24; } void Time::change24(int n) { is_24=n; } void Time::changefrom0(int n) { from0=n; } void main( ) { Time t1(23,14,25); Time t2(8,45,6); cout<<"t1是:"; t1.show_time(); cout<<"t2是: "; t2.show_time(); cout<<"10小时后,切换是否前导:"<<endl; t1.add_hours(10); t2.add_hours(10); t1.changefrom0(1); t2.changefrom0(1); cout<<"t1是:"; t1.show_time(); cout<<"t2是: "; t2.show_time(); t1.change24(0); t2.change24(0); cout<<"t1是:"; t1.show_time(); cout<<"t2是: "; t2.show_time(); }
2.运行结果:
相关文章推荐
- C++第6次实验——项目一输出星号图
- c++第6次实验
- c++第四次实验作业
- c++第六次上机实验——循环复习
- C++基础:各种输入方法总结,cin、cin.get()、cin.getline()、getline()、gets()、getchar()
- C++第六次实验—循环(实验)
- Leetcode #13 in cpp
- c++第三次实验一类和对象2
- STL源码笔记(18)—平衡二叉树AVL(C++封装+模板)
- c++作业6
- c++学习笔记(5):C++ typename的起源与用法
- c++第四次实验
- c++第六次实验-2
- c语言发送邮件
- C++第四次上机实验
- c++第五次作业
- c++作业5
- const mutable 等的作用
- c++第五次实验
- c++第六次实验-1