用c++编写的万年历代码

2024-12-27 06:00:04
推荐回答(1个)
回答1:

#include
#include
using namespace std;
class Data //声明一个类Data
{
private: //私有部分,关于这个的特点,自己看书去
int year; //私有变量,同上

public: //公有变量,特点看书去
void getyear(); //提示用户输入想要查询的年份
int ioleapyear(); //判断该年是不是闰年
int weekday(); //判断该年的元旦是星期几
int monthday(int i); //该年每个月的天数
void disp(); //显示结果。
};
char* weekd[7]={"MON","TUE","WEN","THU","FRI","STA","SUN"}; //记录星期一到星期天
void Data::getyear()
{
cout<<"请输入你想要查询的年份:"; //cout是输出
cin>>year; //cin是输入一个值到变量
}
int Data::ioleapyear() //判断闰年和平年,闰年返回1,平年返回0
{
if(year%4==0&&year%100!=0||year%400==0) //计算闰年和平年的方法
//四位年份能被4整除但不能被100整除,或能被400整除
return 1;
else
return 0;
}
int Data::weekday()
{
int n=year-1900; //已知1900年的元旦刚好是星期一

n=n+(n-1)/4+1; // 判断,以每年52个整星期计算year年比1900年多出来的天数
//多出来的天数除以7的余数就是这年第一天是星期几
n=n%7; //%就是取余的意思
if(n==0) //当n=0的时候是周日,使它返回7
return 7; //返回输入的年份的元旦是星期几
else
return n; //n不是0的时候反正n的值就是星期几
}
int Data::monthday(int i) //这里是返回月有几天的,i是月份
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
return 31; //如果是1,2,5,7,8,10,12月,则返回是31天
else if (i==2) //判断可恶的2月
if(ioleapyear()) //当ioleapyear()返回1时就是闰年,则为29天,ioleapyear()是一个函数,调用的一个函数
return 29;
else return 28; //否则为28天
else
return 30; //其他的月份为30天
}
void Data::disp() //这个是显示函数
{
int i; //这个是月的记录变量
int n=weekday(); //这也是调用了一个函数,用n记录当年的元旦是星期几

for(i=1;i<=12;i++) //总共的月份 12 ,用循环来实现显示12个月
{
int lemp=1;
cout< //setw()是iomanip.h里的函数,只要在开头写上#include 就可以用了
//作用是设置宽度,就是i显示出来的宽度,这个是为了好看,当然你可以用空格什么的代替
cout<<"-------------------------------------------"< for(int j=0;j<7;j++) //循环显示星期上的字,就是mon,tue等等
cout< cout<
for(int k=1;k cout<
for(int d=1;d<=monthday(i);d++,lemp++) //循环输出每个月的日子
{
cout< if(lemp==7) //控制一行输出到星期天,如果到星期天则重新计数
{
cout< lemp=0; //让临时记录星期的变量为0,以备下次使用
}
}
n=lemp%7; //当输出完一个月后,记录这个月的最后一天在哪,寻找下个月的
if(n==0) //第一天的起始位置
n=7; //就是当n为0的时候,是周日,令n为7

cout<
}
}
int main()
{
Data a; //创建一个对象a
cout< cout<<"-------------------------------------------------------------------------------"
< a.getyear(); //调用对象a里的函数,这个就管输入一个年份
a.disp(); //调用对象a的另一个函数,显示日历
system("pause");
return 0;
}