跪求一个用C语言写的日历程序(最好带注释)
# include & lttime.h & gt
使用命名空间std
班级日历
{
int day[2][12];
公共:
日历();
~calendar(){}
闰年常数;
int周(int年,int月)常数;
void show year()const;
void show month()const;
void showDay()const;
};
日历::日历()
{
int i,j;
int days[2][12]= { { 31,28,31,30,31,30,31,30,31,30,31,
{31,29,31,30,31,30,31,31,30,31,30,31}};
for(I = 0;我& lt2;i++)
for(j = 0;j & lt12;j++)
day[I][j]= days[I][j];
}
//判断年份是否是闰年,如果是闰年返回1,不返回0。
int calendar::闰年(int year)常数
{
如果(!(年份%400)||(年份% 100)& amp;& amp!(第%4年))
返回1;
否则返回0;
}
//一年中一个月的第一天是星期几的函数,0是星期日,1是星期一,依此类推。
int calendar::week(int year,int month)常量
{
int i,w _ day = 6;
如果(公元2000年& gt=0)
{
for(I = 2000;我& lt年份;i++)
w _ day+= 1+leap(I);
}
其他
{
for(I = 1999;我& gt=年份;我-)
w _ day+= 6-leap(I);
}
for(I = 1;我& lt月份;i++)
w _ day+= day[闰年]][I-1];
返回第%7天;
}
//通过输入年份输出今年的日历。
void calendar::showYear()常量
{
int i,j;
int年、月、日、周;
int Leap
系统(“cls”);
cout & lt& lt"请输入年份"
CIN & gt;& gt年份;
闰=闰(年);
cout & lt& lt年份& lt& lt"日历年" < & ltendl
for(Month = 1;月份& lt=12;月++)
{
日=日[闰][月-1];
周=周(年、月);
cout & lt& lt月份& lt& lt"月份"
cout & lt& lt" Day \ t1 \ T2 \ T3 \ T4 \ t5 \ T6 " < & lt;endl
for(I = 0;我& lt=天;i++)
{
如果(i==0)
{
for(j = 0;j & lt周;j++)
cout & lt& lt”\ t”;
}
其他
{
cout & lt& lt我;
如果((I+周)%7)
cout & lt& lt”\ t”;
其他
cout & lt& ltendl
}
}
cout & lt& ltendl
}
}
//通过输入的年月输出本月的日历。
void calendar::showMonth()const
{
int i,j;
int年、月、日、周;
系统(“cls”);
cout & lt& lt"请输入年份和月份"
CIN & gt;& gt年份& gt& gt月份;
日=日[闰(年)][月-1];
周=周(年、月);
cout & lt& lt年份& lt& lt"年份"
cout & lt& lt" Day \ t1 \ T2 \ T3 \ T4 \ t5 \ T6 " < & lt;endl
for(I = 0;我& lt=天;i++)
{
如果(i==0)
{
for(j = 0;j & lt周;j++)
cout & lt& lt”\ t”;
}
其他
{
cout & lt& lt我;
如果((I+周)%7)
cout & lt& lt”\ t”;
其他
cout & lt& ltendl
}
}
cout & lt& ltendl
}
//通过输入日期,输出这一天与今年的区别,今天是什么日子,是否是公历节日。
void calendar::showDay()const
{
int i,j=0,flag=1,a[6],sum,Day_tem=0,Week
int year1,month1,day1,year2,month2,day2,sumDay1=0,sum day 2 = 0;
time _ t t
时间(& ampt);
day1=localtime。t)-gt;tm _ mday
month1=localtime。t)-gt;tm _ mon
year1=localtime。t)-gt;TM _ year+1900;
系统(“cls”);
cout & lt& lt请输入年、月、日
CIN & gt;& gtyear2 & gt& gtmonth2 & gt& gt第二天;
sumday 1 = local time(& amp;t)-gt;tm _ yday
for(I = 1;我& ltmonth2i++)
{
if(闰年2)
sum day 2+= day[1][I-1];
其他
sum day 2+= day[0][I-1];
}
sum day 2+= day 2-1;
if(year 2 & gt;=year1)
{
for(I = year 1;我& lt第二年;i++)
day _ tem+= 365+leap(I);
if(Day _ tem+sum Day 2-sum Day 1 & gt;=0)
cout & lt& lt“距离”< & lt第二年& lt& lt"年份"
其他
cout & lt& lt“您输入的天数已经过了”< & ltsumday 1-sumday 2 & lt;& lt“上帝”
}
其他
{
for(I = year 2;我& ltyear 1;i++)
day _ tem+= 365+leap(I);
if(Day _ tem+sum Day 1-sum Day 2 & gt;=0)
cout & lt& lt“您输入的天数已经过了”< & ltday _ tem+sum day 1-sum day 2 & lt;& lt“上帝”
其他
cout & lt& lt“距离”< & lt第二年& lt& lt"年份"
}
Week=week(year2,month 2);
Week =(Week+day 2-1)% 7;
cout & lt& lt第二年& lt& lt"年份"
切换(周)
{
案例0:cout & lt;& lt《星期日》
案例1:cout & lt;& lt“星期一”
案例2:cout & lt;& lt"星期二"
案例三:cout & lt& lt“星期三”
案例4:cout & lt;& lt"星期四"
案例5:cout & lt;& lt"星期五"
案例6:cout & lt;& lt“星期六”
}
cout & lt& lt第二年& lt& lt"年份"
//65438+10月最后一个周日国际麻风节
周=周(年2,1);
sum = day[leap(year 2)][0];
for(i=0,j = 0;我& lt总和;i++)
{
如果(!((第+i周)%7))
a[j++]= I;
}
if(sumDay2==a[ - j])
{
cout & lt& lt国际麻风病节;
flag = 0;
}
//3月最后一个整周的周一为中小学生安全教育日。
Week =周(year2,3);
sum = day[leap(year 2)][2];
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==6)
a[j++]= I-5;
}
j-;
for(I = 0;我& lt2;i++)
a[j]+= day[leap(year 2)][I];
if(sumDay2==a[j])
{
cout & lt& lt“中小学生安全教育日”;
flag = 0;
}
//五月的第二个星期天是母亲节
//5月的第三个星期天是全国助残日
Week =周(year2,5);
sum = day[leap(year 2)][4];
for(i=0,j = 0;我& lt总和;i++)
{
如果(!((第+i周)%7))
a[j++]= I;
}
for(I = 0;我& lt4;i++)
{
a[1]+= day[闰(年2)][I];
a[2]+= day[leap(year 2)][I];
}
if(sumDay2==a[1])
{
cout & lt& lt母亲节;
flag = 0;
}
if(sumDay2==a[2])
{
cout & lt& lt“全国助残日”;
flag = 0;
}
//六月的第三个星期天是父亲节
Week =周(year2,6);
sum = day[leap(year 2)][5];
for(i=0,j = 0;我& lt总和;i++)
{
如果(!((第+i周)%7))
a[j++]= I;
}
for(I = 0;我& lt5;i++)
a[2]+= day[leap(year 2)][I];
if(sumDay2==a[2])
{
cout & lt& lt父亲节;
flag = 0;
}
//9月的第三个星期二是国际和平日
Week =周(year2,9);
sum = day[leap(year 2)][8];
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==2)
a[j++]= I;
}
for(I = 0;我& lt8;i++)
a[2]+= day[leap(year 2)][I];
if(sumDay2==a[2])
{
cout & lt& lt“国际和平日”;
flag = 0;
}
//九月的第三个星期六为国防教育日
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==6)
a[j++]= I;
}
for(I = 0;我& lt8;i++)
a[2]+= day[leap(year 2)][I];
if(sumDay2==a[2])
{
cout & lt& lt“国防教育日”;
flag = 0;
}
//9月的第四个星期天是国际聋人日
for(i=0,j = 0;我& lt总和;i++)
{
如果(!((第+i周)%7))
a[j++]= I;
}
for(I = 0;我& lt8;i++)
a[3]+= day[闰(年2)][I];
if(sumDay2==a[3])
{
cout & lt& lt国际聋人日;
flag = 0;
}
//65438+10月第一个星期一的世界住房日。
周=周(年2,10);
sum = day[leap(year 2)][9];
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==1)
a[j++]= I;
}
for(I = 0;我& lt9;i++)
a[0]+= day[leap(year 2)][I];
if(sumDay2==a[0])
{
cout & lt& lt世界住房日;
flag = 0;
}
//六月第二星10-加拿大感恩节
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==1)
a[j++]= I;
}
for(I = 0;我& lt9;i++)
a[1]+= day[闰(年2)][I];
if(sumDay2==a[1])
{
cout & lt& lt“加拿大感恩节”;
flag = 0;
}
//65438+10月第二个星期三的国际减少自然灾害日
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==3)
a[j++]= I;
}
for(I = 0;我& lt9;i++)
a[1]+= day[闰(年2)][I];
if(sumDay2==a[1])
{
cout & lt& lt“国际减少自然灾害日”;
flag = 0;
}
//65438+10月第二个星期四世界爱眼日
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==4)
a[j++]= I;
}
for(I = 0;我& lt9;i++)
a[1]+= day[闰(年2)][I];
if(sumDay2==a[1])
{
cout & lt& lt“世界爱眼日”;
flag = 0;
}
//165438+美国感恩节在十月的最后一个星期四
Week =周(year2,11);
sum = day[leap(year 2)][10];
for(i=0,j = 0;我& lt总和;i++)
{
if((Week+i)%7==4)
a[j++]= I;
}
j-;
for(I = 0;我& lt10;i++)
a[j]+= day[leap(year 2)][I];
if(sumDay2==a[j])
{
cout & lt& lt“美国感恩节”;
flag = 0;
}
if((sum day 2 & gt;59)& amp;& amp(闰年(第二年)))
sum day 2-;
开关(sumDay2)
{
案例0:cout & lt;& lt“元旦”
案例32:cout & lt;& lt“世界湿地日”
案例44:cout & lt;& lt《情人节》
案例61:cout & lt;& lt“全国爱耳日”
案例63:cout & lt;& lt“青年志愿服务日”endl打破;
案例66:cout & lt;& lt“国际妇女节”
案例67:cout & lt;& lt“母亲河保护日”endl打破;
案例70:cout & lt;& lt“中国植树节”< & ltendl打破;
案例72:cout & lt;& lt“白色日国际警察日”
案例73:cout & lt;& lt“世界消费者权益日”
案例79:cout & lt;& lt“世界森林日,世界睡眠日”endl打破;
案例80:cout & lt;& lt“世界水日”endl打破;
案例81:cout & lt;& lt“世界气象日”endl打破;
案例82:cout & lt;& lt“世界结核病日”
案例90:cout & lt;& lt“愚人节”
案例94:cout & lt;& lt《清明节》
案例96:cout & lt;& lt“世界卫生日”
案例111:cout & lt;& lt“地球日”
案例115:cout & lt;& lt“世界知识产权日”endl打破;
案例120:cout & lt;& lt“国际劳动节”
案例122:cout & lt;& lt“世界哮喘日”
案例123:cout & lt;& lt“中国青年节”
案例127:cout & lt;& lt“世界红十字日”
案例131:cout & lt;& lt“国际护士节”endl打破;
案例134:cout & lt;& lt“国际家庭日”
案例136:cout & lt;& lt“世界电信日”< & ltendl打破;
案例139:cout & lt;& lt“全国学生营养日”
案例142:cout & lt;& lt“国际牛奶日”
案例150:cout & lt;& lt“世界无烟日”endl打破;
案例151:cout & lt;& lt“国际儿童节”
案例155:cout & lt;& lt《世界环境日》
案例156:cout & lt;& lt“全国爱眼日”
案例167:cout & lt;& lt“世界防治荒漠化和干旱日”
案例173:cout & lt;& lt“国际奥林匹克日”
案例175:cout & lt;& lt“国家土地日”endl打破;
案例176:cout & lt;& lt“国际禁毒日”endl打破;
案例181:cout & lt;& lt“中国* * *生产党诞生日国际建筑日”
案例187:cout & lt;& lt“中国人民抗日战争纪念日”
案例191:cout & lt;& lt“世界人口日”
案例212:cout & lt;& lt《中国人民解放军建军节》< & ltendl打破;
案例223:cout & lt;& lt“国际青年日”
案例250:cout & lt;& lt“国际扫盲日”
案例252:cout & lt;& lt“中国教师节”< & ltendl打破;
案例258:cout & lt;& lt中国脑健康日、国际臭氧层保护日
案例262:cout & lt;& lt“全国爱牙日”
案例263:cout & lt;& lt“世界停火日”
案例269:cout & lt;& lt“世界旅游日”
案例273:cout & lt;& lt中华人民共和国国庆节、国际音乐日和国际老人节
案例276:cout & lt;& lt“世界动物日”
案例277:cout & lt;& lt“世界教师节”< & ltendl打破;
案例280:cout & lt;& lt“全国高血压日”endl打破;
案例281:cout & lt;& lt“世界邮政日”
案例282:cout & lt;& lt“世界精神卫生日”
案例286:cout & lt;& lt“世界标准日”
案例287:cout & lt;& lt“国际盲人节,世界农村妇女节”
案例288:cout & lt;& lt“世界粮食日”
案例289:cout & lt;& lt“国际消除贫穷日”
案例296:cout & lt;& lt联合国日、世界发展新闻日
案例300:cout & lt;& lt“中国男性健康日”< & ltendl打破;
案例301:cout & lt;& lt“国际生物多样性日”
案例303:cout & lt;& lt“万圣节”
案例311:cout & lt;& lt“中国记者节”endl打破;
案例312:cout & lt;& lt“防火宣传日”endl打破;
案例317:cout & lt;& lt“世界糖尿病日”
案例320:cout & lt;& lt“国际大学生日”
案例328:cout & lt;& lt“消除对妇女的暴力行为国际日”
案例334:cout & lt;& lt“世界艾滋病日”
案例336:cout & lt;& lt“世界残疾人日”
案例337:cout & lt;& lt“全国法制宣传日”
案例342:cout & lt;& lt“世界足球日”
案例358:cout & lt;& lt“圣诞节”
案例362:cout & lt;& lt“国际生物多样性日”
默认值:if(flag)cout & lt;& lt“没有节日”< & ltendlelse cout & lt& ltendl打破;
}
}
主()
{
日历obj
int i,flag = 1;
while(标志)
{
系统(“cls”);
cout & lt& lt"日历显示\ n请按下列数字" < & ltendl
cout & lt& lt“1,输入年份,输出的是屏幕上显示的年份日历”< & ltendl
cout & lt& lt2、输入年月,输出本月日历
cout & lt& lt"3.输入年、月、日,并输出从今天起还有多少天,以及是否是公历假日“< & ltendl
cout & lt& lt4,退出
scanf("%d ",& ampI);
开关(一)
{
case 1:obj . show year();系统(“暂停”);打破;
案例二:obj . show month();系统(“暂停”);打破;
案例三:obj . showday();系统(“暂停”);打破;
情况4:flag = 0;打破;
默认值:cout & lt& lt“输入错误,请重新输入”< & ltendl系统(“暂停”);打破;
}
}
返回0;
}