万年历代码
更新时间:2023-09-04 07:28:01 阅读量: 教育文库 文档下载
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int everyMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class PC
{
public:
void Input();//进行操作选择
void SetDays();//如果输入某年,进行'3'操作处理
void SetMonth();//如果选输入某年某月,进行'2'操作处理
void SetYear();//如果输入某年某月某日,进行'1'操作处理
bool IsLeap(int year);//判断是否是闰年
bool IsRight(int year,int month,int day);//判断输入是否合法
int GetDays(int year,int month,int day);//得到此日期前(从1年1月1号还是算)的天数
void Print(int year,int month);//输出到界面上
void Output(int year); //打印到文档out,一年的
};
void PC::Input()
{
char choose;
bool flag=true;
while(flag)
{
cout<<"欢迎使用万年历!请选择: (1/2/3/4/else)"<<endl;
cout<<"1:输入某年,显示该年的年历"<<endl;
cout<<"2:输入某年某月,显示该月的万年历"<<endl;
cout<<"3:输入某年某月某日,显示该日是星期几"<<endl;
cout<<"4:退出"<<endl;
cout<<"elseNumber:退出"<<endl;
cout<<"输入您的选择: ";
cin>>choose;
switch(choose)
{
case '1':SetYear();break;
case '2':SetMonth();break;
case '3':SetDays();break;
case '4':flag=false;break;
default:cout<<"输入错误,请重新输入";
}
}
}
bool PC::IsRight(int year,int month,int day) //判断日期输入是否正确
{
if(year<1 || year>9999 || month<1 || month>12)//年月是否正确
return false;
//日期是否正确
if(day<0)return false;
else if( day==29)
return((month==2 && IsLeap(year))|| month!=2);
else if(day==31)return(month==1 ||month==3 ||month==5 ||month==7 ||month==8 || month==10 || month==12);
else if(day>31) return false;
else return true;
}
void PC::SetDays()//如果输入某年某月某日,进行'1'操作处理
{
int weekDay;
int year,month,day;
cout<<" 请输入年_月_日:";
cin>>year>>month>>day;
while(!IsRight(year,month,day))
{
cout<<"输入错误,请重新输入年_月_日:";
cin>>year>>month>>day;
}
weekDay=GetDays(year, month,day)%7;
switch(weekDay)
{
case 0: cout<<year<<"年"<<month<<"月"<<day<<"日 星期日"<<endl; break;
case 1: cout<<year<<"年"<<month<<"月"<<day<<"日 星期一"<<endl; break;
case 2: cout<<year<<"年"<
<month<<"月"<<day<<"日 星期二"<<endl; break;
case 3: cout<<year<<"年"<<mo
nth<<"月"<<day<<"日 星期三"<<endl; break;
case 4: cout<<year<<"年"<<month<<"月"<<day<<"日 星期四"<<endl; break;
case 5: cout<<year<<"年"<<month<<"月"<<day<<"日 星期五"<<endl; break;
case 6: cout<<year<<"年"<<month<<"月"<<day<<"日 星期六"<<endl; break;
}
}
bool PC::IsLeap(int year)//判断是否是闰年
{
return ((year%4==0 && year%100!=0)||(year%400==0));
}
int PC::GetDays(int year,int month,int day)//得到此日前所有已经过的日子
{
int yearDays, monthDays,sum;
int accumulate=0;
for(int i=1;i<year;i++)
if(IsLeap(i))
accumulate++;
yearDays=accumulate+365*(year-1);
if((year%4==0 && year%100!=0)||(year%400==0)) everyMonth[2]=29;//如果是闰年,则2月为29天
for(int j=1;j<month;j++)
monthDays+=everyMonth[j];
sum=yearDays+monthDays+day;//所有已经过的日子之和
return sum;
}
void PC::SetMonth()//当输入的是年月时,处理
{
int weekDay;
int year,month,day;
cout<<" 请输入年_月:";
cin>>year>>month;
day=1;
while(!IsRight(year,month,day))//判断输入是否正确,设置day=1
{
cout<<"输入错误,请重新输入年_月:";
cin>>year>>month;
}
weekDay=GetDays(year, month,day)%7;
Print(year,month);
}
void PC::SetYear()
{
int year,month,day;
cout<<" 请输入年:";
cin>>year;
month=1;day=1;
while(!IsRight(year,month,day))//判断是否输入正确,若错误,请重新输入 .设置day=1,month=1,
{
cout<<"输入错误,请重新输入年:";
cin>>year;
}
cout<<"万年历打印在out文档中,请查看。"<<endl;
Output(year);
for(int k=1;k<=12;k++)//将12个月的万年历在界面上输出
Print(year,k);
}
void PC:: Print(int year,int month)//打印到界面上
{
int weekday,day=1;
cout<<" 公元"<<year<<"年"<<month<<"月"<<endl;
cout<<" SUN MON TUE WES THU FRI SAT"<<endl;
weekday=GetDays(year, month,day)%7;//所有的日期之和取余
switch(weekday)//输出处理
{
case 0: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1"; break;
case 1: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 2: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 3: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 4: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case
5: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 6
: cout<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
}
for(int i=2;i<=everyMonth[month];i++)
{
weekday=(++weekday)%7;
if(!weekday)
{cout<<endl; cout<<" "<<setw(6)<<setiosflags(ios::left)<<i;}
else
cout<<setw(6)<<setiosflags(ios::left)<<i;
}
cout<<endl;
}
void PC::Output(int year)//打印到out文本框内
{
int weekday,month=1,day=1;
int i,j;
ofstream outfile("out.txt",ios::out);
for(i=1;i<=12;i++)
{
outfile<<" 公元"<<year<<"年"<<i<<"月"<<endl;
outfile<<" SUN MON TUE WES THU FRI SAT"<<endl;
weekday=GetDays(year, i,day)%7;
switch(weekday)
{
case 0: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1"; break;
case 1: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 2: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 3: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 4: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 5: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
case 6: outfile<<" "<<setw(6)<<setiosflags(ios::left)<<"1";break;
}
for( j=2;j<=everyMonth[i];j++)
{
weekday=(++weekday)%7;
if(!weekday)
{outfile<<endl; outfile<<" "<<setw(6)<<setiosflags(ios::left)<<j;}
else
outfile<<setw(6)<<setiosflags(ios::left)<<j;
}
outfile<<endl;
outfile<<endl;
}
cout<<endl;
outfile.close();
}
int main()
{
PC pc;
pc.Input();
}
正在阅读:
万年历代码09-04
国美电器的人力资源管理经验借鉴10-25
教师个人校本研修工作计划参考范本04-04
学校安全教育自查报告例文自查报告08-22
2019-2020学年黑龙江省哈六中高三上学期期中考试地理试卷(含答05-19
11月工作简报(1)10-01
奥林匹克和世界战争与和平05-01
一缕散文欣赏03-30
2019-2020年应收账款管理制度范本11-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 万年历
- 代码
- 四川省广安、遂宁、资阳、眉山、雅安、内江六市2020届高三第一次诊断性考试文综历史试题
- PEP 三年级上册 Unit 2 Colours B Let’s talk 教案 全英文 教学反思
- 江苏省扬州市2018-2019学年度高二学业水平测试模拟历史试题(二)
- 行政诉讼法、行政复议法、行政处罚法、国家赔偿法、口诀记忆重点内容
- 房地产开发部人力资源管理诊断报告
- 《雪花飘飘》教案
- 2015-2020年中国生物技术药品市场调研及投资前景预测报告
- 市教委印发上海市中小学生学业质量绿色指标
- 2015闽文化概论任务3
- 二年级下册语文复习教案
- XX小学预防性侵工作实施方案
- 勇于担当 主动作为
- 泸州二奶案评论
- Kiroro_长い间日文(假名)歌词
- 高速旋翼技术特点研究
- 广西香海班现代礼仪考试试卷(含答案)
- 基于遥感观测的折射指数光谱特性反演大气气溶胶中沙尘组分含量
- 高中函数图像大全【免费】
- LED显示屏安装工程施工方案
- 2018-2019学年山西省大同市第一中学高一上学期期末考试历史试题