数据库应用系统开发案例 │ 图书现场采购系统

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 数据库应用系统开发案例 │ 图书现场采购系统

01、系统需求分析


通过对用户应用环境、图书采购过程及各有关环节的分析,系统的需求可以归纳为两点:


(1)数据需求:数据库数据要完整、同步、全面地反映图书馆现有馆藏的全部信息。


(2)功能需求:具有现场书目查询、查重、图书选购和输出功能。信息采集要方便快捷,数据更新维护要自动高效,系统操作要简单实用。在执行选购时,用户界面要能直接、直观地显示待选图书是否有过入藏及入藏情况的信息,以供采购决策。


对于本系统,具体需要实现以下一些基本功能:


(1)用户登录功能:用户能够输入用户名和密码,通过数据库连接判断用户是否为该系统的合法用户,并允许合法用户登录到系统中。


(2)用户管理功能:包括编辑、添加和删除用户信息的功能。


(3)采购数据导入功能:书商书目数据采用的是Excel格式,系统应提供Excel格式数据到SQL Server 2012数据库的数据导入功能。


(4)采购数据管理功能:能实现对采购数据进行查询、新增、修改以及删除的功能。


(5)图书选购管理功能:能实现扫描选购、批量查重选购和查询选购功能。扫描选购功能是指在现场对图书逐本扫描选购,并判断是否与馆藏重复;批量查重选购功能是根据书商所提供的书目数据对图书馆馆藏数据进行批查重,一次找出全部与馆藏未重的或重复的书商书目数据;查询选购功能是从不同的检索入口,检索要采购的图书,馆藏情况,还决定是否采购。


(6)统计输出功能:实现对采购的结果统计输出。


02、系统设计


1●系统功能设计

图书现场采购系统主要实现图书的现场快速采购、数据增删改和数据处理功能,该系统分为5个主要功能模块,如图1所示。

image.png


1)用户登录

用户登录实现用户输入用户名、密码并校验。

2)用户管理

用户管理包括用户登录以及用户的编辑、添加和删除。

3)采购数据导入

采购数据导入提供Excel文件到SQL Server 2012数据库的导入功能。

4)采购数据管理

采购数据管理主要实现对采购基本信息的录入、修改、删除和查询等操作。在录入的数据中,ISBN、价格等字段需要校验,以保证数据的正确性。

5)图书选购管理

图书选购管理包括3个方面:扫描选购、批量查重选购和查询选购。

(1)扫描选购功能:一般每种图书的ISBN号是唯一的(系列丛书除外),扫描选购原理为:设置好选购数据量,用扫描枪来扫描图书的ISBN号,如果ISBN号与馆藏ISBN号重复,判断是否选购;同时判断当前是否选过一次。

(2)批量查重选购功能:根据书商所提供的书目数据对图书馆馆藏数据进行批查重,查重字段为ISBN号、书名或作者,一次找出全部与馆藏未重的或重复的书商书目数据。

(3)查询选购功能:按书名、作者、ISBN、出版社等查找书商图书,对找到的每条书目数据,需提示当前书目在图书馆是否已经采购过,来决定当前图书是否采购。

6)统计输出

对当前选购好的图书统计其种类、册数和金额,并可输出订购清单。


2●数据库设计

1)数据库概念结构设计

图书现场采购所涉及的数据只有书商图书、图书馆馆藏图书信息和订购数量信息,订购数量可以合在书商图书实体当中,规划出的实体为书商图书实体和馆藏图书实体,其关系模式如下。

书商图书(ISBN号,书名,作者,分类号,价格,出版年,出版社,提供商,订购数)

馆藏图书(ISBN号,书名,作者,分类号,价格,出版年,出版社,图书馆,馆藏量)


2)数据库逻辑结构设计

现在需要将上面的数据库概念结构的关系模式转化为SQL Server 2012数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。在实体的基础上,形成数据库中的表。


图书现场采购管理系统数据库中各个表的设计如表1和表2所示。每个表表示在数据库中的一个数据表,这两个表字段名一样,只是在最后两个字段(Book_Num和Provider)所代表的意义不同。表1为书商图书基本信息表,表2为图书馆图书馆藏基本信息表,表3为用户注册信息表。

image.png

image.png

image.png


03、系统主界面的实现


系统主界面包括“用户登录”窗体和系统主窗体


1●“用户登录”窗体的实现

系统启动后,首先执行main过程,启动“用户登录”窗体(LoginWnd),如图2所示。

image.png

“用户登录”窗体中放置2个文本框(TextBox),用来输入用户名和密码;2个按钮(Button)用来进入和退出系统;3个标签(Label)用来显示窗体的信息。这些控件的属性设置见表4。

image.png

在窗体中,输入“用户名”和“密码”后,在“登录”的btnLogin_Click()事件中,通过CheckLogin()方法查看SQL Server数据库用户表中是否与用户输入的用户名和密码相匹配的记录,如果返回值为1,则输入的用户名和密码正确,进入主窗体。实现的代码如下:

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        CheckLogin()
    End Sub
    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        Application.Exit()
    End Sub
Private Sub CheckLogin()
        errorProvider.Clear()
        If txtBoxUserName.Text = "" Then
            txtBoxUserName.Focus()
            errorProvider.SetError(txtBoxUserName, "请输入用户名")
            Exit Sub
        End If
        If txtBoxPassword.Text = "" Then
            txtBoxPassword.Focus()
            errorProvider.SetError(txtBoxPassword, "请输入密码")
            Exit Sub
        End If
        Dim queryString As String = "select count(*) from UserEnroll_Info where Username=@Username and UserPassword=@Password"
        Dim con As New SqlConnection(connectionString)
        Try
            con.Open()
            '连接成功
        Catch ex As Exception
            '连接失败
            errorProvider.SetError(btnLogin, "连接失败")
            Exit Sub
        End Try
        Dim cmd As New SqlCommand(queryString, con)
        cmd.Parameters.Add("@Username", SqlDbType.VarChar)
        cmd.Parameters("@Username").Value = txtBoxUserName.Text
        cmd.Parameters.Add("@Password", SqlDbType.VarChar)
        cmd.Parameters("@Password").Value = txtBoxPassword.Text
        Try
            Dim ret As Integer = Convert.ToInt32(cmd.ExecuteScalar)
            If ret Then
                '登录成功
                username = txtBoxUserName.Text
                Dim mainWnd As New MainWnd
                mainWnd.Show()
                Finalize()
            Else
                '登录失败
                errorProvider.SetError(btnLogin, "用户名或者密码错误")
            End If
        Catch ex As Exception
            '数据库操作失败
            errorProvider.SetError(btnLogin, "数据库操作失败")
            con.Close()
        End Try
        con.Close()
    End Sub

2●系统主窗体的实现

1)数据表结构的实现

经过需求分析和概念结构设计以后,得到了数据库的逻辑结构。现在就可以在SQL Server 2012数据库系统中实现该逻辑结构。下面给出在查询编辑器中创建这些表的SQL语句。可以将这些表创建在命名为“图书现场采购”的数据库中。


(1)创建书商图书基本信息表BookSeller_BookInfo。

CREATE TABLE [dbo].[BookSeller_BookInfo](
  [REC_ID] [bigint] IDENTITY(1,1) NOT NULL,
  [ISBN] [nvarchar](20) NOT NULL,
  [BookName] [nvarchar](200) NOT NULL,
  [Author] [nvarchar](50) NOT NULL,
  [Publisher_Date] [smalldatetime] NOT NULL,
  [Publisher] [nvarchar](50) NOT NULL,
  [Class_Name] [nvarchar](50) NOT NULL,
  [Book_Price] [money] NOT NULL,
  [Book_Num] [int] NOT NULL,
  [Provider] [nvarchar](50) NOT NULL
)

(2)创建图书馆图书馆藏基本信息表Library_BookInfo。

CREATE TABLE [dbo].[Library_BookInfo](
  [REC_ID] [bigint] IDENTITY(1,1) NOT NULL,
  [ISBN] [nvarchar](20) NOT NULL,
  [BookName] [nvarchar](200) NOT NULL,
  [Author] [nvarchar](50) NOT NULL,
  [Publisher_Date] [smalldatetime] NOT NULL,
  [Publisher] [nvarchar](50) NOT NULL,
  [Class_Name] [nvarchar](50) NOT NULL,
  [Book_Price] [money] NOT NULL,
  [Book_Num] [int] NOT NULL,
  [Provider] [nvarchar](50) NOT NULL
)

(3)创建用户注册表UserEnroll_Info。

CREATE TABLE [dbo].[UserEnroll_Info](
  [REC_ID] [int] IDENTITY(1,1) NOT NULL,
  [UserName] [nvarchar](50) NOT NULL,
  [UserPassword] [nvarchar](50) NOT NULL,
  [UserMemo] [nvarchar](200) NOT NULL
)

2)系统主窗体的创建

上面的SQL语句在SQL Server 2012管理平台查询窗口中执行后,将自动产生需要的所有表。有关数据结构的所有后台工作已经完成。现在将通过图书现场采购系统中功能模块的实现,介绍如何使用VB .NET来编写数据库系统的客户端程序。

(1)创建项目LibrarySys。

(2)创建图书现场采购管理系统主窗体。

VB .NET创建的应用程序可以是SDI(单文档界面)和MDI(多文档界面)。这里采用MDI多文档界面,可以使程序更为美观、整齐有序。

新建项目后,VB .NET的设计环境中将产生一个默认的窗体Form1。把这个窗体将作为项目的主窗体。将窗体重命名为MainWnd,IsMdiContainer属性设置为True,并将窗体的Text属性设置为“图书现场采购系统”,将相对应的form1.vb文件重命名为MainWnd.vb。

(3)创建主窗体菜单。

从工具栏中拖放一个MenuStrip控件到主窗体MainWnd中,单击主窗体下方的菜单控件图标,在主窗体的菜单栏中按照表5所示的结构依次输入各个菜单项的标题。

image.png

菜单设置完成后,主窗体如图3所示,需要为主菜单添加处理事件,在窗体设计器中双击菜单项,可以为该菜单添加相应的处理事件,对于菜单项只有Click事件。如“用户管理”菜单的Click事件如下:

Private Sub mnuUser_Click(sender As Object, e As EventArgs) Handles mnuUser.Click
        Dim userManageWnd As New UserManageWnd
        userManageWnd.ShowDialog() '打开用户管理窗

image.png

(4)引入命名空间。

引入命名空间,以便在代码中使用来自该命名空间的元素,而不用完全限定该元素。为项目指定要导入的命名空间,它将应用于项目中的所有文件,而使用Imports语句引用的命名空间,只可以在单个源代码文件中使用。本系统因为每项功能都要用到SQL Server数据库,因此需要为项目引入System.Data.SqlClient命名空间,以便整个系统在代码编写中可以直接使用System.Data.SqlClient下的类。

执行菜单“项目”→“LibrarySys属性”命令,在打开的项目属性窗口中选择“引用”选项卡,然后在“导入命名空间”中选择“System.Data.SqlClient”并保存。

(5)创建公用模块。

在VB .NET中可以用公用模块来存放整个项目公用的函数、全局变量等。便于各窗体模块调用公用模块中的函数、变量,以提高代码的效率。在解决方案资源管理器中为项目添加一个Module,保存为ConfigModule.vb,此项目的公用模块程序中的过程和函数如下:

①SQL Server 2012服务器连接字符串函数。

connectionString = "Data Source=(local);Initial Catalog=图书现场采购系统;Integrated Security=True"

②SQL命令执行函数。

Public txtSQL As String '存放SQL语句
    Public DBSet As DataSet '查询得到的记录集
    Public ErrorMsg As String '存放错误信息
    Public Function ExecuteSQL(ByVal strSQL As String, ByRef errMsg As String) As Integer
        '函数执行SQL的INSERT、DELETE、UPDATE和SELECT语句
        '对于INSERT、DELETE、UPDATE语句,ExecuteSQL返回更新的记录数:-1表示程序异常;0表示更新失败;大于0表示操作成功,更新的记录数
        '对于SELECT语句:DBSet为返回的数据集;ExecuteSQL为返回的查询记录数。
        Dim cnn As SqlClient.SqlConnection
        Dim cmd As New SqlClient.SqlCommand()
        Dim adpt As SqlClient.SqlDataAdapter
        Dim rst As New DataSet()
        Dim SplitSQL() As String
        errMsg = ""
        Try
            SplitSQL = Split(strSQL)
            cnn = New SqlClient.SqlConnection(connectionString)
            If InStr("INSERT,DELETE,UPDATE", UCase(SplitSQL(0))) Then
                cmd.Connection = cnn
                cmd.Connection.Open()
                cmd.CommandText = strSQL
                ExecuteSQL = cmd.ExecuteNonQuery() '返回更新数据记录条数
            Else
                adpt = New SqlClient.SqlDataAdapter(strSQL, cnn)
                adpt.Fill(rst)
                ExecuteSQL = rst.Tables(0).Rows.Count '返回查询记录条数
                DBSet = rst
            End If
        Catch ex As Exception
            errMsg = ex.Message
            ExecuteSQL = -1  '表示执行SQL失败
        Finally
            rst = Nothing
            cnn = Nothing
        End Try
    End Function

③启动函数SubMain。

Sub main()
    Dim LoginWnd As New LoginWnd
connectionString = "Data Source=(local);Initial Catalog=图书现场采购系统;Integrated Security=True"
    LoginWnd.ShowDialog()
End Sub

系统启动时,首先执行用户登录窗体。


04、用户管理模块的实现


用户管理模块主要实现登录后用户信息的编辑、添加和删除功能。


05、采购数据导入模块的实现


采购数据导入模块主要实现Excel文件的书目数据导入到书商图书表(BookSeller_BookInfo)中。


06、采购数据管理模块的实现


采购数据管理模块主要实现采购数据查询、采购数据新增、采购数据修改和采购数据删除等功能。


07、图书选购管理模块的实现


图书选购管理模块主要实现扫描选购、批量查重选购和查询选购等功能。


08、统计输出模块的实现


选择“统计输出”菜单项,将出现“统计输出”窗体。这个窗体中可以显示所有订购的数据,统计出订购图书的种数、册数和金额,并可以Excel格式输出订购图书清单。


相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
12天前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
19天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
32 3
|
19天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
36 2
|
20天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
64 3
|
19天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
19 1
|
24天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
24 1
|
11天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
27 4
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
86 1
|
20天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
61 2