要求:
本人是在VS2017中完成该代码。
注:以下代码并非全部原创,本人在一定程度上参考了百度文库中一篇文章的代码,原址如下
https://wenku.baidu.com/view/3af97dd580eb6294dd886cf4.html
其中,双月并排输出的代码并未参考他人。
计算某年1月1号的算法借鉴于由罗建军,朱丹军,顾刚,刘路放编著的C++程序设计教程(第二版),具体步骤如下:
设year和1900年之间所差的年份为n,则n = year - 1900。
(1)非闰年每年都是52个星期多1天,因此n年多出的天数是n天。
(2)闰年每年是52个星期多2天,因此x个闰年多出的天数是2x天。故总共多出来的天数n = n + 闰年数。
(3)将多出来的天数n用7除,求其余数,即星期几:n = n % 7。
(4)再加上1900年元旦的星期序号:n = n + 1。
(5)如果n≥7则再减去7即year年元旦的星期序号(0表示星期日):n=n %7。
在不考虑历史的前提下,已知上述算法的基础上略作修改可逆推出公元元年(即公元1年)1月1号是星期一。
代码如下:
#include<iostream>
#include<iomanip>
#include<string>
#include<windows.h>
using namespace std;
const string MonName[12] = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
int MonNum[12] = {
31,28,31,30,31,30,31,31,30,31,30,31 };
void Start(); //打印开始时的语句
void End(); //打印退出时的语句
class Calendar
{
public:
Calendar(); //构造函数,用来进行第一次年历查询
~Calendar() {
} //析构函数
int LeapYear(int); //判断该年是否为闰年
int week(); //求公历该年的1月1日是星期几
int GetYear(); //获取输入的年份
void PrintDistance(); //打印并排双月间的间隔
void ChangeYear(int); //用于继续查询时改变成员year
void GetEveryMonthWeek(); //获取该年每月1号是星期几
void PrintWeek(int); //打印每月表头
void Display(); //双月并排打印日历
void Menu(); //菜单操作系统
private:
int year; //存放输入的年份
int Week[12]; //存放输入年份中每个月1号是星期几
};
int main()
{
Start();
Calendar a;
a.Display();
a.Menu();
return 0;
}
void Start()
{
system("color 0f"); //将字体设为亮白色
cout << " ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆" << endl;
cout << " ▲ ▼" << endl;
cout << " ▲ ▼" << endl;
cout << " ▲ 【欢迎进入万年历查询系统】 ▼" << endl;
cout << " ▲ ▼" << endl;
cout << " ▲ ▼" << endl;
cout << " ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆" << endl;
cout << endl;
}
void End()
{
//Sleep()函数包含在头文件windows.h中,该函数可以程序执行挂起(即停滞),参数单位为毫秒
//特别注意在Codeblocks环境下是无法使用sleep函数的
Sleep(700);
cout << endl;
cout << " ================================================================" << endl;
cout << " * *" << endl;
Sleep(1200);
cout << " * 【感谢使用万年历查询系统】 *" << endl;
cout << " * *" << endl;
Sleep(1200);
cout << " * 【期待您下一次使用】 *" << endl;
cout << " * *" << endl;
Sleep(1200);
cout << " * 【再见】 *" << endl;
Sleep(1200);
cout << " * *" << endl;
cout << " ======================================