01、系统需求分析
通过对用户应用环境、图书采购过程及各有关环节的分析,系统的需求可以归纳为两点:
(1)数据需求:数据库数据要完整、同步、全面地反映图书馆现有馆藏的全部信息。
(2)功能需求:具有现场书目查询、查重、图书选购和输出功能。信息采集要方便快捷,数据更新维护要自动高效,系统操作要简单实用。在执行选购时,用户界面要能直接、直观地显示待选图书是否有过入藏及入藏情况的信息,以供采购决策。
对于本系统,具体需要实现以下一些基本功能:
(1)用户登录功能:用户能够输入用户名和密码,通过数据库连接判断用户是否为该系统的合法用户,并允许合法用户登录到系统中。
(2)用户管理功能:包括编辑、添加和删除用户信息的功能。
(3)采购数据导入功能:书商书目数据采用的是Excel格式,系统应提供Excel格式数据到SQL Server 2012数据库的数据导入功能。
(4)采购数据管理功能:能实现对采购数据进行查询、新增、修改以及删除的功能。
(5)图书选购管理功能:能实现扫描选购、批量查重选购和查询选购功能。扫描选购功能是指在现场对图书逐本扫描选购,并判断是否与馆藏重复;批量查重选购功能是根据书商所提供的书目数据对图书馆馆藏数据进行批查重,一次找出全部与馆藏未重的或重复的书商书目数据;查询选购功能是从不同的检索入口,检索要采购的图书,馆藏情况,还决定是否采购。
(6)统计输出功能:实现对采购的结果统计输出。
02、系统设计
1●系统功能设计
图书现场采购系统主要实现图书的现场快速采购、数据增删改和数据处理功能,该系统分为5个主要功能模块,如图1所示。
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为用户注册信息表。
03、系统主界面的实现
系统主界面包括“用户登录”窗体和系统主窗体
1●“用户登录”窗体的实现
系统启动后,首先执行main过程,启动“用户登录”窗体(LoginWnd),如图2所示。
“用户登录”窗体中放置2个文本框(TextBox),用来输入用户名和密码;2个按钮(Button)用来进入和退出系统;3个标签(Label)用来显示窗体的信息。这些控件的属性设置见表4。
在窗体中,输入“用户名”和“密码”后,在“登录”的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所示的结构依次输入各个菜单项的标题。
菜单设置完成后,主窗体如图3所示,需要为主菜单添加处理事件,在窗体设计器中双击菜单项,可以为该菜单添加相应的处理事件,对于菜单项只有Click事件。如“用户管理”菜单的Click事件如下:
Private Sub mnuUser_Click(sender As Object, e As EventArgs) Handles mnuUser.Click Dim userManageWnd As New UserManageWnd userManageWnd.ShowDialog() '打开用户管理窗
(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格式输出订购图书清单。