管理信息系统课程设计报告--超市门店进销存管理系统.docx
目 录1 系统背景资料(1)组织结构.1(2)业务功能.1(3)管理功能.1(4)业务功能与组合结构的关系.1(5)前台销售处理流程.1(6)后台进货、库存、销售管理流程.22目标系统需求分析.2(1)系统目标.2(2)系统输入、输出信息分析.2(3)进销存数据处理流程.2(4)数据类需求分析.33目标系统设计4(1)系统功能结构设计4(2)系统数据库设计.4(3)系统主要功能模块设计.64系统实施.7(1)系统运行环境说明.7(2)系统主要功能模块界面和代码75系统操作说明23(1)系统运行环境23(2)系统安装文件23(3)系统功能说明23附录:课程设计分工说明.24快乐超市门店进销存管理系统设计1系统背景资料本系统应用背景为一家中小超市门店。(1)组织结构该门店规模较小,其组织结构关系如图:店长销售部门店长助理图1 组织结构关系图(2)业务功能业务功能主要包括:进货、销售和库存/盘点管理。(3)管理功能门店管理进货销售库存管理前台后台图2 管理功能结构图(4)业务功能与组合结构的关系业务功能与组织结构的关系如表所示。 进货销售库存/盘点店长店长助理销售部门表1 业务功能与组织结构的关系表注:表中“”表示该项业务是对应组织的主要业务;“”表示该组织是参加协调该项业务的。(5)前台销售处理流程图3 POS前台销售处理流程(6)后台进货、库存、销售管理流程图4 后台进货、库存、销售管理流程2目标系统需求分析(1)系统目标本仿真系统的设计目标是: 能通过键盘录入当前的销售商品和实收金额、采购清单、验货单; 自动结算应收金额和找零金额; 打印购物小票并更新库存; 能查询商品销售信息、采购清单、库存信息、验货单; 能根据验货单确认采购清单并更新库存。(2)系统输入、输出信息分析输入信息有:当前销售商品信息、实收金额、入库商品信息。输出信息有:购物小票、销售情况表和库存情况表。(3)进销存数据处理流程图5 进销存数据处理流程图(顶层)图6 进销存数据处理流程图(第二层)(4)数据类需求分析数据类需求分析步骤如下:第一,依据系统实体确定基本数据类;第二,依据新系统数据处理流程补充数据类。系统包括的主要实体有:顾客、收款员、POS机、小票、商店、商品、购物篮、仓库。实体联系图(E-R图)如图所示:图7 POS系统实体联系图得到系统的关系结构如下:当前销售商品信息表(商品代号,商品名称,单价,数量,金额,总计,实收,找零,时间,收款员代号,单据号);基本信息表(商店号,机号,礼貌语1,礼貌语2,提示语1,提示语2);历史销售商品信息表(商品代号,商品名称,单价,数量,金额,总计,实收,找零,时间,收款员代号,单据号);商品词典表(商品代号,商品名称,单价);收款员表(收款员代号,收款员姓名,口令);运行参数表(单据号);出库表(出库单编号,商品编号,数量,录入,审核,客户,出库时间);历史出库表(出库单编号,商品编号,数量,录入,审核,客户,出库时间);入库表(入库单编号,商品编号,供应商,数量,单价,录入,审核,入库时间);历史入库表(入库单编号,商品编号,供应商,数量,单价,录入,审核,入库时间);库存表(商品编号,商品名称,分类,单位,数量,库存底线,备注)。3目标系统设计(1)系统功能结构设计图8 系统功能结构设计(2)系统数据库设计根据E-R图得到系统基本关系如下:顾客(顾客代号);收款员(收款员代号,收款员姓名,口令);POS机(机号,品名,厂家)小票(单句号,日期,时间,收款员代号,机号,商店名称,购物信息,礼貌语,提示语);商店(商店号,商店名称);商品(商品代号,商品名称,单价);购物篮(顾客代号,商品代号,数量,金额);付款结算(顾客代号,实收,应收,找零);仓库(仓库代号,仓库名称)。根据数据处理流程得到补充关系:销售情况表(历史购物信息)。系统需要构建的数据表主要有出库表、入库表、库存表、基本信息表、商品词典表、收款员表、运行参数表、销售商品表(历史商品、当前商品)具体参数设置如下:字段名类型宽度小数位数索引说明入库单号字符型10有商品编号字符型13采用标准型EAN代码供应商字符型8数量数值整型单价货币8自动录入字符型8审核字符型8入库时间日期/时间8表2入库表的数据结构字段名类型宽度小数位数收款员代号字符型3收款员姓名字符型8口令字符型6表3 收款员表的数据结构字段名类型宽度小数位数单据号字符型8表4 运行参数表的数据结构字段名类型宽度小数位数索引说明出库单编号字符型10有商品编号字符型13采用标准型EAN代码数量数值整型录入字符型8审核字符型8客户字符型8出库时间日期/时间8表5出库表的数据结构字段名类型宽度小数位数商品代号字符型10商品名称字符型20单价数值型122表6 商品词典表的数据结构字段名类型宽度小数位数商品代号字符型10商品名称字符型20单价数值型122数量整型4金额数值型122总计数值型122实收数值型122找零数值型122时间日期时间型8收款员代号字符型3单据号字符型8表7 当前销售商品信息表的数据结构字段名类型宽度小数位数商品号字符型4商店名称字符型30机号字符型2礼貌语1字符型30礼貌语2字符型30提示语1字符型30提示语2字符型30表8 基本信息表的数据结构字段名类型宽度小数位数索引说明商品编号字符型13有采用标准型EAN代码商品名称字符型50分类字符型1ABC分类单位单位8计量单位数量数值整型库存底线数值整型备注文本50表9 库存表的数据结构(3) 系统主要功能模块设计² 总控模块程序结构图9 总控模块程序结构图图10 系统菜单结构图² 商品销售模块程序结构图11 商品销售模块程序结构图² 小票样式图12 小票样式² 库存管理模块程序结构图13 验收到货模块程序结构图4系统实施(1)系统运行环境说明操作系统:Windows 2000/XP/Vista数据管理系统:ACCESS 2000编程语言:VB 6.0(2)系统主要功能模块界面和代码1. 总控制模块程序设计² 系统总控模块程序1)窗体对象 FrmInit属性:Name: FrmInitBorderstyle:0-ZonePicture:D:Pos System享受大自然风景宽屏壁纸StarUpPosition:2-屏幕中心代码:Public COVER As BooleanPrivate Sub Form_Initialize() Me.Label1.Top = Me.Height - 400 Me.Label1.Left = (Me.Width - Me.Label1.Width) / 2 Me.Label2.Top = (Me.Height + 800) Me.Label2.Left = (Me.Width - Me.Label2.Width) / 2 Me.Label1.Visible = False Me.Label2.Visible = FalseEnd SubPrivate Sub Form_Load()Dim nobtime As Integer nobtime = 0End Sub2)计时器对象Timer1属性:Interval:60代码:Private Sub Timer1_Timer()If nobtime = 0 Then nobtime = 1 Me.Label1.Visible = True Me.Label2.Visible = TrueEnd IfIf Me.Label1.Top - 1500 > 0 Then Me.Label1.Top = Me.Label1.Top - 20 Me.Label2.Top = Me.Label2.Top - 20Else Unload Me COVER = TrueEnd IfEnd Sub² 系统封面表单设计系统封面表单界面,如图所示,运行时字幕由下向上慢慢上升。图14 系统封面² 系统登录表单设计系统登录表单界面,如图所示:图15 系统登录界面代码:Option Explicit '强制变量声明Public OK As BooleanDim txtSQL As StringDim mrc As ADODB.RecordsetDim MsgText As StringPrivate Sub Form_Load() Dim i As Integer i = 0 txtSQL = "select * from 收款员表" Set mrc = ExecuteSQL(txtSQL, MsgText) With txtUserName Do While Not mrc.EOF i = i + 1 .AddItem Trim(mrc.Fields("收款员姓名") mrc.MoveNext Loop .ListIndex = 0 End With mrc.Close OK = FalseEnd SubPrivate Sub cmdCancel_Click() OK = False Me.HideEnd SubPrivate Sub cmdOK_Click() txtSQL = "select * from 收款员表 where 收款员姓名 = '" & txtUserName.Text & "'" Set mrc = ExecuteSQL(txtSQL, MsgText) If mrc.EOF = True Then MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告" txtUserName.SetFocus Else If Trim(mrc.Fields("口令") = Trim(txtPassword.Text) Then OK = True Me.Hide UserName = Trim(txtUserName.Text) UserOrder = mrc.Fields("收款员代号") mrc.Close Else MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告" txtPassword.SetFocus txtPassword.Text = "" End If End IfEnd SubPrivate Sub txtPassword_Change()End SubPrivate Sub txtUserName_Click() txtPassword.Text = ""End Sub² 系统菜单设计系统菜单采用菜单编辑器来完成:图16-1 系统菜单编辑器图16-2 系统菜单代码:Private Sub MDIForm_Load()StatusBar1.Panels.Item(1) = "正在运行中"End SubPrivate Sub munbasic_Click()基本信息库.ShowEnd SubPrivate Sub munbillquery_Click()按单据号查询.ShowEnd SubPrivate Sub muncodequery_Click()按商品代号查询.ShowEnd SubPrivate Sub mundictionary_Click()商品词典.ShowEnd SubPrivate Sub munparameter_Click()运行参数.ShowEnd SubPrivate Sub munpos_Click()收款员库.ShowEnd SubPrivate Sub munquit_Click()EndEnd SubPrivate Sub munsale_Click()商品销售.ShowEnd SubPrivate Sub 出库表_Click()frm出库表.ShowEnd SubPrivate Sub 库存查询_Click()Form1.ShowEnd SubPrivate Sub 入库表_Click()frm入库表.ShowEnd Sub2. 初始化模块设计² 基本信息表单运行界面,如图所示:图17 基本信息表² 收款员表单运行界面如图所示:图18 收款员表² 商品词典表单运行界面如图所示:图19 商品词典表² 运行参数表单运行界面如图20所示:图20 运行参数表3. 商品销售模块设计² 商品销售表单商品销售表单如图21所示:图21 商品销售代码:Dim txtSQL As StringDim mrc As ADODB.RecordsetDim rec As ADODB.RecordsetDim MsgText As StringPrivate Sub Combo1_Click() txtSQL = "select * from 商品词典表 where 商品代号 = '" & Combo1.Text & "'" Set mrc = ExecuteSQL(txtSQL, MsgText) '执行查询语句 With MSHFlexGrid1 '将查询内容显示在表格控件中 .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = mrc.Fields(0) & "" .TextMatrix(.Rows - 1, 1) = mrc.Fields(1) & "" .TextMatrix(.Rows - 1, 2) = mrc.Fields(2) & "" End With Text3.Text = mrc.Fields(2) mrc.Close '关闭数据集End SubPrivate Sub Command1_Click() Dim Order As Integer If Text5 = "" Then MsgBox "实收不能为空!", vbOKOnly, "提示" Text5.SetFocus Exit Sub End If If Text1 = "" Then MsgBox "总计不能为空!", vbOKOnly, "提示" Exit Sub End If txtSQL = "select 单据号 from 运行参数表" Set mrc = ExecuteSQL(txtSQL, MsgText) mrc.MoveLast Order = mrc.Fields("单据号") mrc.AddNew mrc.Fields(0) = Order + 1 Order = mrc.Fields(0) mrc.Update mrc.Close txtSQL = "select 商品代号,商品名称,单价,数量,金额,总计,实收,找零,时间,收款员代号,单据号 from 当前销售商品信息表" Set mrc = ExecuteSQL(txtSQL, MsgText) With MSHFlexGrid1 For i = 2 To .Rows - 1 mrc.AddNew mrc.Fields(0) = .TextMatrix(i, 0) mrc.Fields(1) = .TextMatrix(i, 1) mrc.Fields(2) = .TextMatrix(i, 2) mrc.Fields(3) = .TextMatrix(i, 3) mrc.Fields(4) = .TextMatrix(i, 4) mrc.Fields(5) = Text1.Text mrc.Fields(6) = Text5.Text mrc.Fields(7) = Text6.Text mrc.Fields(8) = Date mrc.Fields(9) = UserOrder mrc.Fields(10) = Order mrc.Update '将当前销售商品信息表复制到历史销售商品信息表 txtSQL = "select 商品代号,商品名称,单价,数量,金额,总计,实收,找零,时间,收款员代号,单据号 from 历史销售商品信息表" Set rec = ExecuteSQL(txtSQL, MsgText) rec.AddNew For j = 0 To 10 rec.Fields(j) = mrc.Fields(j) Next j rec.Update Next i rec.Close mrc.Close MSHFlexGrid1.Clear Text1 = "" Text3 = "" Text4 = "" Text5 = "" Text6 = "" End WithEnd SubPrivate Sub Command2_Click() '打印单据报表 DataReport1.Show '清空当前销售商品信息表 txtSQL = "select 商品代号,商品名称,单价,数量,金额,总计,实收,找零,时间,收款员代号,单据号 from 当前销售商品信息表" Set mrc = ExecuteSQL(txtSQL, MsgText) Do While Not mrc.EOF mrc.Delete mrc.MoveNext Loop mrc.CloseEnd SubPrivate Sub Command3_Click()Unload MeEnd SubPrivate Sub Form_Load() Dim i As Integer i = 0 txtSQL = "select * from 商品词典表" Set mrc = ExecuteSQL(txtSQL, MsgText) With Combo1 Do While Not mrc.EOF i = i + 1 .AddItem Trim(mrc.Fields("商品代号") mrc.MoveNext Loop End With mrc.Close With MSHFlexGrid1 .Rows = 2 .CellAlignment = 5 .ColWidth(0) = 1500 .ColWidth(1) = 2000 .ColWidth(2) = 1200 .ColWidth(3) = 1200 .ColWidth(4) = 1500 .TextMatrix(1, 0) = "商品代号" .TextMatrix(1, 1) = "商品名称" .TextMatrix(1, 2) = "单价" .TextMatrix(1, 3) = "数量" .TextMatrix(1, 4) = "金额" End With Text1.Enabled = False Text3.Enabled = False Text6.Enabled = False End SubPrivate Sub Text4_Change()If Text4 <> "" ThenWith MSHFlexGrid1 .TextMatrix(.Rows - 1, 3) = Text4.Text .TextMatrix(.Rows - 1, 4) = Text3.Text * Text4.Text Text1.Text = Val(Text1.Text) + Val(.TextMatrix(.Rows - 1, 4)End WithEnd IfEnd SubPrivate Sub Text5_Change() If Text5 <> "" Then Text6.Text = Text5.Text - Text1.Text End IfEnd Sub² 单据表单小票样式,如图所示:图22 单据表单4. 销售商品信息查询模块设计² 按商品代号查询表单如图所示:图23 按商品代号查询表单代码:Dim txtSQL As StringDim mrc As ADODB.RecordsetDim MsgText As StringPrivate Sub Command1_Click()Unload MeEnd SubPrivate Sub Form_Load() With MSHFlexGrid1 .Rows = 2 .CellAlignment = 7 .ColWidth(0) = 1500 .ColWidth(1) = 2000 .ColWidth(2) = 1200 .ColWidth(3) = 1200 .ColWidth(4) = 1500 .ColWidth(5) = 2500 .ColWidth(6) = 1200 End WithEnd SubPrivate Sub Text1_Change() MSHFlexGrid1.Clear txtSQL = "select 商品代号,商品名称,单价,数量,金额,时间,收款员代号 from 历史销售商品信息表" Set mrc = ExecuteSQL(txtSQL, MsgText) Do While Not mrc.EOF If mrc.Fields("商品代号") = Text1.Text Then With MSHFlexGrid1 '将查询内容显示在表格控件中 .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = mrc.Fields(0) & "" .TextMatrix(.Rows - 1, 1) = mrc.Fields(1) & "" .TextMatrix(.Rows - 1, 2) = mrc.Fields(2) & "" .TextMatrix(.Rows - 1, 3) = mrc.Fields(3) & "" .TextMatrix(.Rows - 1, 4) = mrc.Fields(4) & "" .TextMatrix(.Rows - 1, 5) = mrc.Fields(5) & "" .TextMatrix(.Rows - 1, 6) = mrc.Fields(6) & "" .TextMatrix(1, 0) = "商品代号" .TextMatrix(1, 1) = "商品名称" .TextMatrix(1, 2) = "单价" .TextMatrix(1, 3) = "数量" .TextMatrix(1, 4) = "金额" .TextMatrix(1, 5) = "时间" .TextMatrix(1, 6) = "收款员代号" End With End If mrc.MoveNext Loop mrc.Close End Sub² 按单据号查询表单如图所示:图24 按单据号查询表单代码:Private Sub Text1_Change() MSHFlexGrid1.Clear txtSQL = "select 商品代号,商品名称,单价,数量,金额,时间,单据号 from 历史销售商品信息表" Set mrc = ExecuteSQL(txtSQL, MsgText) Do While Not mrc.EOF If mrc.Fields("单据号") = Text1.Text Then With MSHFlexGrid1 '将查询内容显示在表格控件中 .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = mrc.Fields(0) & "" .TextMatrix(.Rows - 1, 1) = mrc.Fields(1) & "" .TextMatrix(.Rows - 1, 2) = mrc.Fields(2) & "" .TextMatrix(.Rows - 1, 3) = mrc.Fields(3) & "" .TextMatrix(.Rows - 1, 4) = mrc.Fields(4) & "" .TextMatrix(.Rows - 1, 5) = mrc.Fields(5) & "" .TextMatrix(.Rows - 1, 6) = mrc.Fields(6) & "" .TextMatrix(1, 0) = "商品代号" .TextMatrix(1, 1) = "商品名称" .TextMatrix(1, 2) = "单价" .TextMatrix(1, 3) = "数量" .TextMatrix(1, 4) = "金额" .TextMatrix(1, 5) = "时间" .TextMatrix(1, 6) = "单据号" End With End If mrc.MoveNext Loop mrc.Close End Sub5. 库存管理模块设计² 商品入库图25 商品入库代码:Private Sub cmdAdd_Click() Data1.Recordset.AddNewEnd SubPrivate Sub cmdDelete_Click() '如果删除记录集的最后一条记录 '记录或记录集中唯一的记录 Data1.Recordset.Delete Data1.Recordset.MoveNextEnd SubPrivate Sub cmdRefresh_Click() '这仅对多用户应用程序才是需要的 Data1.RefreshEnd SubPrivate Sub cmdUpdate_Click() Data1.UpdateRecord Data1.Recordset.Bookmark = Data1.Recordset.LastModifiedEnd SubPrivate Sub cmdClose_Click() Unload MeEnd SubPrivate Sub Data1_Error(DataErr As Integer, Response As Integer) '这就是放置错误处理代码的地方 '如果想忽略错误,注释掉下一行代码 '如果想捕捉错误,在这里添加错误处理代码 MsgBox "数据错误事件命中错误:" & Error$(DataErr) Response = 0 '忽略错误End SubPrivate Sub Data1_Reposition() Screen.MousePointer = vbDefault On Error Resume Next '这将显示当前记录位置 '为动态集和快照 Data1.Caption = "记录:" &