河海大学文天学院-数据库应用与可视化开发技术课设

发布时间:   来源:文档文库   
字号:


《数据库应用与可视化开发技术》
课程设计报告


电气信息工程系专业年级11计算机科学与技术



1


一、引言………………………………………………………………………………3
1.1数据库应用技术现状………………………………………………………31.2面向对象可视化应用前景…………………………………………………31.3课程设计目的与任务………………………………………………………41.4本报告的内容组织…………………………………………………………4
二、相关方法和技术……………………………………………………………5
2.1数据库应用程序体系结构…………………………………………………52.2可视化面向对象技术………………………………………………………52.3事件驱动程序设计…………………………………………………………62.4数据库事物控制技术………………………………………………………72.5数据库连接策略……………………………………………………………7
三、课题分析………………………………………………………………………8四、课题设计………………………………………………………………………9五、课程实现………………………………………………………………………12
5.1功能模块实现………………………………………………………………125.2系统功能测试………………………………………………………………285.3测试报告………………………………………………………………………32六、总结………………………………………………………………………………32

2




一、引言
数据库应用与可视化技术从诞生到现在,得到了越来越广泛的应用,从小型单项事务处理系统到大型信息系统,从联机事务处理到联机分析处理,从一般的企业管理到计算机辅助设计与制造等领域,越来越多的应用领域采用数据库技术存储和处理信息资源。但是,随着信息技术的不断发展,传统的数据库应用技术和系统具有显而易见的不适应性,数据库系统管理的对象不再局限于传统的数据库所擅长管理的结构化数据、半结构化数据,各类智能数据库、多媒体数据库、模糊数据库、数据仓库及数据挖掘技术对传统数据库和系统的研究开发提出了新的挑战。为了应付这些挑战,数据库界必须适应发展的需要,拓宽新的思路,开辟新的研究局面。

1.1数据库应用技术现状
数据库应用技术是当前数据库技术发展的重要特征,计算机领域中其它新兴技术的发展对数据库应用技术产生了重大的影响,传统的数据库技术和其他计算机技术的相互结合,相互渗透使数据库中新的技术内容层出不穷,数据库的许多概念技术内容应用领域甚至某些原理都有了重大的发展和变化,建立和实现了一系列新型数据库系统如分布式数据库系统,面向对象数据库系统、演绎数据库系统、知识库系统、多媒体数据库系统它们共同构成了数据库系统的大家族,传统的数据库系统仅是数据库大家族的一员。当然,它也是最成熟的和应用最广泛的一员,它的核心理论应用经验设计方法等仍然是整个数据库技术发展和应用开发的先导和基础。

1.2面向对象可视化应用前景
可视化技术是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及到计算机图形学、图像处理、计算机视觉、计算机辅助等多个领域,成为研究数据表示、数据处理、决策分析等一系列问题的综合技术,包括科学计算机可视化和信息可视化。

3

可视化技术的应用前景,其用于①医学、地质、海洋、气象、航空等行业②开阔软件业高科技市场③虚拟现实技术的发展④人工智能技术的发展⑤在商务、金融和通信等领域等等,有着十分广阔的应用前景。
数据可视化与信息可视化的分界越来越小,在商务、金融等方面也会有广阔的应用前景。如面向对象可视化技术在财务指标或流通量统计中的应用;面向对象可视化技术在人口普查、健康状况、现金交易、顾客群、销售业绩等方面的应用;面向对象可视化技术在数字图书馆中的应用;面向对象可视化技术在诸如专利文献、年报、软件模块、数据结构等复杂文档中的应用;面向对象可视化技术在诸如病例、学生成绩、经济趋势、股市走向、项目管理等方面的应用。
面向对象可视化应用技术作为一项新兴技术正在蓬勃发展。它与虚拟现实技术、计算机动画技术、人工智能、数据挖掘、数字地球、经济趋势,甚至与人类基因组计划等诱人的前沿学科领域有着密切的联系。如何有效处理和解释这些包含大量信息的海量数据将是人类面临的巨大挑战,同时,这也是面向对象可视化技术所呈现给人类的诱人的应用前景!

1.3课程设计目的与任务
目的:采用可视化开发技术,熟悉一种可视化开发技术平台,掌握数据库中的重要技术,熟练使用PowerBuilder,嵌入式SQL语言技术,链接技术,事务控制技术,事务程序设计技术,面向对象的可视化技术,分析事物的方法,掌握课程设计,初步应用和实现的方法。
任务:安装设计PB可视化开发环境做程序设计,并做出实验。包括项目的创建,应用程序,常用事件,程序设计的方法,数据库访问时间的应用,事务控制PB链接的策略。
1,4本报告的内容组织
本系统采用PowerBuild8.0设计,主要实现对图书馆信息的管理,主要功能为管理有关读者,书籍,借阅和管理者的信息等。本系统结构分为读者信息管理模块,书籍信息管理模块,借阅信息管理模块,管理者信息管理模块。读者信息管理部分有两方面的功能,可以浏览读者的信息,可以对读者信息进行维护。书籍信息管理可以浏览书籍的信息,可以对书籍信息进行维护。借阅信息管理可以显示当前数据库中书籍借阅情况,可以对借阅信息进行维护。管理者信息管理可以显示数据库中管理者的情况,可以对管理者信息进行维护。可见,本系统并不复杂,主要解决的问题是利用关键字对数据库进行查询。


4


二、相关方法和技术
2.1数据库应用程序体系结构
开发一个好的数据库应用系统,软件开发者第一要选择好的数据库平台及支持的开发环境,第二做出合适的软件设计和数据库设计,包括选择算法和数据结构;第三还要选择合适的编程语言和工具,开发工具和接口的正确选择能极大地改善整个系统的性能和开发速度;第四要选择好的应用模型结构。
20世纪60年代刚出现数据库时,数据库系统的应用范围主要局限于为同一地点的不同应用程序提供永久、共享的数据存储和数据管理。因此只需集中式的数据库体系结构。70年代数据库的应用更广泛,如民航订票等。需要在异地有数据处理的功能,而对数据是否集中存放则不太关心。在这种情况下出现了C/S结构的数据库。80年代,应用领域需要处理的数据量越来越大,数据集中存放至少在效率上无法满足要求,因此出现数据分布存放的分布式数据库。进入90年代,数据库的自治性越来越被强调,因为应用领域向复杂化、多元化方向发展。分布式数据库和异构数据库互连成为满足当前应用领域要求的主要趋势。
随着数据库系统体系结构的发展,相应的数据库应用系统的体系结构由两层体系结构发展到三层或多层结构。
2.2可视化面向对象技术
PowerBuilder支持面向对象程序设计方法,支持继承性、多态性、封装性这些面向对
象编程技术。使用这些技术,开发人员可以最有效地利用所创建的每一个对象,使应用程序具有可重用性、可扩展性。
PowerBuilder中,窗口对象、菜单对象和用户对象是可以继承的。当用户继承了一个对象,所得到的子类将具有与父类相同的属性、控件、事件及脚本代码等。也就是说子类继承了父类所有的变量和函数,用户通过在子类中加入一些心得数据成员和函数,就可以得到一个功能更强大的类。继承使用户可以充分利用经过严格检验的代码,大大提高了代码的重复利用率,从而极大地缩短了程序的开发周期。
对于同一消息,不同的对象可以有不同的响应,这就是多态性。多态性使得韩硕的功能随着应用对象类型的变化而变化。比如,文件类和目录类都有一个方法Delete,该方法的行为会根据不同的对象类型而改变,当一个文件类的对象使用Delete方法时,调用的是目录类的Delete方法,而当一个目录类的对象使用Delete方法时,调用的目录类的Delete方法。对象的多态性使得对不同类对象的处理变得一致。

5

封装就是把一些数据元素和操作行为放到一个对象中。对象内部的细节在很大程度上是隐蔽的,一个对象的数据成员只能由该对象自身的函数来存取。


2.3、事件驱动程序技术
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作.事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,往往要到实现阶段才完全确定,因而需要运用虚函数机制(函数名往往取为类似于HandleMsg的一个名字)。对于框架的使用者来说,他们唯一能够看到的是事件处理器。这也是他们所关心的内容。
视图(即我们通常所说的窗口)是事件驱动应用程序的另一个要元。它是我们所说的事件发送器的目标对象。视图接受事件并能够对其进行处理。当我们将事件发送到具体的视图时,实际上我们完成了一个根本性的变化:从传统的流线型程序结构到事件触发方式的转变。这样应用程序具备相当的柔性,可以应付种种离散的、随机的事件。
由于Windows本身是基于事件驱动模型的。因而在Windows操作系统下实现应用程序框架有相当的便利。在事件驱动程序的基本单元中,事件收集器已经由Windows系统完成;事件发送器也已经由Windows完成了部分内容。之所以是部分而非完全是因为Windows是用C语言实现的,而不是C++。由于没有对象,Windows将事件发送到所谓的窗口函数中(尽管不是发送到具体的对象,但应该说这是面向对象方式实现的一个变体)。要感谢Windows做了这件事。确定事件的目标所要做的工作的复杂可能要超出我们的想象。
PowerBuilder的应用程序是事件驱动的,事件是由Windows系统通过消息传递的。Windows系统接收到所有的硬件和软件事件,并将事件转化成消息发送给相应的对象。消息中包含了其类型码,类型码代表事件的类型。在PowerBuilder中用户可以为事件编写脚本,从而控制程序的运行,对用户的动作或系统事件做出反应。在PowerBuilder中每一类对象都有一些预定义的事件,比如命令按钮控件有单击事件,编辑框控件有更新事件等。

6

一般来说,这些预定义的事件能满足用户的需求,如有些特殊需求,用户还可以定义自己的用户事件。

2.4、数据库事务控制技术
应用对象的事件共有6个:OpenCloseIdleSystemErrorConnectionBegin
ConnectionEnd
要想在应用程序中实现对数据库的操作,就要在应用对象的Open事件中建立于数据库的链接。应用程序与数据库的链接是通过事务对象来完成的,对于应用程序和数据库之间进行通信来说,事务对象起到了桥梁的作用。事务对象是PB对象中最为重要的一个对象,不使用事务对象将无法链接数据库,在应用程序启动时,系统将自动创建一个名为SQLCA的全局事务对象。与其他大部分对象不同,事务对象是个不可见对象,不能在某个描绘器中创建,也不能显示在屏幕上。
事务对象包含两组共15个属性:第一组(10个属性)用来告诉PB链接数据库所需要的所有信息;第二组(5个属性)用来返回最后一次数据库操作完成的状况。

2.5、数据库链接策略
在创建了数据库和表之后,还必须与要访问的数据库建立链接关系才可以使用PB行数据库访问。因此,链接数据库是使用PB开发数据库应用系统的一项很重要的工作。PB与数据库的链接可以通过通用接口和专用接口两种方式来实现。
ODBC接口是微软公司提出的一种开放式数据库互连标准接口,它使用关系数据库标准查询语言SQL来存取数据库。ODBC支持单个语言系统对对个不同数据库管理系统的访问,并且使得用户能够用统一的方法来处理各种数据源。利用ODBC连接数据库截图如下:

7





三、课题分析
图书馆管理系统是一个高度集成的图书信息处理系统,通过将图书馆的各种功能进行整合,从而达到显示检索信息,提高工作效率,降低管理成本等目的。一个典型的图书馆管理系统应该能够管理所有的图书种类,图书信息以及读者信息,还需要提供各种图书信息的检索查询功能。该系统还需要能够对图书的借阅,归还进行管理,并对读者的罚款进

8

行自动计算。通过该系统的自动化管理,能够大大减少图书馆管理人员,还能减少管理人员的工作任务,从而降低管理开销和成本。

四、课题设计
图书管理系统主要包括系统管理、读者管理、图书编目、查询等一系列的功能。(1图书的基本信息:图书编号,图书名称,出版社,作者等。(2读者的基本信息:读者编号,读者姓名,系别,类型等。(3管理者的基本信息:管理者姓名,权限,修改密码,登陆提示等。读者管理(1.查询已有读者
(2.编辑读者,涵盖添加读者,编辑读者信息,删除读者功能图书管理(1.查询图书信息(2.编辑图书信息借阅管理(1.借出图书查询(2.编辑图书借出信息其它辅助功能
管理员信息维护:可以执行管理员密码修改、信息更新及删除等。
系统的E-R模型
该图书管理系统的E-R模型,如下图所示


9

网址证号姓名已借书数目联系方式读者类别
地址
出版社
读者
能否借书实际归还日期
名称
1
n
借阅日期证号
E-mail
出版借阅
书号
m
m
能否续借书号
应归还日期
书籍
丛书系列书名作者出版社责任编辑库存量字数总册数定价
出版时间
主题分类
二级分类
馆内借阅分类


根据功能分析和应用功能的要求,对各项功能进行集中分块,按照生命周期法,进行结构化分析,得到如图所示的细化模块图和程序模块示意图

10


细化模块图

程序模块示意图
11



数据库的访问策略
采用ODBCOpenDatabaseConnectivity,开放数据库互连)模式。
ODBCOpenDataBaseConnectivity)是微软倡导的、当前被业界广泛接受的、用于数据库访问的应用程序编程接口(API,它以X/OpenISO/IEC的调用级接口(CLI规范为基础,并使用结构化查询语言(SQL)作为其数据库访问语言。ODBC总体结构有四个组件:
A.应用程序:执行处理并调用ODBCAPI函数,以提交SQL语句并检索结果。B.驱动程序管理器DriverManager根据应用程序需要加载/卸载驱动程序,处理ODBC函数调用,或把它们传送到驱动程序。
C.驱动程序:处理ODBC函数调用,提交SQL请求到一个指定的数据源,并把结果返回到应用程序。如果有必要,驱动程序修改一应程序请求,以使请求与相关的DBMS支持的语法一致。
D.数据源:包括用户要访问的数据及其相关的操作系统、DBMS及用于访问DBMS的网络平台。
五、课题实现
5.1功能模块设计
5.1.1创建项目
使用PB创建Workplace生成并保存Library.pbw到图书管理信息系统文件夹中。在工程项Library中创建Application生成并保存mlibrary.pbt到相同路径。在应用程序mibrary中新建mlibrarysys_toolsbook_mangeborrow_mangeread_mange五个库,并保存各自扩展名为.pbl的文件到相同路径。如下图所示
简介数据库实现,使用powerbuilder创建库的整个过程1)创建workspace命名空间
要事先在希望建立位置建立一个新的文件夹,然后将新建立的命名空间存放于该处。

12


2)建立目标(Target)里面的应用程序(Application

3新建windows窗体:新建立窗体,窗体建立完成后可以在菜单栏选择控件进行编辑,Createcommandbuttoncontrol,Createdatawindowcontrol等是常用的控件名称,可以在控件的click事件里面添加内容代码,来实现数据库事件的功能

13



在相应的库中创建所需要的窗口,函数及连接代码。5.1.2登录模块

用户可以通过用户名和密码登陆图书管理系统。系统会访问数据库,对用户操作作出交互反应。
“放弃”按钮代码如下:close(parent

//关闭登陆窗口
“登入”按钮代码如下:stringpassword,allow_log,log_stringlog_string=sle_logid.textselectuser_xm,password,allow_log

14

into:czyxm,:password,:allow_logfromdmuser
whereuser_xm=:log_string;//
messagebox('登陆','登陆成功'
ifsqlca.sqlcode=100ortrim(sle_logpass.text<>passwordthenmessagebox('警告','Error6您的帐户不正确,不能登录系统!'sle_logid.setfocus(
return
endif
ifnotallow_log='y'thenmessagebox('警告','Error7您的帐户没有获准注册权限,不能登录系统'sle_logid.setfocus(
return
endif
closewithreturn(parent,'loginisok'登陆模块代码如下:SQLCA.DBMS="ODBC"




//连接数据库
SQLCA.AutoCommit=False
SQLCA.DBParm="ConnectString='DSN=library;UID=;PWD='"connect;
ifsqlca.sqlcode<>0thenmessagebox('警告','Error1连接数据库(Connectdatabase失败!'return
endif
stringmclongi
sle_logid.reset(declarestart1cursorforselectuser_xmfromdmuser
whereallow_log='y'andxm_select='y'orderbyuser_xm;

openstart1;fetchstart1into:mc;i=1
15



dowhilesqlca.sqlcode=0sle_logid.InsertItem(mc,ii=i+1

fetchstart1into:mc;
loopclosestart1;
并且需要修改全部变量和共享变量;


5.1.3添加模块
对读者,图书,借阅等模块的子系统进行添加编辑。

“放弃”按钮代码如下:closewithreturn(parent,''“确认”按钮代码如下:stringbook_noints,yn
CHOOSECASEthe_flagCASE'appe'

book_no=dw_1.getitemstring(1,'booksid'

16

ifisnull(book_noortrim(book_no=''thenmessagebox('提示','书号不能为空!'return
endif

selectcount(*into:sfrombookswherebooksid=:book_no;ifs>0thenmessagebox('提示','该书号已存在,不能存入数据库!'return
endif

ifdw_1.update(<>1thenrollback;
messagebox('提示','添加记录入库失败!'
return
endif
commit;
ENDCHOOSE

closewithreturn(parent,'reload'添加模块代码如下:stringbook_no,tp_strtp_str=message.stringparmthe_flag=left(tp_str,4
book_no=mid(tp_str,5,len(tp_str-4dw_1.settransobject(sqlca
CHOOSECASEthe_flag
CASE'appe'//st_1.text='添加学生记录'dw_1.InsertRow(0
CASE'edit'
dw_1.modify("booksid.tabsequence=0"dw_1.modify("bname.tabsequence=10"dw_1.modify("classifyno.tabsequence=20"dw_1.modify("author.tabsequence=30"dw_1.modify("publisher.tabsequence=40"dw_1.retrieve(book_no


17


CASE'dele'dw_1.modify("booksid.tabsequence=0"dw_1.modify("bname.tabsequence=0"dw_1.modify("classifyno.tabsequence=0"dw_1.modify("author.tabsequence=0"dw_1.modify("publisher.tabsequence=0"dw_1.retrieve(book_no


ENDCHOOSE
5.1.4删除模块
对读者,图书,借阅等模块的子系统进行删除编辑。

在读者信息(图书/借阅主窗口,对所选信息删除,进入删除模块。主窗口“删除”按钮代码如下:stringbnumberintn
n=dw_1.getselectedrow(0ifnotn>0thenmessagebox('提示','请选择将要删除的书目记录!'
return
endif
bnumber=dw_1.getitemstring(n,'readerid'openWithParm(w_reader_edit,"dele"+bnumber
ifmessage.stringparm="reload"thendw_1.SetRedraw(falsedw_1.reset(
dw_1.retrieve(depart
18


dw_1.SetRedraw(true
endif
删除窗口“确认”按钮代码如下:stringreaeder_noints,yn
CHOOSECASEthe_flag
CASE'dele'
reaeder_no=dw_1.getitemstring(1,'readerid'
yn=messagebox('提示','将要删除该读者记录!请最后确认?',Question!,YesNo!
ifnotyn=1thenreturnendif

dw_1.deleterow(0
ifdw_1.update(<>1thenrollback;
messagebox('提示','删除失败!'
returnendif

commit;
ENDCHOOSE
closewithreturn(parent,'reload'删除窗口模块代码如下:stringbook_no,tp_strtp_str=message.stringparmthe_flag=left(tp_str,4
book_no=mid(tp_str,5,len(tp_str-4dw_1.settransobject(sqlcaCHOOSECASEthe_flagCASE'dele'dw_1.modify("booksid.tabsequence=0"dw_1.modify("bname.tabsequence=0"dw_1.modify("classifyno.tabsequence=0"dw_1.modify("author.tabsequence=0"

dw_1.modify("publisher.tabsequence=0"
19





dw_1.retrieve(book_no
ENDCHOOSE
5.1.5修改模块
对读者,图书,借阅等模块的子系统进行修改编辑。

读者信息(图书/借阅主窗口,对所选信息修改,进入修改模块。主窗口“修改”按钮代码如下:intn
n=dw_1.getselectedrow(0
ifnotn>0thenmessagebox('提示','请选择将要修改的借书记录!'return
endif

bookid=dw_1.getitemstring(n,'booksid'readid=dw_1.getitemstring(n,'readerid'
openWithParm(w-borrow_edit,"edit"
ifmessage.stringparm="reload"thendw_1.SetRedraw(falsedw_1.reset(dw_1.retrieve(
dw_1.SetRedraw(true
endif
修改模块“确认”按钮代码如下:stringreader_no,book_noints,yn

20

CHOOSECASEthe_flagCASE'edit'ifdw_1.update(<>1thenrollback;
messagebox('提示','更新数据库失败!'
return
endif

commit;
ENDCHOOSE
closewithreturn(parent,'reload'修改窗口模块代码如下:stringbook_no,tp_strtp_str=message.stringparmthe_flag=left(tp_str,4
book_no=mid(tp_str,5,len(tp_str-4dw_1.settransobject(sqlcaCHOOSECASEthe_flagCASE'edit'dw_1.modify("booksid.tabsequence=0"dw_1.modify("bname.tabsequence=10"dw_1.modify("classifyno.tabsequence=20"dw_1.modify("author.tabsequence=30"dw_1.modify("publisher.tabsequence=40"

dw_1.retrieve(book_no
ENDCHOOSE5.1.6查询模块
对读者,图书,借阅等模块的子系统进行查询访问。

21



“打印”按钮代码如下:tab_1.tabpage_2.dw_1.print(“查询”按钮代码如下:stringcondition,value,str
//tab_1.tabpage_2.dw_1.SetRedraw(falsestr="booksid.visible='1'"tab_1.tabpage_2.dw_1.modify(strstr="bname.visible='1'"tab_1.tabpage_2.dw_1.modify(strstr="author.visible='1'"tab_1.tabpage_2.dw_1.modify(strstr="publisher.visible='1'"tab_1.tabpage_2.dw_1.modify(strcondition=''
value=trim(tab_1.tabpage_1.sle_1.textifnot(isnull(valueorvalue=''thencondition="booksid='"+value+"'"
endif

value=trim(tab_1.tabpage_1.sle_2.textifnot(isnull(valueorvalue=''thenifcondition=''thencondition="bname='"+value+"'"
else
condition=condition+"andbname='"+value+"'"endif
endif


22

value=trim(tab_1.tabpage_1.sle_3.textifnot(isnull(valueorvalue=''thenifcondition=''thencondition="author='"+value+"'"
else
condition=condition+"andauthor='"+value+"'"
endif
endif
value=trim(tab_1.tabpage_1.sle_4.textifnot(isnull(valueorvalue=''thenifcondition=''thencondition="publisher='"+value+"'"
else
condition=condition+"andpublisher='"+value+"'"
endif
endif
ifcondition=''thenstr='selectbooksid,bname,author,publisherfrombooks'
else
str='selectbooksid,bname,author,publisherfrombookswhere'+conditionendif
tab_1.tabpage_2.dw_1.reset(tab_1.tabpage_2.dw_1.setsqlselect(strtab_1.tabpage_2.dw_1.retrieve(tab_1.tabpage_2.dw_1.SetRedraw(true5.1.7系统维护模块管理员信息

23



管理员窗口“添加”按钮代码如下:intold_row,new_row
old_row=dw_1.getselectedrow(0ifnotold_row>0then
dw_1.selectrow(0,false
new_row=dw_1.insertrow(old_rowdw_1.selectrow(new_row,truedw_1.setitem(new_row,'allow_log','y'dw_1.modify("user_xm.tabsequence=10"dw_1.modify("password.tabsequence=20"dw_1.modify("allow_log.tabsequence=30"
24

old_row=0
endif

dw_1.modify("xm_select.tabsequence=40"dw_1.modify("db_edit.tabsequence=50"dw_1.modify("db_query.tabsequence=60"dw_1.modify("sys_wh.tabsequence=70"pb_1.enabled=falsecb_1.enabled=falsecb_2.enabled=falsecb_3.enabled=falsecb_4.enabled=truecb_5.enabled=trueedit_bz='append'
管理员窗口修改”按钮代码如下:intn
n=dw_1.getselectedrow(0ifnotn>0thenmessagebox('提示','请选择将要修改的用户记录!'
return
endif
dw_1.modify("user_xm.tabsequence=10"dw_1.modify("password.tabsequence=20"dw_1.modify("allow_log.tabsequence=30"dw_1.modify("xm_select.tabsequence=40"dw_1.modify("db_edit.tabsequence=50"dw_1.modify("db_query.tabsequence=60"dw_1.modify("sys_wh.tabsequence=70"pb_1.enabled=falsecb_1.enabled=falsecb_2.enabled=falsecb_3.enabled=falsecb_4.enabled=truecb_5.enabled=trueedit_bz='modify'
管理员窗口删除”按钮代码如下:intn,rowsub,net,delopt=0,have_sub=0,yn1stringuser_dm,gl_sys=''
n=dw_1.getselectedrow(0ifnotn>0then
25


messagebox('提示','请选择将要删除的用户记录!'
return
endif
user_dm=dw_1.getitemstring(n,'user_xm'gl_sys=dw_1.getitemstring(n,'sys_wh'
ifgl_sys='y'thengotooutdw_1.deleterow(npb_1.enabled=falsecb_1.enabled=falsecb_2.enabled=falsecb_3.enabled=false
cb_4.enabled=truecb_5.enabled=trueedit_bz='delete'returnout:
messagebox("提示",'当前用户'+'是系统管理员,禁止删除!'return用户修改密码

“确认”按钮代码如下:
26


stringpasswd1,passwd2,xm_disp
ifisnull(sle_1.textortrim(sle_1.text=''thenpasswd1=''
else
passwd1=trim(sle_1.textendif
ifisnull(sle_2.textortrim(sle_2.text=''thenpasswd2=''else
passwd2=trim(sle_2.textendif
ifcbx_1.checkedthenxm_disp='y'else
xm_disp='n'endif
ifpasswd1<>passwd2thenmessagebox("提示",'两次输入的口令不同,请重新输入!'sle_1.setfocus(
sle_1.selecttext(1,len(passwd1returnendif

updatedmusersetpassword=:passwd1,xm_select=:xm_dispwhereuser_xm=:czyxm;

ifsqlca.sqlcode=0thencommit;
messagebox("注意",'请记住您的新口令!'close(parent
elserollback;

messagebox('提示','数据库保存失败!~r~n'+sqlca.sqlerrtextendif介绍界面
27


中间方块移动代码如下:
Messagebox("Themeaningoflife","Don'tforgetaboutthetabkey!"Close(Parent
5.2系统功能测试


28


29


30




31


5.3测试报告
测试中,依然有部分功能未能实现。5.3.1“注销”功能
例如登陆选项中的注销功能。在用户登陆系统后,发现权限不够的情况下,无法直接注销登陆,必须重启系统才能选择其他用户登陆。
5.3.2修改密码时输入原始密码
为了防止他人在管理员不在的情况下,擅自修改密码,在修改密码时,应该需要先核对旧密码,才能修改新密码。
其他功能正常。
六、总结
在开发数据库管理系统时,因为已经学习了软件工程,对与程序、软件的开发流程有了一定的概念与思路。能够快速的明确开发流程,从需求分析中的功能分析,到其可行性;设计中的概要设计,构建软件体系结构,再在详细设计中对各个功能进行模块化设计;以及开发过程中对于问题解决的先后顺序,都有了比较好的了解。
这次课程设计,受益匪浅,感谢老师上课时的指导,以及同学的帮助,还有自己的努力。参考文献
《数据库应用系统设计理论与实践教程》袁方主编电子科技大学出版社《数据库技术的发展现状及趋势》赵玉萍,廖运文西华师范大学计算机学院PowerBuilder8.0教程》郭兴成编写北京希望电子出版社

32

本文来源:https://www.2haoxitong.net/k/doc/ec339b62cebff121dd36a32d7375a417866fc18d.html

《河海大学文天学院-数据库应用与可视化开发技术课设.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式