




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计综合实践报告(C语言)项目名称万年历班级软件工程姓名学号山东科技大学信息科学与工程学院2013年11月目录1项目概述311需求陈述312开发技术、环境与工具32软件需求321功能性需求322非功能性需求33软件架构设计44软件详细设计与实现641主要模块的流程图642核心代码75总结与体会2351遇到的问题与解决途径2352心得体会241项目概述11需求陈述本项目作为一个万年历,需要实现的功能有1查看当天公历日期,星期几2查看当前时间3查看当天农历日期4查看农历干支年5查看农历干支月。6查看19012099年各月的月历,农历日期,重要节日。拓展功能1设置闹钟,在表盘上显示闹钟时间2设置纪念日,在日历上显示纪念日时间3更换皮肤4整点报时5日期修改612开发技术、环境与工具环境与工具MICROSOFTVISUALSTUDIO2008开发技术基于C语言的WINDOWSAPI编程WINDOWSAPI就是WINDOWS应用程序接口,是针对MICROSOFTWINDOWS操作系统家族的系统编程接口。本次的程序运用了一些API函数1、SETTEXTCOLOR函数用来设置要绘制的文体颜色。可以将表格当中的文字设置为一些特殊的颜色。2、LINTO可以绘制到某一点3、MOVETOEX可以移动划线的起点4、GETLOCALTIME可以得到本机的当时的时间5、CREATEFONT可以用指定的属性创建一种字体,也可以改变字体输出的弧度6、TEXTOUT绘制文字7、LOWORD获得ID号2软件需求21功能性需求1查看当天公历日期,星期几2查看当前时间3查看当天农历日期4查看农历干支年5查看农历干支月。6查看19012099年各月的月历,农历日期,重要节日。7日期查询22非功能性需求1设置闹钟2设置纪念日,并在日历上显示自己设置的纪念日3更换皮肤4整点报时3软件架构设计系统一共分为三个模块,分别是主界面子系统,日历显示子系统。参数设定子系统主要是控制一些附加功能,比如换肤,设定纪念日,闹钟提醒等功能。本程序实现了换肤,闹钟,设置纪念日。系统如下所示主界面子系统负责程序主界面的显示、程序主逻辑的控制、以及其他子系统的调用。分为以下模块。程序入口模块、主界面消息处理模块、主界面贴图模块、时间处理模块。程序入口模块消息处理模块界面贴图模块时间处理模块消息请求时间处理请求响应到页面主界面子系统模块名称模块功能输入输出其他说明程序入口模块在该模块内创建主界面WINDOWS调用主界面创建;定时器安装WINDOWS程序的入口函数消息处理模块负责响应用户的鼠标和键盘操作用户和键盘鼠标输入,WINDOWS其他事件消息处理WINDOWS程序的窗口函数时间处理模块负责时间运算和显示定时器间隔时间WINDOWS程序的定时器回调函数界面贴图模块负责主界面的图像显示位图位图显示无日历显示子系统该子系统是一个界面模块,负责万年历计算、显示。模块名称模块功能输入输出其他说明日历显示万年历计算和显示,包括农历、公历、的显示用户点击日历附加功能查找日期4软件详细设计与实现41主要模块的流程日历绘制模块闹钟设置模块42核心代码/WINDOWS程序入口函数INTWINAPIWINMAINHINSTANCEHINSTANCE,HINSTANCEHPREVINSTANCE,LPSTRLPCMDLINE,INTNSHOWCMDG_HINSTHINSTANCESHOWCLOCKDLG/闹钟时间获取VOIDSETUPBUTTONEVENTUINTNID,HWNDHDLGSYSTEMTIMEDATETIMESTDATETIMESUNDAY,LUNARDATEHWNDHWNDUINTUCHARSIZEBUFFER1000GETLOCALTIMESUNDAYNYEARNCURRENTYEARSUNDAYNMONTHNCURRENTMONTHSUNDAYNDAYDATETIMEWDAYSUNDAYNHOURDATETIMEWHOURSUNDAYNMINUTEDATETIMEWMINUTESWITCHNIDCASEIDC_ADDCHARHOURS4CHARMINUTE4GETDLGITEMTEXTHDLG,IDC_EDIT1,HOURS,SIZEOFHOURSGETDLGITEMTEXTHDLG,IDC_EDIT2,MINUTE,SIZEOFMINUTETEMP4ATOIHOURSTEMP5ATOIMINUTEIFTEMP40IFTEMP50NCURRENTHOURTEMP4NCURRENTMINUTETEMP5MESSAGEBOXHDLG,“设置成功“,“提示“,MB_OKNCLOCK0/闹钟设置成功标记符号ELSEUMESSAGEBOXHDLG,“您输入的分钟有误,请重新输入“,“提示“,MB_YESNO|MB_ICONWARNINGELSEUMESSAGEBOXHDLG,“您输入的小时有误,请重新输入“,“提示“,MB_YESNO|MB_ICONWARNINGIFIDNOUINVALIDATERECTHDLG,NULL,FALSE/更新显示BREAK/纪念日获取VOIDMEMBUTTONEVENTUINTNID,HWNDHDLGSYSTEMTIMEDATETIMESTDATETIMESUNDAY,LUNARDATEHWNDHWND/窗口UINTINIDGETLOCALTIME/获得系统时间SUNDAYNYEARNCURRENTYEARSUNDAYNMONTHNCURRENTMONTHSUNDAYNDAYDATETIMEWDAYSUNDAYNHOURDATETIMEWHOURSUNDAYNMINUTEDATETIMEWMINUTESWITCHNIDCASEIDC_MEM_ADD/获得输入数字GETDLGITEMTEXTHDLG,IDC_MEMEDIT1,YEARS,SIZEOFYEARSGETDLGITEMTEXTHDLG,IDC_MEMEDIT2,MONTHS,SIZEOFMONTHSGETDLGITEMTEXTHDLG,IDC_MEMEDIT3,DAYS,SIZEOFDAYS/字符转换TEMP1ATOIYEARSTEMP2ATOIMONTHSTEMP3ATOIDAYSIFTEMP11901IFTEMP20IFTEMP30NCURRENTYEARTEMP1NCURRENTMONTHTEMP2NCURRENTDAYTEMP3MESSAGEBOXHDLG,“设置成功“,“提示“,MB_OKELSEELSEMESSAGEBOXHDLG,“您输入的月份有误,请重新输入“,“提示“,MB_YESNO|MB_ICONWARNINGELSEMESSAGEBOXHDLG,“您输入的年份有误,请重新输入“,“提示“,MB_YESNO|MB_ICONWARNINGIFIDNOIINVALIDATERECTHDLG,NULL,FALSE/更新显示/日历绘制VOIDDRAWCALENDARHDCHDC,INTNWIDTH,INTNHEIGHTSTDATETIMESUNDAY,LUNARDAY,SUNDAY_TODAYSYSTEMTIMEDATETIMECONSTINTX10CONSTINTY10CONSTINTXRIGHTNWIDTH100CONSTINTYBOTTOMNHEIGHT20CONSTTCHARSTEXT_T“日“,_T“一“,_T“二“,_T“三“,_T“四“,_T“五“,_T“六“INTI,J67,A,Z,B,C0,DAYS,PREDAYS,WEEK,K0INTNVER0INTMXRIGHTX/7,NYBOTTOMY25/6HBRUSHHBRUSHHBRUSHHFONTRECTRCHPENHPENHBITMAPHBKMAP/得到图片HDCHDCBITMAPBMPHDCHDCMEMHBITMAPM_HB1HBITMAPM_HB2HBITMAPHBMPHBRUSHHBRUSHHWNDHWNDSWITCHSKINCASE1HDCCREATECOMPATIBLEDCHDC/该函数创建一个与指定设备兼容的内存设备上下文环境DCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/1BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE2HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/2BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE3HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/3BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE4HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/4BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE5HDCCREATECOMPATIBLEDCHDC/该函数创建一个与指定设备兼容的内存设备上下文环境DCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/5BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE6HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/6BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE7HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/7BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKCASE8HDCCREATECOMPATIBLEDCHDCHBKMAPHBITMAPLOADIMAGEG_HINST,“/IMAGE/C/8BMP“,IMAGE_BITMAP,0,0,LR_LOADFROMFILEBREAKSELECTOBJECTHDC,HBKMAPBITBLTHDC,420,30,NWIDTH,NHEIGHT,HDC,0,0,SRCCOPY/以下代码是公历和农历计算并显示IFNCURRENTYEAR0SYSTEMTIMEDATETIMEGETLOCALTIMENCURRENTYEARDATETIMEWYEARNCURRENTMONTHDATETIMEWMONTHNCURRENTDAYDATETIMEWDAYSUNDAYNYEARNCURRENTYEARSUNDAYNMONTHNCURRENTMONTHSUNDAYNDAYNCURRENTDAY/根据公历日期获得农历日期SUNTOLUNARGETDAYOFWEEKSELECTOBJECTHDC,HBKMAPBITBLTHDC,0,0,NWIDTH,NHEIGHT,HDC,0,0,SRCCOPY/日历上的小部件显示(包括公历属相农历)MOVETOEXHDC,X,Y25,NULLLINETOHDC,XRIGHT,Y25/剩余总高度NVERYBOTTOMY25NVERNVER/6/绘制每日的高度线FORI0I1JIFI70|I76SETTEXTCOLORHDC,RGB255,255,111ELSESETTEXTCOLORHDC,RGBRAND600,RAND255,0/节日颜色IFSUNDAYNMONTH1/显示公历ELSEIFSUNDAYNMONTH5ELSEIFSUNDAYNMONTH9ELSEIFSUNDAYNMONTH10ELSEIFSUNDAYNMONTH11IFLUNARDAYNMONTH1/农历显示ELSEIFLUNARDAYNMONTH1ELSEIFLUNARDAYNMONTH5ELSEIFLUNARDAYNMONTH9ELSEIFLUNARDAYNMONTH9/在日历表格中输入农历日期SUNTOLUNARIFLUNARDAYNDAY1TEXTOUTHDC,20I1/2M,J1/3N50,CHMONTHTABLELUNARDAYNMONTH,STRLENCHMONTHTABLELUNARDAYNMONTHELSESETTEXTCOLORHDC,RGB255,163,111TEXTOUTHDC,20I1/2M,J1/3N50,CHDAYTABLELUNARDAYNDAY,STRLENCHDAYTABLELUNARDAYNMONTH/公历日期转农历日期的函数VOIDSUNTOLUNARCONSTSTDATETIMEPSUNDAY,STDATETIMEPLUNARDAYINTI0INTDISDAY0INTDISSPRING0INTNSPRINGYEARPSUNDAYNYEARINTNSPRINGMONTH1INTNSPRINGDAY0/计算当前公历日离当年元旦的天数DISDAYMONTHADDPSUNDAYNMONTH1PSUNDAYNDAY1IFISLEAPYEARPSUNDAYNYEAR/计算春节所在公历日离元旦的天数通过查表,计算当年的春节所在的公历日期,IFLUNARCALENDARTABLEPSUNDAYNYEAR1901ELSE/若春节不在公历月DISSPRINGLUNARCALENDARTABLEPSUNDAYNYEAR1901/DISDAY和DISSPRING的差就是当前公历日离春节的天数IFDISDAYDISSPRING/公历日在春节后INTXDISDAYDISSPRINGINTBLUNARLUNARCALENDARTABLENSPRINGYEAR1901/闰月月份I0NSPRINGMONTH1FORINTALUNARCALENDARTABLEPSUNDAYNYEAR1901/计算大小月IFA0A29ELSEA30IFXBLUNARELSEIFDISDAY20/闰月月份I0NSPRINGYEAR/需要上一年的农历信息NSPRINGMONTH12/从最后一个月开始计算IFBLUNAR0/如果没有闰月NSHIFT0X100SHIFT8ELSENSHIFT0X80SHIFT7FORINTALUNARCALENDARTABLENSPRINGYEAR1901/计算大小月IFA0A29ELSEA30IFX0NSPRINGMONTHELSENSPRINGMONTH1NSPRINGDAY1PLUNARDAYNYEARNSPRINGYEARPLUNARDAYNMONTHNSPRINGMONTHPLUNARDAYNDAYNSPRINGDAY/根据公历日期获得星期INTGETDAYOFWEEKCONSTSTDATETIMEPSUNDAYINTWEEK0INTCPSUNDAYNYEAR/100INTYPSUNDAYNYEAR100INTNDAYPSUNDAYNDAYINTNMONTHPSUNDAYNMONTHIFNMONTH1|NMONTH2/则应视为上一年的月月NMONTH12NMONTHCPSUNDAYNYEAR1/100YPSUNDAYNYEAR1100WEEKC/42CYY/426NMONTH1/10NDAY1WEEKWEEK7IFWEEK0WEEKWEEK77ELSEWEEKWEEK7RETURNWEEK/根据公历年得到农历干支年CHARGETGANZHIINTNYEARRETURNTIANGANDIZHINYEAR604/钟表绘制VOIDDRAWCLOCKTEXTHDCHDCHDCHDCHBITMAPHBKMAP/得到图片HPENHFHBITMAPHBMP/刷子SYSTEMTIMEDATETIMEINTIRECTRC/定义RCHBRUSHHBRUSHWCHAR_TSIZEBUFFER100STDATETIMESUNDAY,LUNARDATEGETLOCALTIMESUNDAYNDAYDATETIMEWDAYSUNDAYNMONTHDATETIMEWMONTHSUNDAYNYEARDATETIMEWYEARSUNDAYNHOURDATETIMEWHOURSUNDAYNMINUTEDATETIMEWMINUTEHBRUSH1GETSYSCOLORCOLOR_3DFACERCLEFT30RCTOP50RCBOTTOM65RCRIGHT97HBRUSHCREATESOLIDBRUSHRGB0,78,102FILLRECTHDC,/SWITCHGETDAYOFWEEKBREAKCASE2TEXTOUTHDC,40,85,“星期二“,6BREAKCASE3TEXTOUTHDC,40,85,“星期三“,6BREAKCASE4TEXTOUTHDC,40,85,“星期四“,6BREAKCASE5TEXTOUTHDC,40,85,“星期五“,6BREAKCASE6TEXTOUTHDC,40,85,“星期六“,6BREAKCASE0TEXTOUTHDC,40,85,“星期天“,6BREAKSETTEXTCOLORHDC,RGBRAND240,RAND120,0DATETIMEWHOUR,DATETIMEWMINUTE,DATETIMEWSECONDSUNTOLUNARWSPRINTFSIZEBUFFER,“D“,SUNDAYNYEARHFCREATEFONT0,8,330,0,5,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,“楷体“SELECTOBJECTHDC,HFTEXTOUTHDC,18,25,SIZEBUFFER,4WSPRINTFSIZEBUFFER,“2D“,SUNDAYNMONTHHFCREATEFONT0,8,0,0,5,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,“楷体“WSPRINTFSIZEBUFFER,“2D“,SUNDAYNDAYHFCREATEFONT0,8,3100,0,5,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,“楷体“SELECTOBJECTHDC,HFTEXTOUTHDC,97,18,SIZEBUFFER,2HFGETSTOCKOBJECTOEM_FIXED_FONT/相关固定间距(等宽)字体SELECTOBJECTHDC,HFSETTEXTCOLORHDC,RGB28,221,100/属相选择SWITCHSUNDAYNYEAR412CASE0TEXTOUTHDC,60,70,SHUXIANG0,STRLENSHUXIANG0BREAKCASE1TEXTOUTHDC,60,70,SHUXIANG1,STRLENSHUXIANG1BREAKCASE2TEXTOUTHDC,60,70,SHUXIANG2,STRLENSHUXIANG2BREAKCASE3TEXTOUTHDC,60,70,SHUXIANG3,STRLENSHUXIANG3BREAKCASE4TEXTOUTHDC,60,70,SHUXIANG4,STRLENSHUXIANG4BREAKCASE5TEXTOUTHDC,60,70,SHUXIANG5,STRLENSHUXIANG5BREAKCASE6TEXTOUTHDC,60,70,SHUXIANG6,STRLENSHUXIANG6BREAKCASE7TEXTOUTHDC,60,70,SHUXIANG7,STRLENSHUXIANG7BREAKCASE8TEXTOUTHDC,60,70,SHUXIANG8,STRLENSHUXIANG8BREAKCASE9TEXTOUTHDC,60,70,SHUXIANG9,STRLENSHUXIANG9BREAKCASE10TEXTOUTHDC,60,70,SHUXIANG10,STRLENSHUXIANG10BREAKCASE11TEXTOUTHDC,60,70,SHUXIANG11,STRLENSHUXIANG11BREAKWSPRINTFSIZEBUFFER,“S“,GETGANZHISUNDAYNYEARSETTEXTCOLORHDC,RGB28,221,100/字体颜色TEXTOUTHDC,28,70,SIZEBUFFER,4SETTEXTCOLORHDC,RGBRAND455,RAND190,RAND33ILUNARDATENMONTHTEXTOUTHDC,30,30,CHMONTHTABLEI,4ILUNARDATENDAYTEXTOUTHDC,60,30,CHDAYTABLEI,4/TEXTOUTHDC,50,100,“小时“,45总结与体会51遇到的问题与解决途径1公历转农历出现错误,农历显示错误上网查询相关算法,得到月干支的计算方法为月的地支是固定的如正月起寅之类,只计算月干。月干年干数2月份。用函数实现一下这个功能即可。2背景格式刷问题新的背景替代旧的背景需要设置RGB值,再回到原来的背景时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一活动炒货店活动方案
- 六一活动点赞活动方案
- 六一活动线上活动方案
- 六一活动赠礼活动方案
- 六一游园益智活动方案
- 六一甜品屋活动方案
- 六一绘画比赛活动方案
- 六一节活动农场活动方案
- 六一话童年活动方案
- 六一野餐活动方案
- 下沉式广场结构施工方案
- 《加坡的教育制度》课件
- Windows操作系统及应用期末测试试题及答案
- 《交通事故车辆及财物损失价格鉴证评估技术规范》
- 北师大版二年级数学下册各单元测试卷
- 【MOOC】外国文学经典导读-西北大学 中国大学慕课MOOC答案
- 医院供电合同
- 2023水电工程费用构成及概(估)算费用标准
- Unit2 Bridging Cultures Discovering useful structures 课件英语人教版(2019)选择性必修第二册
- 《土地复垦介绍》课件
- 天然气管道安装施工组织方案
评论
0/150
提交评论