5_5万年历(读程序) (一)

2014-11-24 03:23:35 · 作者: · 浏览: 0
[cpp]
/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:纪子龙
* 完成日期: 2013年3 月 21 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:无
* 程序输出:无
*/
#include
#include
using namespace std;
class Date
{
private:
int year;
int month;
int day;
int monthDay[12];
public:
Date(int y=1, int m=1, int d=1):year(y),month(m),day(d)//在声明构造函数的同时指定默认参数
{
monthDay[0]=monthDay[2]=monthDay[4]=monthDay[6]=monthDay[7]=monthDay[9]=monthDay[11]=31;
monthDay[1]=28;
monthDay[3]= monthDay[5]= monthDay[8]= monthDay[10]=30;
}//给每月赋天数值
void SetYear(int y) { year=y; }
void SetMonth(int m) { month=m; }
void SetDay(int d) { day=d; }//设置年月日
int GetYear() const { return year; }
int GetMonth() const { return month; }
int GetDay() const { return day; }
int GetMonthDay(const int i)
{
if(i==2&&Isleapyear(year))
return 29;
return monthDay[i-1];
}

bool Isleapyear(int y) // 判断是否为闰年。
{
return ((y%4==0 && y%100!=0)||(y%400==0));
}

int GetYearDays(int y) // 年份y的天数。
{
if(Isleapyear(y))
return 366;
return 365;
}

int DateToNum() // 给定日期,返回天数。
{
int sum=0;
int i=0;
for(i=1;i sum+=GetYearDays(i);
if(Isleapyear(year))
monthDay[1]=29;
else
monthDay[1]=28;
for(int j=1;j sum+=monthDay[j-1];
return sum+day;
}

Date NumToDay(int n) // 给定天数,返回日期。
{
Date d(1, 1, 1);
for(;n>=GetYearDays(d.year);d.year++)
n-=GetYearDays(d.year);
if(Isleapyear(d.year))
monthDay[1]=29;
else
monthDay[1]=28;
for(;n>=monthDay[d.month];d.month++)
n-=monthDay[d.month];
d.day=n;
return d;
}

void OutputYearDate(int y) // 给定年份y,输出年份y的日历。
{
if(y<=0)
return;
int i=0;
int j=0;
Date d;
d.year=y;
d.day=1;
cout< while(i++<12)
{
cout< cout< < < < < < < < < cout<<"-----------------------------------"< j=0;
d.month=i;
cout< for(j=1;j {
if((j+(d.DateToNum()%7))%7==0)
cout< cout< }
cout< cout<<"-----------------------------------"< }
}

void OutputYearMonthDate(int y, int m)//给定年y,月m,输出y年m月的日历
{
if(y<=0)
return;
Date d(y, m, 1);
cout< cout< < < < < < < < < cout<<"-----------------------------------"< cout< for(int j=1;j {
if((j+(d.DateToNum()%7))%7==0)
cout< cout< }
cout< cout<<"-----------------------------------"< }

static int Week(Date d)
{
if(d.DateToNum()%7==0)
return 7;
return(d.DateToNum()%7);