标题:运行不成功,,求高人指点,日立制作, 要求出年历以及可以输入两天可以知 ...
只看楼主
陌儿will
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-18
结帖率:0
已结贴  问题点数:20 回复次数:3 
运行不成功,,求高人指点,日立制作, 要求出年历以及可以输入两天可以知道相差天数
#include <iostream>   
#include <vector>   
#include <iomanip>   
using namespace std;  
class Date  
{  
private:  
    int year;         //年份   
    int month;          //月份   
    int day;              //几号   
    int days;               //该月共有几天   
    int lDays;                 //当前日期后面的天数,lDays=days-day;   
    vector<int> myYear;          //存放万年历日期排列的容器   
    void Set();                    //输入了日期后初始化days lDays myYear   
public:  
    Date(int y=1900,int m=1,int d=0):year(y),month(m),day(d){myYear.resize(40);Set();}  
    void Show()const;  
    void showSign()const;  
    void showAll()const;  
    void Reset(int y,int m,int d=0);  
    void clear();  
    bool isR(int n);  
    int operator-(const Date&);  
};  
void Date::Show()const  
{  
    cout<<"            "<<year<<"年"<<month<<"月"<<"(";  
    showSign();  
    cout<<")"<<endl<<endl;  
    cout<<setw(5)<<"日"<<setw(5)<<"一"<<setw(5)<<"二"<<setw(5)<<"三"<<setw(5)<<"四"  
    <<setw(5)<<"五"<<setw(5)<<"六"<<endl;  
    for(vector<int>::size_type i=0;i<myYear.size();i++)  
    {  
        if(myYear[i]==0)  
            cout<<setw(5)<<" ";  
        else  
            cout<<setw(5)<<myYear[i];  
        if((i+1)%7==0)  
            cout<<endl;  
    }  
    cout<<endl;  
}  
void Date::Set()  
{  
    short beginDay=1;  
    for(int i=1901;i<=year;i++)     //年份产生的初始位置的改变   
    {  
        if(!isR(i-1))  
            beginDay++;  
        else  
            beginDay+=2;  
        if(beginDay>6)  
            beginDay%=7;  
    }  
    for( i=2;i<=month;i++)        //月份产生的初始位置的改变   
    {  
        switch(i-1)  
        {  
            case 1:  
            case 3:  
            case 5:  
            case 7:  
            case 8:  
            case 10:  
            case 12:  
                {  
                    beginDay+=3;  
                    if(beginDay>6)  
                            beginDay%=7;  
                    break;  
                }  
            case 2:  
                {  
                    if(isR(year))  
                        beginDay++;  
                    if(beginDay>6)  
                            beginDay%=7;  
                    break;  
                }  
            default:  
                {  
                    beginDay+=2;  
                    if(beginDay>6)  
                        beginDay%=7;  
                    break;  
                }  
        }  
    }  
    for( i=0;i<31;i++)       //将容器全部设置为31天   
        myYear[beginDay+i]=i+1;  
    switch(month)       //重设尾部几天   
    {  
        case 4:  
        case 6:  
        case 9:  
        case 11:  
            {  
                myYear[beginDay+30]=0;  
                days=30;  
                break;  
            }  
        case 2:  
            {  
                myYear[beginDay+30]=0;  
                myYear[beginDay+29]=0;  
                days=29;  
                if(!isR(year))  
                {  
                    myYear[beginDay+28]=0;  
                    days=28;  
                }  
                break;  
            }  
        default:  
            {  
                days=31;  
                break;  
            }  
    }  
    lDays=days-day;  
}  
void Date::Reset(int y,int m,int d)  
{  
    this->clear();  
    year=y;month=m;day=d;  
    Set();  
}  
bool Date::isR(int n)  
{  
    if(n%100!=0&&n%4==0)  
        return 1;  
    else if(n%100==0&&n%400==0)  
        return 1;  
    else  
        return 0;  
}  
void Date::showSign()const  
{  
    switch((year%1900)%12)  
    {  
    case 0:  
        cout<<"鼠";break;  
    case 1:  
        cout<<"牛";break;  
    case 2:  
        cout<<"虎";break;  
    case 3:  
        cout<<"兔";break;  
    case 4:  
        cout<<"龙";break;  
    case 5:  
        cout<<"蛇";break;  
    case 6:  
        cout<<"马";break;  
    case 7:  
        cout<<"羊";break;  
    case 8:  
        cout<<"猴";break;  
    case 9:  
        cout<<"鸡";break;  
    case 10:  
        cout<<"狗";break;  
    case 11:  
        cout<<"猪";break;  
    }  
}  
void Date::showAll()const  
{  
    Date da;  
    for(int i=0;i<12;i++)  
    {  
        da.Reset(this->year,i+1);  
        da.Show();  
        cout<<endl<<endl<<endl;  
        da.clear();  
    }  
}  
void Date::clear()  
{  
    myYear.clear();  
    myYear.resize(40);  
}  
int Date::operator-(const Date& da)  
{  
    int sum=0;  
    Date temp;  
    if(this->year<da.year)    //几个无法计算的提示   
    {  
        cout<<"必须以较早的日期减去较迟的日期!/n";  
        return -1;  
    }  
    else if(this->year==da.year&&this->month<da.month)  
    {  
        cout<<"必须以较早的日期减去较迟的日期!/n";  
        return -2;  
    }  
    else if(this->year==da.year&&this->month==da.month&&this->day<da.day)  
    {  
        cout<<"必须以较早的日期减去较迟的日期!/n";  
        return -3;  
    }  
  
    else  
    {  
        if(year==da.year&&month==da.month&&day!=da.day)    //同年同月不同日   
        {  
            return day-da.day;  
        }  
        if(year==da.year&&month>da.month)    //同年不同月   
        {  
            for(int  i=da.month+1;i<month;i++)  
            {  
                temp.Reset(year,i);  
                sum+=temp.lDays;  
            }  
            return sum+da.lDays+day;  
        }  
        else  
        {  
            for( int   i=da.year+1;i<year;i++)  
            {  
                if(isR(i))  
                    sum+=366;  
                else  
                    sum+=365;  
            }  
            for( i=da.month+1;i<13;i++)  
            {  
                temp.Reset(da.year,i);  
                sum+=temp.lDays;  
            }  
            sum+=da.lDays;  
            for(i=1;i<month;i++)  
            {  
                temp.Reset(year,i);  
                sum+=temp.lDays;  
            }  
            sum+=day;  
            return sum;  
        }  
    }  
}  
搜索更多相关主题的帖子: public include private 万年历 
2012-06-19 09:08
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:10 
2012年6月(龙)

   日   一   二   三   四   五   六
                             1    2
    3    4    5    6    7    8    9
   10   11   12   13   14   15   16
   17   18   19   20   21   22   23
   24   25   26   27   28   29   30


Process returned 0 (0x0)   execution time : 0.000 s
Press any key to continue.

运行成功。有什么问题?

我们都在路上。。。。。
2012-06-19 10:49
陌儿will
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-18
得分:0 
回复 2楼 hellovfp
......我运行的时候总是出现error,运行不出来,,而且要求可以查相差天数
2012-06-20 09:24
mcfing
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2012-4-18
得分:10 
- -这c++代码把。
2012-06-20 18:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371844-1-1.html




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

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