第一篇:用VB编写一个简单的图书管理系统分解
用VB编写一个简单的图书管理系统
Srl2011009(学号)石二辽(姓名)
指导教师 徐哲鑫
【摘 要】笔者采用Visual Basic 6.0 为开发工具,设计一款具备友好的图形用户界面、简便操作的图书管理系统。充分利用计算机功能实现读者管理、书籍管理、借还书籍管理等信息的自动化控制,将使图书管理员从繁杂、重复的劳作中解放出来。
【关键词】图书;面向对象;软件工程
1概述
1.1开发背景
用计算机管理图书馆里一切信息是一种计算机应用技术的创新,在计算机还未普及之前图书管理都是由图书管理人员手工记帐的方式来操作的.现在一般的图书馆都是采用计算机作为工具,使用实用的图书管理程序来帮助图书馆管理员进行更有效的图书管理。
1.2图书管理系统产生的背景
图书管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于台数据库的建立和维护要求建立起数据一致性和完整性强、数据安全性好的库。
[1]而对于前端应用程序则要求应用程序具备功能完备、友好的图形用户界面、便捷使用等特点。
1.3 系统功能要求的分析
开发本系统的总体任务是实现图书管理系统的系统化和自动化,帮助图书管理员更好更高效地完成图书管理工作,本系统要完成的功能主要有: 书籍管理部分:图书类别管理和图书信息管理。其中,书籍类别管理包括添加书籍类别、修改书籍类别、删除书籍类别等;书籍信息管理包括书籍信息的添加、修改、查询、删除等。
读者管理部分:读者类别管理和读者信息管理,读者类别管理包括读者类别添加、修改、删除等;读者信息包括读者添加读者信息、修改读者信息、查询读者信息、删除读者信息等。
借阅管理部分:借书信息管理和还书信息管理,借书信息管理、还书信息管理均包括其信息的添加、修改、查询等。
系统管理部分:添加管理员,修改密码,退出系统。
2开发环境及实现技术介绍
2.1开发软件介绍
由于我的工作单位是一所中心小学,有大量的书籍,读者有学生、老师,于是本人想设计一款实用的图书管理系统,方便学校图书管理员工作,增强图书借阅力度,良好地管理书籍及其借阅信息。
2.2模块设计[2]
书籍管理部分实现对书籍类别、书籍信息的添加、修改、删除等操作。读者管理部分实现对读者类别、读者信息的添加、修改、删除等操作。借阅管理部分实现对借书信息、还书信息的添加、修改、查询等操作。
系统管理部分实现超级用户对普通用户的用户名和密码对注册、修改等操作。
2.3程序预览
运行本系统程序,首先出现登录界面(图2),输入正确用户名及密码后进入主窗体(图3),主窗体上的主菜单栏有:书籍管理、读者管理、借阅管理、系统设置及帮助。
图2
图3
2.3.1书籍管理功能
“书籍管理”菜单下有两个一级菜单:“书籍信息管理”和“书籍类别管理”。具体操作如下: 1.“书籍类别管理”下有三个子菜单:“新增”、“修改”、“删除”。单击“新增”菜单,打开“新增书籍类别”窗体(图4)。单击“修改”或“删除”,都会打开“书籍类别信息管理”窗体(图5)。
图4 图5 2.“书籍信息管理”下有四个子菜单:“新增图书”、“修改书籍信息”、“删除书籍信息”、“查询书籍信息”。单击“新增图书”菜单,打开“新增书籍”窗体(图6)。单击“修改”或“删除”,都会打开“书籍信息管理”窗体(图7)。单击“查询书籍信息”菜单,打开“查询图书”窗体(图8)
图6
图7
图8 2.3.2读者管理功能
“读者管理”菜单下有两个一级菜单:“读者类别管理”和“读者信息管理”。1.“读者类别管理”下有3个子菜单:“添加读者类别”、“修改读者类别”、“删除读者类别”。单击“添加读者类别”菜单,打开“添加读者类别”窗体(图9);单击“修改读者类别”和“删除读者类别”菜单,都会打开“读者类别管理”窗体(图10)。
图9 图10
2.“读者信息管理”菜单下有4个子菜单:“添加读者信息”、“修改读者信息”、“删除读者信息”和“查询读者信息”。单击“添加读者信息”菜单,打开“添加读者信息”窗体(图11),单击“修改读者信息”和“删除读者信息”菜单,都会打开“读者信息管理”窗体(图12),单击“查询读者信息”菜单,打开“查询读者信息”窗体(图13)。
图11
图12 图13
2.3.3图书借阅管理功能
“借阅管理”菜单下有2个一级菜单:“借书管理”和“还书管理”。
1.“借书管理”菜单下有2个子菜单:“添加借书信息”和“查询借书信息”。单击“添加借书信息”先打开的是“查询图书”窗体(图8),找到需要借阅的图书后,单击“借这本书按钮”,打开“借书”窗体(图14);单击“查询借书信息”菜单,打开“查询借书信息”窗体(图15)。
图14 图15
2.单击“还书管理”,打开“还书”窗体(图16)。
图16 2.3.4系统管理功能
“系统管理”菜单下有3个子菜单,分别是“添加管理员”、“修改密钥”和“退出系统”。单击“添加管理员”子菜单,打开“添加管理员”窗体(图17),单击“修改密钥”子菜单,打开“修改密码”窗体(图18),单击“退出系统”,备份数据并退出本系统。
图17 图18
2.3.5帮助菜单
单击“帮助”菜单,打开系统信息窗体(图1),点击系统信息窗体任何一处,关闭该信息窗体,返回主窗体。
图1 2.4数据库设计
数据库名为sj.mdb,在库中设计六张表,它们分别为dzlb(读者类别表)、dzxx(读者信息表)、jyxx(借阅信息表)、sjxx(书籍信息表)、sjlb(书籍类别表)、sys(系统管理表)。
2.4.1读者类别表,表名为dzlb,字段名称有读者类别名称、读者借书数量、借书期限及有限期限,设置“读者类别名称”为主键,是必填字段,不允许空值。
2.4.2读者信息表: 设置“读者编号”为主键,“读者编号”、“读者姓名”为必填字段,不允许空值。
2.4.3 借阅信息表:
2.4.4书籍信息表: 设置“图书编号”为主键,“图书编号”、“书籍名称”为必填字段,不允许空值。
2.4.5图书类别表:
2.4.6系统管理表:
2.4.7数据库连接方式选择
Visual basic6.0连接数据库的主要方式有以下几种方式:一是用data控件进行数据库链接,二是利用adodc(ADO Data Control)进行数据库链接。三是:利用DataEnvironment进行数据库链接,四是利用ADO(ActiveX Data Objects)进行编程。
[3]利用DAO对数据库进行操纵: 在visual basic 中提供了两种与jet数据引擎接口的方法:data控件与数据访问对象(DAO)DAO是database object的英文缩写,要访问数据库一方面数据库要提供访问接口,另一方面要在编程环境中有对数据库的支持.DAO模型是设计关系数据库系统结构的对象类的集合.他们提供了管理关系型数据库系统所需要的全部操作属性和方法,这其中包括建立数据库,定义表,字段和建立表间关系,定位和查询数据库等.[4] 关系数据库介绍: 关系数据库是目前各类数据库中最重要、最流行的数据库,他应用数学方法来处理数据库数据,是目前使用最广泛的数据库系统。20世纪70年代以后开发的数据库管理系统产品几乎都是基于关系的。在数据库发展的历史上,最重要的成就就是关系模型。
关系数据库系统与非关系数据库系统的区别是:关系系统只有“表“这一种数据结构;而非关系数据库系统还有其他数据结构,对这些数据结构有其他的操作。
结构化查询语言SQL(Structured Query Language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言。
Microsoft Access介绍: 使用 Microsoft Access,可以在单一的数据库文件中管理所有的信息。在这个文件中,用户可以将自己的数据分别保存在各自独立的存储空间中,这些空间称作表;可以使用联机窗体来查看、添加及更新表中的数据;使用查询来查找并检索所要的数据;也可以使用报表以特定的版面布置来分析及打印数据。
如果要保存数据,请为每一种类型的信息创建一个表。如果要从查询、窗体或报表中的多个表中将数据合并在一起,就要定义各个表之间的关系。
如果要搜索并检索符合指定条件的数据,包括来自多个表中的数据,就要创建查询。查询的同时也可以更新或删除多条记录,并对数据执行内嵌或自定义的计算。
如果要简单地直接在某个表中查看、输入及更改数据,请创建一个窗体。在打开一个窗体时,Microsoft Access 将从一个或多个表中检索数据,并使用用户在“窗体向导”选择的版面布局或所创建的版面布局,将窗体显示在屏幕上。
如果要分析数据或将数据以特定的方式打印出来,请创建一个报表。例如,可以打印一份将数据分组并计算数据总和的报表,也可以打印另一份带有各种数据格式的打印邮件标签的报表。
2.5系统代码[5]
2.5.1主界面代码: 2.5.1.1添加管理员菜单
Private Sub addadmin_Click()addadminf.Show End Sub 2.5.1.2添加读者类别菜单 Private Sub adddzlb_Click()Adddzlbf.Show End Sub 2.5.1.3添加读者信息菜单
Private Sub adddzxxf_Click()Adddzxxf.Show End Sub 2.5.1.4添加还书信息菜单 Private Sub addhs_Click()hsf.Show End Sub 2.5.1.5添加借书信息菜单 Private Sub addjs_Click()Jsf.Show End Sub 2.5.1.6添加图书类别菜单 Private Sub addlb_Click()addtslb.Show End Sub 2.5.1.7查询读者信息菜单 Private Sub cxdzxx_Click()cxdzxxf.Show End Sub 2.5.1.8查询借书信息菜单 Private Sub cxjs_Click()cxjsxxf.Show End Sub 2.5.1.9查询书籍信息菜单 Private Sub cxsj_Click()cxsjf.Show End Sub 2.5.1.10删除读者类别菜单 Private Sub Deldzlb_Click()dzlbxxf.Show End Sub 2.5.1.11删除读者信息菜单 Private Sub Deldzxx_Click()dzxxglf.Show End Sub 2.5.1.12删除书籍类别菜单 Private Sub dellb_Click()sjlbxxf.Show End Sub 2.5.1.13帮助菜单
Private Sub hlep_Click()frmSplash.Show End Sub 2.5.1.14退出系统菜单
Private Sub Unload_Click()end End Sub 2.5.1.15修改读者类别菜单 Private Sub Xgdzlb_Click()dzlbxxf.Show End Sub 2.5.1.16修改读者信息菜单 Private Sub xgdzxx_Click()dzxxglf.Show End Sub 2.5.1.17修改书籍类别菜单 Private Sub xglb_Click()sjlbxxf.Show End Sub 2.5.1.18修改用户密码菜单 Private Sub xgmm_Click()xgmmf.Show End Sub 2.5.1.19修改书籍信息菜单 Private Sub xgts_Click()sjxxf.Show End Sub 2.5.1.20新增图书信息菜单 Private Sub xzts_Click()addtsf.Show End Sub 2.5.2添加图书类别
添加图书类别代码: Private Sub Command1_Click()Dim Sq1 As String Dim rs_add As New ADODB.Recordset Sql = “select * from sjlb where 类别名称='” & Text1.Text & “'” rs_add.Open Sql, Sjk, adOpenKeyset, adLockPessimistic If Trim(Text1.Text)= “" Then MsgBox ”图书类别不能为空“, vbOKOnly + vbExclamation, ”注意“ Text1.SetFocus Exit Sub End If If Trim(Text2.Text)= ”“ Then MsgBox ”图书编号不能为空“, vbOKOnly + vbExclamation, ”注意“ Text2.SetFocus Exit Sub End If
If rs_add.EOF = True Then rs_add.AddNew rs_add.Fields(0)= Trim(Text2.Text)rs_add.Fields(1)= Trim(Text1.Text)rs_add.Update MsgBox ”成功地添加 “ & Text1.Text & ” 这一图书类别“, vbOKOnly, ”恭喜“ rs_add.Close Else MsgBox ” “ & Text1.Text & ” 这一图书类别已存在“, vbOKOnly + vbExclamation, ”图书类别不能重复“ rs_add.Close End If Text1.SetFocus Text1.Text = ”“ Text2.Text = ”“ End Sub Private Sub Command2_Click()Unload Me End Sub 2.5.3修改图书类别: 修改图书类别代码: Option Explicit Dim Myjl As New ADODB.Recordset Private Sub Form_Load()Dim Sq1 As String On Error GoTo loaderror Sq1 = ”select * from sjlb “ Myjl.CursorLocation = adUseClient Myjl.Open Sq1, Sjk, adOpenKeyset, adLockPessimistic Cmdcancel.Enabled = False Cmdupdate.Enabled = False Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False Set Dg.DataSource = Myjl Exit Sub loaderror: MsgBox Err.Description End Sub Private Sub Cmdadd_Click()Dg.AllowAddNew = True Dg.AllowUpdate = True Cmdadd.Enabled = False Cmdupdate.Enabled = True End Sub Private Sub Cmdadd_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Cmdadd.Caption = ”点击此处也可以添加“ Cmdadd.Width = 3000 End Sub Private Sub Cmdcancel_Click()Myjl.CancelUpdate Dg.Refresh Dg.AllowAddNew = False Dg.AllowUpdate = False Cmdxg.Enabled = True Cmddel.Enabled = True Cmdcancel.Enabled = False Cmdupdate.Enabled = False End Sub
Private Sub Cmddel_Click()Dim Srl As String On Error GoTo delerror Srl = MsgBox(”确定要删除吗?“, vbYesNo)If Srl = vbYes Then Dg.AllowDelete = True Myjl.Delete Myjl.Update Dg.Refresh Else Exit Sub End If delerror: MsgBox Err.Description End Sub Private Sub Cmdupdate_Click()If Not IsNull(Dg.Bookmark)Then Myjl.Update Cmddel.Enabled = True Cmdxg.Enabled = True Cmdcancel.Enabled = False Cmdupdate.Enabled = False Dg.AllowUpdate = False MsgBox ”修改成功“, vbOKOnly + vbExclamation, ”恭喜成功“ End If Cmdadd.Width = 1550 Cmdadd.Caption = ”高级“ Cmdadd.Enabled = True End Sub Private Sub Cmdxg_Click()Dim Srl As String On Error GoTo xg Cmddel.Enabled = False Cmdxg.Enabled = False Cmdupdate.Enabled = True Cmdcancel.Enabled = True Dg.AllowUpdate = True xg: If Err.Number <> 0 Then MsgBox Err.Description End If End Sub Private Sub Form_Unload(Cancel As Integer)Set Dg.DataSource = Nothing Myjl.Close End Sub 2.5.4添加读者类别界面: Private Sub Command1_Click()Dim Srl As String Dim Mybook As New ADODB.Recordset If Trim(Text1.Text)= ”“ Then MsgBox ”读者类别名称不能为空“, vbOKOnly + vbExclamation, ”注意“ Text1.SetFocus Exit Sub End If If Trim(Text2.Text)= ”“ Then MsgBox ”借书数量不能为空“, vbOKOnly + vbExclamation, ”注意“ Text2.SetFocus Exit Sub End If If Trim(Text3.Text)= ”“ Then MsgBox ”借书期限不能为空“, vbOKOnly + vbExclamation, ”注意“ Text3.SetFocus Exit Sub End If If Trim(Text4.Text)= ”“ Then MsgBox ”有效期限不能为空“, vbOKOnly + vbExclamation, ”注意“ Text4.SetFocus Exit Sub End If On Error GoTo Cw Srl = ”select * from dzlb where 读者类别名称='“ & Text1.Text & ”'“ Mybook.Open Srl, Sjk, adOpenKeyset, adLockPessimistic If Mybook.EOF Then Mybook.AddNew Mybook.Fields(0)= Trim(Text1.Text)Mybook.Fields(1)= Trim(Text2.Text)Mybook.Fields(2)= Trim(Text3.Text)Mybook.Fields(3)= Trim(Text4.Text)Mybook.Update MsgBox ” 您已经成功添加“ & Text1.Text & ”这一读者类别 “, vbOKOnly + vbExclamation, ”添加成功!“ Mybook.Close Else MsgBox ”读者类别名称为“ & Text1.Text & ” 重复“, vbOKOnly + vbExclamation, ”注意重复“ Text1.SetFocus Text1.Text = ”“ Mybook.Close Exit Sub End If Cw: MsgBox Err.Description End Sub Private Sub Command2_Click()Unload Me
End Sub
Private Sub Form_Load()Dim Sq1 As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量 End Sub
2.5.5查询读者信息代码: Private Sub Form_Load()Dim Sq1 As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量 Sq1 = ”select * from dzlb“ Myjl.Open Sq1, Sjk, adOpenKeyset, adLockPessimistic Do While Not Myjl.EOF Combo1.AddItem Myjl.Fields(0)Myjl.MoveNext Loop Combo1.ListIndex = 0 Myjl.Close End Sub
Private Sub Command1_Click()Dim Srl As String '定义一个字符串变量 Dim Mybook As New ADODB.Recordset '定义一个Recordset对象变量 If Check1.Value = vbChecked Then Srl = ”读者编号='“ & Trim(Text1.Text & ”“)& ”'“ End If
If Check2.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”读者姓名='“ & Trim(Text2.Text & ”“)& ”'“ Else Srl = Srl & ”and 读者编号='“ & Trim(Text2.Text & ”“)& ”'“ End If End If
If Check3.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”读者类别='“ & Trim(Combo1.Text & ”“)& ”'“ Else Srl = Srl & ”and 读者类别='“ & Trim(Combo1.Text & ”“)& ”'“ End If End If
If Srl = ”“ Then MsgBox ”请选择一种查询依据“, vbOKOnly + vbExclamation, ”查询方式“ Exit Sub End If
Srl = ”select * from dzxx where “ & Srl Mybook.CursorLocation = adUseClient Mybook.Open Srl, Sjk, adOpenKeyset, adLockPessimistic Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False Set Dg.DataSource = Mybook End Sub
Private Sub Command2_Click()Unload Me End Sub
2.5.6图书借阅管理模块代码: 2.5.6.1查询书籍窗体代码
Private Sub Form_Load()’窗体加载时就书籍类别加载到列表框中。Dim Sq1 As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量 Sq1 = ”select * from sjlb“ Myjl.Open Sq1, Sjk, adOpenKeyset, adLockPessimistic Do While Not Myjl.EOF Combo1.AddItem Myjl.Fields(1)Myjl.MoveNext Loop Combo1.ListIndex = 0 Myjl.Close End Sub
Private Sub Command1_Click()’查询命令按钮代码 Dim Srl As String '定义一个字符串变量
Dim Mybook As New ADODB.Recordset '定义一个Recordset对象变量
If Check1.Value = vbChecked Then Srl = ”书籍名称='“ & Trim(Text1.Text & ”“)& ”'“ End If
If Check2.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”图书编号='“ & Trim(Text2.Text & ”“)& ”'“ Else Srl = Srl & ”and 图书编号='“ & Trim(Text2.Text & ”“)& ”'“ End If End If If Check3.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”作者='“ & Trim(Text3.Text & ”“)& ”'“ Else Srl = Srl & ”and 作者='“ & Trim(Text3.Text & ”“)& ”'“ End If End If
If Check4.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”出版社='“ & Trim(Text4.Text & ”“)& ”'“ Else Srl = Srl & ”and 出版社='“ & Trim(Text4.Text & ”“)& ”'“ End If End If
If Check5.Value = vbChecked Then If Trim(Srl)= ”“ Then Srl = ”类别='“ & Trim(Combo1.Text & ”“)& ”'“ Else Srl = Srl & ”and 类别='“ & Trim(Combo1.Text & ”“)& ”'“ End If End If
If Srl = ”“ Then MsgBox ”请选择一种查询依据“, vbOKOnly + vbExclamation, ”查询方式“ Exit Sub End If
Srl = ”select * from sjxx where “ & Srl Mybook.CursorLocation = adUseClient Mybook.Open Srl, Sjk, adOpenKeyset, adLockPessimistic Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False Set Dg.DataSource = Mybook End Sub
为了获取表格某一单元格值,为DataGrid控件DG添加如下代码:
Private Sub Dg_RowColChange(LastRow As Variant, ByVal LastCol As Integer)On Error GoTo Cw Pand = Dg.Columns(7).CellValue(Dg.Bookmark)Bookunm = Dg.Columns(0).CellValue(Dg.Bookmark)’ Pand 和Bookunm是公共模块中定义的一个公共变量,Bookunm用来记录表格中某一书籍的图书编号,便于在借书窗体中再次调用。Exit Sub Cw: MsgBox Err.Description End Sub
Private Sub Command2_Click()Unload Me End Sub
Private Sub Command3_Click()’这是“借这本书”命令按钮,如果条件满足,就进入借书窗体了。If Trim(Bookunm)= ”“ Then MsgBox ”请选择要借阅的书籍“, vbOKOnly + vbExclamation, ”选择书籍“ Exit Sub End If If Trim(Pand)= ”是“ Then MsgBox ”此书已经被借出,请选择其它书籍“, vbOKOnly + vbExclamation, ”选择书籍“ Exit Sub End If Unload Me Jsf.Show End Sub
2.5.6.2借书窗体代码 Option Explicit Dim Lb As String '该读者类别
Dim Qx As String '该读者可借书的期限 Dim Yjsl As String '该读者已借书的数量 Dim Maxm As String '该读者借书量的限制
‘由在查询书籍的窗体满足了可以借书的条件进入此借书窗体,根据此书的图书编号,在本窗体加载时就加载了书籍的信息和读者列表。Private Sub Form_Load()Dim Mybook As New ADODB.Recordset Dim Mydz As New ADODB.Recordset Dim Srl As String Dim Sql As String Srl = ”select * from sjxx where 图书编号='“ & Bookunm & ”'“ Mybook.Open Srl, Sjk, adOpenKeyset, adLockPessimistic Label8.Caption = Mybook.Fields(0)Label9.Caption = Mybook.Fields(1)Label10.Caption = Mybook.Fields(2)Label11.Caption = Mybook.Fields(3)Label12.Caption = Mybook.Fields(4)Label13.Caption = Mybook.Fields(5)Label14.Caption = Mybook.Fields(6)Sql = ”select * from dzxx “ Mydz.Open Sql, Sjk, adOpenKeyset, adLockPessimistic If Not Mydz.EOF Then Do While Not Mydz.EOF Combo1.AddItem Mydz.Fields(0)Combo2.AddItem Mydz.Fields(1)Mydz.MoveNext Loop Combo1.ListIndex = 0 Else MsgBox ”请先登记读者“, vbOKOnly + vbExclamation, ”注意“ Exit Sub End If
Mybook.Close Mydz.Close
End Sub ‘由于读者编号与读者姓名是一一对应的,必须对用来加载这两个信息的两个列表框编写如下代码: Private Sub Combo1_Click()Combo2.ListIndex = Combo1.ListIndex End Sub Private Sub Combo2_Click()Combo1.ListIndex = Combo2.ListIndex End Sub
Private Sub Command1_Click()’这是借书的“确定”按钮 Dim Myjl As New ADODB.Recordset Dim Sql As String
Sql = ”select * from dzxx where 读者编号='“ & Combo1.Text & ”'“ Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Lb = Myjl.Fields(3)Yjsl = Myjl.Fields(8)Myjl.Close
Sql = ”select * from dzlb where 读者类别名称='“ & Lb & ”'“ Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Qx = Myjl.Fields(2)Maxm = Myjl.Fields(1)Myjl.Close
If Yjsl >= Maxm Then MsgBox ”该读者借书数额已满!“, vbOKOnly + vbExclamation Exit Sub End If
‘以上条件满足了,就将新借书信息添加到借阅信息数据库中,代码如下: Sql = ”select * from jyxx“ Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Myjl.AddNew Myjl.Fields(1)= Combo1.Text Myjl.Fields(2)= Combo2.Text Myjl.Fields(3)= Label8.Caption Myjl.Fields(4)= Label9.Caption Myjl.Fields(5)= Date Myjl.Fields(6)= DateAdd(”Ww“, Qx, Date)Myjl.Update Myjl.Close ‘同时,将此书在书籍信息(sjxx)表中的“是否被借出”设置为“是”。Sql = ”select * from sjxx where 图书编号='“ & Bookunm & ”'“ Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Myjl.Fields(7)= ”是“ Myjl.Update Myjl.Close
‘同时将该读者已借书数量上加1。
Sql = ”select * from dzxx where 读者编号='“ & Combo1.Text & ”'“ Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Myjl.Fields(8)= Myjl.Fields(8)+ 1 Myjl.Update Myjl.Close
MsgBox ”《“ & Label9.Caption & ”》 这本书成功地借给了读者姓名为 “ & Combo2.Text & ” 的读者!“, vbOKOnly + vbExclamation, ”借阅成功“ Unload Me End Sub
Private Sub Command2_Click()Unload Me End Sub
2.5.6.3查询借书窗体代码
Private Sub Command1_Click()Dim Sql As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量
If Option1.Value = True Then Sql = ”select * from sjxx where 是否被借出='是'“ End If
If Option2.Value = True Then Sql = ”select * from sjxx where 是否被借出='否'“ End If
If Option3.Value = True Then Sql = ”select * from jyxx where 读者姓名='“ & dzxm.Text & ”'“ End If
Myjl.CursorLocation = adUseClient Myjl.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False Set Dg.DataSource = Myjl End Sub
Private Sub Command2_Click()Unload Me
End Sub
Private Sub Option3_Click()dzxm.Visible = True End Sub
2.5.6.4还书窗体代码 Private Sub Form_Load()Dim mybook As New ADODB.Recordset Dim Mydz As New ADODB.Recordset Dim Srl As String Dim Sql As String Sql = ”select * from dzxx “ Mydz.Open Sql, Sjk, adOpenKeyset, adLockPessimistic If Not Mydz.EOF Then Do While Not Mydz.EOF Combo1.AddItem Mydz.Fields(0)Combo2.AddItem Mydz.Fields(1)Mydz.MoveNext Loop End If Mydz.Close Sql = ”select * from jyxx “ mybook.Open Sql, Sjk, adOpenKeyset, adLockPessimistic If Not mybook.EOF Then Do While Not mybook.EOF Combo3.AddItem mybook.Fields(3)Combo4.AddItem mybook.Fields(4)mybook.MoveNext Loop End If mybook.Close End Sub
Private Sub Combo1_Click()Combo2.ListIndex = Combo1.ListIndex End Sub Private Sub Combo2_Click()Combo1.ListIndex = Combo2.ListIndex End Sub
Private Sub Combo3_Click()Combo4.ListIndex = Combo3.ListIndex End Sub Private Sub Combo4_Click()Combo3.ListIndex = Combo4.ListIndex End Sub
Private Sub Command1_Click()Dim Mydz As New ADODB.Recordset Dim Sql As String findform = True Sql = ”select * from jyxx where 读者姓名='“ & Combo2.Text & ”' “ Mydz.CursorLocation = adUseClient Mydz.Open Sql, Sjk, adOpenKeyset, adLockPessimistic
Set Dg.DataSource = Mydz Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False End Sub
Private Sub Command2_Click()Dim mybook As New ADODB.Recordset Dim Sql As String findform = False Sql = ”select * from jyxx where 书籍编号='“ & Combo3.Text & ”' “ mybook.CursorLocation = adUseClient mybook.Open Sql, Sjk, adOpenKeyset, adLockPessimistic Set Dg.DataSource = mybook Dg.AllowAddNew = False Dg.AllowDelete = False Dg.AllowUpdate = False End Sub
Private Sub Command3_Click()Dim Book As String Dim Dz As String Dim Sql As String Dim W As String Dim mybook As New ADODB.Recordset On Error GoTo Cw Book = Dg.Columns(3).CellValue(Dg.Bookmark)Dz = Dg.Columns(1).CellValue(Dg.Bookmark)W = MsgBox(”确定要还这本书吗?“, vbYesNo, ”“)If W = vbYes Then Sql = ”select * from jyxx where 书籍编号='“ & Book & ”' “ mybook.CursorLocation = adUseClient mybook.Open Sql, Sjk, adOpenKeyset, adLockPessimistic mybook.Delete mybook.Update mybook.Close
Sql = ”select * from sjxx where 图书编号='“ & Book & ”'“ mybook.CursorLocation = adUseClient mybook.Open Sql, Sjk, adOpenKeyset, adLockPessimistic mybook.Fields(7)= ”否“ mybook.Update mybook.Close Sql = ”select * from dzxx where 读者编号='“ & Dz & ”' “ mybook.CursorLocation = adUseClient mybook.Open Sql, Sjk, adOpenKeyset, adLockPessimistic mybook.Fields(8)= mybook.Fields(8)-1 mybook.Update mybook.Close
If findform = True Then Command1_Click Else Command2_Click End If MsgBox ”还书成功!“, vbOKOnly + vbExclamation, ”“ Dg.AllowDelete = False Else Exit Sub End If Cw: MsgBox Err.Description End Sub
Private Sub Command4_Click()Unload Me End Sub
2.5.7系统管理
2.5.7.1登录界面代码 Option Explicit Dim cnt As Integer’用来记录点击“确定”的次数
Private Sub Form_Load()’
Dim ConnectionString As String ConnectionString = ”provider=Microsoft.Jet.oledb.4.0;data source=sj.mdb“ Sjk.Open ConnectionString’ Sjk是公用模块中定义的一个公共变量。cnt = 0 End Sub
Private Sub Cmdcancel_Click()End End Sub
Private Sub cmdOK_Click()Dim Sql As String Dim rs_add As New ADODB.Recordset If Trim(Text1.Text)= ”“ Then MsgBox ”用户名不能为空“, vbOKOnly + vbExclamation, ”注意“ Exit Sub Text1.SetFocus Else Sql = ”select * from sys where Uname='“ & Text1.Text & ”'“ rs_add.Open Sql, Sjk, adOpenKeyset, adLockPessimistic If rs_add.EOF = True Then MsgBox ”没 “ & Text1.Text & ” 有这个用户“, vbOKOnly + vbExclamation, ”“ Text1.SetFocus Else If Trim(rs_add.Fields(1))= Trim(Text2.Text)Then 'Unema = Text1.Text 'Uid = rs_add.Fields(2)rs_add.Close Mf.Show Unload Me Else
MsgBox ”密码不正确“, vbOKOnly + vbExclamation, ”注意“ Text2.SetFocus Text2.Text = ”“ End If End If End If cnt = cnt + 1 If cnt = 3 Then Unload Me
End If End Sub
Private Sub cmdOK_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)cmdOK.Caption = ”确定登录“ ‘只为增强动画效果,移动鼠标到cmdok按钮上时,显示的文字由原来的“确定”变为“确定登录” End Sub
2.5.7.2添加用户界面代码 Private Sub Form_Load()Dim Sjk As ADODB.Connection Dim Sj As ADODB.Recordset Combo1.AddItem ”管理员“ Combo1.AddItem ”来宾用户“ Set Sjk = New ADODB.Connection Set Sj = New ADODB.Recordset Sjk.ConnectionString = ”DSN=cn;UID=;PWD=;“ Sjk.ConnectionTimeout = 30 Sjk.Open If Sjk.State = adStateOpen Then _ MsgBox ”数据库加载成功,欢迎进入“添加管理员”界面!“ Sjk.Close End Sub
Private Sub Command1_Click()Dim Sq1 As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量 If Trim(Text1.Text)= ”“ Then '首先检查用户名是否为空 MsgBox ”用户名不能空“, vbOKOnly + vbExclamation, ”注意!“ Text1.SetFocus Exit Sub Else Sq1 = ”select * from sys“ Myjl.Open Sq1, Sjk, adOpenKeyset, adLockPessimistic While(Myjl.EOF = False)If Trim(Myjl.Fields(0))= Trim(Text1.Text)Then MsgBox ” “ & Text1.Text & ” 这个用户名已存在“, vbOKOnly + vbExclamation, ”注意!“ Text1.SetFocus Text1.Text = ”“ Text2.Text = ”“ Text3.Text = ”“ Combo1.Text = ”“ Exit Sub Else Myjl.MoveNext End If Wend If Trim(Text2.Text)<> Trim(Text3.Text)Then MsgBox ”两次输入的密码不一致,请重新设置 “, vbOKOnly + vbExclamation, ”注意!“ Text2.SetFocus Text2.Text = ”“ Text3.Text = ”“ Exit Sub Else Myjl.AddNew Myjl.Fields(0)= Text1.Text Myjl.Fields(1)= Text2.Text Myjl.Update Myjl.Close MsgBox ” 您已经成功添加“ & Text1.Text & ” 这个用户“, vbOKOnly + vbExclamation, ”注册成功!“ End If End If End Sub
Private Sub Command2_Click()Unload Me End Sub
2.5.7.3修改用户界面密码代码 Private Sub Command1_Click()Dim Sq1 As String '定义一个字符串变量
Dim Myjl As New ADODB.Recordset '定义一个Recordset对象变量
If Trim(Text1.Text)<> Trim(Text2.Text)Then MsgBox ”两次输入的密码不一致,请重新设置 “, vbOKOnly + vbExclamation, ”注意!“ Text1.SetFocus Text1.Text = ”“ Text2.Text = ”“ Exit Sub Else Sq1 = ”select * from sys where Uname='“ & Text3.Text & ”'“ Myjl.Open Sq1, Sjk, adOpenKeyset, adLockPessimistic If Myjl.EOF = True Then MsgBox ”没有“ & Text3.Text & ” 这个用户“, vbOKOnly + vbExclamation, ”“ Text3.SetFocus Else Myjl.Fields(1)= Text1.Text Myjl.Update Myjl.Close MsgBox ” 密码修改成功“, vbOKOnly + vbExclamation, ”成功!" Unload Me End If End If End Sub
Private Sub Command2_Click()Unload Me End Sub
后记:经过指导教师徐哲鑫老师的指点,本人已经竭尽全力对本系统进行具体设计,现已趋向完善,在此感谢老师的教导。
参考文献
[1] 谭浩强,薛淑斌,袁玫.Visual Basic程序设计.北京清华大学学研大厦:北京清华大学出版社.2004 [2] 林陈雷,郭安源,葛晓东.Visual Basic教育信息系统开发实例导航.人民邮电出版社.2006 [3] 张小勤.一种改进的数据库连接的设计与实现[J].电脑知识与技术(学术交流).2006年05期 [4] 田君.数字图书馆管理平台系统的研究[D].天津工业大学.2004年
[5] 陈志泊.数据库系统原理与应用教程.北京市崇文区夕照寺街14号.人民邮电出版社.2011,72-1128
第二篇:VB图书管理系统
图书管理系统的设计与实现
目录
一、序言······················································································································4
二、需求分析说明书 ····································································································4 2.1系统介绍..................................................................................................................................................4 2.2系统面向的用户群体..............................................................................................................................4 2.3系统的功能性需求..................................................................................................................................4 2.4系统的非功能性需求..............................................................................................................................5 2.4.1用户界面需求...................................................................................................................................5 2.4.2软硬件环境需求...............................................................................................................................5 2.4.3软件质量需求...................................................................................................................................5
三、可行性分析报告 ····································································································5 3.1技术可行性..............................................................................................................................................5 3.2人员可能性..............................................................................................................................................5 3.3时间、设备可能性..................................................................................................................................5 3.4系统工作量..............................................................................................................................................5 3.5代码工作量..............................................................................................................................................5 3.6文档要求..................................................................................................................................................5
四、开发环境与项目规划 ·····························································································5 4.1开发环境..................................................................................................................................................5 4.2项目规划与管理......................................................................................................................................5 4.2.1开发人员安排...................................................................................................................................5 4.2.2开发进度安排...................................................................................................................................6
五、软件界面设计标准与规范 ······················································································6 5.1编写目的..................................................................................................................................................6 5.2界面设计思想..........................................................................................................................................6 5.3界面设计原则..........................................................................................................................................6 5.4界面设计样式..........................................................................................................................................6 5.5常见提示信息样式..................................................................................................................................6 5.6常见错误信息样式..................................................................................................................................7 5.7其他界面约定..........................................................................................................................................7
六、软件编码设计标准与规范 ······················································································7 6.1对象命名约定..........................................................................................................................................7 6.2常量和变量命名约定..............................................................................................................................8 6.3结构化编码约定......................................................................................................................................8 6.4数据源的约定..........................................................................................................................................9 6.5数据库访问约定......................................................................................................................................9 6.6其他约定..................................................................................................................................................9
七、数据库分析与设计·································································································10 7.1数据库环境说明.......................................................................................................................................10 7.2数据库命名标准与规范...........................................................................................................................10 7.3数据库逻辑设计.......................................................................................................................................10 7.4数据库物理设计.......................................................................................................................................10 7.4.1表、视图汇总...................................................................................................................................10 7.4.2各表、视图设计详解.......................................................................................................................11
八、软件体系结构设计说明书 ······················································································15 8.1系统概述..................................................................................................................................................15 8.2设计约束..................................................................................................................................................15 8.3设计策略..................................................................................................................................................15 8.4系统概要设计说明书..............................................................................................................................16 8.4.1图例说明...........................................................................................................................................16 8.4.2系统总体结构图...............................................................................................................................16 8.5系统详细设计说明书..............................................................................................................................17 8.5.1系统模块汇总...................................................................................................................................17 8.5.2系统核心模块详解...........................................................................................................................18 8.5.3系统模块详解...................................................................................................................................28
九、用户界面设计报告·································································································42 9.1界面设计规范..........................................................................................................................................42 9.2系统窗体汇总..........................................................................................................................................42 9.3主界面设计..............................................................................................................................................43 9.4子界面设计..............................................................................................................................................43 9.5界面资源设计..........................................................................................................................................44
十、软件测试分析报告·································································································44 10.1测试范围与主要内容............................................................................................................................44 10.2测试方法................................................................................................................................................44 10.3测试报告................................................................................................................................................44 10.4改进建议与措施....................................................................................................................................45
十一、软件使用说明书·································································································45 11.1软件概述.................................................................................................................................................45 11.2使用说明.................................................................................................................................................45 11.2.1系统登陆..........................................................................................................................................45 11.2.2系统退出..........................................................................................................................................46 11.2.3图书类别管理..................................................................................................................................46 11.2.4图书信息管理..................................................................................................................................48 11.2.5查询图书信息..................................................................................................................................48 11.2.6读者类别管理..................................................................................................................................49 11.2.7读者信息管理..................................................................................................................................49 11.2.8查询读者信息..................................................................................................................................50 11.2.9借书管理..........................................................................................................................................50 11.2.10还书管理........................................................................................................................................50 参考资料······················································································································51
一、序言
图书管理系统的设计与推出是多方面原因促成的,比如学校的图书管理,日常管理工作 1 都是人工操作,历史数据很难保存和利用。而其他的小型图书馆大多如此。针对这种状况,我计划开发一个面向小型图书馆的图书管理系统,实现对人员、物流的全面管理,以帮助这些图书馆早日实现书店管理信息化。
为了系统的顺利开发和维护,特编制如下技术文档:
想要全部 请加QQ:76536415 专业设计 毕业论文
第三篇:vb图书管理系统源代码
Borbook:
Public sqltxt As String Public rno As String
'保存读者借书证号 Public bno As String
'保存读者图书编号 Public xm As String
'保存读者姓名 Public dw As String
'保存读者单位 Public rs As ADODB.Recordset
Private Sub Comm1_Click()
rno = Trim(Text1(0).Text)
If rno = “" Then
MsgBox ”借书证号不能为空,请输入“, vbOKOnly, ”信息提示“
Comm2.Enabled = False
Else
sqltxt = ”select * from reader where 借书证号='“ + rno + ”'“
Set rs = exesql(sqltxt)
If rs.RecordCount = 0 Then
MsgBox ”该读者未登记,不能借书“, vbOKOnly, ”信息提示“
Comm2.Enabled = False
Else
Text2(0).Text = rs.Fields(”姓名“)
Text2(1).Text = str(rs.Fields(”借书总数“))
Text2(2).Text = str(rs.Fields(”借书总数“)rs.Fields(”已借书数“))
End If
End If
End If End Sub
Private Sub retCom_Click()
Unload Me End Sub
Private Sub Form_Load()
Comm2.Enabled = False End Sub
Edbook:
Private Sub DataGrid1_Click()
End Sub
Private Sub Form_Load()
'说明:为什么使用recs,而不直接使用adodc1.recordset.recordcount?在调用edbook1窗体添加一个记录(确定)后,再
'返回到本表单,若不在Form_Activate()事件过程中调用adodc1.refresh进行刷新,adodc1.recordset.recordcount值
'仍未增1,这样调用encomm过程时出错;若在Form_Activate()事件过程中调用adodc1.refresh进行刷新,'adodc1.recordset.recordcount值增1了,调用encomm过程时也正确,但返回本窗体时,当前行总是第一行,显然也不行,'因为用户在添加或修改后希望在datagrid1中显示当前操作的那条记录.recs = Adodc1.Recordset.RecordCount End Sub
Private Sub Form_Activate()
DataGrid1.SetFocus
Call encomm End Sub
Private Sub Comm1_Click()
flag = 1
edbook1.Show vbModal End Sub
Private Sub Comm2_Click()
flag = 2
edbook1.Show vbModal End Sub
Private Sub Comm3_Click()
If MsgBox(”真的要删除[“ + Trim(Adodc1.Recordset.Fields(”书名“))+ ”]吗?“, vbYesNo, ”信息提示“)= vbYes Then
Adodc1.Recordset.Delete
recs = recs1
Call encomm
End If End Sub
Private Sub Comm4_Click()
Unload Me End Sub
Private Sub encomm()
If recs = 0 Then
Comm2.Enabled = False
Comm3.Enabled = False
Else
Comm2.Enabled = True
Comm3.Enabled = True
End If End Sub
Edlev1:
Dim cond As String
Private Sub Form_Load()
If flag = 2 Then
Text1(0).Text = edlev.Adodc1.Recordset.Fields(”级别“)
Text1(1).Text = edlev.Adodc1.Recordset.Fields(”过期罚款“)
Text1(2).Text = edlev.Adodc1.Recordset.Fields(”借书总数“)
Text1(3).Text = edlev.Adodc1.Recordset.Fields(”借书天数“)
End If End Sub
Private Sub Comm1_Click()
If Trim(Text1(0).Text)= ”“ Or Trim(Text1(1).Text)= ”“ Or Trim(Text1(2).Text)= ”“ Or _
Trim(Text1(3).Text)= ”“ Then
MsgBox ”数据项不全,请重新设置“, vbOKOnly, ”信息提示“
Text1(0).SetFocus
Exit Sub
End If
If flag = 1 Then '添加操作
If edlev.Adodc1.Recordset.RecordCount > 0 Then '原记录个数大于0
cond = ”级别='“ + Trim(Text1(0).Text)+ ”'“
edlev.Adodc1.Recordset.MoveFirst
'每次从头开始查找
edlev.Adodc1.Recordset.Find(cond)
If Not edlev.Adodc1.Recordset.EOF()Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
Text1(0).SetFocus
Exit Sub
End If
End If
edlev.Adodc1.Recordset.AddNew
edlev.Adodc1.Recordset.Fields(”级别“)= Trim(Text1(0).Text)
edlev.Adodc1.Recordset.Fields(”过期罚款“)= Val(Trim(Text1(1).Text))
edlev.Adodc1.Recordset.Fields(”借书总数“)= Val(Trim(Text1(2).Text))
edlev.Adodc1.Recordset.Fields(”借书天数“)= Val(Trim(Text1(3).Text))
edlev.Adodc1.Recordset.Update
recs = recs + 1
Else
'修改操作
n = edlev.Adodc1.Recordset.AbsolutePosition
cond = ”级别='“ + Trim(Text1(0).Text)+ ”'“
edlev.Adodc1.Recordset.MoveFirst '每次从头开始查找
edlev.Adodc1.Recordset.Find(cond)
If Not edlev.Adodc1.Recordset.EOF()And edlev.Adodc1.Recordset.AbsolutePosition <> n Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
edlev.Adodc1.Recordset.MoveFirst
'这两个语句恢复原记录位置
edlev.Adodc1.Recordset.Move(n1)
edlev.Adodc1.Recordset.Fields(”级别“)= Trim(Text1(0).Text)
edlev.Adodc1.Recordset.Fields(”过期罚款“)= Val(Trim(Text1(1).Text))
edlev.Adodc1.Recordset.Fields(”借书总数“)= Val(Trim(Text1(2).Text))
edlev.Adodc1.Recordset.Fields(”借书天数“)= Val(Trim(Text1(3).Text))
edlev.Adodc1.Recordset.Update
End If
Unload Me End Sub
Private Sub Comm2_Click()
Unload Me End Sub
Edreader:
Private Sub DataGrid1_Click()
End Sub
Private Sub Form_Load()
recs = Adodc1.Recordset.RecordCount End Sub
Private Sub Form_Activate()
DataGrid1.SetFocus
Call encomm End Sub
Private Sub Comm1_Click()
flag = 1
edreader1.Show vbModal End Sub
Private Sub Comm2_Click()
flag = 2
edreader1.Show vbModal End Sub
Private Sub Comm3_Click()
If MsgBox(”真的要删除[“ + Trim(Adodc1.Recordset.Fields(”姓名“))+ ”]吗?“, vbYesNo, ”信息提示“)= vbYes Then
Adodc1.Recordset.Delete
recs = recs1
Call encomm
End If End Sub Private Sub Comm4_Click()
Adodc1.Recordset.UpdateBatch
Adodc1.Recordset.Close
Unload Me End Sub Private Sub encomm()
If recs = 0 Then
Comm2.Enabled = False
Comm3.Enabled = False
Else
Comm2.Enabled = True
Comm3.Enabled = True
End If End Sub
Edrec1:
Dim cond As String
Private Sub Form_Load()
Label1.Caption = cap
If flag = 1 Then
Text1.Text = ”“
Else
Text1.Text = edrec.Adodc1.Recordset.Fields(”fn“)
End If End Sub
Private Sub Comm1_Click()
If Trim(Text1.Text)= ”“ Then
MsgBox ”数据项不能为空,请重新设置“, vbOKOnly, ”信息提示“
Text1.SetFocus
Exit Sub
End If
If flag = 1 Then '添加操作
If edrec.Adodc1.Recordset.RecordCount > 0 Then '原记录个数大于0
cond = ”fn='“ + Trim(Text1.Text)+ ”'“
edrec.Adodc1.Recordset.MoveFirst
'每次从头开始查找
edrec.Adodc1.Recordset.Find(cond)
If Not edrec.Adodc1.Recordset.EOF()Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
Text1.SetFocus
Exit Sub
End If
End If
edrec.Adodc1.Recordset.AddNew
edrec.Adodc1.Recordset.Fields(”fn“)= Trim(Text1.Text)
edrec.Adodc1.Recordset.Update
recs = recs + 1
Else
'修改操作
n = edrec.Adodc1.Recordset.AbsolutePosition
cond = ”fn='“ + Trim(Text1.Text)+ ”'“
edrec.Adodc1.Recordset.MoveFirst '每次从头开始查找
edrec.Adodc1.Recordset.Find(cond)
If Not edrec.Adodc1.Recordset.EOF()And edrec.Adodc1.Recordset.AbsolutePosition <> n Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
edrec.Adodc1.Recordset.MoveFirst
'这两个语句恢复原记录位置
edrec.Adodc1.Recordset.Move(n1)
edrec.Adodc1.Recordset.Fields(”fn“)= Trim(Text1.Text)
edrec.Adodc1.Recordset.Update
End If
Unload Me End Sub
Private Sub Comm2_Click()
Unload Me End Sub
Menu:
Private Sub MDIForm_Load()
If Not userlevel = ”系统管理员“ Then
menu21.Enabled = False
menu31.Enabled = False
menu41.Enabled = False
menu42.Enabled = False
End If End Sub
Private Sub menu11_Click()
borbook.Show vbModal End Sub
Private Sub menu12_Click()
retbook.Show vbModal End Sub
Private Sub menu13_Click()
End End Sub
Private Sub menu21_Click()
edbook.Show vbModal End Sub
Private Sub menu22_Click()
qubook.Show vbModal End Sub
Private Sub menu31_Click()
edreader.Show vbModal End Sub
Private Sub menu32_Click()
qureader.Show vbModal End Sub
Private Sub menu41_Click()
setuser.Show vbModal End Sub
Private Sub menu42_Click()
If MsgBox(”本功能要清除系统中所有数据,真的初始化吗?“, vbYesNo, ”确认初始化操作“)
= vbYes Then
Call deldata(”book“)Call deldata(”reader“)Call deldata(”borrow“)Call deldata(”rlevel“)
Call deldata(”depart“)
Call deldata(”press“)
Call deldata(”oper“)
MsgBox ”系统初始化完毕,下次只能以1234/1234(用户名/口令)进入本系统“, vbOKOnly, ”信息提示“
End If End Sub
Pass:
Public n As Integer
Private Sub Command1_Click()
Dim mrc As ADODB.Recordset
txtsql = ”select * from oper where 用户名='“ & _
Trim$(Text1(0).Text)& ”'“ & ” And 口令 = '“ & Trim$(Text1(1).Text)+ ”'“
Set mrc = exesql(txtsql)
If mrc.RecordCount = 0 Then '未找到用户记录
n = n + 1
If n < 3 Then
MsgBox ”没有这个用户,继续登录“, vbOKOnly + vbExclamation, ”信息提示“
Text1(0).Text = ”“
Text1(1).Text = ”“
Text1(0).SetFocus
Else
MsgBox ”已登录失败三次,退出系统“, vbOKOnly + vbExclamation, ”信息提示“
mrc.Close
Unload Me
End If
Else
'找到合法用户记录
userlevel = Trim(mrc.Fields(”级别“))
mrc.Close
Unload Me
menu.Show '调用menu窗体
End If End Sub
Private Sub Command2_Click()
Unload Me End Sub
Private Sub Form_Load()
n = 0
'n保存登录的次数 End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Call endata(KeyAscii)End Sub
Qubook:
Private Sub Comm1_Click()
Dim sqltxt As String
If Adodc1.Recordset.Fields(”借否“)= ”借“ Then
no = Trim(Adodc1.Recordset.Fields(”图书编号“))
sqltxt = ”select * from borrow where 图书编号='“ + no + ”'“
Set rs = exesql(sqltxt)
If rs.RecordCount = 0 Then
MsgBox ”该图书没有借书记录“, vbOKOnly, ”信息提示“
Else
MsgBox ”图书编号:“ + no + Chr(10)+ Chr(13)+ _
”书
名:“ + Trim(rs.Fields(”书名“))+ Chr(10)+ Chr(13)+ _
”借 书 人:“ + Trim(rs.Fields(”姓名“))+ Chr(10)+ Chr(13)+ _
”单
位:“ + Trim(rs.Fields(”单位“))+ Chr(10)+ Chr(13)+ _
”借书日期:“ + Format(rs.Fields(”借书日期“), ”yyyy.mm.dd“), vbOKOnly, ”查找结果“
End If
rs.Close
Else
MsgBox ”该书没有外借,不能显示借书人“, vbOKOnly, ”信息提示“
End If End Sub
Private Sub Comm2_Click()
Unload Me End Sub
Private Sub Form_Activate()
Adodc1.Refresh
DataGrid1.Refresh
DataGrid1.SetFocus
Call encomm End Sub
Private Sub selcmd1_Click()'设置条件确定
Dim str As String
str = ”“
'条件表达式
If Trim(Text1(0).Text)<> ”“ Then
If str = ”“ Then
str = ”图书编号='“ + Trim(Text1(0).Text)+ ”'“
Else
str = str + ” and 图书编号='“ + Trim(Text1(0).Text)+ ”'“
End If
End If
If Trim(Text1(1).Text)<> ”“ Then
If str = ”“ Then
str = ”书名='“ + Trim(Text1(1).Text)+ ”'“
Else
str = str + ” and 书名='“ + Trim(Text1(1).Text)+ ”'“
End If
End If
If Trim(Text1(2).Text)<> ”“ Then
If str = ”“ Then
str = ”作者='“ + Trim(Text1(2).Text)+ ”'“
Else
str = str + ” and 作者='“ + Trim(Text1(2).Text)+ ”'“
End If
End If
If Trim(Text1(3).Text)<> ”“ Then
If str = ”“ Then
str = ”出版社='“ + Trim(Text1(3).Text)+ ”'“
Else
str = str + ” and 出版社='“ + Trim(Text1(3).Text)+ ”'“
End If
End If
If Trim(Text1(4).Text)<> ”“ Then
If str = ”“ Then
str = ”借否='“ + Trim(Text1(4).Text)+ ”'“
Else
str = str + ” and 借否='“ + Trim(Text1(4).Text)+ ”'“
End If
End If
If Trim(Text1(5).Text)<> ”“ Then
If str = ”“ Then
str = ”定价=“ + Trim(Text1(5).Text)
Else
str = str + ” and 定价=“ + Trim(Text1(5).Text)
End If
End If
If str <> ”“ Then
Adodc1.RecordSource = ”select * from book where “ + str
Adodc1.Refresh
Else
Adodc1.RecordSource = ”select * from book“
Adodc1.Refresh
End If
If Adodc1.Recordset.RecordCount = 0 Then
MsgBox ”没有任何满足条件的记录“, vbOKOnly, ”信息提示“
End If
Call encomm End Sub
Private Sub selcmd2_Click()'设置条件重置
Text1(0).Text = ”“
Text1(1).Text = ”“
Text1(2).Text = ”“
Text1(3).Text = ”“
Text1(4).Text = ”“
Text1(5).Text = ”“ End Sub
Private Sub encomm()'自定义子过程:判断Adodc1中是否存在记录
If Adodc1.Recordset.RecordCount = 0 Then
Comm1.Enabled = False
Else
Comm1.Enabled = True
End If End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Call endata(KeyAscii)End Sub
Qureader:
Private Sub Comm1_Click()
Dim strn As String
Dim sqltxt As String
no = Trim(Adodc1.Recordset.Fields(”借书证号“))
sqltxt = ”select * from borrow where 借书证号='“ + no + ”'“
Set rs = exesql(sqltxt)
If rs.RecordCount = 0 Then
MsgBox ”该读者没有借任何图书“, vbOKOnly, ”信息提示“
Else
rs.MoveFirst
strn = ”书
名(借书日期)“ + Chr(10)+ Chr(13)
Do While Not rs.EOF()
strn = strn & Trim(rs.Fields(”书名“))& ”(“ & Format(rs.Fields(”借书日期“), ”yyyy.mm.dd“)& ”)“ + Chr(10)+ Chr(13)
rs.MoveNext
Loop
MsgBox strn, vbOKOnly, ”列所借图书清单“
rs.Close
End If End Sub
Private Sub Comm2_Click()
Unload Me End Sub
Private Sub Form_Activate()
Adodc1.Refresh
DataGrid1.Refresh
DataGrid1.SetFocus
Call encomm End Sub
Private Sub selcmd1_Click()'设置条件确定
Dim str As String
str = ”“
'条件表达式
If Trim(Text1(0).Text)<> ”“ Then
If str = ”“ Then
str = ”借书证号='“ + Trim(Text1(0).Text)+ ”'“
Else
str = str + ” and 借书证号='“ + Trim(Text1(0).Text)+ ”'“
End If
End If
If Trim(Text1(1).Text)<> ”“ Then
If str = ”“ Then
str = ”姓名='“ + Trim(Text1(1).Text)+ ”'“
Else
str = str + ” and 姓名='“ + Trim(Text1(1).Text)+ ”'“
End If
End If
If Trim(Text1(2).Text)<> ”“ Then
If str = ”“ Then
str = ”单位='“ + Trim(Text1(2).Text)+ ”'“
Else
str = str + ” and 单位='“ + Trim(Text1(2).Text)+ ”'“
End If
End If
If Trim(Text1(3).Text)<> ”“ Then
If str = ”“ Then
str = ”级别='“ + Trim(Text1(3).Text)+ ”'“
Else
str = str + ” and 级别='“ + Trim(Text1(3).Text)+ ”'“
End If
End If
If Trim(Text1(4).Text)<> ”“ Then
If str = ”“ Then
str = ”性别='“ + Trim(Text1(4).Text)+ ”'“
Else
str = str + ” and 性别='“ + Trim(Text1(4).Text)+ ”'“
End If
End If
If str <> ”“ Then
Adodc1.RecordSource = ”select * from reader where “ + str
Adodc1.Refresh
Else
Adodc1.RecordSource = ”select * from reader“
Adodc1.Refresh
End If
If Adodc1.Recordset.RecordCount = 0 Then
MsgBox ”没有任何满足条件的记录“, vbOKOnly, ”信息提示“
End If
Call encomm End Sub
Private Sub selcmd2_Click()'设置条件重置
Text1(0).Text = ”“
Text1(1).Text = ”“
Text1(2).Text = ”“
Text1(3).Text = ”“
Text1(4).Text = ”“ End Sub
Private Sub encomm()'自定义子过程:判断Adodc1中是否存在记录
If Adodc1.Recordset.RecordCount = 0 Then
Comm1.Enabled = False
Else
Comm1.Enabled = True
End If End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Call endata(KeyAscii)End Sub
Retbook:
Public rno As String Public bno As String
Private Sub Comm1_Click()
bno = Trim(Text1.Text)
If bno <> ”“ Then
Dim sqltxt As String
sqltxt = ”select * from borrow where 图书编号='“ + bno + ”'“
Set brs = exesql(sqltxt)
If brs.RecordCount = 0 Then
MsgBox ”该书不是从本图书馆所借的,不能归还!“, vbOKOnly, ”信息提示“
Else
If Trim(brs.Fields(”借书证号“))<> rno Then
If rno <> ”“ Then
'另一读者还书,自动列出上一个还书人的罚款单
dstr = ”罚款单“ + Chr(10)+ Chr(13)
dstr = dstr & ”姓名:“ & Trim(Text2(1).Text)+ ”(“ + rno + ”)罚款总额:“ & str(Text2(4).Text)& ”元“
MsgBox dstr, vbOKOnly, ”列罚款单“
End If
rno = Trim(brs.Fields(”借书证号“))
sqltxt = ”select * from book where 图书编号='“ + bno + ”'“ '处理图书记录
Set bs = exesql(sqltxt)
bs.Fields(”借否“)= ”否“
bs.Update
sqltxt = ”select * from reader where 借书证号='“ + rno + ”'“ '处理读者记录
Set rs = exesql(sqltxt)
rs.Fields(”已借书数“)= rs.Fields(”已借书数“)rs.Fields(”已借书数“)
If(Datebrs.Fields(”借书日期“)1
rs.Update
If(Datebrs.Fields(”借书日期“)1
Call encomm
End If End Sub
Private Sub Comm4_Click()
Unload Me End Sub
Private Sub encomm()
If recs = 0 Then
Comm2.Enabled = False
Comm3.Enabled = False
Else
Comm2.Enabled = True
Comm3.Enabled = True
End If End Sub
Setuser1:
Dim cond As String
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys ”{TAB}“
End If End Sub
Private Sub Form_Load()
If flag = 2 Then
Text1(0).Text = setuser.Adodc1.Recordset.Fields(”用户名“)
Text1(1).Text = setuser.Adodc1.Recordset.Fields(”口令“)
Combo1.Text = setuser.Adodc1.Recordset.Fields(”级别“)
End If End Sub
Private Sub Comm1_Click()
If Trim(Text1(0).Text)= ”“ Or Trim(Text1(1).Text)= ”“ Or Trim(Combo1.Text)= ”“ Then
MsgBox ”数据项不全,请重新设置“, vbOKOnly, ”信息提示“
Text1(0).SetFocus
Exit Sub
End If
If flag = 1 Then '添加操作
If setuser.Adodc1.Recordset.RecordCount > 0 Then '原记录个数大于0
cond = ”级别='“ + Trim(Text1(0).Text)+ ”'“
setuser.Adodc1.Recordset.MoveFirst
'每次从头开始查找
setuser.Adodc1.Recordset.Find(cond)
If Not setuser.Adodc1.Recordset.EOF()Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
Text1(0).SetFocus
Exit Sub
End If
End If
setuser.Adodc1.Recordset.AddNew
setuser.Adodc1.Recordset.Fields(”用户名“)= Trim(Text1(0).Text)
setuser.Adodc1.Recordset.Fields(”口令“)= Val(Trim(Text1(1).Text))
setuser.Adodc1.Recordset.Fields(”级别“)= Trim(Combo1.Text)
setuser.Adodc1.Recordset.Update
recs = recs + 1
Else
'修改操作
n = setuser.Adodc1.Recordset.AbsolutePosition
cond = ”级别='“ + Trim(Text1(0).Text)+ ”'“
setuser.Adodc1.Recordset.MoveFirst '每次从头开始查找
setuser.Adodc1.Recordset.Find(cond)
If Not setuser.Adodc1.Recordset.EOF()And setuser.Adodc1.Recordset.AbsolutePosition <> n Then
MsgBox ”存在完全相同的记录“, vbOKOnly, ”信息提示“
setuser.Adodc1.Recordset.MoveFirst
'这两个语句恢复原记录位置
setuser.Adodc1.Recordset.Move(n1)
setuser.Adodc1.Recordset.Fields(”用户名“)= Trim(Text1(0).Text)
setuser.Adodc1.Recordset.Fields(”口令“)= Val(Trim(Text1(1).Text))
setuser.Adodc1.Recordset.Fields(”级别“)= Trim(Combo1.Text)
setuser.Adodc1.Recordset.Update
End If
Unload Me End Sub
Private Sub Comm2_Click()
Unload Me End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Call endata(KeyAscii)End Sub
模块:
Public userlevel As String '保存用户级别
Public flag As Integer
'用作记录操作标记
Public tna As String
'保存表名:用于调用edrec1窗体 Public cap As String
'保存标题名:用于调用edrec1窗体 Public recs As Integer
'保存记录集中记录个数
Sub main()
pass.Show vbModal End Sub
Public Function exesql(ByVal sql As String)As ADODB.Recordset
sql = Trim$(sql)
Set conn = New ADODB.Connection
Set rst = New ADODB.Recordset
conn.ConnectionString = ”DSN=Library;UID=sa;PWD=;“
conn.Open
Set rst.ActiveConnection = conn
rst.LockType = adLockOptimistic
rst.CursorType = adOpenKeyset
rst.Open sql
Set exesql = rst
Set rst = Nothing
Set conn = Nothing End Function
Public Sub deldata(ByVal tn As String)删除指定表中所有记录,对于oper表添加一个系统用户
Dim sql As String
sql = ”delete “ & Trim$(tn)
Set conn = New ADODB.Connection
conn.ConnectionString = ”DSN=Library;UID=sa;PWD=;“
conn.Open
conn.Execute sql
If Trim(tn)= ”oper“ Then
sql = ”insert oper values('1234','1234','系统管理员')“
conn.Execute sql
End If
conn.Close End Sub Public Sub endata(Keyasc As Integer)
If Keyasc = 13 Then
SendKeys ”{TAB}" '将回车键转换成Tab键
End If End Sub
第四篇:用C++编写的图书管理系统
C++实现图书管理系统 一:功能:
1.需要有个系统管理员和普通读者;
2.对图书库存图书的创建,添加,删除,修改,查询;
3.对读者借阅信息的创建,添加,删除,修改,查询; 4:普通读者只有查询上述两个文件的权利;
5:管理员可对普通读者的创建,添加,修改,删除; 6:管理员拥有上述全部权利;
7:要与文件流进行关联,如:创建,添加,读取,删除,查询;
第五篇:用c语言编写一个成绩管理系统
程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:(1)主菜单 学生成绩管理系统
1、成绩录入
2、成绩查询
3、成绩统计
4、退出(2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式)。v 按学号查询学生记录。v 查询不及格学生的记录。③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。(3)结构体数组: #define N 30 struct student {int num;/* 定义学号*/
char name[20];/* 定义姓名*/
float score[3];/* 定义存贮三门课成绩的数组*/
float average;/* 定义平均成绩*/
};struct student stu[N];/* 定义结构体数组,存贮多个学生的记录*/
.#include
#include
#include
struct student
{ int num;char name[20];
float score[4];
float average;
}
stu[10000];
long t,max;
bool unpass[1000];
FILE *fstu=fopen(“stud.dat”,“at+”);
int init()
{
int no,i;
float s[4],ave;
char nam[20];
while(!feof(fstu))
{
fscanf(fstu,“%d”,&no);
fscanf(fstu,“%s”,nam);
fscanf(fstu,“%f%f%f%f”,&s[1],&s[2],&s[3],&ave);
if(no>max)
max=no;
stu[no].num=no;
strcpy(stu[no].name,nam);
unpass[no]=false;f
or(i=1;i<=3;i++)
{
stu[no].score[i]=s[i];
if(s[i]<60)
unpass[no]=true;
}
stu[no].average=ave;
}
}
int stuinsert()
{
int no,i;
float s[3],sum;
char nam[20],cha;
loop:printf(“请输入学生的学号、姓名及三门课的成绩 n”);
scanf(“%d”,&no);scanf(“%s”,nam);
scanf(“%f%f%f/n”,&s[1],&s[2],&s[3]);
if(no>max)
max=no;
stu[no].num=no;
sum=0.0;
strcpy(stu[no].name,nam);
unpass[no]=false;
for(i=1;i<=3;i++)
{
stu[no].score[i]=s[i];
sum=sum+s[i];
if(s[i]<60)
unpass[no]=true;
}
stu[no].average=sum/3.0;
fprintf(fstu,“n”);
fprintf(fstu,“%d %s %f %f %f %fn”,stu[no].num,stu[no].name,stu[no].score[1],stu[no].score[2],stu[no].score[3],stu[no].average);
}
int find(int x)
{
long i,no;
switch(x)
{
case 1:printf(“请输入学号:”);
scanf(“%d”,&no);
printf(“%d %s %f %f %f %fn”,stu[no].num,stu[no].name,stu[no].score[1], stu[no].score[2],stu[no].score[3],stu[no].average);
break;
case 2:for(i=1;i<=max;i++)if(unpass[i])printf(“%d %s %f %f %f %fn”,stu[i].num,stu[i].name,stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].average);
break;
}
}
int sort(int x)
{
extern int headprint(int x);
student so[1000];
int i,j,k,n;
switch(x)
{
case 1:for(i=1;i<=max;i++)if(stu[i].num==i)printf(“%d %s %fn”,i,stu[i].name,stu[i].average);
break;
case 2:n=0;
for(i=1;i<=max;i++)
{
j=1;if(stu[i].num==i)
while((so[j].average>stu[i].average)&&(j<=n))
j++;n++;
for(k=n;k>=j;k--)so[k]=so[k-1];so[j]=stu[i];
}
for(i=1;i<=n;i++)
printf(“%d %s %f %f %f %fn”,so[i].num,so[i].name,so[i].score[1],so[i].score[2],so[i].score[3],so[i].average);break;case 3:headprint(4);
}
}
int othersort(int x)
{
extern int headprint(int x);
student so[1000];
int i,j,k,n,q;q=0;
switch(x)
{
case 1:if(q==0)q=1;
case 2:if(q==0)q=2;
case 3:if(q==0)q=3;
n=0;
for(i=1;i<=max;i++)
{
j=1;
if(stu[i].num==i)
while((so[j].score[q]>stu[i].score[q])&&(j<=n))
j++;
n++;
for(k=n;k>=j;k--)
so[k]=so[k-1];
so[j]=stu[i];
}
for(i=1;i<=n;i++)
printf(“%d %s %fn”,so[i].num,so[i].name,so[i].score[q]);
break;
}
}
int select(int x)
{
extern int headprint(int x);
int p;
switch(x)
{
case 1:scanf(“%d”,&p);
switch(p)
{
case 1:stuinsert();
break;
case 2:headprint(2);
break;
case 3:headprint(3);
break;
case 4:t=0;
break;
}
break;
case 2:scanf(“%d”,&p);
find(p);
break;
case 3:scanf(“%d”,&p);
sort(p);
break;
case 4:scanf(“%d”,&p);
othersort(p);
break;
}
}
int headprint(int x)
{
switch(x)
{ case 1:printf(“学生成绩管理系统n”);
printf(“
1、成绩录入n”);printf(“
2、成绩查询n”);
printf(“
3、成绩统计n”);
printf(“
4、退出n”);
select(x);
break;
case 2:printf(“
1、按学号查询学生记录n”);
printf(“
2、查询不及格学生的记录n”);
select(x);
break;
case 3:printf(“
1、计算学生的平均分n”);
printf(“
2、根据学生的平均分高低,对学生的数据进行排序后输出n”);
5printf(“
3、对学生单科成绩排序,输出学生姓名与该科成绩n”);select(x);
break;
case 4:printf(“
1、第一科n”);printf(“
2、第二科n”);printf(“
3、第三科n”);select(x);break;;
}
}
int main()
{ max=0;t=1;
init();
loop:headprint(1);
if(t!=0)
goto loop;
}