基于PowerBuilder开发的图书管理系统

时间:2022-12-20 07:56:53

基于PowerBuilder开发的图书管理系统


前言

本项目采用PowerBuilder12.6作为IDE,PowerBuilder(简称PB)是一种快速应用程序开发工具(RAD),和Delphi、Visual Basic齐名。

本项目开发的图书管理系统可以作为演示系统,或者作为一个PB入门项目,用于PB练手或者老项目维护时对PB的温习。

gitee开放源码地址为:​​​https://gitee.com/radarfyh/library_manager.git​


1. 需求说明

  • 总体需求
    用于管理小型图书馆或者图书室,图书管理员能够使用本系统维护用户,对图书分类和入库,并提供借还操作
  • 用户管理
    提供增删改查功能
  • 分类管理
    提供图书分类的增删改查功能
  • 图书管理
    提供图书的入库、出库、查询等功能
  • 借书管理
    提供用户对图书的借还操作、查询功能

本项目用于演示,系统需求说明书暂时不编写。


2. 系统设计

系统采用C/S架构,Server采用Oracle数据库,Client采用PB提供的Window和DataWindow对象。总体业务架构设计如下图:

oracle数据库的安装请参考如下文章:
​​​完美方案:win7/win10下正确安装oracle 10g​

Oracle数据库管理系统可以采用10g或者11g,这两个版本有何区别,请参考如下文章:
​​​Oracle 10g和11g比较​

总体设计说明书暂时不编写。


3. 数据库设计

数据库建模采用ER方法,实体划分:用户、图书,图书分类操作结果单独设计一个关系:图书分类,用户和图书的关系形成借还记录。

(1)数据库逻辑设计(采用PowerDesigner工具)如下图:

基于PowerBuilder开发的图书管理系统

(2)数据库物理设计(采用PowerDesigner工具)如下图:

基于PowerBuilder开发的图书管理系统

PB访问Oracle数据库采用OCI接口,如果PB连接Oracle数据库出现问题,请参考如下文章试试:
​​​32位IDE访问Oracle 数据库错误的解决​

数据库设计说明书暂时不编写。


4. 数据库脚本和数窗设计

(1)数据库脚本导出和修改

使用PowerDesigner可以导出Oracle脚本,导出之前需要做如下设置,注意我使用Oracle 11g,所以下面假定使用11g。

  • 选择菜单“Change current DBMS ...”,打开change the target dbms窗口,在其中设置目标数据库为oracle 11g,如下图:

基于PowerBuilder开发的图书管理系统

  • 选择菜单“Edit Current DBMS ...”,在General选项卡的左边树中选择Oracle Version 11G-->Script-->Sql-->Format-->CaseSensitivityUsingQuote,然后点选No,如下图:

基于PowerBuilder开发的图书管理系统

  • 选择菜单“Generate Database...”,在General选项卡中设置脚本文件导出文件夹和名称,最后点确定就会导出SQL建库脚本,如下图:

基于PowerBuilder开发的图书管理系统

导出的SQL脚本没有表空间、用户、授权脚本,需要加上。索引、非空列、默认值、主键、外键均需检查是否正确,再增加一些测试记录,形成最终的脚本放在SQL目录下。

(2)数窗设计

本项目采用PB作为IDE,中间层采用DataWindow(简称:数窗或者DW),DataWindow是PB提供的中间层对象,作为数据库和窗口之间的联系纽带。数窗设计如下:


  • dw_type 分类管理对象

浏览编辑图书分类记录,如下图:

基于PowerBuilder开发的图书管理系统

关键属性包括:Freeform风格、QuickSelect数据源、选择t_type表的所有列、ID升序排列、边框样式采用ShadowBox。


  • dw_book 图书管理对象

浏览编辑图书记录,如下图:

基于PowerBuilder开发的图书管理系统

关键属性包括:Grid 风格、QuickSelect数据源、选择 t_book 表的所有列、不设排序、边框样式采用Raised、列标题背景为Button Face、typeid列的Style Type=DropDownDW、typeid列的DataWindow=dw_book_type、typeid列的Display Column=id、typeid列的Data Column=id、company列的属性和typeid列的属性类似设置。

还有两个子对象:dw_book_type,dw_book_company,前者(dw_book_type)用作图书分类列的数据源,如下图:

基于PowerBuilder开发的图书管理系统

关键属性包括:Tabular 风格、QuickSelect数据源、选择t_type表的所有列、ID升序排列、边框样式采用ShadowBoxtype表的所有列、ID升序排列、边框样式采用ShadowBox。

后者(dw_book_company)用作出版社列的数据源,如下图:

基于PowerBuilder开发的图书管理系统

关键属性包括:Tabular 风格、External数据源(外部数据源定义为ID/string/5和title/string/20,斜杠分隔的第一个数据是列名,第二个是数据类型,第三个是长度)、列标题背景为Button Face、列对象的Display ONLY属性值为TRUE、列对象的Show Focus Rectangle设为false。


  • dw_user 用户管理对象

浏览编辑用户记录,如下图:

基于PowerBuilder开发的图书管理系统

关键属性包括:Freeform风格、QuickSelect数据源、选择t_user表的所有列、ID升序排列、边框样式采用ShadowBox。


  • dw_log 借还管理对象

记录借还操作,如下图:

基于PowerBuilder开发的图书管理系统

关键属性设置参见源代码,不在此列出。

有两个子对象:dw_log_book 和 dw_log_user,前者(dw_log_book )用作图书单列的数据源,如下图:

基于PowerBuilder开发的图书管理系统

其关键属性设置参见源代码,不在此列出。

后者(dw_log_user)用作用户单列的数据源,如下图:

基于PowerBuilder开发的图书管理系统

dw_log_user关键属性设置参见源代码,不在此列出。


  • 查询类对象包括:dw_query_user 和 dw_query_log 前者(dw_query_user )用作用户查询选择,如下图:

基于PowerBuilder开发的图书管理系统

注意这里需要创建一个query对象,命名为q_user,数据源就关联这个query对象,其他关键属性设置参见源代码,不在此列出。

后者(dw_query_log)用于选择指定用户的借书记录,如下图:

基于PowerBuilder开发的图书管理系统

dw_query_log关键属性设置参见源代码,不在此列出。


5. 窗口设计

PB支持可视化窗口界面设计,这是他能快速开发应用程序的原因之一。下图是窗口设计总图:

基于PowerBuilder开发的图书管理系统

具体设计参见源码。


6. 事件代码

PB是事件驱动的,所以几乎所有代码都在控件的事件中。具体事件的代码编写参见源码,其中有详细的注释。


7. 系统测试

执行后主界面如下图:

基于PowerBuilder开发的图书管理系统

分类管理界面如下图:

基于PowerBuilder开发的图书管理系统

用户管理界面如下图:

基于PowerBuilder开发的图书管理系统

图书管理界面如下图:

基于PowerBuilder开发的图书管理系统

借书管理界面如下图:

基于PowerBuilder开发的图书管理系统

记录查询界面如下图:

基于PowerBuilder开发的图书管理系统

关于界面如下图:

基于PowerBuilder开发的图书管理系统


8. 开放源码

gitee开放源码地址为:​​https://gitee.com/radarfyh/library_manager.git​