数据库应用系统开发案例 │ 图书现场采购系统
01、系统需求分析
通过对用户应用环境、图书采购过程及各有关环节的分析,系统的需求可以归纳为两点:
(1)数据需求:数据库数据要完整、同步、全面地反映图书馆现有馆藏的全部信息。
(2)功能需求:具有现场书目查询、查重、图书选购和输出功能。信息采集要方便快捷,数据更新维护要自动高效,系统操作要简单实用。在执行选购时,用户界面要能直接、直观地显示待选图书是否有过入藏及入藏情况的信息,以供采购决策。
对于本系统,具体需要实现以下一些基本功能:
(1)用户登录功能:用户能够输入用户名和密码,通过数据库连接判断用户是否为该系统的合法用户,并允许合法用户登录到系统中。
(2)用户管理功能:包括编辑、添加和删除用户信息的功能。
(3)采购数据导入功能:书商书目数据采用的是Excel格式,系统应提供Excel格式数据到SQL Server 2012数据库的数据导入功能。
(4)采购数据管理功能:能实现对采购数据进行查询、新增、修改以及删除的功能。
(5)图书选购管理功能:能实现扫描选购、批量查重选购和查询选购功能。扫描选购功能是指在现场对图书逐本扫描选购,并判断是否与馆藏重复;批量查重选购功能是根据书商所提供的书目数据对图书馆馆藏数据进行批查重,一次找出全部与馆藏未重的或重复的书商书目数据;查询选购功能是从不同的检索入口,检索要采购的图书,馆藏情况,还决定是否采购。
(6)统计输出功能:实现对采购的结果统计输出。
02、系统设计
1●系统功能设计
图书现场采购系统主要实现图书的现场快速采购、数据增删改和数据处理功能,该系统分为5个主要功能模块,如图1所示。
■ 图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为用户注册信息表。
表1 BookSeller_BookInfo书商图书基本信息表
表2 Library_BookInfo图书馆图书馆藏基本信息表
表3 UserEnroll_Info用户注册信息表
03、系统主界面的实现
系统主界面包括“用户登录”窗体和系统主窗体
1●“用户登录”窗体的实现
系统启动后,首先执行main过程,启动“用户登录”窗体(LoginWnd),如图2所示。
■ 图2 “用户登录”窗体
“用户登录”窗体中放置2个文本框(TextBox),用来输入用户名和密码;2个按钮(Button)用来进入和退出系统;3个标签(Label)用来显示窗体的信息。这些控件的属性设置见表4。
表4 “用户登录”窗体中各个控件的属性设置
在窗体中,输入“用户名”和“密码”后,在“登录”的btnLogin_Click()事件中,通过CheckLogin()方法查看SQL Server数据库用户表中是否与用户输入的用户名和密码相匹配的记录,如果返回值为1,则输入的用户名和密码正确,进入主窗体。实现的代码如下:
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.ClickCheckLogin()End SubPrivate Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickApplication.Exit()End Sub
Private Sub CheckLogin()errorProvider.Clear()If txtBoxUserName.Text = "" ThentxtBoxUserName.Focus()errorProvider.SetError(txtBoxUserName, "请输入用户名")Exit SubEnd IfIf txtBoxPassword.Text = "" ThentxtBoxPassword.Focus()errorProvider.SetError(txtBoxPassword, "请输入密码")Exit SubEnd IfDim queryString As String = "select count(*) from UserEnroll_Info where Username=@Username and UserPassword=@Password"Dim con As New SqlConnection(connectionString)Trycon.Open()'连接成功Catch ex As Exception'连接失败errorProvider.SetError(btnLogin, "连接失败")Exit SubEnd TryDim cmd As New SqlCommand(queryString, con)cmd.Parameters.Add("@Username", SqlDbType.VarChar)cmd.Parameters("@Username").Value = txtBoxUserName.Textcmd.Parameters.Add("@Password", SqlDbType.VarChar)cmd.Parameters("@Password").Value = txtBoxPassword.TextTryDim ret As Integer = Convert.ToInt32(cmd.ExecuteScalar)If ret Then'登录成功username = txtBoxUserName.TextDim mainWnd As New MainWndmainWnd.Show()Finalize()Else'登录失败errorProvider.SetError(btnLogin, "用户名或者密码错误")End IfCatch ex As Exception'数据库操作失败errorProvider.SetError(btnLogin, "数据库操作失败")con.Close()End Trycon.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所示的结构依次输入各个菜单项的标题。
表5 主窗体菜单结构
菜单设置完成后,主窗体如图3所示,需要为主菜单添加处理事件,在窗体设计器中双击菜单项,可以为该菜单添加相应的处理事件,对于菜单项只有Click事件。如“用户管理”菜单的Click事件如下:
Private Sub mnuUser_Click(sender As Object, e As EventArgs) Handles mnuUser.ClickDim userManageWnd As New UserManageWnduserManageWnd.ShowDialog() '打开用户管理窗
■ 图3 系统主窗体
(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.SqlConnectionDim cmd As New SqlClient.SqlCommand()Dim adpt As SqlClient.SqlDataAdapterDim rst As New DataSet()Dim SplitSQL() As StringerrMsg = ""TrySplitSQL = Split(strSQL)cnn = New SqlClient.SqlConnection(connectionString)If InStr("INSERT,DELETE,UPDATE", UCase(SplitSQL(0))) Thencmd.Connection = cnncmd.Connection.Open()cmd.CommandText = strSQLExecuteSQL = cmd.ExecuteNonQuery() '返回更新数据记录条数Elseadpt = New SqlClient.SqlDataAdapter(strSQL, cnn)adpt.Fill(rst)ExecuteSQL = rst.Tables(0).Rows.Count '返回查询记录条数DBSet = rstEnd IfCatch ex As ExceptionerrMsg = ex.MessageExecuteSQL = -1 '表示执行SQL失败Finallyrst = Nothingcnn = NothingEnd TryEnd 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格式输出订购图书清单。
数据库应用系统开发案例 │ 图书现场采购系统相关推荐
- 人力资源系统开发案例
第六章 人力资源系统开发案例 可根据实际需求进行二次开发 6.1 人事管理 人事管理模块包括:人事档案.档案查询.合同管理.奖罚管理.证照管理.学习经历.工作经历.劳动技能.社会关系.人事调动.离职 ...
- 网校系统开发如何做才能保证系统稳定发展
疫情的出现,加速了在线教育的发展.尤其是在教育领域本就资源不平等的环境中,在线教育的出现,无疑是改善了教育领域存在的弊端.网校系统开发商也紧紧抓住机会,开发出不同版本的网校系统,供有所需求的用户使用. ...
- BPM 应用系统开发案例实战
概述 IBM BPM 的前身是 Lombardi,是由 IBM 于 2009 年收购的产品,之后产品更名为 IBM WebSphere Lombardi Edition,目前最新版本称为 IBM BP ...
- Android原生系统开发如何优雅的提供系统级的API供第三方程序调用?
目录 故事背景 二.开发步骤 Step1.添加一个专属系统级服务 2.1.1.模仿Android原生服务接口,如WifiManager,规划自己的Manager 2.1.2.为我们的Manager生成 ...
- php免费虚拟商城系统,开发免费php开源商城系统的难处
纵观现在的电商行业,免费php开源商城系统确是很受人们的欢迎,这还是要归结于php商城系统的优势.所以,还是有很多的商家热衷于开发php商城系统的,在开发php开源购物系统时也会遇到一些难题.今天MC ...
- 社区团购系统开发哪家好 新零售系统厂商如何选择
根据最新的数据显示,社区团购火爆之后,社区团购企业想要规范.高效地做好社区团购是必须要搭建社区团购平台的,但是在搭建平台之前往往被社区团购系统开发服务哪家好困扰, 新零售系统厂商如何选择 本文就来为大 ...
- [ARM嵌入式系统开发]第一章之嵌入式系统的软硬件
本章的最后,通过描述ARM为核心的嵌入式系统,来介绍了嵌入式系统的软件和硬件构成和结构.这里根据这部分的介绍以及其他的文章,描述下通用的嵌入式系统的软件和硬件. 首先来说下硬件,书中说,包含有 ...
- 数据库开发案例—图书管理系统设计
目录 第1关 数据库表设计-图书表 本关任务:创建图书管理数据库系统的图书表. 数据库整体设计 代码实现 第2关 数据库表设计-读者表 代码实现 第3关 数据库表设计-关联表 代码实现 第1关 数据库 ...
- SpreadJS与Vue集成,苏宁集团『极客办公』系统开发案例
"造极"如今已成为苏宁集团的年度核心关键词."造极"在具体工作上的体现,代表着苏宁不断追求极致的工匠精神,即对待每一个环节,都要严格要求.精益求精." ...
最新文章
- cannot import name #39get_all_providers#39
- Spring Cloud(二) 配置Eureka Client
- 正则表达式,grep,sed,
- 中国版“微软”要来了?某国产操作系统称已可以替代Windows 7
- 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖
- 前端学习(2991):vue+element今日头条管理--使用vue-cli解决问题
- hive安装mysql驱动_Hadoop-2.6.0为基础的Hive安装
- 【VB.NET】VB.NET文件问题的解答
- VS2013+OpenCV3.0编译CMT跟踪算法
- matlab进行动力吸振器设计,动力吸振器的参数设计和动力学分析
- Oracle中的within,oracle中within group的用法
- 【动弹有奖】——OSC登录并发送动弹分析(附python源码)
- 西门子uss通讯实例_西门子USS通信调试经历
- JDK和JRE和JVM的区别
- 北京二手房市场价量齐升 上演“大逆转”
- 为什么说跳槽加薪低于30%,等于在“降薪”?
- PHP - 垃圾回收机制收集
- 内存取证-volatility工具的使用 (史上更全教程,更全命令)
- layui后台管理首页配置
- idea 解决java文件导入java 文件灰色右下角橙色java图标显示