移动基站远程监控系统(数据库课程设计).doc_第1页
移动基站远程监控系统(数据库课程设计).doc_第2页
移动基站远程监控系统(数据库课程设计).doc_第3页
移动基站远程监控系统(数据库课程设计).doc_第4页
移动基站远程监控系统(数据库课程设计).doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号: 课 程 设 计题 目移动基站远程监控系统教 学 院计算机学院专 业计算机科学与技术班 级姓 名指导教师2008年3月1日目 录一 概述1二 总体方案设计3三 详细设计7四 程序的调试与运行结果说明22五 课程设计总结25参考文献26一 概述1课程设计的目的数据库是计算机学科中的一门很重要的基础课程,而且数据库设计是一门应用性很强的学科,在学习时必须使理论与实践相结合。数据库课程设计是计算机科学与技术专业集中实践性环节之一,是学习完数据库系统概论课程后进行的一次全面的综合练习。通过本次课程设计要达到以下几个目的:1加深学生对数据库基础理论和基本知识的理解,掌握数据库应用系统设计开发的基本方法,达到进一步使学生综合运用所学知识和增强实际动手能力的目的。2通过实践使同学们经历到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。3用所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。4. 通过设计培养对工作认真负责、一丝不苟的态度,对组员团结互助,协作攻关的团队精神。5. 培养从资料文献、科学实验中获得知识并解决问题的能力。培养运用理论去分析及处理问题的能力、实践动手能力、书面及口头表达能力。2课程设计的要求课程设计最主要的要求是在综合应用平时所学知识的基础上,独立设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。其详细要求如下:1由6名组员组成设计小组,小组成员分工协作完成。每人有自己相对独立的模块,同时要了解其他组员完成的内容。2. 通过查阅相关资料,丰富自己的相关知识,解决相应的问题。3. 所设计的应用系统要准确无误,符合数据库设计的要求,能够详细的分析该系统,演示出运行流程,并能按老师的要求做出相应的改进。4本次课程设计的实际内容是构建一个移动基站远程管理系统。以解决随着移动基站数量的增多,移动基站的无人值守非常必要。所以要构建一个数据库系统来收集各个基站的各种信息传输到控制台,计算机远程监控能同时对多个基站进行实时监控。通过采集基站的内部温度、外部温度、湿度、蓄电池电压和是否断电等影响基站正常工作的因素的数据形成一个数据库,管理人员可以根据这些数据来判断基站的工作是否正常。一旦出现异常情况管理人员就可以通知维护人员对基站进行及时的修理避免造成更大的损失。另外,也可以通过软件的方法来判断基站的状态,并在基站异常时报警通知管理人员。这样不仅可以减少管理员的工作量,也可以避免人工判断失误等情况的发生。从而大大地降低了移动基站的维护费用,确保了基站设备的可靠性和安全性。二 总体方案设计本次数据库课程设计是以sql server2000数据库作为后台以vb作为前台的应用型设计课程。我们要做的是移动基站系统,这个软件的基本功能是接收移动基站(下位机)传送的各种数据并且将这些数据在控制中心的pc机(上位机)上显示出来,从而达到监控各个移动基站的目的。下面是具体要求:(1)使用vb编写;(2)程序安装后直接生成快捷方式;(3)双击快捷图标后进入该程序。程序界面标题为:“移动基站远程监控系统”,背景可以选取一张淡颜色的照片。界面中下部有一对话框,要求输入“用户名”和“密码”。(4)正确输入用户名和密码后,即可进入主界面。(5)“参数设置”菜单中包含“逐个设置”和“统一设置”两个选项。单击“参数设置”命令后,选择“逐个设置”和“统一设置”此时可以对“设定温度”进行更改。选择“统一设置”时,单击“基站编号”旁边的“下一个”和“上一个”按钮,可以将基站编号顺序增加或减少一个数字。选择“逐个设置”时在“基站编号”栏显示“全部”,更改设定温度后,单击设定温度右侧的“ok”按钮,返回主界面。(6)“系统设置”菜单中有“添加用户”、“更改密码”、“添加基站”选项。(7)“显示方式”菜单中有“全部循环显示”、“仅显示异常基站”、“循环显示间隔时间”、“显示时间”三个选项。选择“全部循环显示”时,根据设置的“循环显示间隔时间”,按照基站编号顺序,循环显示每个基站的状况;选择“仅显示异常基站”时,根据设置的“循环显示间隔时间”,循环显示异常基站的状况;(8)执行“异常检测”命令后,系统随时统计出现异常情况的基站的数量,并循环显示所有异常基站的状况。(9)所有基站的参数通过一个文本文件输入,改变文本文件的值,将改变基站的参数。(10)根据编程过程中出现的情况,自行决定菜单及界面的组织安排,只要能够演示就行了。系统设计:1. 系统功能设计移动基站远程监控系统主要实现移动基站的集中监控以及异常报警等功能,该系统主要功能模块图如图3.1所示。移动基站远程监控系统基站管理显示方式设置数据统计功能用户管理添加基站删除基站修改基站循环显示基站显示异常基站异常基站数用户登录用户注册图2.1 移动基站远程监控系统功能模块图(1) 基站管理基站基站对象基本信息以及安全设定数据。基站管理能够添加在基站表中添加或删除一个基站和修改基站现有数据。(2) 显示即监控方式设定根据用户需要可以循环显示所有基站并能自行设定循环间隔时间,还能只显示异常基站。(3) 数据统计统计异常基站的数目。(4) 用户管理包括用户注册和用户登录认证。这里用户注册时指软件安装在任何一台机器上,程序会根据计算机物理设备编号(如硬盘号或网卡物理地址等)计算出一个唯一的机器码,然后机器码通过统一的数据变换生成注册码,变换方法根据加密的要求而采用不同的算法,达到软件加密的目的。用户只有正确的提供了机器码和注册码才能登入到软件系统。2.数据库设计(1) 数据库概念结构设计根据上面的设计,所涉及的数据只有基站的设定信息和基站的实时信息。它们分别可以为一个实体:基站和基站当前状态,分别如图3.2和图3.3所示基站基站编号基站名称电池电压安全温度内部湿度外部湿度停电异常图2.2 基站实体基站基站编号基站名称电池电压安全温度内部湿度外部湿度停电图2.3 异常基站实体用户用户id用户密码用户描述 图2.4 用户信息实体(2) 数据库逻辑结构设计现在需要将上面的数据库概念结构转化为sql server2000数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在上面的实体基础上,形成数据库中的表。移动基站远程监控系统数据库中的各个表的设计如表2.1、表2.2和表2.3所示。每个表表示在数据库中的一个数据表表2.1 base_info基站信息表2.2 abnormal_info异常基站表2.3 user_info用户信息三 详细设计1.数据库的建立与设计:通过sql server的企业管理器可以十分容易的建立后台数据库。2vb界面的建立设计以及程序的编写说明:vb 是在windows操作平台下,用于开发和创建具有图形用户界面的应用程序的强有力工具之一。vb为开发windows应用程序不仅提供了全新的相对简单的方式,而且也引进了新的程序设计方法面向对象的设计方法(00p)。从传统的面向过程的程序设计,转移到更先进的面向对象的程序设计,无论是对老的程序员,还是初学者,都是一个挑战。而学习vb,则是掌握这一新的程序设计方法的一条捷径。(1).界面的设计和程序的编写:frmlogin 用于登陆此系统的登录界面frmmain 是主窗体,在这上面建立相应的菜单主界面如:系统设置添加用户(frmadduser)、删除用户(frmdeluser)、更改密码(frmmodipwd)、添加基站(frmaddbase)、报警值(frmalarmtime)显示方式全部循环显示、仅显示异常基站、循环显示间隔时间(frminterval)、显示时间(frmtime)关于(frmabout)主界面代码: dim txtsql as string dim mrc as adodb.recordset dim msgtext as string dim rcount as integer dim abcont as integer dim flag as integerprivate sub abnormity_click() dim txtsql1 as string dim mrc1 as adodb.recordset dim msgtext1 as string txtsql = select * from base_info set mrc = executesql(txtsql, msgtext) txtsql1 = select * from abnormal_info set mrc1 = executesql(txtsql1, msgtext1) if mrc.eof = true then msgbox 日前没有移动基站的数据,无导常情况!, vbokonly + vbexclamation, 警告 else for i = 0 to mrc.recordcount - 1 if trim(mrc.fields(2) = then mrc.fields(2) = 0 end if if (val(mrc.fields(2) 35 and ht hts) = true then mrc.fields(7) = 是 mrc.update do while (mrc1.eof = false) if trim(mrc1.fields(0) = trim(mrc.fields(0) then flag = 1 exit do end if mrc1.movenext loop if flag 1 then mrc1.addnew mrc1.fields(0) = mrc.fields(0) mrc1.fields(1) = mrc.fields(1) mrc1.fields(2) = mrc.fields(2) mrc1.fields(3) = mrc.fields(3) mrc1.fields(4) = mrc.fields(4) mrc1.fields(5) = mrc.fields(5) mrc1.fields(6) = mrc.fields(6) mrc1.update else flag = 0 end if goto kk end if if trim(mrc.fields(5) = then mrc.fields(5) = 0 end if if (lv lvs and val(mrc.fields(5) = 18) = true then mrc.fields(7) = 是 mrc.update do while (mrc1.eof = false) if trim(mrc1.fields(0) = trim(mrc.fields(0) then flag = 1 exit do end if mrc1.movenext loop if flag 1 then mrc1.addnew mrc1.fields(0) = mrc.fields(0) mrc1.fields(1) = mrc.fields(1) mrc1.fields(2) = mrc.fields(2) mrc1.fields(3) = mrc.fields(3) mrc1.fields(4) = mrc.fields(4) mrc1.fields(5) = mrc.fields(5) mrc1.fields(6) = mrc.fields(6) mrc1.update else flag = 0 end if goto kk end if if trim(mrc.fields(6) = then mrc.fields(6) = 0 end if if (st sts and trim(mrc.fields(6) = trim(1) = true then mrc.fields(7) = 是 mrc.update do while (mrc1.eof = false) if trim(mrc1.fields(0) = trim(mrc.fields(0) then flag = 1 exit do end if mrc1.movenext loop if flag 1 then mrc1.addnew mrc1.fields(0) = mrc.fields(0) mrc1.fields(1) = mrc.fields(1) mrc1.fields(2) = mrc.fields(2) mrc1.fields(3) = mrc.fields(3) mrc1.fields(4) = mrc.fields(4) mrc1.fields(5) = mrc.fields(5) mrc1.fields(6) = mrc.fields(6) mrc1.update else flag = 0 end if goto kk end if if trim(mrc.fields(4) = then mrc.fields(4) = 0 end if if (val(mrc.fields(4) 80) = true then mrc.fields(7) = 是 mrc.update do while (mrc1.eof = false) if trim(mrc1.fields(0) = trim(mrc.fields(0) then flag = 1 exit do end if mrc1.movenext loop if flag 1 then mrc1.addnew mrc1.fields(0) = mrc.fields(0) mrc1.fields(1) = mrc.fields(1) mrc1.fields(2) = mrc.fields(2) mrc1.fields(3) = mrc.fields(3) mrc1.fields(4) = mrc.fields(4) mrc1.fields(5) = mrc.fields(5) mrc1.fields(6) = mrc.fields(6) mrc1.update else flag = 0 end if goto kk end if mrc.fields(7) = 否kk: mrc.movenext next i mrc.movefirst for i = 0 to mrc.recordcount - 1 if trim(mrc.fields(7) = 是 then abcount = abcount + 1 end if mrc.movenext next i end if frmmain.abnormalsum.text = str(abcount) msgbox 异常检测完成,请到“异常显示”菜单项中查看各异常记录!, vbokonly + vbexclamation, 添加用户end subprivate sub about_click()frmabout.showend subprivate sub addbaseweb_click() frmaddbase.left = frmaddbase.left + 4000 frmaddbase.top = frmaddbase.top + 4000 frmaddbase.show end subprivate sub alarmtime_click()frmalarmtime.showfrmalarmtime.left = frmalarmtime.left + 3500frmalarmtime.top = frmalarmtime.top + 3500end subprivate sub allcysshow_click() txtsql = select * from base_info set mrc = executesql(txtsql, msgtext) if mrc.eof = true then msgbox 日前没有移动基站的数据,无法循环显示!, vbokonly + vbexclamation, 警告 else timer2.enabled = true end if end subprivate sub coditionshow_click() txtsql = select * from abnormal_info set mrc = executesql(txtsql, msgtext) if mrc.eof = true then msgbox 日前没有异常移动基站的数据,无法循环显示!, vbokonly + vbexclamation, 警告 else timer3.enabled = true end ifend subprivate sub cycinteral_click()frminterval.showend subprivate sub exit_click()endend subprivate sub form_load()timer1.enabled = true ok.visible = false last.visible = false next1.visible = false yesok.visible = false label14.visible = false label15.visible = false label16.visible = false label17.visible = false if username = admin then menusystem.enabled = true else menusystem.enabled = false end if txtdata.text = date txtime.text = time txtsql = select * from base_info set mrc = executesql(txtsql, msgtext) end subprivate sub last_click() mrc.moveprevious if mrc.bof = false then txtbaseno.text = mrc.fields(0) if mrc.fields(1) then txtbasename.text = mrc.fields(1) else txtbasename.text = end if if mrc.fields(2) then txtintemperature.text = mrc.fields(2) else txtintemperature.text = end if if mrc.fields(3) then txtoutemperature.text = mrc.fields(3) else txtoutemperature.text = end if if mrc.fields(4) then txthumidity.text = mrc.fields(4) else txthumidity.text = end if if mrc.fields(5) then txtvoltage.text = mrc.fields(5) else txtvoltage.text = end if next1.enabled = true else mrc.movefirst next1.enabled = true last.enabled = false end ifend subprivate sub menuadduser_click() gintmode = 1 frmadduser.show frmadduser.zorder 0end subprivate sub menudeluser_click()gintmode = 1 frmdeluser.show frmdeluser.zorder 0end subprivate sub menuexit_click()endend subprivate sub menumodifypwd_click() gintmode = 1 frmmodipwd.show frmmodipwd.zorder 0end subprivate sub next1_click() mrc.movenext if mrc.eof = false then txtbaseno.text = mrc.fields(0) if mrc.fields(1) then txtbasename.text = mrc.fields(1) else txtbasename.text = end if if mrc.fields(2) then txtintemperature.text = mrc.fields(2) else txtintemperature.text = end if if mrc.fields(3) then txtoutemperature.text = mrc.fields(3) else txtoutemperature.text = end if if mrc.fields(4) then txthumidity.text = mrc.fields(4) else txthumidity.text = end if if mrc.fields(5) then txtvoltage.text = mrc.fields(5) else txtvoltage.text = end if last.enabled = true else mrc.movelast next1.enabled = false last.enabled = true end ifend subprivate sub ok_click()sdemperature = val(txtstemperature.text)ok.visible = falseabnormity.enabled = trueend subprivate sub onebyone_click()ok.visible = truelast.visible = truenext1.visible = trueyesok.visible = truetxtsql = select * from base_info order by 基站编号set mrc = executesql(txtsql, msgtext)txtbaseno.enabled = falsetxtbasename.enabled = truetxtintemperature.enabled = truetxtoutemperature.enabled = truetxthumidity.enabled = truetxtvoltage.enabled = trueend subprivate sub text7_change()end subprivate sub showtime_click()frmtime.showfrmtime.timer1.enabled = truefrmtime.left = frmtime.left + 3500frmtime.top = frmtime.top + 3500end subprivate sub timer1_timer()if mrc.eof true and mrc.bof true thentxtime.text = timeh2 = hour(time)m2 = minute(time)s2 = second(time)if s2 = s1 then s3 = s2 - s1 if m2 = m1 then m3 = m2 - m1 h3 = h2 - h1 else m3 = 60 + m2 - m1 h3 = h2 - h1 - 1 end ifelse s3 = 60 + s2 - s1 if m2 = (m1 - 1) then m3 = m2 - m1 - 1 h3 = h2 - h1 else m3 = 60 + m2 - m1 h3 = h2 - h1 - 1 end ifend ifif val(txtintemperature.text) 35 thentxthigher.text = str(h3) + 时 + str(m3) + 分 + str(s3) + 秒ht = h3 * 60 + m3 + s3 / 60elsetxthigher.text = 0时0分0秒ht = 0end ifif trim(mrc.fields(6) = trim(1) thentxtstop.text = str(h3) + 时 + str(m3) + 分 + str(s3) + 秒st = h3 * 60 + m3 + s3 / 60elsetxtstop.text = 0时0分0秒st = 0end ifif val(txtvoltage.text) hts then if flag = 0 then label14.visible = true label14.forecolor = 255 flag = 1 else label14.visible = false label14.forecolor = 0 flag = 0 end if else label14.visible = false end if if st sts then if flag = 0 then label15.visible = true label15.forecolor = 255 flag = 1 else label15.visible = false label15.forecolor = 0 flag = 0 end if else label15.visible = false end if if lv lvs then if flag = 0 then label16.visible = true label16.forecolor = 255 flag = 1 else label16.visible = false label16.forecolor = 0 flag = 0 end if else label16.visible = false end if if val(txthumidity.text) 80 then if flag = 0 then label17.visible = true label17.forecolor = 255 flag = 1 else label17.visible = false label17.forecolor = 0 flag = 0 end if else label17.visible = false end if end if end subprivate sub timer2_timer()if mrc.eof = false and mrc.bof = false then txtbaseno.text = mrc.fields(0) txtbasename.text = mrc.fields(1) if mrc.fields(2) then txtintemperature.text = mrc.fields(2) else txtintemperature.text = end if if mrc.fields(3) then txtoutemperature.text = mrc.fields(3) else txtintemperature.text = end if if mrc.fields(4) then txthumidity.text = mrc.fields(4) else txtintemperature.text = end if if mrc.fields(5) then txtvoltage.text = mrc.fields(5) else txtintemperature.text = end if mrc.movenext rcount = rcount + 1 if rcount = mrc.recordcount then nmsg = msgbox(是否还想继续循环显示?, vbyesno, 提示) if nmsg = vbyes then mrc.movefirst rcount = 0 else timer2.enabled = false exit sub end if end if elseexit subend ifend subprivate sub updatepsw_click()form3.showform3.label2 = 旧密码:form3.label3 = 新密码:flag1 = 2end subprivate sub timer3_timer()if mrc.eof true and mrc.bof true then txtbaseno.text = mrc.fields(0) txtbasename.text = mrc.fields(1) if mrc.fields(2) then txtintemperature.text = mrc.fields(2) else txtintemperature.text = end if if mrc.fields(3) then txtoutemperature.text = mrc.fields(3) else txtintemperature.text = end if if mrc.fields(4) then txthumidity.text = mrc.fields(4) else txtintemperature.text = end if if mrc.fields(5) then txtvoltage.text = mrc.fields(5) else txtintemperature.text = end if mrc.movenext rcount = rcount + 1 if rcount = mrc.recordcount then nmsg = msgbox(是否还想继续循环显示?, vbyesno, 提示) if nmsg = vbyes then mrc.movefirst rcount = 0 else timer3.enabled = false exit sub end if end ifend ifend subprivate sub together_click()frmsearch.showunload meend subprivate sub yesok_click() dim txtsql as string dim mrc as adodb.recordset dim msgtext as string txtsql = select * from base_info where 基站编号 = & txtbaseno.text & set mrc = executesql(txtsql, msgtext)mrc.fields(0) = txtbaseno.textmrc.fields(1) = txtbasename.textmrc.fields(2) = txtintemperature.textmrc.fields(3) = txtoutemperature.textmrc.fields(4) = txthumidity.textmrc.fields(5) = txtvoltage.textmrc.updatemsgbox 修改基站信息成功!, vbokonly + vbexclamation, 警告mrc.clo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论