《C语言编写方案-万年历.pdf》由会员分享,可在线阅读,更多相关《C语言编写方案-万年历.pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、难 易 程 度 中 等 开 发 语 言 C开 发 工 具 操 作 系 统:Windows XP或 更 高 开 发 平 台:VC+6.0关 键 字 万 年 历 C 语 言 程 序 设 计 课 程 综 合 案 例-案 例 0 6 万 年 历 6.1 需 求 分 析 本 系 统 提 供 给 用 户 一 个 万 年 历 查 询 平 台,用 来 查 询 1900-2050年 任 何 一 个 月 的 月 历。在 使 用 本 系 统 的 过 程 中,用 户 除 了 可 以 查 看 到 公 历 数 据 外,还 可 以 查 看 相 应 的 农 历 数 据。要 查 询 的 年 份 和 月 份 可 以 从 键 盘
2、直 接 输 入,另 外 还 可 以 输 入 1和 2 来 增 加 和 减 少 年 份,输 入 3 和 4 来 增 加 和 减 少 月 份。6.1.1 功 能 概 述 如 图 6-1所 示,系 统 主 要 功 能 有:1.显 示 当 前 日 期 和 时 间,以 及 星 期 信 息。2.显 示 要 查 询 的 某 年 某 月 的 月 历,包 括 公 历 数 据 以 及 其 相 应 的 农 历 数 据,如:天 干 地 支、生 肖、节 气 等。3.要 查 询 的 年 份 和 月 份 可 以 从 键 盘 直 接 输 入,也 可 以 通 过 输 入“1 4”四 个 数 字 键 来 增 加 减 少 年 份
3、和 月 份 的 方 法 查 询。6.1.2 系 统 运 行 环 境 一、硬 件 环 境 处 理 器:Intel Pentium 166 MX 或 更 高 内 存:32MB 硬 盘 空 间:1GB 显 卡:SVGA显 示 适 配 器 二、软 件 环 境 操 作 系 统:Windows 98/ME/2000/XP6.1.3 功 能 需 求 描 述 万 年 历 查 询 平 台 为 用 户 提 供 简 单 方 便 的 日 期 查 询 功 能,给 出 完 整 清 晰 的 日 期 信 息。本 系 统 需 要 实 现 的基 本 功 能 如 下:1.取 得 系 统 当 前 时 间:取 得 系 统 当 前 的
4、日 期、时 间 及 星 期 信 息。2.判 断 某 年 是 否 为 闰 年。3.得 到 阳 历 某 月 的 天 数 以 及 某 年 的 总 天 数 等 信 息。4.判 断 某 年 月 日 为 星 期 儿。5.得 到 某 个 具 体 日 期 的 农 历 数 据,包 括 农 历 日 期、天 干 地 支、节 气 等 信 息。2 I C C 语 言 课 程 通 源 库 建 设 张 静 提 交 的 文 档 课 程 案 例,案 例 九 万 年 历 源 程 序 万 年 历 D.t 年 2、1年 3、t 月 4、1 月 5、E xit万 年 历 今 天 是:2011年 1 1月 0 9日 2 0:5 1:5
5、4星 期 三 公 历:2 0 i i年 i i 月 建 国 62年 农 历:年 卯 年【兔】星 期 日 星 期 一 星 期 二 星 期 三 星 期 四 星 期 五 星 期 六 一 八 五 三 的 十 心 十 等,07十 14十 21廿 28初 二 九 六 四 六 三 十 七 五 01初 08十 15廿 22廿 29初 如 初 翠 芸 券 八 五 二 九 04初 11十 18廿 25月 冬 九 六 三 大 十 七 四 二 05初 12十 19廿 26初 请 输 入:你 可 以 输 入 年 份 1900-2050,也 可 以 输 入 i-5,二 1图 6-1 万 年 历 界 面 6.2总 体 设
6、计 6.2.1 系 统 流 程 描 述 系 统 的 流 程 描 述 如 图 6-2所 示。6.2.2 功 能 模 块 设 计 根 据 功 能 需 求 描 述,定 义 如 下 函 数:void TIME():取 得 系 统 当 前 时 间:int leap(int year):返 回 阳 历 某 年 的 天 数,闰 年 返 回 366天,平 年 返 I口 I 365天;int day(int month):返 回 阳 历 当 月 的 天 数;int get_solar_total(int solar_year,int solar_month):返 回 1900 年 01 月 01 日 到 M 年
7、 M 月 的 天 数;int get_week(int solar_year,int solar_month):返 回 M 年 M 月 的 1 号 为 星 期 几;int get_lunar_info(int solar_year,int solar_month,Lunar_info*l_info,Chinese_era*china_era):返 回 农 历 信 息;int out_chinese(Lunar_info*l_info,char*chinese_str):输 出 农 历 日 期 信 息;void sub_menue():界 面 输 出。.算 农 历 信 息 一 算 阳 历 信 息
8、 图 6-2系 统 流 程 图 6.2.3数 据 结 构 设 计 一、农 历 信 息 数 据 结 构 typedef struct(int lunar_year;农 历 年 份 int lunajmonth;农 历 月 份 int lunar_day;农 历 日 期 int current_mday;本 月 天 数 int leap_month;本 年 闰 月 int leap_flag;/H 月 标 记Lunar_info;二、公 历 信 息 数 据 结 构 typedef struct(int era_year;阳 历 年 份 int era_month;/ffi 历 月 份 int er
9、a_day;阳 历 日 期 Chinese_era;三、数 组 用 来 定 义 相 关 的 农 历 信 息,如 天 干 地 支、节 气、生 肖、农 历 日 和 月 等 数 据。1.1900-2050年 的 农 历 数 据 int lunar_infolJ=(0 x04bd8,0 x04ae0,0 x0a570,0 x054d5,0 x0d260,0 x0d950,0 x16554,0 x056a0,0 x09ad0,0 x055d2,0 x04ae0,0 x0a5b6,0 x0a4d0,0 x0d250,0 xld255,0 x0b540,0 x0d6a0,0 x0ada2,0 x095b0,
10、0 xl4977,0 x04970,0 x0a4b0,0 x0b4b5,0 x06a50,0 x06d40,0 xlab54,0 x02b60,0 x09570,0 x052f2,0 x04970,0 x06566,0 x0d4a0,0 x0ea50,0 x06e95,0 x05ad0,0 x02b60,Ox 186e3,0 x092e0,0 x lc8d7,0 x0c950,0 x0d4a0,0 x 1 d8a6,0 x0b550,0 x056a0,0 x 1 a5b4,0 x025d0,0 x092d0,0 x0d2b2,0 x0a950,0 x0b557,0 x06ca0,0 x0b55
11、0,0 xl 5355,0 x04da0,0 x0a5b0,Ox 14573,0 x052b0,0 x0a9a8,0 x0e950,0 x06aa0,0 x0aea6,0 x0ab50,0 x04b60,0 x0aae4,0 x0a570,0 x05260,0 x0f263,0 x0d950,0 x05b57,0 x056a0,0 x096d0,0 x04dd5,0 x04ad0,0 x0a4d0,0 x0d4d4,0 x0d250,0 x0d558,0 x0b540,0 x0b6a0,0 xl95a6,0 x095b0,0 x049b0,0 x0a974,0 x0a4b0,0 x0b27a,
12、0 x06a50,0 x06d40,0 x0af46,0 x0ab60,0 x09570,0 x04af5,0 x04970,0 x064b0,0 x074a3,0 x0ea50,0 x06b58,0 x055c0,0 x0ab60,0 x096d5,0 x092e0,0 x0c960,0 x0d954,0 x0d4a0,0 x0da50,0 x07552,0 x056a0,0 x0abb7,0 x025d0,0 x092d0,0 x0cab5,0 x0a950,0 x0b4a0,0 x0baa4,0 x0ad50,0 x055d9,0 x04ba0,0 x0a5b0,0 x 15176,0
13、x052b0,0 x0a930,0 x07954,0 x06aa0,0 x0ad50,0 x05b52,0 x04b60,0 x0a6e6,0 x0a4e0,0 x0d260,0 x0ea65,0 x0d530,0 x05aa0,0 x076a3,0 x096d0,0 x04bd7,0 x04ad0,0 x0a4d0,0 xld0b6,0 x0d250,0 x0d520,0 x0dd45,0 x0b5a0,0 x056d0,0 x055b2,0 x049b0,0 x0a577,0 x0a4b0,0 x0aa50,0 xlb255,0 x06d20,0 x0ada0,0 xl4b63);数 据
14、格 式 说 明:数 组 中 的 每 一 个 数 字 都 是 一 个 由 5 位 十 六 进 制 数 组 成 的 数 字,例:04bd8。第。位 表 示 当 年 有 无 闰 月,有 的 话 为 闰 月 的 月 份,没 有 的 话,为 0;第 1、2、3 位 转 换 成 二 进 制 共 12位,如:01001011 1101表 示 年 中 的 1 2个 月 分 别 有 多 少 天(1 为 3 0天,0 为 2 9天);第 4 位 表 示 闰 月 是 大 月 还 是 小 月,仅 当 存 在 闰 月 的 情 况 下 有 意 义。例 如:1980年 的 数 据 是:0 x095b0其 二 进 制 为:0
15、000 1001 0101 1011 0000表 示 1980年 没 有 闰 月,从 1 月 到 12月 的 天 数 依 次 为:30、29、29、30、29、30、29、30、30、29、30、30o2.天 干、地 支、生 肖、节 气 等 char Gan103=甲 乙,丙 丁,戊,己 庚,辛,壬 癸;/*地 支*/charZhi123=子 丑,寅 卯,辰,巳 丫 午,未 丫 申,酉 戌,亥;/*生 肖*/(3 市 1 皿 应 123=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪;/*24节 气*/char solar_term24 5=(小 寒,大 寒,立 春,雨 水,惊 蛰,春 分”,
16、清 明,谷 雨,立 夏,”小 满,芒 种,夏 至,小 暑,大 暑,立 秋,处 暑,白 露,秋 分,寒 露,霜 降,立 冬,小 雪,大 雪,冬 至;/*农 历 日*/char chinese_day305=(初 一,初 二,初 三,初 四,初 五,初 六,初 七,初 八,初 九,初 十,十 一,“十 二,十 三,十 四,十 五,十 六,“十 七,十 八,十 九,廿 十,廿 一,廿 二,廿 三,廿 四,廿 五,廿 六 廿 七,廿 八,廿 九,卅-;char build4 5=光 绪,宣 统,民 国,建 国;/*农 历 月*/char chinese_month125=正 二,“三,四 五,六,七
17、八,九,十 冬,腊;6.3详 细 设 计 6.3.1 程 序 预 处 理 头 文 件 calendar.h包 含 上 节 所 描 述 的 所 有 数 据。具 体 清 单 如 下:#include#include#include#include#include#include#define YUANDAN 1typedef struct(int lunajyear;农 历 年 份 ini lunajmonth;农 历 月 份 inthinajday;农 历 日 期 int current_mday;本 月 大 数 ini leap_monlh;本 年 闰 月 int leap_flag;/IJ
18、月 标 记 Lunar_info;typedef struct(ini era_year;阳 历 年 份 int era_month;阳 历 月 份 int era_day;阳 历 日 期 Chinese_era;int s_year;int s_month;int s_day;static int t_year;static short today=YUANDAN;/*1900-2050年 的 农 历 数 据*/int lunar_info=0 x04bd8,0 x04ae0,0 x0a570,0 x054d5,0 x0d260,0 x0d950,0 xl6554,0 x056a0,0 x0
19、9ad0,0 x055d2,0 x04ae0,0 x0a5b6,0 x0a4d0,0 x0d250,0 xld255,0 x0b540,0 x0d6a0,0 x0ada2,0 x095b0,0 xl4977,0 x04970,0 x0a4b0,0 x0b4b5,0 x06a50,0 x06d40,0 xlab54,0 x02b60,0 x09570,OxO52f2,0 x04970,0 x06566,0 x0d4a0,0 x0ea50,0 x06e95,0 x05ad0,0 x02b60,Ox 186e3,0 x092e0,0 x 1 c8d7,0 x0c950,0 x0d4a0,0 x 1
20、d8a6,0 x0b550,0 x056a0,0 x 1 a5b4,0 x025d0,0 x092d0,0 x0d2b2,0 x0a950,0 x0b557,OxO6caO,OxOb550,0 x15355,0 x04da0,0 x0a5b0,0 x14573,0 x052b0,0 x0a9a8,0 x0e950,0 x06aa0,0 x0aea6,0 x0ab50,0 x04b60,0 x0aae4,0 x0a570,0 x05260,0 x0f263,0 x0d950,0 x05b57,0 x056a0,0 x096d0,0 x04dd5,0 x04ad0,0 x0a4d0,0 x0d4d
21、4,0 x0d250,OxOd558,0 x0b540,0 x0b6a0,Ox 195a6,0 x095b0,0 x049b0,0 x0a974,0 x0a4b0,0 x0b27a,0 x06a50,0 x06d40,0 x0af46,0 x0ab60,0 x09570,0 x04af5,0 x04970,0 x064b0,0 x074a3,0 x0ea50,0 x06b58,0 x055c0,0 x0ab60,0 x096d5,0 x092e0,0 x0c960,0 x0d954,0 x0d4a0,0 x0da50,0 x07552,0 x056a0,0 x0abb7,0 x025d0,0
22、x092d0,0 x0cab5,0 x0a950,0 x0b4a0,0 x0baa4,0 x0ad50,0 x055d9,0 x04ba0,0 x0a5b0,0 x 15 176,0 x052b0,0 x0a930,0 x07954,0 x06aa0,0 x0ad50,0 x05b52,0 x04b60,0 x0a6e6,0 x0a4e0,0 x0d260,0 x0ea65,0 x0d530,0 x05aa0,0 x076a3,0 x096d0,0 x04bd7,0 x04ad0,0 x0a4d0,0 xld0b6,0 x0d250,0 x0d520,0 x0dd45,0 x0b5a0,0 x
23、056d0,0 x055b2,0 x049b0,0 x0a577,0 x0a4b0,0 x0aa50,0 xlb255,0 x06d20,0 x0ada0,0 xl4b63;/*天 干*/char Gan103=甲 乙,丙,丁 戊,己,庚 辛,壬,癸;/*地 支*/charZhi123=”子 丑,寅,卯 辰,巳 午,未 申,酉,戌 丁 亥;/*生 肖*/市 0江 23=鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪;/*24节 气*/char solar_term245=“小 寒,“大 寒,立 春,雨 水,惊 蛰,春 分”,清 明,谷 雨,立 夏,小 满,芒 种,夏 至,小 暑,大 暑,立 秋
24、,处 暑,白 露,秋 分,寒 露,霜 降,立 冬,小 雪,大 雪,冬 至;/*农 历 日*/char chinese_day30J5J=“初 一,初 二,初 三,初 四,初 五,初 六,初 七,“初 八,初 九,初 十,十 一,十 二,十 三,十 四,十 五,十 六,“十 七,十 八,十 九,廿 十,廿 一,廿 二,廿 三,廿 四,廿 五,廿 六,廿 七,廿 八,廿 九 卅 十”);char build4 5=光 绪,宣 统,民 国,建 国;/*农 历 月*/charchinese_month12H5=正 二,三,四 五,六,七 八,“九,十 冬,腊;6.3.2计 算 所 查 询 日 期 的
25、公 历 数 据 主 要 功 能 有:取 得 系 统 的 当 前 日 期、时 间 和 星 期 信 息;判 断 某 年 是 否 闺 年 并 返 回 当 年 的 天 数;返 回 1900年 0 1月 0 1日 到 M 年 M 月 的 天 数;返 回 M 年 M 月 的 1号 为 星 期 几。代 码 清 单 如 下:#include calendar.h函 数 功 能:取 得 系 统 当 前 时 间 入 口 参 数:无 出 口:系 统 当 前 时 间 调 用 方 式:如 T IM E()返 回 系 统 当 前 时 间 void TIME()static char*week口=日,一 二,“三,四 五,
26、六;time_t t;struct tm*tp;t=time(NULL);tp=locaitime(&t);printf(%d 年 02d 月 02d I I”,tp tm_year+1900,tp-tm_mon+l,tp-tm_mday);printf(u%02d:%02d:%02d,tp-tm_hour,tp-tm_min,tp-tm_sec);printf(星 期 5吊 H,weektp-tm_wday);)函 数 功 能:延 迟 刷 新 时 间 入 口 参 数:n:秒 出 口:对 应 秒 数 调 用 方 式:如 buffer(2)返 回 2 秒 后 执 行 下 操 作 void buf
27、fer(int n)time_t start,end;start=time(NULL);end=time(NULL);while(end-startn)end=time(NULL);函 数 功 能:返 回 阳 历 某 年 的 天 数,闰 年 返 回 3 6 6天,平 年 返 回 3 6 5天 入 口 参 数:year:公 历 年 出 口:对 应 天 数 调 用 方 式:如 用 ap(2000)返 回 366天 int leap(int year)(if(year%4=0&year%100!=0llyear%400=0)return 366;else return 365;函 数 功 能 描 述
28、:返 叵 1阳 历 当 月 的 天 数 入 口 参 数:month:公 历 月 出 口:对 应 天 数 调 用 方 式:如 d a y(l)返 回 3 1天 int day(int month)(if(monlh=lllmonth=3llmon 由=5llmonth=7llmomh=8llmonth=10llmonth=12)return 31;if(month=4llmonth=6llmonth=9llmonth=11)return 30;if(month=2&leap(s_year)=366)return 29;else return 28;)函 数 功 能:返 回 1900年 0 1月
29、0 1 日 到 M 年 M 月 的 天 数 入 口 参 数:s_year,s_month:年 份 和 月 份 出 口:M 年 M 月/900-01-01调 用 方 式:如 get_solar_total(2000,01)返 回 36555 天int get_solar_total(int solar_year,int solar_month)(int total;int temp_num;total=0;for(temp_num=1900;temp_numsolar_year;temp_num+)total+=leap(temp_num);for(temp_num=l;temp_numsola
30、r_month;temp_num+)total+=day(temp_num);return total;函 数 功 能:返 回 M 年 M 月 的 1 号 为 星 期 几,以 1900.01.01为 基 准 1为 星 期 I入 口 参 数:s_year,s_month:年 份 和 月 份 出 口:M 年 M 月 的 一 号 是 星 期 几 调 用 方 式:如 get_week(2OOO01)返 回 星 期 六 int get_week(int solar_year,int solar_month)(int week;int total;/*1900.01.01 为 星 期 一*/week=2;
31、total=get_solar_total(solar_year,solar_month);total%=7;week=week+total;week%=7;if(week=0)week=7;return week;6.3.3计 算 所 查 询 日 期 的 农 历 数 据 主 要 功 能 有:计 算 农 历 当 年 总 天 数,当 月 天 数,判 断 某 年 是 否 存 在 农 历 的 闰 月 及 闰 月 的 天 数 等,代 码 清 单 如 下:函 数 功 能:确 定 是 否 存 在 农 历 的 闰 月 入 口 参 数:lunar_year:年 份 出 口:是 否 存 在 闰 月 调 用 方
32、式:如 get eap_month(1982)返 叵 I存 在 闰 4 月 int get_leap_month(int lunar_year)return lunar_infolunar_year-1 900&0 xf;函 数 功 能:若 存 在 闰 月,返 回 闰 月 的 天 数,30?29入 口 参 数:lunar_year:年 份 出 口:存 在 的 是 大 月 还 是 小 月 调 用 方 式:如 get_leap_month_day(1982)返 回 30 天 int get_leap_month_day(int lunar_year)if(get_leap_month(lunar_
33、year)return(lunar_infolunar_year-1900&0 x 10000)730:29);elsereturn(O);函 数 功 能:确 定 农 历 当 月 天 数,30?29入 口 参 数:Iunar_year,lunar_month:年 份 和 月 份 出 口:存 在 的 是 大 月 还 是 小 月 调 用 方 式:$0 get_lunar_month_total(1982,4)返 回 30 天 int get_lunar_month_total(int lunar_year,int lunar_month)return(lunar_infolunar_year-19
34、00&(0 x 10000lunar_month)?30:29);函 数 功 能:农 历 当 年 总 天 数,354?355入 口 参 数:lunar_year:年 份 出 口:一 年 的 总 天 数 调 用 方 式:如 gelJunar_year_total(1982)返 回 355 天 int get_lunar_year_total(intiunar_year)int sum=348;/*348=29*12*/for(i=0 x8000;i0 x8;i=l)sum+=(lunar_infolunar_year-1900&i)?1:0;return(sum+get_leap_month_d
35、ay(lunar_year);函 数 功 能:确 定 天 干 地 支 入 口 参 数:num:年 份 1864,str:表 示 天 干 地 支 的 字 符 串 出 口:干+支 调 用 方 式:如 get_chinese_era(2007-1864,s tr)返 回 str=*T亥 void get_chinese_era(int num,char*str)strcpy(str,Gannum%10);strcat(str,Zhinum%12);6.3.4输 出 农 历 信 息 根 据 以 上 计 算 的 农 历 数 据 返 回 农 历 信 息 并 输 出 农 历 信 息。代 码 清 单 如 下:
36、/*返 回 农 历 信 息*/int get_lunar_info(int solar_year,int solar_month,Lunar_info*l_info,Chinese_era*china_era)int total;int temp_num;/*阳 历 1900年 0 1月 3 1日 为 农 历 1900年 0 1月 0 1日*/total=get_solar_total(solar_year,solar_month)-30;china_era-era_day=total+40;/*将 1 3和 1 4月 作 为 下 一 年 的 1月 和 2 月,便 于 确 定 Y 年 M 月
37、D 日 是 星 期 几 蔡 勒 公 式 求 星 期 几:W=C/4 2C+y+y/4+13X(M+l)/5+d/*/china_era-era_month=14;for(i=1 900;i=0;i+)(/*temp_num记 录 从 1900到 2050年 闰 年 和 平 年 的 天 数*/temp_num=get_lunar_year_total(i);total-=temp_num;/*累 计 月*/china_era-era_month+=12;)l_info-lunar_year=i;if(totallunar_year;china_era-era_month-=12;)/*1864年
38、 为 农 历 甲 子 年*/china_era-era_year=l_info-lunar_year-1864;/*返 回 是 否 存 在 闰 月*/l_info-leap_month=get_leap_month(l_info-lunar_year);l_info-leap_flag=0;for(i=l;i0;i+)(if(l_info-leap_month0&i=(l_info-leap_month+1)&l_info-leap_flag=0)-i;temp_num=get_leap_month_day(l_info-lunar_year);/*存 在 闰 月 为 l_info-leap_
39、fiag=1;elsetemp_num=get_lunar_month_total(l_info-lunar_year,i);if(l_info-leap_flag=1&i=(l_info-leap_month+1)l_info-leap_flag=0;total-=temp_num;if(l_info-leap_flag=0)china_era-era_month+4-;)if(total=0&l_info-leap_month0&i=l_info-leap_month+1)if(l_info-leap_flag=1)l_info-leap_flag=0;else(l_info-leap_f
40、lag=1;-i;-china_era-era_month;)if(totalera_mon th;)l_info-lunar_momh=i;l_info-lunar_day=total+1;if(l_info-leap_flag=0)l_info-current_mday=get_lunar_month_total(l_info-lunar_yearj_info-lunar_month);elsel_info-current_mday=get_leap_month_day(l_info-lunar_year);return 0;)/*输 出 农 历 日 期 信 息*/int out_chin
41、ese(Lunar_info*l_info,char*chinese_str)(/*初 一 不 打 印*/if(I_info-lunar_day!=1)strcpy(chinese_str,chinese_dayl_info-lunar_day-1);if(l_info-lunar_day=15&Linfo-lunar_month=1)strcpy(chinese_str,元 宵 节”);if(l_info-lunar_day=5&l_info-lunar_month=5)strcpy(chinese_str,”端 午 节)if(l_info-lunar_day=7&l_info-lunar_
42、month=7)strcpy(chinese_str,情 人 节”);i f(l_i nfo-l unar_day=15&l_info-lunar_month=7)strcpy(chinese_str,中 元 节”);if(l_info-lunar_day=15&l_info-lunar_month=8)strcpy(chinese_str,中 秋 节”);if(l_info-lunar_day=9&l_info-lunar_month=9)strcpy(chinese_str,重 阳 节”);if(l_info-lunar_month=12)(if(l_info-lunar_day=30)s
43、trcpy(chinese_str,除 夕)if(l_info-current_mdaylunar_day=29)strcpy(chinese_str,除 夕);if(l_info-lunar_day=8)strcpy(chinese_str,腊 八 节)if(l_info-lunar_day=23)strcpy(chinese_str,小 年”);)else(if(l_info-leap_flag=l)(如 果 存 在 闰 月 就 将 汉 字 闰 复 制 到 数 组 里,再 连 接 农 历 月 份 strcpy(chinese_str,闰);strcat(chinese_str,chines
44、e_monthll_info-lunar_month-l J);strcat(chinese_str,“月);elseif(l_info-lunar_month=1)strcpy(chinese_str,春 节”);else(strcpy(chinese_str,chinese_monthl_info-lunar_month-1);strcat(chinese_str,“月”);if(get_lunar_month_total(l_info-lunar_year,l_info-lunar_month)=30)strcat(chinese_str,“大);elsestrcat(chinese_s
45、tr,dn);)return 0;)6.3.5系 统 界 面 输 出 代 码 清 单 如 下:/*界 面 输 出*/void sub_menue()(int week,s_month_total,space_num,c_num;int i,j,flag;char tmp_str9;Chinese_era c_ear;Lunar_info l_info;/*每 个 月 一 号 为 星 期 几*/week=get_week(s_year,s_month);/*返 回 当 月 的 天 数*/s_month_total=day(s_month);/*将 已 开 辟 内 存 空 间 imp_str的 首
46、 sizeof(lmp_str)个 字 节 的 值 设 为 值 0,作 用 在 于 可 以 方 便 的 清 空 结 构 类 型 的 数 组 或 变 量。*/memset(&c_ear,0,sizeof(c_ear);memset(&l_info,0,sizeof(l_info);/*返 回 农 历 信 息*/get_lunar_info(s_year,s_month,&l_info,&c_ear);memset(tmp_str,0,sizeof(tmp_str);/*确 定 干 支*/get_chinese_era(s_year-1864,tmp_str);if(s_year=1949)(中
47、华 人 民 共 和 国 纪 年 t_year=s_year-1949;flag=3;)else if(s_year 1911)(民 国 纪 年 t_year=s_year-1911;flag=2;)else if(s_year 1908)(宣 统 纪 年 t_year=s_year-1908;flag=l;)else(光 绪 纪 年 t_year=s_year-1874;flag=0;)system(clsH);n);1 n);pilHUV。(printf(tl、t 年 I 万 年 历 pnnti(t|printf(t2 l 年 1TIME();今 天 是:);1 n);printf(1 n)
48、;pnntr(t I 1 n);printf(Mt3 t 月 1 公 历:%d 年 0 2 d月%s%3 d年 农 历:%s 年 s】1 n,s_year,s_month,buildflag,t_year,tmp_str,Animals(s_year-1864)%12);printf(Mt|-I nM);printf(t4、I 月 I 星 期 日 星 期 一 星 期 二 星 期 三 星 期 四 星 期 五 星 期 六 I n);printf(t I-I n);printf(t5.Exit I);space_num=week;for(i=l;ispace_num;i+)(printf();)c_
49、num=0;for(i=l;i7)ll(i=s_month_total)(week=1;printf(nn I);if(i7)(for(j=l;jspace_num;j+)(printf();)week=space_num;)elseweek=1;while(l)(week+=l;memset(tmp_str,0,sizeof(tmp_str);out_chinese(&l_info,tmp_str);printf(M%6s“,tmp_str);if(l_info.lunar_day 12)(l_info.lunar_month=1;/*月 数 大 于 12进 年*/l_info.lunar_
50、year=l_info.lunar_year+l;)/*返 回 闰 月 的 天 数*/l_info.current_mday=get_lunar_month_total(l_info.lunar_year,l_info.1 u nar_month);l_info.leap_flag=0;)l_info.lunar_day=l;c_num+;if(week7)ll(c_num=s_month_total)(week=l;printf(n I);break;)elseprintf(M”);elseprintf(H”);printf(”n);printf(t-n);6.3.5主 函 数 代 码 清