数据库应用系统开发数据库系统开发案例—图书现场采购系统系统主窗体的实现1.数据表结构的实现经过前面的需求分析和概念结构设计以后,得到了数据库的逻辑结构。
现在就可以在SQL Server 2000数据库系统中实现该逻辑结构。
可以直接在SQL Server 2000企业管理器中创建表,也可以在SQL查询分析器中创建。
下面给出在查询分析器中创建这些表的SQL语句,读者可以将这些表创建在系统的pubs数据库中。
(1)创建书商图书基本信息表bookseller_bookinfoCREATE TABLE bookseller_bookinfo(rec_id Bigint identity(1,1) PRIMARY KEY,isbn varchar(20) null,bookname varchar(200) null,author varchar(50) null,publisher_date varchar(50) null,publisher varchar(50) null,class_name varchar(50) null,book_price numeric DEFAULT 0,book_num int DEFAULT 0,provider varchar(50) null)(2)创建图书馆图书馆藏基本信息表library_bookinfoCREATE TABLE library_bookinfo (rec_id Bigint identity(1,1) PRIMARY KEY,isbn varchar(20) null,bookname varchar(200) null,author varchar(50) null,publisher_date varchar(50) null,publisher varchar(50) null,class_name varchar(50) null,book_price numeric DEFAULT 0,book_num int DEFAULT 0,provider varchar(50) null)(3)创建用户注册表user_infoCREATE TABLE user_info (user_ID varchar(10) PRIMARY KEY ,user_PWD varchar(10) null)2.系统主窗体的创建上面的SQL语句在SQL Server 2000中查询分析器执行后,将自动产生需要的所有表。
有关数据结构的所有后端工作已经完成。
现在将通过图书现场采购系统中功能模块的实现,介绍如何使用Visual Basic来编写数据库系统的客户端程序。
(1)创建工程项目BOOKCG_MIS启动VB,在VB工程模板中选择“标准EXE”,VB将自动产生一个Form窗体,这里删除这个窗体。
单击“文件→保存工程”菜单项,保存工程,将这个工程命名为BookCG_MIS.vbp。
(2)创建图书现场采购管理系统主窗体(frmmin.frm)Visual Basic创建的应用程序可以是SDI(单文档界面)和MDI(多文档界面)。
这里采用MDI多文档界面,可以使程序更为美观、整齐有序。
单击工具栏中的“添加MDI窗体”按钮,添加一个多文档界面,后单击工具栏中的“菜单编辑器”创建主窗体的菜单,生成一个如图14-15所示的主窗体,主窗体的Caption属性设为“图书现场采购管理系统”,Name(名称)属性为“frmmain”。
主窗体保存文件名为frmmain.frm。
菜单结构参考图14-12。
图14-15 系统主窗体(3)创建公用模块(Module1.bas)在Visual Basic中可以用公用模块来存放整个工程项目公用的函数、全局变量等。
便于各窗体模块调用公用模块中的函数、变量,以提高代码的效率。
在项目资源管理器中为项目添加一个Module,保存为Module1.bas,此工程项目的公用模块程序中的过程和函数据如下:①SQL Server 2000服务器连接字符串函数Public Function ConnectString() As String'ConnectString = "Provider=SQLOLEDB.1;Password=sa;User ID=;Initial Catalog=pubs; Data Source =127.0.0.1"ConnectString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=wzh"'设置SQL Server2000数据库链接字符串,此字符串可保存在目录文件中End Function②SQL命令执行函数Public Function ExecuteSQL(ByV al SQL As String, MsgString As String) As ADODB.RecordsetDim cnn As ADODB.ConnectionDim rst As ADODB.RecordsetDim sTokens() As StringOn Error GoTo ExecuteSQL_ErrorsTokens = Split(SQL)Set cnn = New ADODB.Connectioncnn.Open ConnectStringIf InStr("INSERT,DELETE,UPDA TE,EXECUTE", UCase$(sTokens(0))) Then cnn.Execute (SQL)MsgString = sTokens(0) & " query successful"ElseSet rst = New ADODB.Recordsetrst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimisticSet ExecuteSQL = rstMsgString = "查询到" & rst.RecordCount & " 条记录"End IfExecuteSQL_Exit:Set rst = NothingSet cnn = NothingExit FunctionExecuteSQL_Error:MsgString = "查询错误: " & Err.DescriptionResume ExecuteSQL_ExitEnd Function这两个函数在后面的实例中将频繁用到,ConnectString函数为连接SQL Server 2000数据库的参数调用函数,为简便起见写在程序中,实际应用中可以把连接数据库的参数保存在配置文件中,通过程序来调用。
ExecuteSQL函数执行SQL语句,如删除、更新、添加和查询,只有执行查询语句时才返回记录集对象。
③启动函数SubMainSub main()register.ShowEnd Sub系统启动时,首先执行用户登录窗体。
用户管理模块的实现用户管理模块主要实现对软件的加密,防止盗版,使得软件只能在注册的机器上运行,主要实现生成机器码、用户注册和用户登录验证的功能。
所有这些功能在系统的用户登录界面中实现。
1.用户登录窗体的创建图14-16 登录窗体用户登录窗体中放置两个文本框(TextBox),用来输入用户名和密码;2个按钮(CommandButton)用来登录和退出系统;1个标签(Label)用来显示窗体的。
这些控件的属性设置见表14-12。
表14-12 登录窗体中各个控件的属性设置Private Sub cmdok_Click() '验证成功时进入系统Dim txtsql As String '用来存放SQL语句Dim mrc As ADODB.Recordset '用来存放返回记录集对象Dim msgtext As String '用来存放返回信息If username.Text = "" ThenMsgBox "请输入用户名!"username.SetFocusElsetxtsql = "select * from user_info where user_ID= '" & username.Text & "'"Set mrc = ExecuteSQL(txtsql, msgtext) '在用户表中查找用户If mrc.EOF Then '没找到用户,回到用户名输入框MsgBox "没有这个用户!"username.SetFocusElse '找到用户,比较密码是否正确If Trim(mrc.Fields("user_PWD")) = Trim(userpassword.Text) ThenUsername_OK = Trim(userpassword.Text) '记录用户名Unload Me '密码正确,进行系统frmmain.ShowElse '密码不对,重新输入MsgBox "输入密码不对!,请重新输入"userpassword.SetFocusEnd IfEnd IfEnd IfEnd SubPrivate Sub cmdcancel_Click() '退出系统EndEnd Sub采购数据管理模块的实现采购数据管理模块主要实现如下功能:添加采购信息、修改采购信息、和查询采购信息。
1.添加采购信息窗体的创建选择“采购数据处理→采购数据添加”菜单,将出现如图14-19所示的窗体。
图14-19 添加采购数据窗体在窗体中放置了多个文本框,用来输入图书及采购信息;两个命令按钮用来确定添加采购信息和退出;加入多个标签用来提示文本框内容。
这些控件的属性设置如表14-13所示。
表14-13 添加采购信息窗体中各控件的属性设置用户输入完采购图书的基本信息后,单击“添加”按钮将触发cmdxjadd_Click事件,代码如下:Private Sub cmdxjadd_Click()Dim mrc As ADODB.Recordset '定义数据集对象Dim txtsql As String '定义查询字符串变量Dim msgtext As String '定义字符串变量,用来返回查询信息'判断是否输入了ISBN号If Trim(Text1.Text) = "" ThenMsgBox "请输入ISBN号", vbOKOnly, "警告"Text1.SetFocusExit SubEnd If'判断是否输入了书名If Text2.Text = "" ThenMsgBox "请输入书名", vbOKOnly, "警告"Text2.SetFocusExit SubEnd If'判断是否输入了出版社If Text4.Text = "" ThenMsgBox "请输入出版社", vbOKOnly, "警告"Text4.SetFocusExit SubEnd If'判断是否输入了价格If Text6.Text = "" ThenMsgBox "请输入订价", vbOKOnly, "警告"Text6.SetFocusExit SubEnd If'判断输入的价格是不是数值If Not IsNumeric(Text6.Text) ThenMsgBox "价格输入不为数字!"Text6.SetFocusExit SubEnd If'判断是否输入了订购数If Text8.Text = "" ThenMsgBox "请输入订购数量", vbOKOnly, "警告"Text8.SetFocusExit SubEnd If'判断输入的订购数是不是数值If Not IsNumeric(Text8.Text) ThenMsgBox "订购数输入不为数字!"Text8.SetFocusExit SubEnd If'添加数据到SQL Server 2000数据库中txtsql = "select * from bookseller_bookinfo"Set mrc = ExecuteSQL(txtsql, msgtext)'添加一条记录进入数据库中mrc.AddNewmrc.Fields("isbn") = Trim(Text1.Text)mrc.Fields("bookname") = Trim(Text2.Text)mrc.Fields("class_name") = Trim(Text3.Text)mrc.Fields("publisher") = Trim(Text4.Text)mrc.Fields("author") = Trim(Text5.Text)mrc.Fields("book_price") = Trim(Text6.Text)mrc.Fields("publisher_date") = V al(Trim(Text7.Text))mrc.Fields("book_num") = V al(Trim(Text8.Text))mrc.Fields("provider") = Trim(Text9.Text)mrc.UpdateMsgBox "添加数据成功", vbOKOnly, "提示"mrc.CloseEnd Sub程序对是否输入了内容进行判断,同时进行了数值数据判断,使用了IsNumeric()函数,判断了价格和订购数量是不是数值。