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