C语言编写方案万年历讲解.docx

上传人:b****6 文档编号:5245422 上传时间:2022-12-14 格式:DOCX 页数:28 大小:100.09KB
下载 相关 举报
C语言编写方案万年历讲解.docx_第1页
第1页 / 共28页
C语言编写方案万年历讲解.docx_第2页
第2页 / 共28页
C语言编写方案万年历讲解.docx_第3页
第3页 / 共28页
C语言编写方案万年历讲解.docx_第4页
第4页 / 共28页
C语言编写方案万年历讲解.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C语言编写方案万年历讲解.docx

《C语言编写方案万年历讲解.docx》由会员分享,可在线阅读,更多相关《C语言编写方案万年历讲解.docx(28页珍藏版)》请在冰豆网上搜索。

C语言编写方案万年历讲解.docx

C语言编写方案万年历讲解

难易程度

中等

开发语言

C

开发工具

操作系统:

WindowsXP或更高

开发平台:

VC++6.0

关键字

万年历

《C语言程序设计》课程综合案例

——案例06万年历

6.1需求分析

本系统提供给用户一个万年历查询平台,用来查询1900-2050年任何一个月的月历。

在使用本系统的过程中,用户除了可以查看到公历数据外,还可以查看相应的农历数据。

要查询的年份和月份可以从键盘直接输入,另外还可以输入1和2来增加和减少年份,输入3和4来增加和减少月份。

6.1.1功能概述

如图6-1所示,系统主要功能有:

1.显示当前日期和时间,以及星期信息。

2.显示要查询的某年某月的月历,包括公历数据以及其相应的农历数据,如:

天干地支、生肖、节气等。

3.要查询的年份和月份可以从键盘直接输入,也可以通过输入“1-4”四个数字键来增加减少年份和月份的方法查询。

6.1.2系统运行环境

一、硬件环境

●处理器:

IntelPentium166MX或更高

●内存:

32MB

●硬盘空间:

1GB

●显卡:

SVGA显示适配器

二、软件环境

●操作系统:

Windows98/ME/2000/XP

6.1.3功能需求描述

万年历查询平台为用户提供简单方便的日期查询功能,给出完整清晰的日期信息。

本系统需要实现的基本功能如下:

1.取得系统当前时间:

取得系统当前的日期、时间及星期信息。

2.判断某年是否为闰年。

3.得到阳历某月的天数以及某年的总天数等信息。

4.判断某年月日为星期几。

5.得到某个具体日期的农历数据,包括农历日期、天干地支、节气等信息。

图6-1万年历界面

6.2总体设计

6.2.1系统流程描述

系统的流程描述如图6-2所示。

6.2.2功能模块设计

根据功能需求描述,定义如下函数:

voidTIME():

取得系统当前时间;

intleap(intyear):

返回阳历某年的天数,闰年返回366天,平年返回365天;

intday(intmonth):

返回阳历当月的天数;

intget_solar_total(intsolar_year,intsolar_month):

返回1900年01月01日到M年M月的天数;

intget_week(intsolar_year,intsolar_month):

返回M年M月的1号为星期几;

intget_lunar_info(intsolar_year,intsolar_month,Lunar_info*l_info,Chinese_era*china_era):

返回农历信息;

intout_chinese(Lunar_info*l_info,char*chinese_str):

输出农历日期信息;

voidsub_menue():

界面输出。

6.2.3数据结构设计

一、农历信息数据结构

typedefstruct

{

intlunar_year;//农历年份

intlunar_month;//农历月份

intlunar_day;//农历日期

intcurrent_mday;//本月天数

intleap_month;//本年闰月

intleap_flag;//闰月标记

}Lunar_info;

二、公历信息数据结构

typedefstruct

{

intera_year;//阳历年份

intera_month;//阳历月份

intera_day;//阳历日期

}Chinese_era;

三、数组

用来定义相关的农历信息,如天干地支、节气、生肖、农历日和月等数据。

1.1900-2050年的农历数据

intlunar_info[]=

{

0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,

0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,

0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,

0x14b63

};

数据格式说明:

数组中的每一个数字都是一个由5位十六进制数组成的数字,例:

04bd8。

第0位表示当年有无闰月,有的话为闰月的月份,没有的话,为0;第1、2、3位转换成二进制共12位,如:

010010111101表示一年中的12个月分别有多少天(1为30天,0为29天);第4位表示闰月是大月还是小月,仅当存在闰月的情况下有意义。

例如:

1980年的数据是:

0x095b0

其二进制为:

00001001010110110000

表示1980年没有闰月,从1月到12月的天数依次为:

30、29、29、30、29、30、29、30、30、29、30、30。

2.天干、地支、生肖、节气等

/*天干*/

charGan[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

/*地支*/

charZhi[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

/*生肖*/

charAnimals[12][3]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};

/*24节气*/

charsolar_term[24][5]=

{

"小寒","大寒","立春","雨水","惊蛰","春分",

"清明","谷雨","立夏","小满","芒种","夏至",

"小暑","大暑","立秋","处暑","白露","秋分",

"寒露","霜降","立冬","小雪","大雪","冬至"

};

/*农历日*/

charchinese_day[30][5]=

{

"初一","初二","初三","初四","初五","初六","初七",

"初八","初九","初十","十一","十二","十三","十四",

"十五","十六","十七","十八","十九","廿十","廿一",

"廿二","廿三","廿四","廿五","廿六","廿七","廿八",

"廿九","卅十"

};

charbuild[4][5]={"光绪","宣统","民国","建国"};

/*农历月*/

charchinese_month[12][5]={"正","二","三","四","五","六","七","八","九","十","冬","腊"};

6.3详细设计

6.3.1程序预处理

头文件calendar.h包含上节所描述的所有数据。

具体清单如下:

#include

#include

#include

#include

#include

#include

#defineYUANDAN1

typedefstruct

{

intlunar_year;//农历年份

intlunar_month;//农历月份

intlunar_day;//农历日期

intcurrent_mday;//本月天数

intleap_month;//本年闰月

intleap_flag;//闰月标记

}Lunar_info;

typedefstruct

{

intera_year;//阳历年份

intera_month;//阳历月份

intera_day;//阳历日期

}Chinese_era;

ints_year;

ints_month;

ints_day;

staticintt_year;

staticshorttoday=YUANDAN;

/*1900-2050年的农历数据*/

intlunar_info[]=

{

0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,

0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,

0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,

0x14b63

};

/*天干*/

charGan[10][3]={"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

/*地支*/

charZhi[12][3]={"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

/*生肖*/

charAnimals[12][3]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};

/*24节气*/

charsolar_term[24][5]=

{

"小寒","大寒","立春","雨水","惊蛰","春分",

"清明","谷雨","立夏","小满","芒种","夏至",

"小暑","大暑","立秋","处暑","白露","秋分",

"寒露","霜降","立冬","小雪","大雪","冬至"

};

/*农历日*/

charchinese_day[30][5]=

{

"初一","初二","初三","初四","初五","初六","初七",

"初八","初九","初十","十一","十二","十三","十四",

"十五","十六","十七","十八","十九","廿十","廿一",

"廿二","廿三","廿四","廿五","廿六","廿七","廿八",

"廿九","卅十"

};

charbuild[4][5]={"光绪","宣统","民国","建国"};

/*农历月*/

charchinese_month[12][5]={"正","二","三","四","五","六","七","八","九","十","冬","腊"};

6.3.2计算所查询日期的公历数据

主要功能有:

①取得系统的当前日期、时间和星期信息;②判断某年是否闰年并返回当年的天数;③返回1900年01月01日到M年M月的天数;④返回M年M月的1号为星期几。

代码清单如下:

#include"calendar.h"

/****************************************************************************

函数功能:

取得系统当前时间

入口参数:

出口:

系统当前时间

调用方式:

如TIME()返回系统当前时间

****************************************************************************/

voidTIME()

{

staticchar*week[]={"日","一","二","三","四","五","六"};

time_tt;

structtm*tp;

t=time(NULL);

tp=localtime(&t);

printf("%d年%02d月%02d日",tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday);

printf("%02d:

%02d:

%02d",tp->tm_hour,tp->tm_min,tp->tm_sec);

printf("星期%s\t",week[tp->tm_wday]);

}

/**************************************************************************

函数功能:

延迟刷新时间

入口参数:

n:

出口:

对应秒数

调用方式:

如buffer

(2)返回2秒后执行下一操作

***************************************************************************/

voidbuffer(intn)

{

time_tstart,end;

start=time(NULL);

end=time(NULL);

while(end-start

end=time(NULL);

}

/***************************************************************************

函数功能:

返回阳历某年的天数,闰年返回366天,平年返回365天

入口参数:

year:

公历年

出口:

对应天数

调用方式:

如leap(2000)返回366天

***************************************************************************/

intleap(intyear)

{

if(year%4==0&&year%100!

=0||year%400==0)return366;

elsereturn365;

}

/*****************************************************************************

函数功能描述:

返回阳历当月的天数

入口参数:

month:

公历月

出口:

对应天数

调用方式:

如day

(1)返回31天

****************************************************************************/

intday(intmonth)

{

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

return31;

if(month==4||month==6||month==9||month==11)return30;

if(month==2&&leap(s_year)==366)return29;

elsereturn28;

}

/****************************************************************************

函数功能:

返回1900年01月01日到M年M月的天数

入口参数:

s_year,s_month:

年份和月份

出口:

M年M月-1900-01-01

调用方式:

如get_solar_total(2000,01)返回36555天

****************************************************************************/

intget_solar_total(intsolar_year,intsolar_month)

{

inttotal;

inttemp_num;

total=0;

for(temp_num=1900;temp_num

{

total+=leap(temp_num);

}

for(temp_num=1;temp_num

{

total+=day(temp_num);

}

returntotal;

}

/****************************************************************************

函数功能:

返回M年M月的1号为星期几,以1900.01.01为基准1为星期日

入口参数:

s_year,s_month:

年份和月份

出口:

M年M月的一号是星期几

调用方式:

如get_week(2000,01)返回星期六

****************************************************************************/

intget_week(intsolar_year,intsolar_month)

{

intweek;

inttotal;

/*1900.01.01为星期一*/

week=2;

total=get_solar_total(solar_year,solar_month);

total%=7;

week=week+total;

week%=7;

if(week==0)

week=7;

returnweek;

}

6.3.3计算所查询日期的农历数据

主要功能有:

计算农历当年总天数,当月天数,判断某年是否存在农历的闰月及闰月的天数等,代码清单如下:

/****************************************************************************

函数功能:

确定是否存在农历的闰月

入口参数:

lunar_year:

年份

出口:

是否存在闰月

调用方式:

如get_leap_month(1982)返回存在闰4月

***************************************************************************/

intget_leap_month(intlunar_year)

{

returnlunar_info[lunar_year-1900]&0xf;

}

/****************************************************************************

函数功能:

若存在闰月,返回闰月的天数,30?

29

入口参数:

lunar_year:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1