C语言实现日历(calendar—大西红柿)
框架主要如下:
- 代码主要分为三个部分,main.c calendar.c(主要包括功能代码) calendar.h(头文件以及函数声明)
- 下面先来带大家看一下功能代码
#include "calendar.h"
int IsLeapYear(int year) //判断一年是否为闰年
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int dayOfTheMonth(int year, int month) //判断某年的某月份有多少天
{
int day = -1;
if (1 == month || 3 == month || 5 == month || 7 == month || 8 == month || 10 == month || 12 == month)
{
day = 31;
}
else if (4 == month || 6 == month || 9 == month || 11 == month)
{
day = 30;
}
else
{
if (IsLeapYear(year))
{
day = 29;
}
else
{
day = 28;
}
}
return day;
}
int dayOfcurYearFrom1900(int year, int month) //计算1900年到目前月份(即就是需要打印日历月份)所经历的总天数
{
int day = 0;
int i = 0;
for (i = 1900;i < year;++i)
{
if (IsLeapYear(i))
{
day += 366;
}
else
{
day += 365;
}
}
for(i = 1;i < month; ++i)
{
day += dayOfTheMonth(year, i);
}
return day;
}
int weekdayOfFirstDay(int year, int month) //在计算出总天数后,计算month的第一天是周几(这里计算出的0为周末)
{
return (dayOfcurYearFrom1900(year, month) + 1) % 7;
}
void displayMonth(int year, int month) //功能显示模块
{
char week[7][10] = {"Sun", "Mon", "Tue", "Wen", "Thu", "Fri", "Sat"};
int day = 0;
int i = 0;
day = weekdayOfFirstDay(year, month);
for (i = 0;i < 7;++i)
{
printf(" %s ", week[i]);
}
putchar('\n');
for (i = 0;i < day;++i)
{
printf(" ");
}
for (i = 1;i <= dayOfTheMonth(year, month);++i)
{
printf(" %3d ", i);
if ((day + i) % 7 == 0)
{
putchar('\n');
}
}
putchar('\n');
return ;
}
上面部分就是所有功能代码的部分,都是用函数进行编写,使得功能模块化;
- 下面带大家看一下calendar.h部分,也是非常重要滴!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern int weekdayOfFirstDay(int year, int month);
extern int dayOfcurYearFrom1900(int year, int month);
extern int dayOfTheMonth(int year, int month);
extern int IsLeapYear(int year);
void displayMonth(int year, int month);
这里呢其实是对用到头文件的包含以及对.c文件中函数的声明,以便于后续在main.c中进行调用;
- 快!快来看main.c中的内容,哈哈哈,是不是非常的简单!这个就是函数模块化的优点,复杂的问题被函数模块化,哈哈哈,是不是代码异常清爽呢!
#include "calendar.h"
int main(int argc, const char *argv[])
{
int year, month;
scanf("%d%d", &year, &month);
displayMonth(year, month);
return 0;
}
本期的分享就到此结束啦!需要源码的同学们滴滴我(qq:1462161851)或者链接下载即可!
链接:https://pan.baidu.com/s/1ISvLclZqwjZF3cQDPMCP1g?pwd=bjv1
提取码:bjv1