# library_manager **Repository Path**: fbing2015/library_manager ## Basic Information - **Project Name**: library_manager - **Description**: 本项目采用PowerBuilder12.6作为IDE,PowerBuilder(简称PB)是一种快速应用程序开发工具(RAD),和Delphi、Visual Basic齐名。 本项目开发的图书管理系统包含用户管理、图书维护功能以及借书管理、查询功能。 可以作为演示系统,或者作为一个PB入门项目,用于PB练手或者老项目维护时对PB的温习。 - **Primary Language**: 其他 - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-09-10 - **Last Updated**: 2024-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于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对象。总体业务架构设计如下图: ![业务架构图](images/应用架构图.png) oracle数据库的安装请参考如下文章: [完美方案:win7/win10下正确安装oracle 10g](https://blog.51cto.com/u_5526964/5890942) Oracle数据库管理系统可以采用10g或者11g,这两个版本有何区别,请参考如下文章: [Oracle 10g和11g比较](https://blog.51cto.com/u_5526964/5895254) 总体设计说明书在此不提供。 --- ## 3. 数据库设计 数据库建模采用ER方法,实体划分:用户、图书,图书分类操作结果单独设计一个关系:图书分类,用户和图书的关系形成借还记录。 数据库逻辑设计(采用PowerDesigner工具)如下图: ![数据库逻辑设计](images/数据库逻辑设计.png) 数据库物理设计(采用PowerDesigner工具)如下图: ![数据库物理设计](images/数据库物理设计.png) PB访问Oracle数据库采用OCI接口,如果PB连接Oracle数据库出现问题,请参考如下文章试试: [32位IDE访问Oracle 数据库错误的解决](https://blog.51cto.com/u_5526964/5936649) 数据库设计说明书在此不提供。 --- ## 4. 数据库脚本和数窗设计 使用PowerDesigner可以导出Oracle脚本,导出之前需要做如下设置,注意我使用Oracle 11g,所以下面假定使用11g。 * 选择菜单“Change current DBMS ...”,打开change the target dbms窗口,在其中设置目标数据库为oracle 11g,如下图: ![change current dbms](images/change_current_dbms.png) * 选择菜单“Edit Current DBMS ...”,在General选项卡的左边树中选择Oracle Version 11G-->Script-->Sql-->Format-->CaseSensitivityUsingQuote,然后点选No,如下图: ![DBMS Properties](images/DBMS_Properties.png) * 选择菜单“Generate Database...”,在General选项卡中设置脚本文件导出文件夹和名称,最后点确定就会导出SQL建库脚本,如下图: ![Database Generation-General](images/Database_Generation-General.png) 导出的SQL脚本没有表空间、用户、授权脚本,需要加上。索引、非空列、默认值、主键、外键均需检查是否正确,再增加一些测试记录,形成最终的脚本放在SQL目录下。 本项目采用PB作为IDE,中间层采用DataWindow(简称:数窗或者DW),DataWindow是PB提供的中间层对象,作为数据库和窗口之间的联系纽带。数窗设计如下: * dw_type 分类管理对象 浏览编辑图书分类记录,如下图: ![dw_type](images/dw_type.png) 关键属性包括:Freeform风格、QuickSelect数据源、选择t_type表的所有列、ID升序排列、边框样式采用ShadowBox * dw_book 图书管理对象 浏览编辑图书记录,如下图: ![dw_book](images/dw_book.png) 关键属性包括: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](images/dw_book_type.png) 关键属性包括:Tabular 风格、QuickSelect数据源、选择t_type表的所有列、ID升序排列、边框样式采用ShadowBoxtype表的所有列、ID升序排列、边框样式采用ShadowBox 后者用作出版社列的数据源,如下图: ![dw_book_company](images/dw_book_company.png) 关键属性包括:Tabular 风格、External数据源(外部数据源定义为ID/string/5和title/string/20,斜杠分隔的第一个数据是列名,第二个是数据类型,第三个是长度)、列标题背景为Button Face、列对象的Display ONLY属性值为TRUE、列对象的Show Focus Rectangle设为false * dw_user 用户管理对象 浏览编辑用户记录,如下图: ![dw_user](images/dw_user.png) 关键属性包括:Freeform风格、QuickSelect数据源、选择t_user表的所有列、ID升序排列、边框样式采用ShadowBox * dw_log 借还管理对象 记录借还操作,如下图: ![dw_log](images/dw_log.png) 关键属性设置参见源代码,不在此列出。 有两个子对象:dw_log_book 和 dw_log_user,前者用作图书单列的数据源,如下图: ![dw_log_book](images/dw_log_book.png) 关键属性设置参见源代码,不在此列出。 后者用作用户单列的数据源,如下图: ![dw_log_user](images/dw_log_user.png) 关键属性设置参见源代码,不在此列出。 * 查询类对象包括:dw_query_user 和 dw_query_log 前者用作用户查询选择,如下图: ![dw_query_user](images/dw_query_user.png) 注意这里需要创建一个query对象,命名为q_user,数据源就关联这个query对象,其他关键属性设置参见源代码,不在此列出。 后者用于选择指定用户的借书记录,如下图: ![dw_query_log](images/dw_query_log.png) 关键属性设置参见源代码,不在此列出。 --- ## 5. 窗口设计 PB支持可视化窗口界面设计,这是他能快速开发应用程序的原因之一。下图是窗口设计总图: ![窗口设计](images/窗口设计.png) 具体设计参见源码。 --- ## 6. 事件代码 PB是事件驱动的,所以几乎所有代码都在控件的事件中。具体事件的代码编写参见源码,其中有详细的注释。 --- ## 7. 系统测试 执行后主界面如下图: ![主界面](images/主界面.png) 分类管理界面如下图: ![分类管理界面](images/分类管理界面.png) 用户管理界面如下图: ![用户管理界面](images/用户管理界面.png) 图书管理界面如下图: ![图书管理界面](images/图书管理界面.png) 借书管理界面如下图: ![借书管理界面](images/借书管理界面.png) 记录查询界面如下图: ![记录查询界面](images/记录查询界面.png) 关于界面如下图: ![关于界面](images/关于界面.png) --- ## 8. 开放源码 gitee开放源码地址为:https://gitee.com/radarfyh/library_manager.git