1、XXXXXVB程序设计课程设计报告题目:图书销售管理系统所在院系:信息技术学院学 生: XX指导老师: XX日 期:二XXXXXXX摘 要:图书作为一种关系到人们工作、学习及生活等各个方面的特殊商品,在人们的生活水平日益提高的同时,它的地位也越来越重要, 然而图书品种繁多,销售模式特殊,随着信息化的快速发展和业务量的不断增大,传统的手工管理手段已经无法适应图书销售业的发展,如今,图书销售业需要实现销售业务的计算机管理,迫切需要开发出相应的销售管理软件,从而加强对图书销售的管理,通过计算机来完成大量本来由工作人员手工完成的工作,真正达到合理和充分利用现有资源,减轻工作压力的效果。因此, 开发一个
2、图书销售管理系统是很有必要的,除此之外,图书销售管理系统也有着广泛的市场前景和实际的应用价值。经过分析,使用微软公司的Visual Basic6.0开发工具及Access数据库,设计了图书销售管理系统。 关键字:图书销售管理系统,数据库,Visual Basic6.0 Abstract: As a particular commodity,books affect peoples work , study and life and so on.At the same time , peoples living standards are rising quickly, now , it pla
3、ys a more and more important role, however, a wide variety of books and special sales mode, With the rapid development of information technology and the growing volume of business, the traditional management tools have not adapted the development of the bookselling industry, today, industry sales of
4、 books need to achieve sales of computer management. it is urgent to develop relevant sales management software , so that people can strengthen the Book sales management, using computers to finish the large amount of work which was finished by hand before ,people can really make full use of existing
5、 resources and alleviate the pressure of work. As a result, it is very necessary to develop a Book Selling Management System., in addition, the book sales management systems also have broad market prospects and practical application. After analysis, using Microsofts Visual Basic6.0 and Access databa
6、se development tool to design the book sales management system.Key words: Book Selling Management System, database, Visual Basic6.0一:开发环境介绍: 1.1 Visual Basic简介Visual Basic简称VB,是Microsoft公司推出的一种 Windows应用程序开发工具。是当今世界上使用最广泛的编程语言之一,它也被公认为是编程效率最高的一种编程方法。 早在1991年,为了简化Windows应用程序的开发,微软公司推出了Visual Basic1.0
7、,如今的最新版本是Visual Basic 6.0。Visual Basic 6.0集成开发环境包含标题栏、菜单栏、工具栏、窗体设计器窗口、工程资源管理器窗口、工程窗口、窗体布局窗口和属性窗口。Visual Basic 6.0 的特点有:可视化的设计平台、面向对象的设计方法、事件驱动的编程机制、结构化的设计语言、充分利用Windows资源、开放的数据库功能与网络支持。 二:系统需求分析与功能模块2.1 系统需求分析一般的图书销售管理系统包括,进货管理,销售管理,库存管理,退货管理,销售统计,信息维护等功能。以下介绍一下销售管理系统的一些必备功能,每个功能由若干相关的子模块构成。 进货管理 包括
8、进书录入及查询 销售管理 主要对销售的情况进行记录及浏览销售情况 库存管理 主要对库存量进行录入与查询。 退货管理 对顾客退回来的书籍进行管理,包括退货录入及查询 销售统计 主要是对销售业绩进行统计,以报表的形式显示销售业绩 信息维护 主要包括图书信息维护,人员信息维护及用户信息维护,其中只有管理员可以对人员信息进行维护,管理员可以更改所有用户的信息,用户只能修改个人信息。2.2 系统的功能可用如图2-1所示框图表示。系统登陆图书销售管理系统进货管理销售管理库存管理退货管理销售统计信息维护 图2-1 2.3 数据库设计 本系统的数据库采用 Microsoft Access 2003 2.3.1
9、 建立ccess 数据库 启动ccess 2003,选择文件,新建,空数据库(books_sale.mdb),如图2-2所示 图2-2 2.3.2 创建表在上面的基础上,选择主菜单中的插入-表格,根据要求设计相应的表格,本系统中设计的表格如下所示: tb_login (用户登录信息表) tb_buybooks(图书进货录入表) tb_personnelinfo(人员信息维护表) tb_sale (图书销售表) tb_store(图书库存表) tb_withdraw(图书退货表)三:系统具体实现3.1 欢迎界面 在此界面中引用了一个第三方控件(ccrpprg6),它是一个进度条控件。首先要加载此
10、控件,具体方法是把压缩包ccrpprg6.zip解压缩,然后在工具箱的空白处单击鼠标右键,从弹出的快捷菜单中启动部件窗口,如图3-1所示。 图3-1点击浏览按钮,从存放ccrpProgressBar控件的文件夹中找到ccrpprg.ocx文件。点击应用后ccrpProgressBar控件就添加到工具箱中了。向窗体中添加一个ccrpProgressBar控件和一个Timer控件Timer控件的Interval值设置为100,与ccrpProgressBar控件的默认值一致。在timer1的timer事件中添加如下代码If i = 100 Then Frm_before.Hide Timer1.E
11、nabled = False 定时器停止工作 Frm_login.ShowElse i 不为100则进度条向前进 ccrpProgressBar1.Value = i i = i + 2End If. 使本窗体透明,新建一个模块Module1,添加如下代码Public Declare Function SetLayeredWindowAttributes Lib user32 (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long AnimateWindow是一
12、个窗口打开和关闭时产生动画效果的新函数,因为是一个新的函数, 所以在此定义Public Const WS_EX_LAYERED = &H80000Public Const GWL_EXSTYLE = (-20)Public Const LWA_ALPHA = &H2 表示把窗体设置成半透明样式 Public Const LWA_COLORKEY = &H1 不显示窗体中的透明色 Public Declare Function GetWindowLong Lib user32 Alias GetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Lo
13、ng) As LongPublic Declare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long在form的load 事件中加入如下代码Timer1.Enabled = TrueTimer1.Interval = 100 定时器开始工作Frm_before.Visible = Truertn = GetWindowLong(Me.hwnd, GWL_EXSTYLE) 取窗口的原先样
14、式rtn = rtn Or WS_EX_LAYERED 使窗体添加上新的样式WS_EX_LAYEREDSetWindowLong Me.hwnd, GWL_EXSTYLE, rtn 把新的样式赋给窗体SetLayeredWindowAttributes Me.hwnd, 0, 150, LWA_ALPHA 把窗体设置成半透明样式,第二个参数表示透明程度取值范围0 -255, 为0时就是一个全透明的窗体了3.2 系统登录. 在窗体上加个adodc1控件,登录的主要代码为Dim i As IntegerAdodc1.RefreshAdodc1.Recordset.MoveLastAdodc1.Re
15、cordset.MoveFirstFor i = 1 To Adodc1.Recordset.RecordCountIf 控件名.Text = Then 如果控件中的内容为空,则显示提示 MsgBox 请选择用户类型!, vbOKOnly + vbInformation, 注意ElseIf (Combo1.Text = Adodc1.Recordset.Fields(userkind) And (Trim(Text1.Text) =Adodc1.Recordset.Fields(name)And(Trim(Text2.Text)=Adodc1.Recordset.Fields(password
16、) Then 判断用户名与密码是否相符 Frm_main.Show Unload Me Exit SubElse MsgBox 无效的密码,请重试!, 登陆 Exit SubEnd IfNext若当前用户是新用户,则可以单击新用户注册进行注册,主要代码如下:.在Module1中加入如下代码:Option ExplicitPublic con As ADODB.ConnectionPublic rst As ADODB.RecordsetPublic Sub OpenDataBase()Set con = New ADODB.Connectioncon.ConnectionString=Prov
17、ider=Microsoft.Jet.OLEDB.4.0;DataSource=books_sale.mdb;Persist Security Info=FalseSet rst = New ADODB.Recordsetcon.OpenEnd Sub在caption属性为”新用户注册”的按纽的click事件中添加如下形式的代码Call OpenDataBase rst.Open tb_login, con, adOpenStatic, adLockOptimistic, -1 If Text1.Text = Then 提示不能为空 ElseIf Text2.Text = Then 提示不能为
18、空 Else For i = 1 To rst.RecordCount If Text1.Text = rst.Fields(name).Value Then MsgBox 该用户已存在,请重新输入用户名!, vbOKOnly + vbExclamation, 用户 Exit Sub Else rst.MoveNext End If Next I 判断新的用户名是否与已存在的用户重名 rst.AddNew rst.Fields(字段名) = Text.Text rst.Update rst.Requery rst.Close MsgBox 新用户添加成功!, vbOKOnly + vbInfo
19、rmation, 提示 Unload Me End If3.3 主界面选择VB IDE中的菜单栏中的工具菜单编辑器,进行如下(图3-2)设置 图3-2加oolbar控件,单击如图3-3中的添加6个按纽,并分别设置其标题及关键字,对应的 与中的数值要一致。 图3-3在toolbar1的buttonclick事件中加入如下形式代码Select Case Button.KeyCase 关键字语句End Select加ImageList控件,然后右击打开如图3-4的属性页,选择图像,单击,添加个图片 图3-4在图3-3中选择通用,然后设置其图像列表为ImageList1即添加StatusBar,tim
20、er控件 在statusbar的属性页中,选择窗格,然后单击,插入相应的窗格 在timer1的timer事件中加入语句StatusBar1.Panels(3).Text = Time 显示当前系统时间在form的load事件中的主要代码如下StatusBar1.Panels(1).Text = 欢迎使用图书销售管理系统!StatusBar1.Panels(2).Text = Format(Date, dddddd) 以完整日期表示法显示当前系统中的日期If Frm_login.Combo1.Text = 0 Then Me.personnelim.Enabled = False如果登录的用户为
21、一般用户则该用户不能对人员信息进行维护3.4 进货管理进书录入在确定按纽的click事件中加入如下形式代码Call OpenDataBase rst.Open 表名, con, adOpenStatic, adLockOptimistic, -1 rst.AddNew rst.Fields(表中字段名) = Text1.Text rst.Update rst.Requery rst.Close MsgBox 新书添加成功!, vbOKOnly + vbInformation, 提 示”在form 的load 事件中加入如下语句DTPicker1.Value = Date 使Dtpicker1的
22、当前值为系统日期进书查询 在“查询“按纽的click 事件中添加如下代码 Dim sql As Stringsql = select * from tb_buybooks whereIf Combo1.Text = ThenMsgBox 请选择图书进货日期!, vbOKOnly + vbExclamationCombo1.SetFocusExit SubElsesql = sql & ISBN = & Trim(Combo1.Text) & End IfAdodc1.RecordSource = sqlAdodc1.Refresh 查询指定日期的进书情况 3.5 销售管理图书销售录入(代码同进
23、书录入的代码)图书销售浏览 . 在from的load 事件中添加如下代码 Call OpenDataBase rst.Open tb_sale, con, adOpenStatic, adLockOptimistic, -1.在通用代码段中添加如下形式代码Public Sub viewdatas()On Error Resume NextText.Text = rst.Fields(字段名”)Value 把数据库中的字段值赋给相应的控件End Sub.在”第一本”按纽的click事件中加入如下代码 rst.MoveFirst 移到表中的第一条记录Call viewdatas. 在”上一本”按纽
24、的click事件中加入如下代码 If rst.BOF Then 判断是否是第一条记录MsgBox 已经是第一条记录!, vbOKOnly + vbInformationElserst.MovePrevious 向前移一条记录Call viewdatasEnd If. 在”下一本”按纽的click事件中加入如下代码 If rst.EOF Then 判断是否是最后一条记录MsgBox 已经是最后一条记录!, vbOKOnly + vbInformationElserst.MoveNext 向后移一条记录Call viewdatasEnd If. 在”最末本”按纽的click事件中加入如下代码 rs
25、t.MoveLast 移到最后一条记录Call viewdatas3.6 库存管理库存录入 (代码同进书录入的代码)库存查询 在“查询“按纽的click事件中添加如下代码Dim txtSQL As String txtSQL = select * from tb_store If Text7.Text = Then sMeg = 请输入图书编号! MsgBox sMeg, vbOKOnly + vbExclamation, 警告 Text7.SetFocus Exit Sub Else txtSQL = txtSQL & where ISBN = & Trim(Text7.Text) & En
26、d If Adodc1.RecordSource = txtSQL 重新给数据源赋值 Adodc1.Refresh Adodc1的记录源设置如图3-5所示: 图3-53.7退货管理退货录入 (代码同进书录入的代码)退货查询 (同库存查询)3.8 销售统计图书销售业绩报表 .选择VB IDE 的菜单栏中的工程 添加Data report,添加一个数据报表,名称使用默认的Datareport1。 .设定 Datareport对象的DataSource属性为Environment1。 .设定Datareport对象的DataMember属性为 Command1。 .右击设计器,在弹出的快捷菜单中单击
27、“检索结构”选项。 .向相应的节添加相应的控件。报表Datareport1的设计界面如图3-6 所示。 图3-6在主窗体的菜单栏中选择销售统计-图书销售业绩报表,加入语句DataReport1.Show3.9信息维护图书信息维护(同图书销售浏览)人员信息维护添加一些常用按纽之后,然后在人员信息维护中加一个(CommonDialog)按纽,在“浏览图片”的click事件中添加如下代码With Me.CommonDialog1.DialogTitle = 选择要导入的图片.Filter = 选择图片类型|*.jpg|*.bmp|*.bmp|*.gif|*.*|*.jpg.ShowOpen.Init
28、Dir = App.PathMe.Picture1.Picture = LoadPicture(Me.CommonDialog1.FileName)End With用户信息维护在Form的 load事件中加入如下代码If Frm_login.Combo1.Text = 0 Then 判断当前使用者是管理员还是一般用户Me.Combo1.Text = Frm_login.Text1.Text 若为一般用户则该用户名赋值给Combo1.Text,否则,则把所有用户名都加到Combo1中ElseSet s = New ADODB.ConnectionDim str As Stringstr = pr
29、ovider=microsoft.jet.oledb.4.0;data source= & App.Path & books_sale.mdb;persist security info=falses.Open strSet c = New ADODB.Recordsetc.Open select * from tb_login, str, 1, 1c.MoveFirstWhile Not c.EOFCombo1.AddItem (c.Fields(name).Value)c.MoveNextWendEnd If在“确定”按纽的click事件中加入如下代码Call OpenDataBasers
30、t.Open tb_login, con, adOpenStatic, adLockOptimistic, -1Adodc1.RecordSource = select password from tb_login where name = combo1.textIf Text1.Text rst.Fields(password).Value Then 判断输入的原密码是否与数据库中的相同MsgBox 您输入的原密码不正确,请重新输入!, vbOKOnly + vbInformation, 提示Elserst.Fields(password) = Text2.Textrst.Updaterst
31、.Requeryrst.CloseMsgBox 密码修改成功!, vbOKOnly + vbInformation, 提示Unload MeEnd If四:调试过程.系统运行时的第一个界面如图4-1所示 图4-1.然后进入登录界面,如图4-2所示 图4-2.用户正确登录之后则可以进入主界面,主界面如图4-3所示 图4-3若该用户第一次使用本系统,则可以选择“新用户注册“来进行注册,如图4-4所示 图4-4新注册用户的用户名不能与数据库中已经存在的用户重名,运行效果如图4-5所示 图4-5运行时单击主界面中的Toolbar中的“进货”按纽或菜单栏中的进货管理-进书录入则运行界面如图4-6所示 图
32、4-6单击主界面的菜单栏中的进货管理-进书查询,则运行界面如图4-7所示 图4-7单击主界面的菜单栏中的销售管理-图书销售浏览,则运行界面如图4-8所示 图4-8单击主界面的菜单栏中的库存管理-库存查询,则运行界面如图4-9所示 图4-9单击主界面的菜单栏中的销售统计 图书销售报表,则运行界面如图4-10所示 图4-10单击主界面的菜单栏中的信息维护-人员信息维护,则运行界面如图4-11所示 图4-11单击主界面的菜单栏中的信息维护-用户信息维护,则运行界面如图4-12所示 图4-12单击主界面的菜单栏中的帮助-关于,则运行界面如图4-13所示 图4-13五:总结 通过本次实验,了解了做一个系
33、统的大概步骤。首先,应该确定该系统要实现的功能,以功能为目标,逐步细化;其次,在做的过程中也应该考虑到界面设计的问题,界面是软件直接与人打交道的主要途径,因此,应根据实际情况设计相应的界面,当系统中有多个模块时,应尽量使各个模块的界面风格保持一致;最后,添加代码,不断地对程序进行调试,达到最终目标。在设计时也会存在一些细节上的问题,例如,在用户登录界面中,首先要用鼠标把光标移到用户名后对应的编辑框中,然后在键盘上输入用户名,接着再次重复以上操作输入密码,这样让用户频繁的在鼠标与键盘之间来回变换,会使用户感觉到疲劳,对系统产生反感,因此,在设计的过程中应尽量避免出现此现象。在自己认为系统做好了之后,然后换位思考一下(把自己当成各种阶层的用户),会发现很多问题,比如说,提示信息不足,导致用户不知道某些事情是否已经完成了等等。六:参考文献1 刘瑞新,汪远征,Visual Basic 程序设计教程,北京:机械工业出版社,2000.10 2 张翼英,Visual Basic 课程设计,北京:清华大学出版社,2008.1 3 龙马工作室,新编 Visual Basic 6.0程序设计从入门到精通,北京:人民邮电出版社,2008.4