万年历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计综合实践报告
(C语言)
项目名称:桌面万年历
班级:信息与计算2010级1班
姓名:郭玉豪
学号:201001051506
山东科技大学信息科学与工程学院
2012年12月
目录
1. 项目概述 (3)
1.1 需求陈述 (3)
1.2 开发技术、环境与工具 (3)
2. 软件需求 (4)
2.1 功能性需求 (4)
3. 软件架构设计 (4)
4. 软件详细设计与实现 (5)
4.1 主要模块的流程图 (5)
4.2 核心代码 (5)
5 总结与体会 (21)
5.1遇到的问题与解决途径 (21)
5.2 心得体会 (22)
1. 项目概述
1.1 需求陈述
本项目是桌面时钟与万年历的实现,时钟可以实现年月日、时分秒、天干地支及生肖的输出,并且还能显示阴历的日期。右击时钟会选中日历会出现日历的输出。日历上显示今天阳历的年月日、阴历的年月日、干支年,生肖及图片,并且右边还有年和月的加减,点击今日按钮时间就立刻转的电脑本地的日期。日历本身显现阳历与阴历,和国家法定节假日。在日历的右上角有个取消按钮。为了增加日历的外观,增加了换肤按钮,使得本万年历更加人性化。
1.2 开发技术、环境与工具
1.2.1(DrawClockText)
此函数给出了表盘的的年月日与时分秒、干支年和生效年的输出调用。
1.2.2(DrawCalendar)
此函数是日历表的输出函数,它实现了日历表的输出阳历时间和阴历时间,生肖与干支年的输出。1.2.3(用到的API函数)
API函数参考:
GetLocalTime: 获得当前时间(公历:年、月、日、周);
MoveToEx: 移动划线的起点;
LineTo: 绘制到某一点;
SetTextColor: 设置要绘制的文字颜色;
TextOut: 绘制文字;
GetLocalTime:获得当前系统的本地时间;
结构体类型参考:
SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周;
系统调用:
根据已给样本的提示,绘制了日历的矩形背景,并且也根据公历日期来计算出农历日期,并且标注了一些重要节日,像“春节、元宵节、国庆节、端午节、中秋节”等一些重要的节日,并且将节假日的字体颜色设置为红色,然后又写了获取当前系统本机时间的函数,成功的获得了当前本机的时间,这在日历中就可以观察到。
1.2.4
本程序是在基于c语言下实现的,用到的工具就是microsoft visual studio 2008。
2. 软件需求
2.1 功能性需求
2.1.1
void SunToLunar(const stDateTime* pSunDay,stDateTime* pLunarDay)
此调用函数实现了将一个公立日期转为一个阴历日期,目前此函数还有一些错误。
2.1.2
int GetDayOfWeek(const stDateTime* pSunDay)
此函数将一个阳历日期输进去,判断这一天为星期几,然后返回一个整型数据。
2.1.3
void DrawCalendar (HDC hDC)
此函数是是日历表的输出,标出了当天时间,并且在每天下都对应着当天的阴历时间。
2.1.4
void CalendarButtonEvent(UINT nID)
此函数实现了日历的年份和月份按钮的增加或者减少。
2.1.5
void DrawClockText(HDC hDC)
此函数实现了表盘的输出,年月日时分秒,生效年,干支年,星期几。
3. 软件架构设计
设计该万年历建了一个项目CalendarApp,该项目下有个头文件,源文件,资源文件,源文件中包括主程序main.c以及被调用的程序,资源文件中包括设置的万年历的外观,按钮设置……。该软件调用外部图片,图片在image中。
在日期设置上:
(1)根据公历日期获得农历日期,调用判断是不是闰年的函数,把一年中的农历所有月份的天数分为四
类(28,29,30,31)。
(2)用FOR循环输出各月份的日历,并把周末的字体设为红色。其余为黑色。
(3)在钟表上获得当前本地的系统时间。
(5)显示出星期、天干地支及农历日期。
详细设计过程:
1、首先绘制日历的矩形背景,用CreateSolidBrush(函数做出矩形的背景颜色,在日历的上端和下端分别输出阳历的年月份,及阴历的天干地支年等。
2、判断农历的每月有多少天,调用判断是否为闰年的函数,若为闰年,则定义二月为29天,通过一switch 函数输出十二个月的天数。
3、调用公历转为农历的函数并用for循环获得每日的农历日期,并调用CreateSolidBrush(函数标出当天的日期,并设置了五个法定节假日提醒。
4、对日历上的几个按钮进行设置,使得当年月份发生改变时,日历表可以正常显示。
5、获得本地系统时间,在表盘上的正确位置输出当天的年月日(调用CreateFont函数按角度输出)及当地时间和星期。
6、用指针数组存放十二个月的英文和星期的英文缩写。
4. 软件详细设计与实现
4.1 主要模块的流程图
流程图为阳历和阴历的转换过程示意图。
4.2 核心代码
#include"public.h"
/*
********************************************************* API函数参考:
GetLocalTime: 获得当前时间(公历:年、月、日、周)
MoveToEx: 移动划线的起点
LineTo: 绘制到某一点
SetTextColor: 设置要绘制的文字颜色
TextOut: 绘制文字
GetLocalTime:获得当前系统的本地时间
结构体类型参考:
SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周
*********************************************************