日历

这是老师给我们布置的一个实验课做的,用于理解大化小,模块化实现。但因为一些原因,就让我们自行解决了,我记得当时学c语言的时候,看到那一长串代码都脑袋疼,当时连照着抄输出来的日历都是千疮百孔,出现了对不齐等一系列错误。

但是当我今天回头看的时候,发现其实并没有那么难,每个函数实现了对应的功能,然后理解他是如何实现和处理得,理解后就按照他的思路把这个代码写了出来。由于学的是c++,我就用了c++实现的。

#include <iostream>
#include <iomanip>

using namespace std;

#define Sunday 0
#define Monday 1
#define Tuesday 2
#define Wednesday 3
#define Thursday 4
#define Friday 5
#define Saturday 6

void GiveInstructions();//实现了给出提示的功能
int GetYear ();//读取用户想要输出年份的日历。
void PrintCalendar(int year);//输出这一年的日历。(按照12个月分开输出)
void MonthOfYear(int month,int year);//输出一年中每一个月对应的日历。
int MonthDays(int month,int year);//返回这一个月对应得天数。
int FirstOfMonth(int month,int year);//返回每个月的第一天,用于判断这个月的第一天是星期几,便于输出后面的。
int IsLeap (int year);//判断是否是闰年,若是就返回1。

int main ()
{
GiveInstructions();
int year;
year = GetYear();
PrintCalendar(year);
return 0;
}

 

void GiveInstructions()
{
cout<<"You can enter the year which you want to know"<<endl
<<"The year must after 1900!"<<endl
<<"Please enter:";
}

int GetYear ()
{
int year;
cin>>year;
return year;
}

void PrintCalendar(int year)
{
int i;
for(i = 1;i <= 12;i++) {
cout<<year<<"--"<<i<<endl;
MonthOfYear(i,year);
cout<<endl;
}
}

int MonthDays (int month,int year)
{
switch(month) {
case 2:
if(IsLeap(year)) return 29;
return 28;
case 4:case 6:case 9:case 11:
return 30;
default:
return 31;
}
}

int FirstOfMonth(int month,int year)
{
int weekday = Monday;
int i;
for(i = 1900;i < year;i++) {
weekday = (weekday + 365) % 7;
if(IsLeap(year)) weekday = (weekday + 1) % 7;
}

for(i = 1;i < month;i++) {
weekday = (weekday + MonthDays (i,year)) % 7;
}

return weekday;
}

void MonthOfYear(int month,int year)
{
int weekday,nDays,day;
nDays = MonthDays(month,year);
weekday = FirstOfMonth(month,year);
cout<<"Su Mo Tu We Tr Fr Sa"<<endl;
for(day = 1;day <= weekday;day++) {
cout<<" ";
}

for(day = 1; day <= nDays;day++) {
cout<<setw(2)<<day<<" ";
if (weekday == Saturday) cout<<endl;
weekday = (weekday + 1) % 7;
}
}

int IsLeap (int year)
{
return (((year % 4 == 0) && year % 100 != 0) || year % 400 == 0);
}

注释又没有打,不过我把每个函数实现的功能说清楚了,如果读者不了解函数功能是如何实现的话,可以留言!

posted @ 2020-10-14 23:23  lookfd  阅读(38)  评论(0编辑  收藏