万年历制作
#include<iostream>
#include<iomanip>
using namespace std;
void printMonth(int year, int month);
void printMonthTitle(int year, int
month);
void printMonthName(int month);
void printMonthBody(int year, int
month);
int getStartDay(int year, int month);
int getTotalNumberOfDays(int
year, int month);
int getNumberOfDaysInMonth(int year, int month);
bool
isLeapYear(int year);
int main() {
cout << "Enter full year (e.g., 2001) : ";
int
year;
cin >> year;
cout << "Enter month in number
between 1 and 12 : ";
int month;
cin >>
month;
printMonth(year, month);
return 0;
}
void printMonth(int year, int month) {
printMonthTitle(year,
month);
printMonthBody(year, month);
}
void printMonthTitle(int year, int month)
{
printMonthName(month);
cout << " " << year <<
endl;
cout << "----------------------------" <<
endl;
cout << " Sun Mon Tus Wed Thu Fri Sat" << endl;
}
void printMonthName(int month) {
switch(month) {
case 1: cout
<< setw(16) << "Junuary"; break;
case 2: cout <<
setw(16) << "February"; break;
case 3: cout << setw(16)
<< "March"; break;
case 4: cout << setw(16) << "April";
break;
case 5: cout << setw(16) << "May"; break;
case
6: cout << setw(16) << "June"; break;
case 7: cout <<
setw(16) << "July"; break;
case 8: cout << setw(16) <<
"August"; break;
case 9: cout << setw(16) << "September";
break;
case 10: cout << setw(16) << "October";
break;
case 11: cout << setw(16) << "November";
break;
case 12: cout << setw(16) <<
"December";
}
}
void printMonthBody(int year, int month) {
int startDay =
getStartDay(year, month);
int numberOfDaysInMonth =
getNumberOfDaysInMonth(year, month);
for (int i = 0; i < startDay; i++)
{
cout << " ";
}
for (int i = 1; i <=
numberOfDaysInMonth; i++) {
cout << setw(4) << i;
if
((i+startDay) % 7 == 0) cout << endl;
}
}
int getStartDay(int year, int month) {
int startDay1800 = 3;
int
totalNumberOfDays = getTotalNumberOfDays(year, month);
return
(totalNumberOfDays + startDay1800) % 7;
}
int getTotalNumberOfDays(int year, int month) {
int total =
0;
for (int i = 1800; i < year; i++) {
if (isLeapYear(i)) total
+= 366;
else total += 365;
}
for (int i = 1; i < month;
i++) {
total += getNumberOfDaysInMonth(year, i);
}
return
total;
}
int getNumberOfDaysInMonth(int year, int month) {
if (month == 4 ||
month == 6 || month == 9 || month == 11) return 30;
if (month == 2) return
isLeapYear(year) ? 29 : 28;
else return 31;
}
bool isLeapYear(int year) {
return year%4 == 0 && year%100 != 0
|| year %400 == 0;
}