| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:日期问题、建立具有如下功能的类Date:
只看楼主 加入收藏
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
日期问题、建立具有如下功能的类Date:
#include<iostream>
#include<iomanip>
#include"string.h"
#include<time.h>

using  namespace  std;
class  Date
{
public:
   
    Date(int ,int,int);
    Date (char*s,int d,int y)
    {strcpy(str,s);
    day=d;
     year=y;}


    void set(int y,int d,int m);
     bool NexDay();
     bool isLeapYear();
   
    void  display1();
    void  display2();

    void display3();
   

private:
    int max[12];
     int  max_day;
   
char  str[5];
    int  month;
    int   day;
    int  year;
};
Date::Date(int m,int d,int y):month(m),day(d),year(y)
{}
void Date::set(int y,int m,int d)
 {
     year=y;
     month=m;
     day=d;
 }
 
bool Date::isLeapYear()
 {
     return (year%4==0 && year%100!=0)||(year%400==0);
 }
 bool Date::NexDay()
 {
     ++day;
int max_day;
int max[12]={31,28,31,30,31,30,31,31,30,31,30,31};
     if(isLeapYear())
     { ++max[1];
     }
   
    max_day = max[month];
     if(day>max_day)
     {
         day=1;
         ++month;
         if(month>12)
         {
             ++year;
             month=1;
         }

void Date::display3()
 { cout<<setfill('0');
     cout<<setw(4)<<year<<'/'<<setw(2)<<month<<'/'<<setw(2)<<day<<'\n';
     cout<<setfill(' ');}
void  Date::display1()

{cout<<month<<"/"<<day<<"/"<<year<<endl;
cout<<month<<" "<<day<<" "<<year<<endl;}
void  Date::display2()
{cout<<str<<","<<day<<","<<year<<endl;}
int main()
{



time_t timeval;
timeval=time(NULL);
cout<<"Time as local time is "<<ctime(&timeval)<<endl;
Date d;
     cout<<"请输入一个四位的阿拉伯数字表示的年,一个两位阿拉伯数字表示的月,一个两位的阿拉伯数字表示的日,并用回车分别输入"<<'\n';
     int s_y,s_m,s_d;
     cin>>setw(4)>>s_y>>setw(2)>>s_m>>setw(2)>>s_d;
     d.set(s_y,s_m,s_d);
d.display1();
d.display2();
     d.NexDay();
     d.display3();
     system("pause");
return  0;
}
我的程序没有实现“构造函数用头文件time.h中的标准库函数读取系统时间,把读取的时间赋值给Date的数据成员”这一要求,而且存在错误,实在不会改了,求助!!
搜索更多相关主题的帖子: private include public 
2013-10-20 14:21
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
收藏
得分:0 
补充该类要实现的功能:建立具有如下功能的类Date:
   1) 以多种格式输出日期,如 MM DD YYYY;MM/DD/YY;
June14, 1992;
   2) 用重载的构造函数初始化Date类的对象。初始化值是1)中格式的数据;
   3) 构造函数用头文件time.h中的标准库函数读取系统时间,把读取的时间赋值给Date的数据成员;
   4) 设计一个NextDay()成员函数,把日期往后挪一天。
2013-10-20 14:22
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
代码风格请参照《高质量C++编程》,。。。新手必须要从零开始抓起
2013-10-20 15:21
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:20 
显示那个需求 楼主请自己搞

程序代码:
#include <iostream>
#include <iomanip>
#include <time.h>

// 月份 的 阿拉伯数字 与 英文月份 的 映射表
#define ZEROMONTH 0
const int MONTH_COUNT = 12;
static const char* MONTH_NUM2EN[MONTH_COUNT + 1] = {
    "ZeroMonth", "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October", "November",
    "December"
};
/*
日期类
*/
class Date
{
public:
    // 3) 构造函数用头文件time.h中的标准库函数读取系统时间,把读取的时间赋值给Date的数据成员
    Date() : m_nMonth(0), m_nDay(0), m_nYear(0) {
        struct tm* p = NULL;
        time_t timeval;
        time(&timeval);
        p = localtime(&timeval);
        m_nYear = p->tm_year + 1900;
        m_nMonth = p->tm_mon + 1;
        m_nDay = p->tm_mday;
        std::cout << "Year:" << m_nYear << " Month:" << m_nMonth << " Day:" << m_nDay << std::endl;
    }
    
    // 2) 用重载的构造函数初始化Date类的对象。初始化值是1)中格式的数据 June 14, 1992
    // 我不明白这个数据是指初始化完后成员的变量是“June 14, 1992” 还是 初始化前要输入这字符串作为参数
    // 姑且按照传入参数为那串字符串来处理吧
    Date(const char* pszTime) : m_nMonth(0), m_nDay(0), m_nYear(0) {
        // 给足缓冲
        char date[32] = {0};
        strcpy(date, pszTime);
        // 这里就不搞太多的异常处理了直接以判断空格结束一个时间属性
        char buf[16] = {0};
        char* p = date;
        int i = 0;
        int part = 0;
        while (*p != '\0') {
            if (*p == ' ') {
                switch (part) {
                case 0:
                    m_nMonth = findMonthNumber(buf);
                    break;
                case 1:
                    // 首先去掉day的逗号再作转换
                    {
                        int len = strlen(buf);
                        buf[len-1] = '\0';
                        m_nDay = atoi(buf);
                    }
                    break;
                default:
                    break;
                }
                i = 0;
                part++;
                p++;
                memset(buf, 0, sizeof(buf));
                continue;
            }
            buf[i] = *p;
            p++;
            i++;
        }
        m_nYear = atoi(buf);
    }

    // 直接输入Y M D初始化成员
    Date(int m, int d, int y) : m_nMonth(m), m_nDay(d), m_nYear(y) {
    }

    // 我觉得写析构是个好习惯
    ~Date() {}

public:
    void set(int y,int d,int m) {
        m_nYear = y;
        m_nMonth = m;
        m_nDay = d;
    }
    bool roll2NextDay();
    bool isLeapYear();

    void display1();
    void display2();
    void display3();

private:
    int findMonthNumber(const char* str) {
        for (int i=1; i<MONTH_COUNT; i++) {
            if (0 == strcmp(str, MONTH_NUM2EN[i])) {
                return i;
            }
        }
        return ZEROMONTH;
    }

private:
    int m_nMonth;
    int m_nDay;
    int m_nYear;
};

bool Date::isLeapYear()
{
    return (m_nYear%4==0 && m_nYear%100!=0)||(m_nYear%400==0);
}

/************************************************************************/
/* 这个函数就不写了 自己搞吧 不懂再发帖问                               */
/************************************************************************/
bool Date::roll2NextDay()
{
//     ++m_nDay;
//     int max_day;
//     int max[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    // 建议先判断闰年
    if (isLeapYear()) {
        
    }

//     max_day = max[m_nMonth];
//     if (m_nDay>max_day) {
//         m_nDay=1;
//         ++m_nMonth;
//         if(m_nMonth>12)
//         {
//             ++m_nYear;
//             m_nMonth=1;
//         }
//     }
    return true;
}

void Date::display1()
{
    std::cout<<m_nMonth<<"/"<<m_nDay<<"/"<<m_nYear<<std::endl;
    std::cout<<m_nMonth<<" "<<m_nDay<<" "<<m_nYear<<std::endl;
}
void Date::display2()
{
//    std::cout<<str<<","<<m_nDay<<","<<m_nYear<<std::endl;
}
void Date::display3()
{
    std::cout<<std::setfill('0');
    std::cout<<std::setw(4)<<m_nYear<<'/'<<std::setw(2)<<m_nMonth<<'/'<<std::setw(2)<<m_nDay<<std::endl;
    std::cout<<std::setfill('0');
}

int main(int argc, char** argv)
{
    Date date("June 14, 1992");
    Date d;
    std::cout<<"please input....bla bla .... enter to input...."<<std::endl;

    // Date::set是多余的
//     int s_y,s_m,s_d;
//     std::cin>>std::setw(4)>>s_y>>std::setw(2)>>s_m>>std::setw(2)>>s_d;
//     d.set(s_y,s_m,s_d);

    d.display1();
    d.display2();
    d.roll2NextDay();
    d.display3();

    system("pause");

    return 0;
}


[ 本帖最后由 blueskiner 于 2013-10-20 16:35 编辑 ]
2013-10-20 16:33
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
收藏
得分:0 
回复 4楼 blueskiner
受教了,只是有点看不太懂,需要时间好好琢磨一下,非常感谢
2013-10-22 09:11
快速回复:日期问题、建立具有如下功能的类Date:
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020384 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved