C++第四次上机作业

一、友元类

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.运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值