c语言课程设计报告--万年历,最详细

三、程序总体设计及功能结构框图

(一)功能结构框图

闰年判断 星期查询 输出年历

系统时间显示

主菜单

欢迎使用

输出月历 (二)程序设计

头文件:#include//标准输入输出函数

#include//清屏函数system() #include//延时函数Sleep() #include //调用系统时间函数time()

在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。其中有: int isLeapYear(int year)//判断是否为闰年 void hy()//欢迎信息; void Time() //获取系统时间;

int whichWeekday(int year, int month, int day)//判断某天为星期几; void yearMonth(int year, int month)//打印某年某月的月历; void monthDay(int year)//输入年份,打出个月历; void menu()//主菜单; void main()//主函数;

这些函数的定义及其相应的内部程序共同构筑起了这个万年历查询系统

的总程序。其中isLeapYear函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;whichWeekday函数则是为了实现判断星期而编写的;yearMonth函数则

是为了实现月历而编写的;Time()函数则是为调用系统时间而编写,该Time()函数采用指针形式定义了*week[]数组和*tp变量;yearMonth,monthDay 这两个函数的共同使用就能够完成输出年历的功能。

四、程序流程图

(一)总流程图

开始 按键1? 是 按键2? 是按键3和4 是计算是否为闰年 计算星期数 计算编辑接收到的数据 输出是否为闰年 输出星期数 输出具体年历和月历 按键5? 是结束 退出

(二)算法说明

1. 总天数的算法:

isLeapYear函数的使用,判断出了输入年份是否为闰年的信息。判断一年是否为闰年的方法是:该年分而能被4整除但不能被100整除,或者是能被400整除。

判断是否为闰年的流程图:

2.输入日期计算星期几:

利用whichWeekday函数可以判断出星期,然后对于输入的日期可以通过公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7计算就可以输出相应的星期数。

int whichWeekday(int year, int month, int day)//判断某天为星期几 {

int weekday;

式 }

if (month == 1 || month == 2)//公式中要把月和月换成是上一年的月和月 { }

weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; //计算星期的公

month += 12; year -= 1;

return weekday+1;

3. 对输入信息的汇总:

void yearMonth(int year, int month)//打印某年某月的月历,void monthDay(int year)//输入年份,打出个月历;通过这两个函数可以将输入数据的具体信息通过完整日历的形式表示出来。

void yearMonth(int year, int month)//打印某年某月的月历 {

int i,j=0;

int weekday; //计算这个月第一天是星期几 weekday = whichWeekday(year, month, 1); printf(\printf(\ printf(\

%d年%d月\\n\

------------------------------------------------\\n\ 星期一星期二星期三星期四星期五星期六星期天\\n\

if(isLeapYear(year) && month == 2)

days[1] = days[1] + 1;

\

printf(\

for(i = 1; i < weekday; i ++)

printf(\

for(i = 0; i < 8 - weekday; i ++) {

printf(\printf(\

}

}

printf(\

\

for(i = 9-weekday; i <= days[month-1]; i ++,j++) { }

printf(\

------------------------------------------------\\n\

if(j == 7) { }

printf(\

j = 0; printf(\

\

void monthDay(int year)//输入年份,打出个月历 { }

int i;

for(i = 0; i < 12; i ++)

yearMonth(year,i+1);

printf(\

五、源程序代码

#include//标准输入输出函数 #include//清屏函数system() #include//延时函数Sleep() #include //调用系统时间函数time()

int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每月的天数,闰年二月要加 int isLeapYear(int year)//判断是否为闰年 {

if(year%4 == 0 && year0 != 0 || year@0 == 0) else

return 1;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4