农历公历转换.docx
《农历公历转换.docx》由会员分享,可在线阅读,更多相关《农历公历转换.docx(45页珍藏版)》请在冰豆网上搜索。
农历公历转换
目录
摘要
关键字
前言
第一章VB语言概述
1.1、VB简介
1.2、VB语言的基本特点及VB应用程序的基本持点
1.3、为何我选择VB作为开发语言
1.4、VB6.0应用的基本开发方法
第二章用VB开发多功能日历程序
2.1、本程序运行界面简介
2.2、本程序部分控件的设置
2.3、主程序部分代码
第三章毕业设计总结
第四章主要参考文献
附录
摘要:
在日常生活和工作中经常有人用到农历和公历的查询问题。
因此,我借这次毕业设计之机,在辅导老师的指导下,编写了一个可以在VB6下正常运行的日历、计算器多功能应用程序,编程的思路是:
先把公、农历的数据用数组查询设置好,再通过算法转换成具体应用。
程序应用了不规则窗体技术,使得窗体比较美观。
单击属相标志可以退出程序。
单击时钟数字将返回到今天。
单击查询控制面板开关将向下拉出查询控制面板。
.
关键字:
农历公历转换及计算器、查询控制面板、VB6。
多功能电子日历的开发
前言
电脑已经成为挂在我们嘴角的一句口头禅,它已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。
Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。
然而,虽然现在世界上已经充满了多如牛毛的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。
以前开发Windows下软件是专业人员的工作,需要掌握许多专业知识和经过特殊的培训才能胜任。
现在不同了,即使你没有接受过严格的程序设计训练,使用VisualBasic也一样能够开发出功能强大、适合自己特殊需求的应用程序了。
VisualBasic继承了Basic语言易学易用的特点,特别适合于初学者学习Windows系统编程。
我作为一名中央电大的学生,对从事计算机操作和编程工作有着特殊的爱好,在工作和学习之余,我时常钻研专业课基础理论,经常用VB搞一些小程序,在工作中经常有人问到农历和公历的查询问题。
网页上有一些这方面的介绍,但是关于VB方面的编程资料却比较少。
因此,借这次毕业设计之机,我编写了一个可以在VB6下正常运行的日历、计算器多功能应用程序,欢迎各位老师提出批评改进意见。
第一章VB语言概述
一、VB简介
VB是微软公司出品的一个快速可视化程序开发工具软件,借助微软在操作系统和办公软件的垄断地位,VB在短短的几年内风靡全球。
VB是极有和功能强大的软件,主要表现在:
所见即所得的界面设计,基于对象的设计方法,极短的软件开发周期,较易维护的生成代码。
美国微软公司在1991年推出VB1.0至今已经经历了6个版本,VB6.0运行在win9x或winme,win2000,winxp,windowsNT等操作系统下,是一个32位的应用程序开发工具。
二、VB语言的基本特点及VB应用程序的基本持点
VB程序语言具有许多优秀的特性,用其设计应用程序时有两个基本特点:
可视化设计和事件驱动编程.
1、可视化设计
同其他的一些可视化程序开发工具一样,VB具有可视化设计的特点,微软的Word在刚刚进入市场时,同WPS竞争的一个重要的功能砝码就是"所见即所得"的字处理功能,VB在设计应用程序界面时也可以说是"所见即所得".在设计时,头脑中所想象的应用程序界面,完全可以通过键盘鼠标以及徒手画出来,而不是编制大量的代码然后再编译生成,如果需要修改,也是利用键盘鼠标和手画,而底层的一些程序代码由VB自动生成或修改。
VB为用户提供大量的界面元素(在VB中称为控件对象),这些控件对象对于熟悉Windows应用程序的用户而言是一点也不陌生,如"窗体"、"菜单"、"命令按钮"、"工具按钮"、"检查框"等等,用户只需要利用鼠标、键盘把这些控件对象拖动到适当的位置,设置它们的大小、形状、属性等,就可以设计出所需的应用程序界面。
2事件驱动编程
Windows操作系统出现以来,图形化的用户界面和多任务多进程的应用程序要求程序设计不能是单一性的,在使用VB设计应用程序时,必须首先确定应用程序如何同用户进行交互.例如发生鼠标单击、键盘输入等事件时,由用户编写的代码控制这些事件的响应,这就是所谓的事件驱动编程。
前面已经谈到,在VB中把窗体以及"菜单"、"按钮"等控件称为对象,如果设计出了应用程序,那么与应用程序的用户直接进行交互的就是这些对象组成的图形界面,也称为用户接口或用户界面,在设计应用程序时就必须考虑到用户如何与程序进行交户.更进一步,甚至程序和程序之间也会有通讯和交户,基本上用户是通过鼠标、键盘与应用程序进行交互的,这时那些对象就必须对鼠标和键盘操作所引发的事件做出响应.响应就是指执行一段应用程序,它不沿预定的路径执行,而是在响应不同事件时执行不同的代码.因此,应用程序代码的路径在每次响应而执行时可能都是不形同的。
三、为何选择VB作为开发语言
除了VB之外,当前能够编制Windows应用程序的可视化编程工具还有很多,所针对的编程领域也各有侧重,就微软系列的可视化开发工具而言,就有VB,VisualC++,VisualJ++,VisualFoxpro等,其中VisualFoxpro是针对数据库编程的开发工具;VisualC++是为专业程序设计员提供的开发工具,变量声明和定义严密,功能强大灵活,必须经过相当的努力才能掌握;而VB不支持虚类、多态性和类的继承,相对而言VB简单易学,变量定义不太严密,对于非专业程序员而言功能足够强大,同VisualC++一样也支持网络编程和数据库编程。
除了微软之外,其他公司也在为Windows操作系统平台制作应用程序开发工具,例如前Borland的公司出品的Delphi,C++Bulider,J++Bulider等,其他一些公司出品的针对数据库编程的PowerBulider,PowerDesigner等,不可否认,这些产品相当出色,如果能够熟练掌握将是编程者能力的体现,但是必须承认,对Windows操作系统最熟悉的还是微软,而且微软本身Windows操作系统的源代码采取不公开的策略,使得其他公司出品的产品在实现相同功能时多少都要走些弯路,用户在使用这些产品设计应用程序时,程序的效率将会受到影响。
在选择所需要的应用程序开发工具时,不但要考虑开发工具的功能是否强大,还要考虑所花费的时间和效果,单纯地追求功能的强大,也许会事倍功半。
中央电大陈明主编的《VisualBasic程序设计》是计算机应用专业采用的一本难得的教材,使我受益匪浅。
通过这门课程的学习,我已能用VB编写简单的程序,为了搞好这次毕业设计,我决定使用VB作为编程语言。
四、VB6.0应用的基本开发方法
1、交互式开发
传统的应用程序开发过程可以分为三个明显的步骤:
编码、编译和测试。
但是VB与传统的语言不同,它使用交互式方法开发应用程序,使三个步骤之间不再有明显的界限。
在大多数语言里,如果编写代码时发生了错误,则在开始编译应用程序时该错误就会被编译器捕获。
此时必须查找并改正该错误,然后再次进行编译,对每一个发现的错误都要重复这样的过程。
VB在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。
看起来就像一位专家在监视代码的输入。
除即时捕获错误以外,VB也在输入代码时部分地编译该代码。
当准备运行和测试应用程序时,只需极短时间即可完成编译。
如果编译器发现了错误、则将错误突出显示于代码中。
这时可以更正错误并继续编译、而不需从头开始。
由于VB的交互特性,因此在开发应用程序时,系统频繁地运行着应用程序。
通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后。
第二章用VB开发多功能日历程序
一、本程序运行界面简介
编程的主导思想是:
先把公、农历的数据用数组查询设置好,再通过算法转换成具体应用。
程序的运行界面见图1,
图1
程序应用了不规则窗体技术,使得窗体比较美观。
单击属相标志可以退出程序。
单击时钟数字将返回到今天。
单击计算器面板开关将向下拉出计算器面板,单击查询控制面板开关将向下拉出查询控制面板,见图2。
图2
二、本程序部分控件的设置
三、主程序部分代码:
OptionExplicit
'***************************************
'拖动无标题窗体
ConstHTCAPTION=2
ConstWM_NCLBUTTONDOWN=&HA1
PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsLong)AsLong
'=============================================================================
PrivateDeclareFunctionGetObjectAPILib"gdi32"Alias"GetObjectA"(ByValhObjectAsLong,ByValnCountAsLong,lpObjectAsAny)AsLong
PrivateDeclareFunctionDeleteObjectLib"gdi32"(ByValhObjectAsLong)AsLong
PrivateDeclareFunctionSetWindowRgnLib"user32"(ByValhwndAsLong,ByValhRgnAsLong,ByValbRedrawAsBoolean)AsLong
PrivateDeclareFunctionCreateRectRgnLib"gdi32"(ByValX1AsLong,ByValY1AsLong,ByValX2AsLong,ByValY2AsLong)AsLong
PrivateDeclareFunctionCombineRgnLib"gdi32"(ByValhDestRgnAsLong,ByValhSrcRgn1AsLong,ByValhSrcRgn2AsLong,ByValnCombineModeAsLong)AsLong
PrivateDeclareFunctionGetBitmapBitsLib"gdi32"(ByValhBitmapAsLong,ByValdwCountAsLong,lpBitsAsAny)AsLong
PrivateTypeBITMAP
bmTypeAsLong
bmWidthAsLong
bmHeightAsLong
bmWidthBytesAsLong
bmPlanesAsInteger
bmBitsPixelAsInteger
bmBitsAsLong
EndType
PrivateConstRGN_OR=2
DimbmByte()AsByte
'***************************************
'滚动字幕
PrivateDeclareFunctionDrawTextLib"user32"Alias"DrawTextA"(ByValhdcAsLong,ByVallpStrAsString,ByValnCountAsLong,lpRectAsRECT,ByValwFormatAsLong)AsLong
PrivateDeclareFunctionGetTickCountLib"kernel32"()AsLong
ConstDT_BOTTOMAsLong=&H8
ConstDT_CALCRECTAsLong=&H400
ConstDT_CENTERAsLong=&H1
ConstDT_EXPANDTABSAsLong=&H40
ConstDT_EXTERNALLEADINGAsLong=&H200
ConstDT_LEFTAsLong=&H0
ConstDT_NOCLIPAsLong=&H100
ConstDT_NOPREFIXAsLong=&H800
ConstDT_RIGHTAsLong=&H2
ConstDT_SINGLELINEAsLong=&H20
ConstDT_TABSTOPAsLong=&H80
ConstDT_TOPAsLong=&H0
ConstDT_VCENTERAsLong=&H4
ConstDT_WORDBREAKAsLong=&H10
PrivateTypeRECT
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType
ConstScrollTextAsString="1901-2049"&vbCrLf&_
"多功能电子日历"
'***********************************************
DimEndingFlagAsBoolean,jSAsInteger
DimeAsString
DimfAsString
DimgAsDouble
DimS_memAsDouble
DimopAsString
DimchkAsInteger
ConstPi=3.14159265358979
PrivateConstSWP_NOMOVE=2
PrivateConstSWP_NOSIZE=1
PrivateConstFLAGS=SWP_NOMOVEOrSWP_NOSIZE
PrivateConstHWND_TOPMOST=-1
PrivateConstHWND_NOTOPMOST=-2
DimflAgeAsBoolean,color_indexAsInteger,tiAoAsBoolean,jiSuanAsBoolean
Dims_mem_BAsBoolean,tipAsInteger,ziShiAsString
'**************************************************
'数字按下、松开
PrivateSubcmdNum_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P8,cmdNum(Index)
EndSub
PrivateSubcmdNum_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P9,cmdNum(Index)
EndSub
'**************************************************
'角度、弧度
PrivateSubcmdOp_1_Click(IndexAsInteger)
MPl.Play
SelectCaseIndex
Case0
Ifg=1Then
Ifop=""Then
e=Str((Val(e)*180/Pi))
txtDisp.Text=e
Else
f=Str((Val(e)*180/Pi))
txtDisp.Text=f
EndIf
chk=1
g=Pi/180
EndIf
ShowNumARGPt,wPw1(3),19
Case1
Ifg<>1Then
Ifop=""Then
e=Str((Val(e)*Pi/180))
txtDisp.Text=e
Else
f=Str((Val(e)*Pi/180))
txtDisp.Text=f
EndIf
chk=1
g=1
EndIf
ShowNumARGPt,wPw1(3),20
Case2
'g=1
ShowNumARGPt,wPw1(3),21
EndSelect
EndSub
PrivateSubcmdOp_1_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P9,cmdOp_1(Index)
EndSub
PrivateSubcmdOp_1_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P8,cmdOp_1(Index)
EndSub
'**************************************************
'单一功能键按下、松开
PrivateSubcmdops_MouseDown(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P8,cmdOps(Index)
EndSub
PrivateSubcmdops_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Show_bPicture5,P9,cmdOps(Index)
EndSub
'**************************************************
'单一功能键按下、松开
PrivateSubcmdOps_Click(IndexAsInteger)
DimsumAsDouble,iAsInteger
OnErrorGoToeh1
MPl.Play
SelectCaseIndex
Case0
e=Str(Sqr(Val(e)))
ShowNumFunPt,wPw1(3),10
Ji_suan
Case1
Ife<>0Then
e=-Val(txtDisp)
Else
e=0
EndIf
Ji_suan
Case2
e=Str(Sin(Val(e)*g))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case3
e=Str(Cos(Val(e)*g))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case4
e=Str(Tan(Val(e)*g))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case5
e=Str(Atn(Val(e)))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case6
e=Str(1/Sin(Val(e)*g))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case7
e=Str(1/Cos(Val(e)*g))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case8
e=Str(Exp(Val(e)))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case9
e=Str(Log(Val(e)))
ShowNumFunPt,wPw1(3),Index-1
Ji_suan
Case10
Randomize
Ifop=""Then
e=Str(9999999999#*Rnd)
txtDisp.Text=e
f=""
Else
f=Str(99999999*Rnd)
txtDisp.Text=f
EndIf
ShowNumFunPt,wPw1(3),Index-1
Case11
e=Str(1/Val(e))
Ji_suan
***第11-23种情况略****
Case24
Ifs_mem_B=FalseThen
Ifop=""Then
e=Str(S_mem)
txtDisp.Text=e
f=""
Else
f=Str(S_mem)
txtDisp.Text=f
EndIf
s_mem_B=True
Else
S_mem=0
s_mem_B=False
EndIf
EndSelect
ExitSub
eh1:
txtDisp.Text="-E-"
e=""
f=""
op=""
EndSub
PrivateSubcmdAC_Click()
MPl.Play
g=1
ShowNumFunPt,wPw2(3),1
ShowNumARGPt,wPw1(3),20
e=""
f=""
op=""
txtDisp.Text="0"
EndSub
PrivateSubcmdAC_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSi