如何开发一个简易万年历小功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1650个文字,预计阅读时间需要7分钟。
本文将分享一个简单的C++程序,用于实现万年历的功能。程序功能如下:
1. 打印指定年份所有月份的日历。
2.打印指定年份指定月份的日历。
代码示例:
cpp
#include #include// 函数:判断是否为闰年bool isLeapYear(int year) { return (year % 4==0 && year % 100 !=0) || (year % 400==0);}
// 函数:获取指定月份的天数int getDaysInMonth(int year, int month) { int daysInMonth[]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month==2 && isLeapYear(year)) { return 29; } return daysInMonth[month - 1];}
// 函数:打印指定年份所有月份的日历void printYearCalendar(int year) { for (int month=1; month <=12; ++month) { std::cout << Year < // 函数:打印指定年份指定月份的日历void printMonthCalendar(int year, int month) { int days=getDaysInMonth(year, month); int startDay=(7 - (31 - (year - 1) * 365 - (year - 1) / 4 + (year - 1) / 100 - (year - 1) / 400) % 7) % 7; std::cout << Year < int main() { int year, month; std::cout <> year; std::cout <> month; // 打印指定年份所有月份的日历 printYearCalendar(year); // 打印指定年份指定月份的日历 printMonthCalendar(year, month); return 0;} 本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下 用C++写了个简易的万年历。 具体功能如下: 1.打印指定年(用户输入)所有月份的年历 2.打印指定年指定月(用户输入)的月份 3.打印指定日期(用户输入)的星期数 4.可重复输入 贴上源码:
#include<iostream>
#include<windows.h>
#include<iomanip>
using namespace std;
int number; //菜单键
int year, month, day; //年、月、日
int i, j, t; //for循环用的量
int s; //星期X
char c; //存放随机输入的数字,以实现“按任意键返回主菜单”的功能
char months[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //平年每个月的天数
void Pos(int x, int y); //光标位置
void menu(); //主菜单函数
void runnian(); //如是闰年则变第二个月天数28为29
void oneyear(); //输出一整年的年历
void onemonth(); //输出一个月的月历
void xianshiweek(); //显示星期数
void Pos(int x, int y)//光标位置
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
void menu()//主菜单函数
{
Pos(40, 3);
cout << "***********************************" << endl;
Pos(40, 4);
cout << "* 欢迎使用万年历 *" << endl;
Pos(40, 5);
cout << "* ---made by pjr *" << endl;
Pos(40, 6);
cout << "***********************************" << endl;
Pos(20, 8);
cout << "操作键:" << endl;
Pos(20, 9);
cout << "1.显示一年的年历" << endl;
Pos(20, 10);
cout << "2.显示一月的月历" << endl;
Pos(20, 11);
cout << "3.显示某一天是星期几" << endl;
Pos(20, 12);
cout << "0.退出" << endl;
Pos(20, 14);
cout << "请输入操作键(0~3):";
cin >> number;
if (number < 0 || number>3)
{
system("cls");
Pos(20, 15);
cout << "输入数字无效,请重新输入!" << endl;
menu();
}
}
void runnian() //如是闰年则变第二个月天数28为29
{
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //闰年判断公式
{
months[2] = 29;
}
}
void oneyear() //输出一整年的年历
{
cout << "请输入年份:";
runnian();
system("cls"); //清屏
cout << "请输入年份:" << year << endl << endl;
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1) % 7; //该年1月1日的星期数
for (i = 1; i <= 12; i++)
{
cout << i << "月份的月历如下:" << endl;
cout << setw(6) << "日" << setw(6) << "一" << setw(6) << "二" << setw(6) << "三" << setw(6) << "四" << setw(6) << "五" << setw(6) << "六" << endl;
for (j = 0; j < s; j++)
{
cout << setw(6) << " ";
}
for (t = 1; t <= months[i]; t++)
{
cout << setw(6) << t;
s = (s + 1) % 7;
if (s % 7 == 0) //当打印到星期六时,换行
{
cout << endl;
}
}
cout << endl;
}
fflush(stdin);
cout << "请按任意键返回主菜单:";
cin >> c;
system("cls");
menu();
}
void onemonth()//输出一个月的月历
{
int s = 0;
cout << "请输入年份:";
runnian();
cout << "请输入月份:";
cin >> month;
system("cls");
cout << "请输入年份:" << year << endl << endl;
cout << "请输入月份:" << month << endl << endl;
for (i = 1; i <= month - 1; i++)
{
s = s + months[i]; //该年1月1日到所求日期前一天的天数
}
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1 + s) % 7; //所求日期的星期数
cout << month << "月份的月历如下:" << endl;
cout << setw(6) << "日" << setw(6) << "一" << setw(6) << "二" << setw(6) << "三" << setw(6) << "四" << setw(6) << "五" << setw(6) << "六" << endl;
for (j = 0; j < s; j++)
{
cout << setw(6) << " ";
}
for (t = 1; t <= months[month]; t++)
{
cout << setw(6) << t;
s = (s + 1) % 7;
if (s % 7 == 0)
{
cout << endl;
}
}
cout << endl;
cout << "请按任意键返回主菜单:";
cin >> c;
system("cls");
menu();
}
void xianshiweek() //显示星期数
{
int s = 0;
cout << "请输入年份:";
runnian();
cout << "请输入月份:";
cin >> month;
cout << "请输入日期:";
cin >> day;
system("cls");
cout << "请输入年份:" << year << endl << endl;
cout << "请输入月份:" << month << endl << endl;
cout << "请输入日期:" << day << endl << endl;
for (i = 1; i <= month - 1; i++)
{
s = s + months[i];
}
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + day + s) % 7;
cout << "显示的星期数如下:" << s << endl;
cout << endl;
cout << "请按任意键返回主界面:";
cin >> c;
system("cls");
menu();
}
int main()//主函数
{
setlocale(LC_ALL, "chs");//转中文
menu();
while (number != 0)
{
switch (number)
{
case 1:
{
oneyear();
break;
}
case 2:
{
onemonth();
break;
}
case 3:
{
xianshiweek();
break;
}
}
months[2] = 28; //把months[2]变为初值
}
if (number == 0)
{
system("pause");
}
return 0;
}
运行效果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计1650个文字,预计阅读时间需要7分钟。
本文将分享一个简单的C++程序,用于实现万年历的功能。程序功能如下:
1. 打印指定年份所有月份的日历。
2.打印指定年份指定月份的日历。
代码示例:
cpp
#include #include// 函数:判断是否为闰年bool isLeapYear(int year) { return (year % 4==0 && year % 100 !=0) || (year % 400==0);}
// 函数:获取指定月份的天数int getDaysInMonth(int year, int month) { int daysInMonth[]={ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (month==2 && isLeapYear(year)) { return 29; } return daysInMonth[month - 1];}
// 函数:打印指定年份所有月份的日历void printYearCalendar(int year) { for (int month=1; month <=12; ++month) { std::cout << Year < // 函数:打印指定年份指定月份的日历void printMonthCalendar(int year, int month) { int days=getDaysInMonth(year, month); int startDay=(7 - (31 - (year - 1) * 365 - (year - 1) / 4 + (year - 1) / 100 - (year - 1) / 400) % 7) % 7; std::cout << Year < int main() { int year, month; std::cout <> year; std::cout <> month; // 打印指定年份所有月份的日历 printYearCalendar(year); // 打印指定年份指定月份的日历 printMonthCalendar(year, month); return 0;} 本文实例为大家分享了C++实现万年历的具体代码,供大家参考,具体内容如下 用C++写了个简易的万年历。 具体功能如下: 1.打印指定年(用户输入)所有月份的年历 2.打印指定年指定月(用户输入)的月份 3.打印指定日期(用户输入)的星期数 4.可重复输入 贴上源码:
#include<iostream>
#include<windows.h>
#include<iomanip>
using namespace std;
int number; //菜单键
int year, month, day; //年、月、日
int i, j, t; //for循环用的量
int s; //星期X
char c; //存放随机输入的数字,以实现“按任意键返回主菜单”的功能
char months[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; //平年每个月的天数
void Pos(int x, int y); //光标位置
void menu(); //主菜单函数
void runnian(); //如是闰年则变第二个月天数28为29
void oneyear(); //输出一整年的年历
void onemonth(); //输出一个月的月历
void xianshiweek(); //显示星期数
void Pos(int x, int y)//光标位置
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
void menu()//主菜单函数
{
Pos(40, 3);
cout << "***********************************" << endl;
Pos(40, 4);
cout << "* 欢迎使用万年历 *" << endl;
Pos(40, 5);
cout << "* ---made by pjr *" << endl;
Pos(40, 6);
cout << "***********************************" << endl;
Pos(20, 8);
cout << "操作键:" << endl;
Pos(20, 9);
cout << "1.显示一年的年历" << endl;
Pos(20, 10);
cout << "2.显示一月的月历" << endl;
Pos(20, 11);
cout << "3.显示某一天是星期几" << endl;
Pos(20, 12);
cout << "0.退出" << endl;
Pos(20, 14);
cout << "请输入操作键(0~3):";
cin >> number;
if (number < 0 || number>3)
{
system("cls");
Pos(20, 15);
cout << "输入数字无效,请重新输入!" << endl;
menu();
}
}
void runnian() //如是闰年则变第二个月天数28为29
{
cin >> year;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //闰年判断公式
{
months[2] = 29;
}
}
void oneyear() //输出一整年的年历
{
cout << "请输入年份:";
runnian();
system("cls"); //清屏
cout << "请输入年份:" << year << endl << endl;
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1) % 7; //该年1月1日的星期数
for (i = 1; i <= 12; i++)
{
cout << i << "月份的月历如下:" << endl;
cout << setw(6) << "日" << setw(6) << "一" << setw(6) << "二" << setw(6) << "三" << setw(6) << "四" << setw(6) << "五" << setw(6) << "六" << endl;
for (j = 0; j < s; j++)
{
cout << setw(6) << " ";
}
for (t = 1; t <= months[i]; t++)
{
cout << setw(6) << t;
s = (s + 1) % 7;
if (s % 7 == 0) //当打印到星期六时,换行
{
cout << endl;
}
}
cout << endl;
}
fflush(stdin);
cout << "请按任意键返回主菜单:";
cin >> c;
system("cls");
menu();
}
void onemonth()//输出一个月的月历
{
int s = 0;
cout << "请输入年份:";
runnian();
cout << "请输入月份:";
cin >> month;
system("cls");
cout << "请输入年份:" << year << endl << endl;
cout << "请输入月份:" << month << endl << endl;
for (i = 1; i <= month - 1; i++)
{
s = s + months[i]; //该年1月1日到所求日期前一天的天数
}
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + 1 + s) % 7; //所求日期的星期数
cout << month << "月份的月历如下:" << endl;
cout << setw(6) << "日" << setw(6) << "一" << setw(6) << "二" << setw(6) << "三" << setw(6) << "四" << setw(6) << "五" << setw(6) << "六" << endl;
for (j = 0; j < s; j++)
{
cout << setw(6) << " ";
}
for (t = 1; t <= months[month]; t++)
{
cout << setw(6) << t;
s = (s + 1) % 7;
if (s % 7 == 0)
{
cout << endl;
}
}
cout << endl;
cout << "请按任意键返回主菜单:";
cin >> c;
system("cls");
menu();
}
void xianshiweek() //显示星期数
{
int s = 0;
cout << "请输入年份:";
runnian();
cout << "请输入月份:";
cin >> month;
cout << "请输入日期:";
cin >> day;
system("cls");
cout << "请输入年份:" << year << endl << endl;
cout << "请输入月份:" << month << endl << endl;
cout << "请输入日期:" << day << endl << endl;
for (i = 1; i <= month - 1; i++)
{
s = s + months[i];
}
s = (year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400 + day + s) % 7;
cout << "显示的星期数如下:" << s << endl;
cout << endl;
cout << "请按任意键返回主界面:";
cin >> c;
system("cls");
menu();
}
int main()//主函数
{
setlocale(LC_ALL, "chs");//转中文
menu();
while (number != 0)
{
switch (number)
{
case 1:
{
oneyear();
break;
}
case 2:
{
onemonth();
break;
}
case 3:
{
xianshiweek();
break;
}
}
months[2] = 28; //把months[2]变为初值
}
if (number == 0)
{
system("pause");
}
return 0;
}
运行效果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

