基于visual basic瓦斯报警监控系统.docx
《基于visual basic瓦斯报警监控系统.docx》由会员分享,可在线阅读,更多相关《基于visual basic瓦斯报警监控系统.docx(18页珍藏版)》请在冰豆网上搜索。
基于visualbasic瓦斯报警监控系统
******大学课程设计
基于VB的瓦斯报警监控系统
单位
专业
学号
学生姓名
指导教师
完成日期2010年09月15日
摘要
计算机技术的发展促进了程序语言的发展,特别是面向对象程序设计语言的出现,极大的改进了传统的程序设计方法。
Visualbasic是一个功能强大的应用程序开发工具,它具有可视化的界面设计技术、面向对象的程序设计方法。
事件驱动的编程机制。
支持动态数据交换(DDE)技术和对象的链接与嵌入(OLE)技术,支持数据库的访问,支持多媒体和网络开发等特点。
VB的中心思想就是要便于程序员使用,无论是新手或者专家。
VB使用了可以简单建立应用程序的GUI系统,但是又可以开发相当复杂的程序。
VB的程序是一种基于窗体的可视化组件安排的联合,并且增加代码来指定组件的属性和方法。
因为默认的属性和方法已经有一部分定义在了组件内,所以程序员不用写多少代码就可以完成一个简单的程序。
近几年煤矿事件频发,而矿难多与瓦斯浓度过高有关,因此对煤矿瓦斯浓度的监控并采取必要措施避免矿难的发生已刻不容缓。
瓦斯报警监控系统是基于visualbasic语言的瓦斯浓度监控系统,它能有效监测瓦斯浓度并能够及时报警。
论文主要围绕visualbasic语言的体系结构,介绍了瓦斯监控系统的总体分析与设计,包括用户管理、功能模块分析、数据获取和数据库设计。
最后,利用datareport对报表打印进行了实现,并作了详细描述,主要采用图片与代码结合的方式详细地叙述了系统功能的实现。
关键词:
瓦斯监控系统,visualbasic,数据库,控件,datareport
目录
摘要2
1系统功能需求分析4
1.1系统概述4
1.2组成及各模块功能4
1.3运行环境4
2系统设计4
2.1设计思想4
2.2流程图4
3系统实现5
3.1源代码5
3.1.1用户登录5
3.1.2用户注册6
3.1.3用户密码修改6
3.1.4绘制实时动态曲线6
3.1.5datagrid控件和数据库6
3.2界面抓图和系统使用6
3.2.1开始界面6
3.2.2用户登录界面6
3.2.3用户注册界面6
3.2.4用户密码修改界面6
3.2.5动态数据曲线界面6
3.2.6采用datagrid控件显示数据6
3.2.7报表打印6
4总结6
5参考文献6
5.1《visualbasic程序设计》(第二版),王学军张玉梅中国铁道出版社6
5.2《VisualBasic6.0绘制实时曲线》,编程爱好者博客http:
//6
1系统功能需求分析
1.1系统概述
瓦斯监控系统基于visualbasic语言设计,是集数据提取,数据描绘,数据处理,数据实现于一体的监控瓦斯浓度的系统,并能实现瓦斯浓度超标报警的功能。
系统引入了vb的基本功能及模块,成功运用access数据库和datareport报表。
1.2组成及各模块功能
Access实现了数据的存储、提取功能,构成了该系统的核心部分,用户的管理和瓦斯浓度的监测都用到了该组件。
Vb庞大的控件和模块为该系统提供了支持,datareport实现了报表的打印,使得瓦斯浓度数据更加直观的展现并能够打印。
1.3运行环境
该系统既可以在visualbasic程序中运行,也可以转换成exe格式,能够在任意环境下不需安装运行。
2系统设计
2.1设计思想
近几年瓦斯事故频繁发生,而基于visualbasic语言能够实现瓦斯浓度的监控。
2.2流程图
瓦斯报警监控系统
用户管理
数据处理
数据库
用户删除
用户密码修改
用户登录
报表制作
实时曲线绘制
随即函数
监控报警
数据获取
数据打印
用户注册
3系统实现
3.1源代码
3.1.1用户登录
与数据库链接,实现了用户名和密码的验证登陆
DimtrytimesAsInteger
PrivateSubCommand1_Click()
IfText1.Text=""OrText2.Text=""Then
MsgBox"用户名或密码不能为空,请重新输入!
",vbOKOnly+vbExclamation,"警告"
Text1.SetFocus
Else
Adodc1.RecordSource="select*from用户表where用户名='"&Text1.Text&"'and密码='"&Text2.Text&"'"
Adodc1.Refresh
IfAdodc1.Recordset.EOF=TrueThen
MsgBox"用户名或密码输入错误,请重新输入!
",vbOKOnly+vbExclamation,"警告"
Text1.SelStart=0
Text1.SelLength=Len(Text1.Text)
Text1.SetFocus
trytimes=trytimes+1
Iftrytimes>=3Then
MsgBox"您已经三次尝试本系统,均不成功,系统将关闭",vbOKOnly+vbExclamation,"警告"
UnloadMe
EndIf
Else
Me.Hide
Form6.Show
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
End
EndSub
PrivateSubCommand3_Click()
Form2.Show
Form2.Text1.SetFocus
EndSub
PrivateSubCommand4_Click()
Me.Hide
Form3.Show
EndSub
PrivateSubTimer1_Timer()
EndSub
PrivateSubCommand5_Click()
Me.Hide
Form6.Show
EndSub
3.1.2用户注册
采用数据库实现了用户的注册
PrivateSubCommand1_Click()
IfText1.Text=""Then
MsgBox"请输入用户名!
",vbOKOnly+vbExclamation,"信息提示"
Text1.SetFocus
Else
Adodc1.RecordSource="select*from用户表where用户名='"&Text1.Text&"'"
Adodc1.Refresh
IfNotAdodc1.Recordset.EOFThen
MsgBox"用户名已存在,请重新输入用户名!
",vbOKOnly+vbExclamation,"信息提示"
Text1.SetFocus
Text1.Text="":
Text2.Text="":
Text3.Text=""
Else
IfText2.Text<>Text3.TextThen
MsgBox"两次输入密码不一样,请确认!
",vbOKOnly+vbExclamation,"警告"
Text2.SetFocus
Text2.Text="":
Text3.Text=""
Else
Adodc1.RecordSource="select*from用户表"
WithAdodc1.Recordset
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("用户名")=Text1.Text
Adodc1.Recordset.Fields("密码")=Text2.Text
Adodc1.Recordset.Update
Adodc1.Recordset.Close
EndWith
MsgBox"添加用户成功!
",vbOKOnly+vbExclamation,"添加用户"
Me.Hide
Form1.Show
EndIf
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
Me.Hide
Form1.Show
EndSub
3.1.3用户密码修改
数据库的应用实现了用户密码的修改
PrivateSubCommand1_Click()
IfText1.Text=""Then
MsgBox"请输入用户名!
",vbOKOnly+vbExclamation,"信息提示"
Text1.SetFocus
Else
Adodc1.RecordSource="select*from用户表where用户名='"&Text1.Text&"'and密码='"&Text2.Text&"'"
Adodc1.Refresh
IfAdodc1.Recordset.EOF=TrueThen
MsgBox"用户名或密码输入错误,请重新输入!
",vbOKOnly+vbExclamation,"警告"
Text1.SetFocus
Text1.Text="":
Text2.Text="":
Text3.Text="":
Text4.Text=""
Else
IfText3.Text<>Text4.TextThen
MsgBox"密码输入不正确,请确认",vbOKOnly+vbExclamation,"信息提示"
Text3.SetFocus
Text3.Text="":
Text4.Text=""
Else
Adodc1.RecordSource="select*from用户表where用户名='"&Text1.Text&"'"
Adodc1.Refresh
Adodc1.Recordset.Fields("密码")=Text3.Text
Adodc1.Recordset.Update
MsgBox"密码修改成功!
",vbOKOnly+vbExclamation,"密码修改"
Text1.Text="":
Text2.Text="":
Text3.Text="":
Text4.Text=""
Me.Hide
Form1.Show
EndIf
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()
Me.Hide
Form1.Show
EndSub
3.1.4绘制实时动态曲线
采用数据库,picturebox控件,line方法实现实时动态曲线的描绘,采用随机函数模拟瓦斯浓度
OptionExplicit
DimDataFromComAsInteger'从串口读过来的实时值
DimDataFromComLastAsInteger'上次的串口值
DimTimeCountAsInteger
DimaAsInteger'从串口读过来的实时值
DimbAsInteger'上次的串口值
DimcAsInteger
DimdAsInteger'从串口读过来的实时值
DimeAsInteger'上次的串口值
DimfAsInteger
PrivateSubPicScale(picXAsPictureBox)'调整图像框的坐标系
picX.Scale(0,picX.ScaleHeight)-(picX.ScaleWidth,-picX.ScaleHeight)
EndSub
PrivateSubPicMidleLine(picXAsPictureBox)'在图像框中画一条中线
picX.Line(0,0)-(picX.ScaleWidth,0),vbGreen'画出中线
EndSub
PrivateSubDrawRealLine(picXAsPictureBox,TIMECOUNTXAsInteger,DataFromComXAsInteger,DataFromComLastXAsInteger,axAsInteger,bxAsInteger,cxAsInteger,dxAsInteger,exAsInteger,fxAsInteger)
IfTIMECOUNTX>=0Then
picX.Line((TIMECOUNTX-1)*10,DataFromComLastX)-(TIMECOUNTX*10,DataFromComX),vbWhite
EndIf
Ifax>=0Then
picX.Line((ax-1)*10,cx)-(ax*10,bx),vbRed
EndIf
Ifdx>=0Then
picX.Line((dx-1)*10,fx)-(dx*10,ex),vbYellow
EndIf
EndSub
PrivateSubCommand1_Click()
UnloadMe
Form4.Show
EndSub
PrivateSubCommand2_Click()
UnloadMe
Form1.Show
endSub
PrivateSubPic_Click()
EndSub
PrivateSubTimer1_Timer()
DataFromComLast=DataFromCom
c=b
f=e
Randomize
DataFromCom=3000*Rnd+1000
Randomize
b=3000*Rnd+1000
Randomize
e=3000*Rnd+1000
IfDataFromCom>3900Then
MsgBox"一区瓦斯浓度超标,请采取措施",vbOKOnly,"警告"
EndIf
Ifb>3900Then
MsgBox"二区瓦斯浓度超标,请采取措施",vbOKOnly,"警告"
EndIf
Ife>3900Then
MsgBox"三区瓦斯浓度超标,请采取措施",vbOKOnly,"警告"
EndIf
a=a+5
d=d+5
TimeCount=TimeCount+5
DrawRealLinePic,TimeCount,DataFromCom,DataFromComLast,a,b,c,d,e,f'画出实时的曲线
EndSub
PrivateSubTimer2_Timer()
Label3.Caption=Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)
EndSub
PrivateSubTimer3_Timer()
Adodc1.RecordSource="select*from瓦斯浓度表where监测点='"&Text1.Text&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where时间='"&Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where瓦斯浓度='"&DataFromCom&"'”
Adodc1.Refresh
Adodc1.RecordSource="select*from瓦斯浓度表"
WithAdodc1.Recordset
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("时间")=Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)
Adodc1.Recordset.Fields("监测点")=Text1.Text
Adodc1.Recordset.Fields("瓦斯浓度")=DataFromCom
Adodc1.Recordset.Update
EndWith
EndSub
PrivateSubTimer4_Timer()
Adodc1.RecordSource="select*from瓦斯浓度表where监测点='"&Text2.Text&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where时间='"&Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where瓦斯浓度='"&b&"'"
Adodc1.Refresh
Adodc1.RecordSource="select*from瓦斯浓度表"
WithAdodc1.Recordset
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("时间")=Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)
Adodc1.Recordset.Fields("监测点")=Text2.Text
Adodc1.Recordset.Fields("瓦斯浓度")=b
Adodc1.Recordset.Update
EndWith
EndSub
PrivateSubTimer5_Timer()
Adodc1.RecordSource="select*from瓦斯浓度表where监测点='"&Text3.Text&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where时间='"&Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)&"'"
Adodc1.RecordSource="select*from瓦斯浓度表where瓦斯浓度='"&e&"'"
Adodc1.Refresh
Adodc1.RecordSource="select*from瓦斯浓度表"
WithAdodc1.Recordset
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("时间")=Hour(Now)&":
"&Minute(Now)&":
"&Second(Now)
Adodc1.Recordset.Fields("监测点")=Text3.Text
Adodc1.Recordset.Fields("瓦斯浓度")=e
Adodc1.Recordset.Update
EndWith
EndSub
3.1.5datagrid控件和数据库
PrivateSubCommand1_Click()
DataReport1.Show
EndSub
PrivateSubCommand2_Click()
Me.Hide
Form6.Show
EndSub
3.2界面抓图和系统使用
3.2.1开始界面
使用photoshop图片处理软件制作
3.2.2用户登录界面
登录界面由用户名、密码、登录按钮、退出按钮、注册按钮、修改密码按钮组成。
登录时写入用户名和密码单击登录按钮进行登录,修改密码和注册新用户直接按相应的按钮。
3.2.3用户注册界面
注册界面由用户名、密码、确认密码组成,注册用户是输入用户名和密码,确认密码和密码要相同,然后单击注册。
3.2.4用户密码修改界面
用户密码修改界面由用户名、原密码、密码、确认密码、确认键组成。
输入用户名和原来密码,再输入新密码,单击确认键。
3.2.5动态数据曲线界面
动态函数曲线界面由picturesbox控件、打印报表、返回键组成。
在picturesbox中以实时动态函数曲线的形式展示了瓦斯浓度。
独有的监控系统让使用者轻松发现瓦斯浓度超标情况,采取有效措施。
单击打印报表键能够实现瓦斯浓度数据的打印。
3.2.6采用datagrid控件显示数据
在瓦斯浓度表上清晰的显示出来各个监测点在各个时间的瓦斯浓度,为报表的打印做好了基础。
单击打印报表即可进行报表的打印。
3.2.7报表打印
datareport控件和dataenvironment控件的结合,实现报表打印,相应数据清晰显示。
关闭报表时只需关闭报表窗口即可。
4总结
选题时,瓦斯报警监控系统让我眼睛一亮,这是一个具有超级现实意义的系统,有很强的实用型,引起了我的兴趣,毫不犹豫的选择了它。
咋一接触,发现它并没有开始想象的让人心动,它的核心需要数据库知识,需要报表打印,这都是从来没有学过的,而最为困难的是实现数据已动态曲线形式体现。
我暗自为自己的选择后悔,但他的困难又激发了我征服她它的欲望,对他的的编程就如同是一条荆棘之路。
每一点都需要学习因为从未接触过数据库、报表、实时曲线,从头开始。
年前学弟基础也有部分遗忘,让我的编程难上加难。
让我一度不知所措、急躁不安。
前几天仅仅完成了用户的管理部分,后面的硬骨头毫无进展。
仅仅实时动态曲线的知识就让我查阅了两天。
初步学会了line方法和picturebox控件的使用。
我班的国伟一步一步脚踏实地地做,不会的就查书,在我之前就做好了用户管理的数据库,让我新生敬意,也让我很是惭愧,感觉自己太不用功了。
第一次阶段性检查,我做的不好,成绩不高,我暗下决心一定要努力做的尽可能完美,取得一个较好的成绩。
因此我采用了不同于其他两个同学的动态实时曲线。
15号下午,我完成了程序的设计,对自己的设计颇为满意。
很不幸,晚上我选的那台机器竟然有病毒,1k快捷方式病毒把我的文件都给变成快捷方式了。
我满怀信心的用1k快捷杀毒软件查杀了我的U盘,但是我的大部分文件都被删除了,设计的程序就在其中。
我顿时紧张起来,这可是我花了9天时间做的啊,最重要的是老师还要检查,而我第一阶段检查的成绩很差。
我尝试着在网络上查找一些可以恢复文件的方法,最终我用金山U盘专杀把我的文件给修复了,不过是下午之