1、VB 语 言 程 序 设 计 课 程 设 计 报 告系 (部)专业班级学生姓名学 号 /序 号指导教师完成时间第 1 页 共 20 页图书管理系统一、 功能描述使用 VB6.0 中各种控件的常用属性和事件、数组的各种操作以及数据库的相关操作(数据库的建立、编辑、查找、删除等) ,建立了这个简易的图书管理系统,方便图书管理人员对图书的管理。用户可以通过此系统的添加、删除,还回,借出等功能对书籍信息、书籍流通进行编辑同时也可以通过直接输入想要查询的书籍信息来获得书籍的流通及库存等相关信息。二、 概要设计1、系统功能模块框图设计首先程序运行,出现一个 MDI 主窗体,里面分别有登录,书籍信息管理系统
2、,退出三个菜单选项,登录前,管理按钮不可用,当正确输入用户名以及密码以后,点管理按钮,图书管理窗体显示,用户可对图书信息进行管理。程序流程框图如图所示:管理登录登录界面2、数据库设计创建一个数据库为 mydb.mdb,该数据库共包含 3 张表,分别为“书籍信息表” 、 “图书归还表”和“图书借出表” ,表结构如下:MDI 主界面退出图书归还情况管理第 2 页 共 20 页书籍信息表:图书编号、图书名、作者、出版社、数量、出版日期、价格 图 1. 书籍信息表图书归还表:图书编号、图书名、作者、出版社、数量、图书是否损坏、借出日期、归还日期;图 2. 图书归还表图书借出表:图书编号、图书名、作者、
3、出版社、借出数量、借出时间、联系电话、借出期限、借出者姓名。图 3. 图书借出表第 3 页 共 20 页三、 详细设计1、MDI 主界面用户登录模块中登录与取消两按钮,单击登录会进入系统进行下一步的操作,用户名文本框与数据库相连接,当在用户名文本框输入用户名后点击登录按钮后,会在数据库中进行查询看数据库中是否会有该用户名,且该用户名的密码是否与密码框中输入的相同,如果相同会进入系统,如果不存在该用户名或密码与用户名不相匹配,则会提示“密码错误” ,用户名文本框会得到焦点,让重新输入。(1)窗体截图(如图 5.1)图 1 MDI 主界面第 4 页 共 20 页图 2 登录窗体1. 功能实现用户登
4、录Private Sub Command1_Click()Dim msg, style, title, responseIf Text2.Text = 123 ThenMDIForm1.bj.Enabled = TrueForm3.HideElsemsg = “密码错误,请重新输入。“style = 4 + 16 + 356title = “提示“response = MsgBox(msg, style, title)If response = 6 ThenForm3.ShowElseEnd IfEnd IfEnd Sub第 5 页 共 20 页2、图书管理窗体图 3 图书管理窗体2. 功能实
5、现对图书信息添加Private Sub Command1_Click()Select Case Command1.CaptionCase “添加“Select Case SSTab1.TabCase 0Data1.Recordset.AddNewCase 1Data2.Recordset.AddNewCase 2Data3.Recordset.AddNewEnd SelectSSTab1.TabEnabled(0) = False第 6 页 共 20 页SSTab1.TabEnabled(1) = FalseSSTab1.TabEnabled(2) = FalseCommand1.Captio
6、n = “确定“Command2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = FalseCommand7.Enabled = FalseCommand8.Enabled = FalseCase “确定“Select Case SSTab1.TabCase 0Data1.UpdateRecordCase 1Data2.UpdateRecordCase 2Data3.UpdateRecordEnd SelectSSTab1.TabE
7、nabled(0) = TrueSSTab1.TabEnabled(1) = TrueSSTab1.TabEnabled(2) = TrueCommand1.Caption = “添加“Command2.Enabled = TrueCommand3.Enabled = TrueCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = TrueCommand7.Enabled = TrueCommand8.Enabled = TrueEnd SelectEnd Sub 四、 调试中存在的问题及解决方法第 7 页 共 20 页
8、1、程序运行顺序出现的错误程序运行时没有按照预想的窗体顺序运行,导致程序无法顺利进行下去。解决方法:在工程属性窗口中,将启动对象改为指定窗体即可。2、无法正确查询指定书籍信息的错误点击查询按钮,出现错误提示,程序中的索引不是指定表格中的索引。解决方法:将表格中的索引信息删除后重新设定,使其与程序中的一致。3、无法成功添加书籍信息添加程序运行到保存信息时,跳过了中间部分,直接运行“添加数据到数据库时出错,注意检查图书编号是否重复,及其他各项数据是否正确。 ”语句,导致无法成功添加书籍信息。五、 心得体会在本次 VB 课程设计中,我进一步熟悉 VB6.0 开发环境,了解了用 VB6.0实现一个完整
9、应用程序的设计过程,有关代码编写、调试和整合程序的方法和技巧。进一步掌握了 VB6.0 中各种控件的常用属性和事件、数组的各种操作以及数据库的相关操作(数据库的建立、编辑、查找、删除等) 。在我所设计图书管理系统的过程中,并不是一帆风顺的,我遇到了这样或那样的问题,首先在链接数据库的时候,我按照书上的步骤将属性改好,但当我第二天再次访问数据库的时候,提示文件找不到,由于第一次我链接数据库的地址在桌面,没有将数据库放在我的工程文件夹里,所以导致了文件找不到。然后,当我在设置 DATA 控件的属性时,又不小心在窗体加载中用代码写入了DATA 的属性,导致数据链接不上,后面也出现了几次由于我的疏忽,
10、导致程序出错。这让我意识到,在软件开发的过程中,一点小小的错误,都不能完成,可谓是“失之毫厘谬以千里” 。因此,我们需要很细心才能完成这个过程。虽然,我所制作的简易图书管理系统可以进行对书籍信息的添加,删除,修改等功能,但是也存在很多不足。在登录设计中,我没有建立用户数据库,用代码只编写了一个用户。在查询的时候,由于我用 DATA 控件链接数据库,虽然添加了两个索引,但还是只能用图书编号一个索引进行查询,我没能找到第 8 页 共 20 页解决的方法。还有在图书归还以及借出的环节,考虑的不太完善。最后,我很感谢在程序设计的过程中,老师细心地讲解与建议,给了我很大的帮助,在此次课程设计中,我受益匪
11、浅。六、 参考文献【1】 罗朝盛. Visual Basic 6.0 程序设计教程(第 3 版)M.人民邮电出版社,2009.02 【2】 邵 洁. Visual Basic 6.0 程序设计教程(第 4 版) M. 东南大学出版社,2008.02 【3】 邵 洁. Visual Basic 6.0 实验与测试(第 4 版) M. 东南大学出版社,2008.02 七、 附录MDI 主界面Private Sub dl_Click()Form3.ShowEnd SubPrivate Sub gl_Click()Form2.ShowEnd SubPrivate Sub MDIForm_Load()g
12、l.Enabled = False 在登录之前,管理按钮不可用End SubPrivate Sub tc_Click()第 9 页 共 20 页EndEnd Sub登录窗体Private Sub Command1_Click()Dim msg, style, title, responseIf Text2.Text = 123 Then 密码为 123 时,管理可用MDIForm1.gl.Enabled = TrueForm3.Hide Else msg = “密码错误,请重新输入。“ 密码输入错误时,提示重新输入style = 4 + 16 + 356title = “提示“response
13、 = MsgBox(msg, style, title)If response = 6 ThenForm3.Showgl.Enabled = FalseElseEnd IfEnd IfEnd Sub第 10 页 共 20 页Private Sub Command2_Click()EndEnd SubPrivate Sub Timer1_Timer() 时间控件,控制字体的移动If Label3.Left + Label3.Width = 0 ThenLabel3.Left = Label3.Left - 10ElseLabel3.Left = Form3.WidthEnd IfEnd Sub管
14、理窗体Private Sub Command1_Click()根据当前按钮的标题进行不同的操作Select Case Command1.CaptionCase “添加“向当前选项卡所对应表中添加记录Select Case SSTab1.TabCase 0Data1.Recordset.AddNewCase 1Data2.Recordset.AddNewCase 2Data3.Recordset.AddNew第 11 页 共 20 页End Select在添加操作完成前禁止进行其他操作SSTab1.TabEnabled(0) = FalseSSTab1.TabEnabled(1) = False
15、SSTab1.TabEnabled(2) = FalseCommand1.Caption = “确定“Command2.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = FalseCommand7.Enabled = FalseCommand8.Enabled = FalseCase “确定“Select Case SSTab1.TabCase 0Data1.UpdateRecordCase 1Data2.UpdateRecordCa
16、se 2Data3.UpdateRecordEnd Select在添加操作完成后允许进行其他操作SSTab1.TabEnabled(0) = True第 12 页 共 20 页SSTab1.TabEnabled(1) = TrueSSTab1.TabEnabled(2) = TrueCommand1.Caption = “添加“Command2.Enabled = TrueCommand3.Enabled = TrueCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = TrueCommand7.Enabled = T
17、rueCommand8.Enabled = TrueEnd SelectEnd SubPrivate Sub Command10_Click()If Text16.Text = Text1.Text ThenText7.Text = Int(Text7.Text) - Int(Text20.Text)End IfEnd SubPrivate Sub Command2_Click() 修改按钮的单机过程根据当前按钮的标题进行不同的操作Select Case Command2.CaptionCase “修改“Select Case SSTab1.TabCase 0Data1.Recordset.E
18、dit第 13 页 共 20 页Case 1Data2.Recordset.EditCase 2Data3.Recordset.EditEnd Select在修改操作完成前禁止进行其他操作SSTab1.TabEnabled(0) = FalseSSTab1.TabEnabled(1) = FalseSSTab1.TabEnabled(2) = FalseCommand2.Caption = “确定“Command1.Enabled = FalseCommand3.Enabled = FalseCommand4.Enabled = FalseCommand5.Enabled = FalseCom
19、mand6.Enabled = FalseCommand7.Enabled = FalseCommand8.Enabled = FalseCase “确定“Select Case SSTab1.TabCase 0Data1.UpdateRecordCase 1Data2.UpdateRecordCase 2第 14 页 共 20 页Data3.UpdateRecordEnd Select在修改操作完成后允许进行其他操作SSTab1.TabEnabled(0) = TrueSSTab1.TabEnabled(1) = TrueSSTab1.TabEnabled(2) = TrueCommand2
20、.Caption = “修改“Command1.Enabled = TrueCommand3.Enabled = TrueCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = TrueCommand7.Enabled = TrueCommand8.Enabled = TrueEnd SelectEnd SubPrivate Sub Command3_Click() “删除”按钮的单击事件过程Dim i As Integeri = MsgBox(“确定要删除此记录?“, vbYesNo + vbExclamation +
21、 vbDefaultButton1, “编辑“)If i + vbYes ThenSelect Case SSTab1.Tab 删除后数据更新Case 0Data1.Recordset.Delete第 15 页 共 20 页Data1.RefreshCase 1Data2.Recordset.DeleteData2.RefreshCase 2Data3.Recordset.DeleteData3.RefreshEnd SelectEnd IfEnd SubPrivate Sub Command4_Click() “首记录”按钮的单击事件过程Select Case SSTab1.TabCase
22、0Data1.Recordset.MoveFirstCase 1Data2.Recordset.MoveFirstCase 2Data3.Recordset.MoveFirstEnd SelectCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = TrueCommand7.Enabled = TrueEnd Sub第 16 页 共 20 页Private Sub Command5_Click() “上一条”按钮的单击事件过程Select Case SSTab1.TabCase 0Data1.Recordset.M
23、oveNextIf Data1.Recordset.EOF ThenData1.Recordset.MoveFirstCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = TrueCommand7.Enabled = TrueEnd IfCase 1Data2.Recordset.MoveNextIf Data2.Recordset.EOF ThenData2.Recordset.MoveFirstCommand4.Enabled = FalseCommand5.Enabled = FalseCommand6.En
24、abled = TrueCommand7.Enabled = TrueEnd IfCase 2Data3.Recordset.MoveNextIf Data3.Recordset.EOF ThenData3.Recordset.MoveFirst第 17 页 共 20 页Command4.Enabled = FalseCommand5.Enabled = FalseCommand6.Enabled = TrueCommand7.Enabled = TrueEnd IfEnd SelectEnd SubPrivate Sub Command6_Click() “下一条”按钮的单击事件过程Sele
25、ct Case SSTab1.TabCase 0Data1.Recordset.MoveNextIf Data1.Recordset.EOF ThenData1.Recordset.MoveLastCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = FalseCommand7.Enabled = FalseEnd IfCase 1Data2.Recordset.MoveNextIf Data2.Recordset.EOF ThenData2.Recordset.MoveLastCommand4.Enabled = T
26、rue第 18 页 共 20 页Command5.Enabled = TrueCommand6.Enabled = FalseCommand7.Enabled = FalseEnd IfCase 2Data3.Recordset.MoveNextIf Data3.Recordset.EOF ThenData3.Recordset.MoveLastCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = FalseCommand7.Enabled = FalseEnd IfEnd SelectEnd SubPrivate S
27、ub Command7_Click() “尾记录”按钮的单击事件过程Select Case SSTab1.TabCase 0Data1.Recordset.MoveLastCase 1Data2.Recordset.MoveLastCase 2Data3.Recordset.MoveLast第 19 页 共 20 页End SelectCommand4.Enabled = TrueCommand5.Enabled = TrueCommand6.Enabled = FalseCommand7.Enabled = FalseEnd SubPrivate Sub Command8_Click() “
28、查询”按钮的单击事件过程Dim n As Stringn = InputBox(“请输入待查图编号:“, “查找“)Data1.Recordset.Index = “idx_图书“Data1.Recordset.Seek “=“, nEnd SubPrivate Sub Command9_Click() “还回”按钮的单击事件过程If Text8.Text = Text1.Text ThenText7.Text = Int(Text7.Text) + Int(Text12.Text)End IfEnd SubPrivate Sub Form_Load() 窗体加载过程,书籍信息表首先显示SSTab1.Tab = 0End Sub