高分求C++万年历程序,急急急急急

用我全部的财富值求C++万年历程序,
要求:1、程序要能运行;
2、要用到类;
3、要有注释;
4、说明程序结构
不要太专业,

#include "iostream"
#include "string"
#include "iomanip"
using namespace std;

int monthdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
string weekday[7]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
string monthname[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

void showcalendar(int f);
void showpermoncal(int mon,int monthweek,int flag);

int main()
{
int f;

cout<<"请选择操作:"<<endl<<"1.查询某年日历;"<<endl<<"2.查询某年某月的日历;"<<endl<<"3.查询某天是星期几"<<endl;
cin>>f;

showcalendar(f);

return 0;
}

void showcalendar(int f)
{
int year,month,day;
int flag=0,mon=1;
int monthweek,week;
int totaldays;

cout<<"请输入年份: ";
cin>>year;

totaldays=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100;
week=(totaldays+1)%7;
monthweek=week;

if((year%4==0&&year%100!=0)||(year%400==0)) flag=1;
cout<<endl<<" *****"<<year<<"年*****"<<endl<<endl;

if(f>=2)
{
cout<<"请输入月份: ";
cin>>month;
if(f==3)
{
cout<<"请输入日期: ";
cin>>day;
while(mon<month)
totaldays+=monthdays[mon++-1];
if(month>2&&flag) totaldays++;
totaldays=totaldays+day-1;
week=(totaldays+1)%7;
cout<<year<<"年"<<month<<"月"<<day<<" 日"<<" "<<weekday[week]<<endl;
return;
}
while(mon<=12)
{
if(mon==month)
{showpermoncal(mon,monthweek,flag); break;}
if(mon==2&&flag) monthweek++;
monthweek=(monthweek+monthdays[mon++-1])%7;
}
return;
}

while(mon<=12)
{
showpermoncal(mon,monthweek,flag);
if(mon==2&&flag) monthweek++;
monthweek=(monthweek+monthdays[mon++-1])%7;
}

}

void showpermoncal(int mon,int monthweek,int flag)
{
cout<<monthname[mon-1]<<endl;
cout<<"***************"<<endl;
cout<<"Sun Mon Tue Wen Tur Fri Sat"<<endl;
for(int i=0;i<monthweek;i++) cout<<" ";
for(int j=0;j<monthdays[mon-1];j++)
{
cout<<setw(2)<<j+1<<" ";
if((j+1+monthweek)%7==0) cout<<endl;
}
if(mon==2&&flag) cout<<"29";
cout<<endl<<endl;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-24
这个不专业,如果不这样写,怎么实现万年历呢?
请参考:

#include <windows.h>
#include <winnt.h>
#include<iostream>
#include<iomanip>
using namespace std;
int week(int,int,int); //根据年月日判断星期几
int leap_year(int); //判断闰年
void display_year(int ); //显示某年日历
void demand_day(int,int,int); //查询某天
int main()
{
int y,m,d,es=1;
while(es)
{
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,12);
cout<<"请选择操作:\n1→显示某年日历\
\n2→查询某天\n0→退出"<<endl;
char tp[20];cin>>tp;
if(tp[1]!='\0'||tp[0]>'2'||tp[0]<'0'){cout<<"输入有误"<<endl;continue;}
switch(tp[0]-48)
{
case 1:{cout<<"请输入年份:";cin>>y;system("cls");display_year(y);break;}
case 2:{cout<<"请输入年、月、日,以空格分开:";cin>>y>>m>>d;system("cls");
demand_day(y,m,d);break;}
case 0:{es=0;break;}
}
}
return 0;
}
//-----根据年月日判断星期几-------------------------
int week(int y,int m, int d)
{
int week1,yy=y;
if(m==1) {m=13;yy--;}
if(m==2) {m=14;yy--;}
week1=(d+2*m+3*(m+1)/5+yy+yy/4-yy/100+yy/400)%7;
int s;
switch (week1)
{
case 0: s=1; break;
case 1: s=2; break;
case 2: s=3; break;
case 3: s=4; break;
case 4: s=5; break;
case 5: s=6; break;
case 6: s=0; break;
}
return s;
}
//----判断闰年-------------------------------------
int leap_year(int y)
{
int i;
if((y%4==0&&y%100!=0)||y%400==0)i=1;
else i=0;
return i;
}
//--------显示某年日历------------------------
void display_year(int y)
{
int n1,n2,i,j,a[13],c,d;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
cout<<setw(38)<<y<<"年"<<endl;
cout<<setw(28)<<"*********";
for(i=1;i<=27;i++)cout<<'*';
cout<<endl;
a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;//
a[4]=a[6]=a[9]=a[11]=30; //确定每月天数
if(leap_year(y))a[2]=29;
else a[2]=28; //
for(i=1;i<=11;i+=2) //六次循环
{
SetConsoleTextAttribute(consolehwnd,1);
cout<<setw(14)<<i<<"月"<<setw(42)<<i+1<<"月"<<endl;
SetConsoleTextAttribute(consolehwnd,2);
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六";
cout<<setw(16)<<' ';
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
SetConsoleTextAttribute(consolehwnd,7);
n1=week(y,i,1);n2=week(y,i+1,1);
if(n1) //-----------
{
for(j=1;j<=n1;j++) //
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n1;j++)
cout<<setw(4)<<j;
cout<<setw(16)<<' ';
if(n2)
{ //-----输出每次循环的第一行---
for(j=1;j<=n2;j++)
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n2;j++)
cout<<setw(4)<<j;
cout<<endl; //--------------
c=8-n1;d=8-n2;
for(int m=1;m<6;m++) //每月日历最多占六行
{
if(c>a[i])cout<<setw(4*7)<<' ';//若c>a[i],则该月的这一行全部输出空格
for(j=c;j<=a[i];j++)
{
cout<<setw(4)<<j;
if((j-c+1)%7==0){c=j+1;break;}
if(j==a[i]){cout<<setw((6-week(y,i,a[i]))*4)<<' ';c=j+1;break;}
//如果j是该月最后一天,该行剩下的全部补空格
}
cout<<setw(16)<<' ';
if(d>a[i+1])cout<<setw(4*7)<<' ';
for(j=d;j<=a[i+1];j++)
{ //
cout<<setw(4)<<j;
if((j-d+1)%7==0){d=j+1;break;}
if(j==a[i+1]){cout<<setw((6-week(y,i+6,a[i+1]))*4)<<' ';d=j+1;break;}
}
cout<<endl;
}
cout<<endl;
}
cout<<endl;
}
//--------查询某天------------
void demand_day(int y,int m,int d)
{
int n;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
n=week(y,m,d);
switch(n)
{
case 1:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期一"<<endl;break;
case 2:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期二"<<endl;break;
case 3:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期三"<<endl;break;
case 4:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期四"<<endl;break;
case 5:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期五"<<endl;break;
case 6:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期六"<<endl;break;
case 0:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期日"<<endl;break;
default:break;
}
cout<<endl;
}
第2个回答  2010-06-10
#include<stdio.h>
#include<stdlib.h>

char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

int IsLeapYear(int year) /*find out the year is leap year or not*/
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;

}
int month_day(int year,int month)
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(year)&&month==2)
return 29;
else
return(mon_day[month-1]);

}
int DaySearch(int year,int month,int day) /*search what day this day is*/
{
int c=0;
float s;
int m;
for(m=1;m<month;m++)
c=c+month_day(year,m);
c=c+day;
s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
return ((int)s%7);
}

int PrintAllYear(int year)/*print the all year*/
{
int temp;
int i,j;
printf("\n\n%d Calander\n",year);
for(i=1;i<=12;i++)
{
printf("\n\n%s(%d)\n",month_str[i-1],i);
printf("0 1 2 3 4 5 6 \n");
printf("S M T W T F S \n\n");
temp=DaySearch(year,i,1);
for(j=1;j<=month_day(year,i)+temp;j++)
{
if(j-temp<=0)
printf(" ");
else if(j-temp<10)
printf("%d ",j-temp);
else
printf("%d ",j-temp);

if(j%7==0)
printf("\n");
}
}
return 0;
}

int main()
{
int option,da;
char ch;
int year,month,day;
printf("Copyright @ 2005 TianQian All rights reserved!:):):)");
printf("\n\nWelcome to use the WanNianLi system!\n");

while(1)
{
printf("\nPlease select the service you need:\n");
printf("\n1 Search what day the day is");
printf("\n2 Search whether the year is leap year or not");
printf("\n3 Print the calander of the whole year");
printf("\n4 Exit\n");
scanf("%d",&option);

switch(option)
{
case 1:
while(1)
{
printf("\nPlease input the year,month and day(XXXX,XX,XX):");
scanf("%d,%d,%d,%c",&year,&month,&day);
da=DaySearch(year,month,day);
printf("\n%d-%d-%d is %s,do you want to continue?(Y/N)",year,month,day,week[da]);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 2:
while(1)
{
printf("\nPlease input the year which needs searched?(XXXX)");
scanf("%d",&year);
if(IsLeapYear(year))
printf("\n%d is Leap year,do you want to continue?(Y/N)",year);
else
printf("\n%d is not Leap year,do you want to continue(Y/N)?",year);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 3:
while(1)
{
printf("\nPlease input the year which needs printed(XXXX)");
scanf("%d",&year);
PrintAllYear(year);
printf("\nDo you want to continue to print(Y/N)?");
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 4:
fflush(stdin);
printf("Are you sure?(Y/N)");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
break;
default:
printf("\nError:Sorry,there is no this service now!\n");
break;
}

}

return 0;
}
第3个回答  2010-06-15
#include <iostream>
#include<iomanip>
using namespace std;
class Date
{
private:
int year;
int month;
int day;
public:
Date(int y = 1, int m = 1, int d = 1): year(y), month(m), day(d){ }
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; }
static bool IsLeapyear(int y);
static int GetYearDays(int y);
static int GetMonthDays(const Date &d);
static int DateToNum(const Date &d);
static int Week(const Date &d);
};
ostream &operator<<(ostream &out, const Date &d);
istream &operator>>(istream &in, Date &d);
bool Date::IsLeapyear(int y)
{
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) return true;
else return false;
}

int Date::GetYearDays(int y)
{
if (IsLeapyear(y)) return 366;
else return 365;
}

int Date::GetMonthDays(const Date &d)
{
int n;

switch (d.GetMonth())
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
n = 31;
break;
case 4:
case 6:
case 9:
case 11:
n = 30;
break;
case 2:
if (IsLeapyear(d.GetYear())) n = 29;
else n = 28;
}

return n;
}

int Date::DateToNum(const Date &d)
{
int y, n = 0;
for (y = 1900; y < d.GetYear(); y++)
n += GetYearDays(y);
for (int m = 1; m < d.GetMonth(); m++)
n += GetMonthDays(Date(y, m, 1));
n += d.GetDay();
return n;
}
ostream &operator<<(ostream &out, const Date &d)
{
int i,j,n,m;
m=1;
out<<endl;
out<<setw(10)<<"星期天"
<<setw(10)<<"星期一"
<<setw(10)<<"星期二"
<<setw(10)<<"星期三"
<<setw(10)<<"星期四"
<<setw(10)<<"星期五"
<<setw(10)<<"星期六"<<endl;
out<<endl;
for(j=0;j<d.Week(d);j++)
{
out<<setw(10)<<" ";

}
for(j=0;j<7-d.Week(d);j++)
{
out<<setw(10)<<m;
m++;
}
out<<endl;
n=m;
i=0;
while(n<=(d.GetMonthDays(d)))
{
i++;
out<<setw(10)<<n;
n++;
if(i%7==0)
out<<endl;
}
out<<endl;
return out;
}
int Date::Week(const Date &d)
{
int w;
w=(Date::DateToNum(d)-1+1)%7;
return w;
}

int main(void)
{
int s;
int year,month,day;
char m[][5]={"一","二","三","四","五","六","七","八","九","十","十一","十二"};
Date d;
cout <<"输入年份:";
day=0;
month=0;
cin >> year;
cout<<setw(38)<<year<<"年"<<endl;
for(s=0;s<12;s++)
{
month++;
d = Date(year,month,1);
cout<<" ==================================================================== "<<endl;
cout<<setw(35)<<"<* "<<m[s]<<setw(3)<<"月"<<" *>"<<endl;
cout<<d<< endl;
}
return 0;
}