| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:自己写的一个小程序
只看楼主 加入收藏
阿冲
Rank: 2
等 级:论坛游民
帖 子:29
专家分:40
注 册:2009-10-5
结帖率:75%
收藏
 问题点数:0 回复次数:4 
自己写的一个小程序
程序代码:
#include <iostream>
using namespace std;
int g_Month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//月份
int g_WeenDay[7] = {1,2,3,4,5,6,7}; //星期
int g_iYear = 2000 , g_iMonth = 1 , g_iDay = 1 , g_iWeenDay = 6;//初始化2000年1月1日为星期六;

class cDateTime
{
private:
    int M_Year;
    int    M_Month;
    int    M_Day;
    int    M_DayNum;//相隔的天数
    int M_YearNum;//一年的天数
public:
    cDateTime();
    void SetInfo(int iYear , int iMonth , int iDay);
    void bRunYear(int iYear);
    void iYearCount(int iYear = g_iYear , int iMonth = g_iMonth , int iDay = g_iDay);
    int WeenDay(int iTmp);
    void fDay();//某个月第一天是星期几
    void sDay();//两个时间相隔多少天
    void nDay();//某一天的下一天是几号
    void wDay(int iWeenDay);//求某年某月的第几周是哪几天
};
cDateTime::cDateTime()
{
    M_Year = 0;
    M_Month = 0;
    M_Day = 0;
    M_DayNum = 0;
}
void cDateTime::SetInfo(int iYear , int iMonth , int iDay)
{
    M_Year = iYear;
    M_Month = iMonth;
    M_Day = iDay;
}

void cDateTime::bRunYear(int iYear)
{
    if (iYear % 4 == 0 && iYear % 100 != 0 || iYear % 100 ==0 && iYear % 400 ==0)
    {    
        g_Month[1] = 29;
        M_YearNum = 366;
    } 
    else
    {
        g_Month[1] = 28;
        M_YearNum = 365;
    }
}
void cDateTime::iYearCount(int iYear , int iMonth , int iDay)//总共的天数
{
    //int iDayNum = 0;
    for (int i = iYear; i < M_Year; ++i)
    {
        bRunYear(i);
        M_DayNum += M_YearNum;
    }
    
    bRunYear(M_Year);
        
    for (i = 0; i < M_Month - 1; ++i)
    {
        M_DayNum += g_Month[i];
    }    
    
    M_DayNum += M_Day;
    
    ////////////////开始计算多出来的天数//////////////////
    bRunYear(iYear);
    if (iMonth > 1)
        {
            for (i = 0; i < iMonth - 1; ++i)
            {
                M_DayNum -= g_Month[i];
                
        }        
    }
    
    if (iDay > 1)
    {
        M_DayNum -= iDay;
        ++M_DayNum;
    }     
    
    /////////////////减掉多出来的天数/////////////////////
}
int cDateTime::WeenDay(int iTmp)
{
    int iTmpDay = 1 , iTmpWeenday = g_iWeenDay - 1 , Tmp;

    while (iTmpDay <= iTmp)
    {
        if (iTmpWeenday > 6)
        {
            iTmpWeenday = 0;
        }
        Tmp = g_WeenDay[iTmpWeenday];
        ++iTmpWeenday;
        ++iTmpDay;        
    }
    return Tmp;
    
}
void cDateTime::fDay()
{
    cout << M_Year << "年" << M_Month << "月的第1天是星期" << WeenDay(M_DayNum) << endl;
}
void cDateTime::sDay()
{
    cout << "您输入的这两个日期相差" << M_DayNum - 1 << "天" << endl;
}

void cDateTime::nDay()
{
    bRunYear(M_Year);
    ++M_Day;
    if (M_Day > g_Month[M_Month - 1])
    {
        M_Day = 1;
    }
    cout << "您输入的日期下一天为:" << M_Day << "号" << endl;
}

void cDateTime::wDay(int iWeenDay)
{
    int iTmp = 0;
    for (int i = 0; i < g_Month[M_Month - 1]; ++i)
    {
        if (WeenDay(M_DayNum + i) == 1)//第一个周开始
        {
            ++iTmp;
        }
        if (iTmp==iWeenDay)
        {
            cout << "第" << iWeenDay << "周有:" << i+1 << " " << endl;
        }
        
    }

}

int main()
{

    int iYear , iMonth;
    cDateTime Fist;
    cout << "求某个月的第一天是星期几" << endl;
    cout << "请输入年:";
    cin >> iYear;
    cout << "请输入月:";
    cin >> iMonth;
    Fist.SetInfo(iYear , iMonth , 1);
    Fist.iYearCount();

    Fist.fDay();

    cout << "-------------------黄金分割线----------------------------" << endl;

     int StarYear , StarMonth , StarDay , LastYear , LastMonth , LastDay;
    cDateTime Second;
    cout << "求两个时间相隔多少天" << endl;
    cout << "请输入起始年:";
    cin >> StarYear;
    cout << "请输入起始月:";
    cin >> StarMonth;
    cout << "请输入起始日:";
    cin >> StarDay;

    cout << "请输入结束年:";
    cin >> LastYear;
    cout << "请输入结束月:";
    cin >> LastMonth;
    cout << "请输入结束日:";
    cin >> LastDay;
    Second.SetInfo(LastYear , LastMonth , LastDay);
    Second.iYearCount(StarYear , StarMonth , StarDay);
    Second.sDay();

    cout << "-------------------黄金分割线----------------------------" << endl;
    
    cDateTime Again;
    cout << "求某天的下一天是几号" << endl;
    cout << "请输入年:";
    cin >> StarYear;
    cout << "请输入月:";
    cin >> StarMonth;
    cout << "请输入日:";
    cin >> StarDay;
    Again.SetInfo(StarYear , StarMonth , StarDay);
    Again.nDay();

    cout << "-------------------黄金分割线----------------------------" << endl;

    cDateTime Four;
    cout << "求某年某月的第几周是哪几天" << endl;
    cout << "请输入年:";
    cin >> StarYear;
    cout << "请输入月:";
    cin >> StarMonth;
    cout << "请输入第几周:";
    cin >> StarDay;
    Four.SetInfo(StarYear , StarMonth , 1);
    Four.iYearCount();
    Four.wDay(StarDay);
    return 0;
}
搜索更多相关主题的帖子: private include public 
2009-10-30 11:20
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
void cDateTime::SetInfo(int iYear , int iMonth , int iDay)
{
    M_Year = iYear;
    M_Month = iMonth;
    M_Day = iDay;
}
这里的输入参数最好有个判断是否合法。

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-30 14:18
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
void cDateTime::SetInfo(int iYear , int iMonth , int iDay)
{
    M_Year = iYear;
    M_Month = iMonth;
    M_Day = iDay;
}
这里的输入参数最好有个判断是否合法。

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-30 14:18
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:0 
以下是引用flyingcloude在2009-10-30 14:18:26的发言:

void cDateTime::SetInfo(int iYear , int iMonth , int iDay)
{
    M_Year = iYear;
    M_Month = iMonth;
    M_Day = iDay;
}
这里的输入参数最好有个判断是否合法。
同意flyingcloude,月数天数,日期数都得有限制,不然的话可以随意的输入那样就不符合实际了。

Anything is possible!
2009-10-30 15:16
wghost
Rank: 2
等 级:论坛游民
帖 子:47
专家分:31
注 册:2009-6-6
收藏
得分:0 
class Day  
{
public:
   
    void display();
    void setvalue();
    void sumyear();
    Day();
    virtual ~Day();
private:
    int x;
    int m;
    int mth;
    int i;
    int j;
    int n;
    int month[6][7];
    int month_day[13];
    long year;
    long sumdays;

};
//Day.cpp
Day::Day()
{
month_day[0]=0;month_day[1]=31;month_day[2]=28;month_day[3]=31;month_day[4]=30;month_day[5]=31;month_day[6]=30;month_day[7]=31;month_day[8]=31;month_day[9]=30;month_day[10]=31;month_day[11]=30;month_day[12]=31;

}

Day::~Day()
{

}

void Day::sumyear()
{
 sumdays=0;
    cout<<"请输入年份: ";
    cin>>year;
    cout<<"  请输入月份:";

    cin>>mth;
    if(mth<=0||mth>12)cout<<"ERROR!";
   
    sumdays= (year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400;
   
    {for(n=0;n<mth;n++)
         sumdays+=month_day[n];
         if(year%4==0&&year%100!=0||year%400==0&&n>=2)
            sumdays+=1;
    }
          m=sumdays%7+1;
}

void Day::setvalue()
{
 for(i=0;i<6;i++)
   for(j=0;j<7;j++)
      month[i][j]=0;
 j=1;
 for(n=0;n<m;n++)
 {}
 for(i=0;i<6;i++)
 {     for( ;month[i][n-1]<month_day[mth];n++)
     {  month[i][n]=j++;
        if(n==6) {n=0;break;}
     }
     if(month[i][n-1]==month_day[mth]&&i!=6)
      break;
 }
 }

void Day::display()
{
 cout<<"        "<<year<<"年    "<<mth<<"月"<<endl;
    cout<<"   Sun "<<"  Mon "<<"  Tue "<<"  Wen "<<"  Thu "<<"  Fri "<<"  Sat "<<endl;
 for(i=0;i<6;i++)
    {for(j=0;j<7;j++)
         if(month[i][j]==0)
             cout<<setw(6)<<" ";
         else
             if(month[i][j]!=0)
              cout<<setw(6)<<month[i][j];
         cout<<endl;
 }
}
//main.cpp
#include<iostream>
using namespace std;
#include"Day.h"
int main()
{Day Y;
Y.sumyear();
Y.setvalue();
Y.display();
cin.get();
cin.get();
return 0;

}
本人作的万年历,多指教!!
2009-11-04 11:10
快速回复:自己写的一个小程序
数据加载中...
 
   



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

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