收藏 分销(赏)

数据库应用系统开发-程序代码.doc

上传人:精*** 文档编号:2243746 上传时间:2024-05-23 格式:DOC 页数:31 大小:315.54KB 下载积分:12 金币
下载 相关 举报
数据库应用系统开发-程序代码.doc_第1页
第1页 / 共31页
数据库应用系统开发-程序代码.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
数据库应用系统开发_程序代码 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 2 个人收集整理 勿做商业用途 数据库应用系统开发 数据库系统开发案例—图书现场采购系统 系统主窗体的实现 1.数据表结构的实现 经过前面的需求分析和概念结构设计以后,得到了数据库的逻辑结构.现在就可以在SQL Server 2000数据库系统中实现该逻辑结构。可以直接在SQL Server 2000企业管理器中创建表,也可以在SQL查询分析器中创建。下面给出在查询分析器中创建这些表的SQL语句,读者可以将这些表创建在系统的pubs数据库中。 (1)创建书商图书基本信息表bookseller_bookinfo CREATE TABLE bookseller_bookinfo( rec_id Bigint PRIMARY KEY nextval(’serial'), 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_bookinfo CREATE TABLE library_bookinfo ( rec_id Bigint PRIMARY KEY nextval('serial’), 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)创建用户注册表userenroll_info CREATE TABLE userenroll_info ( rec_id int PRIMARY KEY nextval('serial'), machine varchar(50) null, decode varchar(50) null ) 2.系统主窗体的创建 上面的SQL语句在SQL Server 2000中查询分析器执行后,将自动产生需要的所有表。有关数据结构的所有后端工作已经完成。现在将通过图书现场采购系统中功能模块的实现,介绍如何使用Visual Basic来编写数据库系统的客户端程序。 (1)创建工程项目BOOKCG_MIS 启动VB,在VB工程模板中选择“标准 EXE",VB将自动产生一个Form窗体,这里删除这个窗体。单击“文件→保存工程”菜单项,保存工程,将这个工程命名为BookCG_MIS。vbp。 (2)创建图书现场采购管理系统主窗体 Visual Basic创建的应用程序可以是SDI(单文档界面)和MDI(多文档界面)。这里采用MDI多文档界面,可以使程序更为美观、整齐有序。 单击工具栏中的“添加MDI窗体”按钮,添加一个多文档界面,后单击工具栏中的“菜单编辑器”创建主窗体的菜单,生成一个如图14-15所示的主窗体,主窗体的Caption属性设为“图书现场采购管理系统”,Name属性为“frmmain”。主窗体保存文件名为frmmain。frm.菜单结构参考图14-12。 图14—15 系统主窗体 (3)创建公用模块 在Visual Basic中可以用公用模块来存放整个工程项目公用的函数、全局变量等.便于各窗体模块调用公用模块中的函数、变量,以提高代码的效率。在项目资源管理器中为项目添加一个Module,保存为Module1。bas,此工程项目的公用模块程序中的过程和函数据如下: ①SQL Server 2000服务器连接字符串函数 Public Function ConnectString() As String ConnectString = "Provider=SQLOLEDB.1;Password=sa;User ID=sa;Initial Catalog=pubs; Data Source =127.0.0。1” '设置SQL Server2000数据库链接字符串,此字符串可保存在目录文件中 End Function ②SQL命令执行函数 Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset Dim cnn As ADODB.Connection Dim rst As ADODB。Recordset Dim sTokens() As String On Error GoTo ExecuteSQL_Error sTokens = Split(SQL) Set cnn = New ADODB.Connection cnn。Open ConnectString If InStr("INSERT,DELETE,UPDATE,EXECUTE”, UCase$(sTokens(0))) Then cnn.Execute (SQL) MsgString = sTokens(0) & " query successful" Else Set rst = New ADODB。Recordset rst。Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic Set ExecuteSQL = rst MsgString = "查询到" & rst。RecordCount & ” 条记录 ” End If ExecuteSQL_Exit: Set rst = Nothing Set cnn = Nothing Exit Function ExecuteSQL_Error: MsgString = "查询错误: ” & Err.Description Resume ExecuteSQL_Exit End Function 这两个函数在后面的实例中将频繁用到,ConnectString函数为连接SQL Server 2000数据库的参数调用函数,为简便起见写在程序中,实际应用中可以把连接数据库的参数保存在配置文件中,通过程序来调用。ExecuteSQL函数执行SQL语句,如删除、更新、添加和查询,只有执行查询语句时才返回记录集对象。 ③启动函数SubMain Sub main() register。Show End Sub 系统启动时,首先执行用户登录窗体。 用户管理模块的实现 用户管理模块主要实现对软件的加密,防止盗版,使得软件只能在注册的机器上运行,主要实现生成机器码、用户注册和用户登录验证的功能。所有这些功能在系统的用户登录界面中实现。 1.用户登录窗体的创建 系统启动后,如果未注册,则显示如图14-16所示的窗体,如果注册成功后,将显示如图14—17所示的窗体。两个图中所有控件在同一窗体中,只是在不同的情况下隐藏了相应的控件. 图14-16 未注册时的窗体 图14-17 注册后用户登录窗体 用户登录窗体中放置两个文本框(TextBox),用来输入机器码和注册码;3个按钮(CommandButton)用来进入、注册和退出系统;3个标签(Label)用来显示窗体的信息.这些控件的属性设置见表14-12。 表14-12 登录窗体中各个控件的属性设置 控件 属性 属性取值 说明 Register(Form) Caption 登录 窗体 StartUpPosition CenterScreen 窗体显示在屏幕中央 Text1 Name Text1 机器码文本框 Text2 Name Text2 注册码文本框 cmdok Caption 进入 命令按钮 cmdcancel Caption 退出 退出按钮 cmdenroll Caption 注册 注册按钮 Label1 Caption 图书现场采购管理系统 提示 Label2 Caption 机器码为: Label3 Caption 请输入注册码: 此程序在Form_load()实现的代码如下: Private Sub Form_Load() Dim machine As String ’机器码 Dim machine_decode As String ’机器码对应的注册码 Dim txtsql As String '用来存放SQL语句 Dim mrc As ADODB.Recordset '用来存放返回记录集对象 Dim msgtext As String '用来存放返回信息 machine = GetSerialNumber("c:") '取硬盘的序列号作为机器码 machine_decode = getserialn() ’取硬盘机器码对应的注册码 text1。Text = machine '在Text1文本框中显示机器码 txtsql = ”select * from userenroll_info where machine=’" & machine & ”' and decode='" & machine_decode & ”'” Set mrc = ExecuteSQL(txtsql, msgtext) '在用户注册表中查找机器码和注册码 If mrc.EOF Then ’没找到机器注册信息,显示登录界面中的注册框,隐藏进入按钮 ' MsgBox ”没有注册信息!” cmdok。Visible = False cmdenroll。Visible = True Else '找到机器注册信息,隐藏登录界面中的注册框,显示进入按钮 'MsgBox ”找到注册信息" cmdok。Visible = True cmdenroll。Visible = False Label2。Visible = False Label3。Visible = False text1.Visible = False text2.Visible = False End If Set mrc = Nothing End Sub Private Sub cmdok_Click() '验证成功时进入系统 Unload Me frmmain.Show End Sub Private Sub cmdcancel_Click() ’退出系统 End End Sub 2.生成机器码函数 Function GetSerialNumber(strDrive As String) As Long ’获取机器码函数,取硬盘的序列号 Dim SerialNum As Long Dim Res As Long Dim Temp1 As String Dim Temp2 As String Temp1 = String$(255, Chr$(0)) Temp2 = String$(255, Chr$(0)) Res = GetVolumeInformation(strDrive, Temp1, _ Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2)) GetSerialNumber = —SerialNum End Function Function getserialn() As String ’获取机器码对应的注册码,对硬盘的序列号(机器码)进行变换,转为注册码 Dim inputseial As String Dim n As String Dim n1 As String Dim n2 As String Dim p As Long Dim p1 As Long Dim p2 As Long Dim i As Long p = 0 p1 = 0 p2 = 0 n = ”” n1 = ”” n2 = "” n = Str(GetSerialNumber("c:")) n1 = n n2 = n If Len(n) < 20 Then n = n + String(20 — Len(n), ”Z”) n1 = n1 + String(20 — Len(n1), ”A”) n2 = n2 + String(20 - Len(n2), "H") ElseIf Len(n) > 20 Then n = Left(n, 20) n1 = Left(n1, 20) n2 = Left(n2, 20) End If For i = 1 To 20 p = p + Asc(Mid(n, i, 1)) * 199 p1 = p1 + Asc(Mid(n1, i, 1)) * 179 p2 = p2 + Asc(Mid(n2, i, 1)) * 109 Next inputseial = Format(p) + ”—” + Format(p1) + ”-" + Format(p2) getserialn = inputseial End Function 在GetSerialNumber()函数中需要调用API函数GetVolumeInformation()来获取盘区信息,其中卷序列号也就是磁盘每个分区的序列号,此函数需在用户登录窗体中申明,函数格式如下。 Private Declare Function GetVolumeInformation Lib _ "kernel32。dll" Alias "GetVolumeInformationA" (ByVal _ lpRootPathName As String, ByVal lpVolumeNameBuffer As _ String, ByVal nVolumeNameSize As Integer, _ lpVolumeSerialNumber As Long, lpMaximumComponentLength _ As Long, lpFileSystemFlags As Long, ByVal _ lpFileSystemNameBuffer As String, ByVal _ nFileSystemNameSize As Long) As Long ’ 取硬盘卷信息的动态链接库 此函数不需要手工输入,可通过VB工具“API文本浏览器”获取,在Windows桌面选择“开始→程序→ Microsoft Visual Basic 6.0中文版→ Microsoft Visual Basic 6。0中文版工具→API文本浏览器”选项,打开API阅览器如下图14—18所示。从“文件”菜单中选择“加载文本文件”菜单项,加载WIN32API。TXT文本文件,此时在“可用项”中选择“GetVolumeInformation”并双击,则此函数的声明显示在“选定项”文本框中,此时可将此函数复制用户管理窗体中。 图14-18 API文本浏览器 3.用户注册程序 如果用户第一次登录,则应在文本框(text2)中输入从软件商处取得的注册码,进行注册,执行cmdenroll_Click程序后,将机器码和注册码写入SQL Server 2000数据库中。 Private Sub cmdenroll_Click() '在text2中输入软件商所提供的注册码,写入数据库的userenroll_info表中 Dim txtsql As String ’用来存放SQL语句 Dim mrc As ADODB。Recordset ’用来存放返回记录集对象 Dim msgtext As String '用来存放返回信息 If Len(text2.Text) 〈〉 20 Then MsgBox "您输入的注册码错误!” Exit Sub End If If text2.Text 〈〉 getserialn() Then MsgBox ”注册码错误,请重新输入!” Exit Sub End If '注册码输入正确,写入数据库,同时显示进入按钮,隐藏注册对象。 On Error GoTo err1 txtsql = ”INSERT INTO userenroll_info (machine,decode) values (’” & text1。Text & "’,'” & text2.Text & "’)” Set mrc = ExecuteSQL(txtsql, msgtext) ’在用户注册表中查找机器码和注册码 MsgBox ”注册成功!" cmdok.Visible = True cmdenroll.Visible = False Label2.Visible = False Label3。Visible = False text1.Visible = False text2.Visible = False Exit Sub err1: MsgBox "添加注册信息失败!” End Sub 采购数据管理模块的实现 采购数据管理模块主要实现如下功能:添加采购信息、修改采购信息、和查询采购信息。 1.添加采购信息窗体的创建 选择“采购数据处理→采购数据添加"菜单,将出现如图14-19所示的窗体. 图14—19 添加采购数据窗体 在窗体中放置了多个文本框,用来输入图书及采购信息;两个命令按钮用来确定添加采购信息和退出;加入多个标签用来提示文本框内容.这些控件的属性设置如表14—13所示. 表14-13 添加采购信息窗体中各控件的属性设置 控件 属性 属性值 说明 Frmxjadd(Form) Name frmxjadd 当前窗体 Caption 采购数据添加 Text1 Name Text1 输入ISBN号文本框 Text2 Name Text2 输入书名文本框 Text3 Name Text3 输入分类文本框 Text4 Name Text4 输入出版社文本框 Text5 Name Text5 输入作者文本框 Text6 Name Text6 输入价格文本框 Text7 Name Text7 输入出版年文本框 Text8 Name Text8 输入订购数量文本框 Text9 Name Text9 输入提供商文本框 cmdxjadd Name cmdxjadd 添加命令按钮 cmdexit Name cmdexit 退出命令按钮 Label1 Caption ISBN号: 提示标签 Label2 Caption 书名: Label3 Caption 分类: Label4 Caption 出版社: Label5 Caption 作者: Label6 Caption 价格: Label7 Caption 出版年: Label8 Caption 订购数: Label9 Caption 提供商: 用户输入完采购图书的基本信息后,单击“添加”按钮将触发cmdxjadd_Click事件,代码如下: Dim mrc As ADODB。Recordset '定义数据集对象 Dim txtsql As String ’定义查询字符串变量 Dim msgtext As String ’定义字符串变量,用来返回查询信息 ’判断是否输入了ISBN号 If Trim(Text1.Text) = ”” Then MsgBox ”请输入ISBN号”, vbOKOnly, ”警告" Text1。SetFocus Exit Sub End If '判断是否输入了书名 If Text2.Text = ”” Then MsgBox ”请输入书名”, vbOKOnly, ”警告” Text2。SetFocus Exit Sub End If ’判断是否输入了出版社 If Text4。Text = "” Then MsgBox "请输入出版社”, vbOKOnly, ”警告” Text4。SetFocus Exit Sub End If '判断是否输入了价格 If Text6。Text = "" Then MsgBox ”请输入订价", vbOKOnly, ”警告” Text6。SetFocus Exit Sub End If '判断输入的价格是不是数值 If Not IsNumeric(Text6.Text) Then MsgBox "价格输入不为数字!" Text6.SetFocus Exit Sub End If ’判断是否输入了订购数 If Text8。Text = "” Then MsgBox ”请输入订购数量", vbOKOnly, "警告" Text8.SetFocus Exit Sub End If '判断输入的订购数是不是数值 If Not IsNumeric(Text8.Text) Then MsgBox ”订购数输入不为数字!" Text8。SetFocus Exit Sub End If ’添加数据到SQL Server 2000数据库中 txtsql = ”select * from bookseller_bookinfo" Set mrc = ExecuteSQL(txtsql, msgtext) '添加一条记录进入数据库中 mrc.AddNew mrc.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") = Val(Trim(Text7.Text)) mrc。Fields(”book_num") = Val(Trim(Text8。Text)) mrc。Fields(”provider”) = Trim(Text9.Text) mrc。Update MsgBox ”添加数据成功", vbOKOnly, "提示" mrc。Close End Sub 程序对是否输入了内容进行判断,同时进行了数值数据判断,使用了IsNumeric()函数,判断了价格和订购数量是不是数值。单击“退出"按钮触发cmdexit_Click事件,代码如下: Private Sub cmdexit_Click() Unload Me ’卸载窗体 End Sub 2.修改采购信息窗体的创建 选择“采购数据处理→采购数据修改”菜单,将出现如图14-20所示的窗体.这个窗体包括了采购信息的修改和删除,在上面用户管理和采购数据添加中对SQL Server 2000数据库的操作是通过ADO对象模型的引用来实现。下面在采购信息的修改中将采用ADO控件来实现。 在修改采购信息窗体中所有控件的属性设置如表14—14所示。 图14-20 修改采购信息窗体 表14—14 修改采购信息窗体中各个控件的属性设置 控件名称 属性 属性值 说明 Frmxjmodify(form) name frmxjmodify 窗体 caption 修改采购信息 ADODC1 name ADODC1 ADO控件 visible False 不可见 CommandType 2-adCmdTable 表 ConnectionString Provider=SQLOLEDB。1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=127。0.0。1 数据库连接字符串 RecordSource bookseller_bookinfo 采购数据表 UserName sa Password sa Text1 name Text1 书名文本框 DataSource Adodc1 数据源 DataField bookname 字段名 Text2 name Text2 ISBN文本框 DataSource Adodc1 DataField isbn Text3 name Text3 作者文本框 DataSource Adodc1 DataField author Text4 name Text4 出版社文本框 DataSource Adodc1 DataField publisher Text5 name Text5 出版年文本框 DataSource Adodc1 DataField Publisher_date Text6 name Text6 价格文本框 DataSource Adodc1 DataField price Text7 name Text7 分类文本框 DataSource Adodc1 DataField Class_name Text8 name Text8 选购数量文本框 DataSource Adodc1 DataField Book_num Text9 name Text9 提供商文本框 DataSource Adodc1 DataField provider Command1 Name Command1 第一条 Command2 Name Command2 上一条 Command3 Name Command3 下一条 Command4 Name Command4 最后一条 Command5 Name Command5 更新记录 Command6 Name Command6 取消更新 Command7 Name Command7 删除记录 Command8 Name Command8 退出 各命令按钮触发相应的事件,程序代码如下: Private Sub Command1_Click() '指针移到第一条记录 Adodc1.Recordset。MoveFirst End Sub Private Sub Command2_Click() '指针移到上一条记录,如果记录指针移到BOF,则记录指针指到第一条,并给出提示 Adodc1.Recordset.MovePrevious If Adodc1.Recordset。BOF Then Adodc1.Recordset.MoveFirst MsgBox ”已到第一条记录!" End If End Sub Private Sub Command3_Click() '指针移到下一条,如果记录指针移到EOF,则记录指针指到最后一条,并给出提示 Adodc1。Recordset.MoveNext If Adodc1.Recordset.EOF Then Adodc1。Recordset。MoveLast MsgBox "已到最后一条记录” End If End Sub Private Sub Command4_Click() ’记录指针指到最后一条 Adodc1。Recordset。MoveLast End Sub Private Sub Command5_Click() '更新当前记录 Dim bookmark As Variant '定义书签,记录当前记录的位置 bookmark = Adodc1。Recordset。bookmark If Trim(Text1。Text) = "” Then '判断修改后的书名是否为空 MsgBox ”书名不能为空!", vbOKOnly, ”警告" Adodc1。Refresh '数据库中的数据刷新文本框 Adodc1。Recordset。bookmark = bookmark '回到要修改记录位置 Text1.SetFocus Exit Sub End If If Trim(Text2。Text) = "" Then '判断修改后的ISBN信息是否为空 MsgBox ”ISBN信息不能为空!", vbOKOnly, ”警告" Adodc1.Refresh Adodc1。Recordset.bookmark = bookmark Text2。SetFocus Exit Sub End If '判断输入的价格是不是数值 If Not IsNumeric(Text6.Text) Then MsgBox ”价格不为数字!” Text6。SetFocus Exit Sub End If ’判断输入的订购数是不是数值 If Not IsNumeric(Text8。Text) Then MsgBox "订购数量修改不为数字!” Text8。SetFocus Exit Sub End If ’更新当前记录 Adodc1。Recordset.Update MsgBox ”当前记录已更新!", vbOKOnly, ”提示" End Sub Private Sub Command7_Click() '删除当前记录 Adodc1。Recordset.Delete Adodc1.Recordset.MoveFirst MsgBox ”当前记录已删除!", vbOKOnly, "提示” End Sub Private Sub Command8_Click() ’退出 Unload Me End Sub Private Sub Command6_Click() '取消更新 Dim bookmark As Variant bookmark = Adodc1。Recordset。bookmark Adodc1.Refresh Adodc1。Recordset。bookmark = bookmark End Sub 3.查询采购信息窗体的创建 选择“采购数据处理→采购数据查询”菜单,进入如图14-21所示的窗体。可以按ISBN号、书名、作者、出版社、出版年、分类和提供商进行查询以及各字段的排序。 图14—21 采购数据查询窗体 在采购信息查询窗体中用到了一个DataGrid控件,需在VB中选择“工程→部件”菜单打开的对话框中选择“MicroSoft DataGrid Controls 6.0 (OLEDB)”组件加入。查询窗体中所包含的控件及其属性如表14—15。 表14—15 查询采购信息窗体中各个控件及属性设置 控件 属性 属性值 说明 Frmxjquery(Form) name frmxjquery 采购数据查询窗体 Caption 采购数据查询 Adodc1 name Adodc1 ADO数据连接控件 ConnectionString Provider=SQLOLEDB。1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=127.0。0.1 CommandType 1-adCmdText SQL语句 RecordSource select * from bookseller_info Username sa Password sa DataGrid1 Name DataGrid1 数据网格控件 DataSource Adodc1 Combo1 Na
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 数据库/数据算法

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服