1、山西大学继续教育学院毕业论文 目 录摘 要11.系统简介31.1开发目的和任务31.2系统功能31.3系统的特点41.4开发工具与运行环境52.系统规划62.1系统结构62. 2数据库结构72.3欢迎界面设计92.4主界面设置112.5技术核心143系统功能设计与实现153.1类、对象、控件153.2窗体与界面具体功能的实现164.测试与运行424.1程序的调试424.2添加测试代码434.3故障分析43结 束 语46参 考 文 献46 摘 要 机房管理系统是典型的计费管理系统,其开发主要包括后台数据库的建立和维护,以及前端应用程序的开发两个方面。对于前者要求建立起资料的一致性、完整性强和安全
2、性好的库,而对于后者则要求应用程序完备易使用。 经过如此分析,我们使用Microsoft公司的Visual FoxPro 6.0开发工具,利用其提供的各种面向对象的开发工具,开发一套能满足对用户上机时进行集中管理,又具有计时、收费于一体的多种费用计费方案,尤其是计费窗口这个能方便而简洁操作数据库的智能化对象。首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,是一套能满足网吧、企、事业单位上网计费和管理的综合管理系统。Visual FoxPro最大的特点就是易学、高效、功能强大,特别适用于中小型数据库的管理,因此它非常适合机房计费管理的开发。关键词:面向对象 可视
3、化 Visual FoxPro 控件机房管理系统开发21世纪,计算机将成为人类的常用现代工具,每一个有文化的人都应当了解计算机,学会使用计算机,并用此来处理面临的事务。学习计算机知识有两种不同的方法:另一种是侧重应用的学习,从实践入手,注重掌握其应用方法和技能特别是非专业的学生,应以应用为主要学习方向。在这种情况下,学校决定建立独立机房,以提供学生学习的机会。这个机房既可以满足学生掌握计算机基础知识,又可以满足学生上网下载资料,一举两得。然而,在运作过程中不可避免会遇到问题,首先是计费问题。机房的收入主要是上机费,它包括普通机和上网机。普通机是指不接入因特网的一般性上机学习,比如各种应用软件。
4、上网机是指从事网上活动,比如资料查询和图书浏览。所以计费在机房管理中起着决定作用。如果我们采用人工记时计费,与当今的计算机时代不符,而且既浪费了人力资源又增加了管理难度。而采用计算机自动计费是解决此问题最有效的方法。计算机自动计费具有及时、客观、安全和一目了然的特点,既方便又节约人力资源。机房计费系统是纯软件的解决方案,一次性投入少,易于维护。它采用图形界面,学习简单,操作方便。计费系统就是只凭软件实现对用户上机进行计时和收费的,只需通过一台主机就可以轻松管理和维护。1.系统简介1.1开发目的和任务 学校机房根据目前发展的需要,决定建立一个“机房管理系统”,以取代人工管理。开发目的如下;(1)
5、能对机房每台机的上机费用进行计算.(2)够计算出机房在这一时间段内的总收入.(3)维护员能够对系统进行管理和维护.(4)打印总体计费表和单机计费表. 开发目的主要是实现机房的计费管理和机房维护。机房管理者可以通过机房计费系统主界面,来获取机房任意一台计算机是否正在运行,或某一台计算机何时停止和运行。这一系统力求使管理者以方便快捷的途径去执行这些繁琐的工作。机房管理者可通过维护系统界面,来管理和维护机器,每一个管理者都必须凭借密码进入计费系统界面,这样有助于管理者独立工作,且不发生“经济纠纷”,也做到了高度安全,这样非工作人员就不能随便进入界面。机房的高级管理者通过另一个密码进入维护和统计界面,
6、他可以修改记录,增加和删除机位。增加或取消某个管理者的资格,这样就做到了层层管理,无懈可击。 1.2系统功能l 总体功能要求 用计算机进行全面现代化管理,主要包括计时、计费、维护等几个方面的功能,以实现管理者方便的计费、收费、清零等大量繁琐重要的工作。l 计费系统的基本功能1)计费 自动记录上机时间和下机时间,并据此计算总的上机时间。2)收费 根据总的上机时间和计费标准可以计算上机费用并通过累加求出全天总收入。3)查询 管理者随时可以查询任一台机器的状态或是有多少台机器在运行、多少台机器处于停止状态。4)打印 包括总体计费打印和单机计费打印,方便机房管理者和用户了解上机的情况。 l 维护系统的
7、基本功能1)记录维护 包括记录的增加、删除、修改、跳跃、保存。2)口令管理 操作员和维护员都必须凭借正确的口令进入操作界面,而维护员则可以进入修改界面进行操作员的增删或口令密码的修改。 1.3系统的特点 (1) 自动计时、计费,方便了用户的使用。 (2) 小巧、占用空间小,对CPU、内存等计算机资源消耗少。 (3) 稳定、可靠。两级权限的使用,使该软件安全,不易被随便改动。1.4开发工具与运行环境 开发工具是Visual FoxPro 6.0具体介绍如下: u Visual FoxPro总概述 Visual FoxPro 6.0是运行于Windows平台上的交互式的可视化集成环境,它是美国Mi
8、crosoft公司开发的32位面向对象的数据库开发系统。像其它可视化集成开发环境(如Visual C+、Delphi、Visual Basic)一样Visual FoxPro 6.0(为了方便,以下简称VFP)采用可视化的编程方式。用户借助菜单、按钮等标准界面元素和鼠标操作,可以方便地进行“所见即所得”式的设计工作,直接画出图形界面,免除了开发者的许多编程负担,VFP还提供了“向导”、“生成器”、“设计器”三种工具以及丰富的控件功能,是目前可视化程度比较高的开发工具。u 面向对象的编程 面向对象的程序设计方法的出现和广泛应用是计算机技术发展过程中的一项重大飞跃。它被广泛地应用在文件处理、操作系
9、统设计、多媒体技术、网络数据库开发等。VFP提供了真正的面向机向对象程序设计的能力。这种技术从根本上改变了以往设计软件的思维方式,不仅简化了设计,而且用户界面操作灵活,样式美观。u Active X控件 Active X控件也称OLE控件,OLE是Object Linking and Embedding(对象链接与嵌入)简写,顾名思义,就是把一个对象(Object)以链接或嵌入的方式包含在其他应用程序里。在Visual FoxPro 6.0的应用程序里,通过Active X控件,可以在自己的应用程序里使用其它的Windows应用程序,如:Word、Excel等。u 生成向导 在Visual F
10、oxPro中,查询向导、表单向导、报表向导等的使用,省去了编写程序代码的麻烦,简单明了的实现了许多所需功能。 运行环境为: 硬件环境: 50MHz以上处理器、16MB以上内存、一般需240MB硬盘空间 软件环境 :Windows 95以上的操作系统支持 2.系统规划2.1系统结构在设计时,按照实际要求把本系统划分为计费管理、记录查询、数据管理、增删操作员、修改密码、总费统计、计费标准、打印、退出等相互独立的功能模块,以实现对系统的控制,其系统结构框图如图所示:退 出欢迎界面 输入密码 主界面计费管理记录查询修改密码打印输入密码数据维护按机号查询按状态查询修改操作员密码修改维护员密码输入密码计费
11、标准输入密码总费统计输入密码增删用户增删操作员增删维护员2. 2数据库结构1).建立项目管理器在Visual FoxPro里,项目管理器是组织数据和对象的主要工具,它能容纳应用程序所需的全部文件,比如:数据库、表、表单等,并且具有编辑功能、添加、移去和编译功能,所以,在建数据库之前,先建立一个项目,以方便系统中所有内容的统一管理。2).建立数据库数据库系统是整个信息系统的基石,因此作为一个好的数据库,不仅要能够保存正确的信息,而且还要求能够提供快速的信息服务。数据库的设计包含两方面的内容:一是数据库结构的设计,二是数据库内表的设计,有时,根据系统的需要还要对数据库内的表进行关联。本系统数据库的
12、具体设计步骤如下:(1) 需求分析需求分析是整个数据库设计过程中的首要步骤,在需求分析阶段,应从各个方面即整个系统认真审查、收集、分析各条相关信息,以确定数据库要保存哪些信息。(2) 确定所需的表在机房管理系统中,所需的表主要有计费管理表、口令表和计费标准表。(3) 确定所需字段即确定每个表中要保存哪些信息。在表中,实体的信息称作一个字段,浏览时在表中显示为一列。例如:在计费管理表中,就应有这样的字段:机号、开始时间、结束时间、费用等。本系统中数据字段表如下:一、口令表字段数据类型宽度姓名字符型6口令字符型8二、计费管理表字段数据类型宽度机号字符型3状态字符型4开始时间日期时间型8结束时间日期
13、时间型8用时数值型4费用数值型7三、计费标准表字段数据类型宽度费用数值型6四、费用累加值表字段数据类型宽度机号字符型4累加值数值型102.3欢迎界面设计欢迎界面是软件的封面,要设计的美观大方,给人一种赏心悦目的感觉,其中包含了软件的名称、制作者等信息,同时还设计了进入本系统的用户和用户密码的输入位置。(1)新建一个窗体设定好窗体的大小和位置,为了修饰欢迎界面,为欢迎界面加入一个图片,其方法是,单击欢迎界面的Picture属性按钮,出现一个调用图像文件的对话框,在文件夹中选择一个准备好的位图格式的图像文件。欢迎界面的主要属性属性项目 属性设置内容Name Form1Caption (无)Show
14、Window 2 作为顶层WindowState 2 - 最大化WindowType 1 - 模式Picture 图片文件(2)为窗体添加用到的所有控件,包括Label控件、Timer、两个命令按钮、和ext,调整好各个控件的位置。(3)动画标签的制作为了修饰窗体的效果,我特别为它制作了一个动画标签“大同第一技工学校!”,该标签用Timer控件控制,在显示欢迎界面时,从右到左循环移动。其编程过程如下:IF THISFORM.Label6.lEFT 1 THEN THISFORM.Label6.LEFT = THISFORM.HEIGHT - 8ELSE THISFORM.Label6.LEFT
15、 = THISFORM.Label6.LEFT - 10ENDIF(4)Combo接受数据库中操作员表的数据,可以直接选择用户名。Text用于输入用户密码,两个命令按钮一个用于进入系统,一个用于退出系统,单击进入按钮时,会检查输入的用户密码是否正确,确认后可以进入系统,否则弹出“密码不正确,请重新输入”的对话框,要求重新输入用户名和密码。其编程过程如下:rivate syspassselect 操作员表syspass=allt(thisform.text1.Value)locate for allt(操作员)=allt(bo1.Value)if found() and Allt(操作员表.口令
16、)=syspass sysna=allt(操作员表.操作员) thisform.visible=.f. do form 主界面.scx *thisform.release else Messagebox(口令不正确!请重新输入) thisform.text1.SetFocus THISFORM.TEXT1.VALUE= endif2.4主界面设置 用户界面,作为软件的重要组成部分,其设置应使其具备如下特性:l 可使用性用户界面应能方便地处理各种经常进行的交互对话,问题的输入格式应当易于理解,附加的信息量少;自动化程度高,操作简便。l 可靠性用户界面应能保证用户正确、可靠的使用系统,保证有关程序
17、和数据的安全性。下面具体介绍系统的主界面的作法如下:新建一个窗体设定窗体的标题为Form1后,添加窗体中用到的所有控件工具,如Label控件、命令按钮组、命令按钮、Picturebox控件这四大类。主界面的主要属性属性项目 属性设置内容Caption (无)BorderStyle 3 可调边框ShowWindow 2 作为顶层WindowState 2 - 最大化WindowType 1 - 模式Picture 图片文件窗体控件的属性命令按钮组成从上到下依次为计费管理、记录查询、数据维护、修改密码、增删用户、总费统计、计费标准、打印。具体属性如下:命令按钮组的属性: Buttoncount 8
18、 Height 336 Width 135 Top 94 Left 40 Forecolor 0,0,160 Fontsize 16 Fontname 宋体标签1的属性: Caption 机房管理系统 Height 63 Width 504 Top 23 Left 132 Forecolor 162,51,163 Fontsize 42 Fontname 楷体图片的属性: Picture D:图库图片名 Height 303 Width 510 Top 94 Left 230 制作下一层表单 把每一个按钮作为一个功能,用程序控制鼠标的点击事件,使它们在鼠标点击时,可以进入下一层表单,完成具体的
19、功能。2.5技术核心 在对象程序设计中,Visual FoxPro 中有两个核心技术:类和对象。Visual FoxPro6.0允许创建多种不同的类,每一类型都有自己的特点.它分为基类、容器类、控件类。本系统设计中用到其中许多,例如,每个界面的表单就是一个基类,包括其中的命令按钮、标签控件,文本框件,而在查询模块中用到的页框控件、表格控件是属于容器类等等。 对象用属性、事件和方法来描述,它们均在类中定义。如在一个表单中有3个按钮分别为“确定”、“退出”、“查询”,我们可以通过定义它的属性来确定它的高度、颜色、式样。“事件”是预先定义的动作,由用户或系统激活,如按钮“被按下”事件,下拉菜单的选项
20、“被选取”事件。方法是指对象为完成一定功能而编写的一段代码。如果对象已创建,便可以在应用程序的任何一个地方调用这个对象的方法,事件通常已被预先由系统定义好,不能随便扩充,而方法和属性却可能无限的扩展。3系统功能设计与实现3.1类、对象、控件在对象程序设计中,有两个密切相关的概念:类和对象。“类”就是定义为一组具有相同数据和相似操作的对象的集合;或者说是具有相同属性和行为的一个或多个对象的描述。“对象”是反映客观事物属性及行为特征的描述。每个对象都具有描述其特征的属性及附属于它的行为。对象把事物的属性和行为封装在一起,是一个动态的概念。但类和对象是有区别的,类作为一个能者对象的整体而存在,类是对
21、象的蓝图和框架,它包含了对象的特征和行为。类可视为一个产品模具、一个模块。对象则可视为一个窗口、一个按钮、一个菜单、甚至是一个表单。类是对象的原型,类的概念是面向对象程序设计最重要的特征。控件也是一种对象,只是在应用中,为了使用的方便,将一些特殊的对象进行更严格的封将,它制成用以显示数据、执行操作的一种图形对象。例如,一些常用的面向对象语言的文本框、矩形或命令按钮等就是所谓的控件。 3.2窗体与界面具体功能的实现 3.2.1总体设计思想针对本机房管理系统的具体要求,设计时把整个系统分为以下几个模块:1) 计费管理模块2) 记录查询模块3) 数据管理模块4) 增删操作员模块5) 修改密码模块6)
22、 总费统计模块7) 计费标准模块8) 打印模块由于采用了模块化设计思想,大大提高了设计效率,而且最大限度地减少了不必要的错误。在实际操作中,本系统的基本思想是:保证计费系统的正确计费,以计费管理为主,并与费用累加值表以机号为索引建立关联,在此基础上计算出单机上机费用,并统计出总费显示在费用累加值表中。每天结束后可以清空内容,并且保存。另外为了提高系统的安全性和维护性,我们增加了口令模块和数据管理模块。只有口令正确才能进入,且不同的权限只能进入不同的区域。而数据管理模块可以随时对记录进行修改。为实现以上设计思想,首先要建立两表的关联,针对这些特点,我们可以用框图来表示:计费管理表机号索引费用累加
23、值主界面操作界面维护界面密码 1密码2 下面主要介绍计费管理模块、增删用户模块、查询模块、总费统计模块和计费标准各功能模块的设计:3.2.2计费管理模块 计费管理模块是机房管理系统中最重要的一部分,它可以对客户上机的用时、费用等情况做一自动记录,给机房管理者提供了不少方便。本模块主要通过三个命令按钮控件和一个表格控件来实现的,计时单位为小时。Label 1的主要属性如下: Caption 计费管理表单 Height 49 Width 270 Top 8 Left 264 Fontsize 32 Fontname 楷体开始计时功能添加Command1按钮 Caption 开始计时 Height
24、35 Width 90 Top 58 Left 166 Fontsize 12 Fontname 宋体Command1的 click事件代码如下:Replace 表3.状态with 运行,表3.时间with datatime停止计时功能添加Command 2按钮 Caption 停止计时 Height 35 Width 90 Top 58 Left 353 Fontsize 12 Fontname 宋体 Command 2的click事件代码如下: select 表4 goto 1 aa=表4.费用 select 表3 replace 表3.状态 with 停止,表3.结束时间 with da
25、tetime() a= hour(结束时间)-hour(开始时间) b= minute(结束时间)-minute(开始时间) replace 表3.用时 with a+b/60 replace 表3.费用 with (用时)*aa) replace 表6.费用累加值 with (表3.费用)+(表6.费用累加值) 停止计时按钮的一个重要功能即:点击此按钮,系统会把当前机位多次上机的费用累加,得到一个总值添加到总费统计模块窗口的费用累加值栏内,以供机房内部人员浏览。清零功能添加Command 3按钮 Caption 开始计时 Height 35 Width 90 Top 58 Left 538
26、Fontsize 12 Fontname 宋体 Command 3的click事件代码如下: if 状态=停止 replace 表3.状态 with ,表3.用时 with 0, 表3.费用 with 0,表3.开始时间 with null ,表3.结束时间 with null endif skip enddo点击此按钮,系统会将停止状态下计算机的所有记录全部清空,以便再次上机时,重新记录其上机情况。3.2.3数据维护模块此模块的主要功能是由内部维护人员对数据进行管理,我们在窗口中添加一个命令按钮组控件包括八个命令按钮来实现的,其Caption属性分别为 “首纪录”、“上一条”、“下一条”、
27、“末记录”、 “添加”、“删除” 、“保存”、“退出”来实现对数据的浏览、修改、添加及删除。 “首纪录” 的click事件代码如下:go topmand3.enabled=.t.thisform.refresh“上一条”的click事件代码如下:skip -1mand3.enabled=.t.if bof() messagebox(已是第一条记录!,48,信息窗口) mand2.enabled=.f.else mand2.enabled=.t.endifthisform.refresh“ 下一条”的click事件代码如下:select 表3skip if eof() messagebox(已是
28、最后一条记录!,48,信息窗口) skip -1 this.enabled=.f. else this.enabled=.t.endif mand2.enabled=.t.thisform.refresh()“末记录”的click事件代码如下:go bottommand2.enabled=.t.thisform.refresh“添加”、的click事件代码如下:select 表3append blankthisform.txt开始时间.value=Nullthisform.txt结束时间.value=Nullthisform.refresh“删除” 、的click事件代码如下:yn=messa
29、gebox(真要删掉吗?,4+48,警个告)if yn=6 delete set dele on if eof() go top else skip -1 endif messagebox(删除成功!)else endif thisform.refresh“保存”、的click事件代码如下:messagebox(增加记录成功!,48,信息窗口)thisform.refresh“退出” 的click事件代码如下:a=messagebox(是否真的要退出?,4+48,)if a=6 release thisformelse endif3.2.4记录查询模块添加一个Command1按钮 Captio
30、n 查 询 Height 37 Width 85 Top 68 Left 384 Fontsize 16 Fontname 宋体Command 1的click事件代码如下:Select * from 表3 where 机号(状态)=thisform.pageframe1.page1.text1. value into cursor kkk thisform.pageframe1.page1.grid1.recordsource=kkk thisform.pageframe1.page1.grid1.refresh添加1个页框控件 Height 300 Width 564 Top 58 Left
31、 31 Pagecount 2页框第1页的属性 Caption 按机号查询 Backcolor 64,128,128 Forecolor 0,0,0 Fontsize 14 Fontname 宋体页框第2页的属性: Caption 按状态查询 Backcolor 64,128,128 Forecolor 0,0,0 Fontsize 14 Fontname 宋体3.2.5增删操作员模块添加一个页框控件 Height 241 Width 444 Top 64 Left 31 Pagecount 2页框第1页的属性 Caption 增删维护人员 Backcolor 192,192,192 Fore
32、color 0,0,0 Fontsize 16 Fontname 楷体页框1下包括六个命令按钮分别为“上一条”、“下一条”、“第一条”、“最后一条”、“添加”、“删除”,其属性一样: Height 25 Width 61 Top 144 Left 21 Fontsize 9 Fontname 宋体命令按钮“上一条”的click事件的代码如下:select 表5skip -1mand2.enabled=.t.if bof() messagebox(已是第一条记录!,48,信息窗口) mand1.enabled=.f. else mand1.enabled=.t.endifthisform.ref
33、resh()命令按钮“下一条”的click事件的代码如下:select 表5skip mand1.enabled=.t.if eof() messagebox(已是最后一条记录!,48,信息窗口) mand2.enabled=.f. skip -1 else mand2.enabled=.t.endifthisform.refresh()命令按钮“第一条”的click事件的代码如下:select 表5go topmand2.enabled=.t.thisform.refresh命令按钮“最后一条”的click事件的代码如下:select 表5go bottommand1.enabled=.t.
34、thisform.refresh命令按钮“添加”的click事件的代码如下:append blankthisform.refresh命令按钮“删除”的click事件的代码如下:yn=messagebox(真要删掉吗?,4+48,警告)if yn=6 delete set dele on if eof() go top else skip -1 endif messagebox(删除成功!)else endif thisform.refresh页框第2页的属性: Caption 增删操作人员 Backcolor 192,192,192 Forecolor 0,0,0 Fontsize 16 Fo
35、ntname 楷体页框2下也包括六个命令按钮分别为“上一条”、“下一条”、“第一条”、“最后一条”、“添加”、“删除”,其属性与上面的一样。命令按钮“上一条”的click事件的代码如下:select 操作员表skip -1mand4.enabled=.t.if bof() messagebox(已是第一条记录!,48,信息窗口) mand3.enabled=.f.else mand3.enabled=.t.endifthisform.refresh()命令按钮“下一条”的click事件的代码如下:select 操作员表skip mand3.enabled=.t.if eof() message
36、box(已是最后一条记录!,48,信息窗口) mand4.enabled=.f. skip -1else mand4.enabled=.t.endifthisform.refresh()命令按钮“第一条”的click事件的代码如下:go topmand4.enabled=.t.thisform.refresh命令按钮“最后一条”的click事件的代码如下:go bottommand3.enabled=.t.thisform.refresh命令按钮“添加”的click事件的代码如下:select 操作员表append blankthisform.refresh命令按钮“删除”的click事件的代
37、码如下:yn=messagebox(真要删掉吗?,4+48,警告)if yn=6 delete set dele on if eof() go top else skip -1 endif messagebox(删除成功!)else endif thisform.refresh此模块的主要功能是由内部维护人员去增减系统操作员或维护员,在窗口中添加一个页框控件来实现这两个功能的交互使用,另外添加六个命令按钮控件,其Caption属性分别为“上一条”、“下一条”、“第一条”、“最后一条”、“添加”、“删除”。其中“上一条”、“下一条”、“第一条”、“最后一条”来实现对操作员和维护员的浏览,“添加”、“删除” 来实现对操作员和维护员及其密码的修改、添加及删除。3.2.6修改密码模块为了保证系统的安全性,在程序启动或修改某些数据之前,都应先输入用户密码,如果输入的密码不正确,则不允许进入或修改。在本系统中,将权限设置为两级维护和修改,对于系统操作员只有权限修改自己的密码,而对于内部维护人员,不仅可以修改自己的密码,还可以进入“增删用户”模块对任何人进行密码修改、增加、删除等操作。本模块要实现两个功能,即:修改操作员密码和修改维