课程名称:软件工程课程设计设计题目:超市管理系统院系:专业:年级:姓名:指导教师:一、项目计划:1、开发背景及目的随着科学技术的飞速发展,给我们的生活带来了翻天覆地的变化。
机械化、自动化、信息化等给我们带来了诸多方便,不仅节省了人力资源同时大大的提高了工作的效益。
现在许多大型超市都利用计算机采用数据库管理系统与其他应用软件结合来管理超市的运营,增大了销售员的销售速率并节约了人力资源,最大的实现了经济效益。
对于小型超市若也采用数据库管理系统,对于超市经营者而言不仅可以提高其市场竞争力,减少营业员,而且提高销售速率;对于消费者而言购物也变得方便同时可以享受更好的服务。
2、项目的确立为了适应时代的发展,避免在激励的市场竞争中被淘汰,最大限度的利用所学知识提高经济效益和给消费者提供更好的服务质量,针对超市的特点,将开发以下一个简单的数据库管理系统。
该系统应该能管理销售的具体情况,这就需要一个前台销售系统。
另一方面对于商品的采购、销售和库存等信息也应准确掌握,所以还需要一个后台管理系统。
商品的买入和售出等就由这两个系统来完成。
3、问题的定义(1)商品条形码:每种商品具有唯一的条形码,对于某些价格一样的商品,可以使用自定义条形码。
(2)交易清单:包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号。
(3)商品积压:在一定时期内,远无法完成销售计划的商品会造成积压。
(4)促销:在一定时期内,某些商品会按低于原价的促销价格销售。
库存告警提示:当商品的库存数量低于库存报警数量时发出提示。
(5)盘点:计算出库存、销售额、盈利等经营指标。
二、项目可行性研究:操作方面,该数据库管理系统,为用户提供了简单易懂的用户操作界面,对于前台管理系统销售员可以轻松的掌握其用法,同样管理员也可以轻而易举的掌握后台管理系统的使用方法。
技术方面,随着科学技术的发展和其他超市对类似系统的成功运用,我们完全有信心开发一个针对小型超市的管理系统。
经济方面,由于该系统的成功应用只需一台计算机和一些相应的软件等,所需花销较少,但同时又能给超市带来更大的经济效益,所以是非常具有开发效益的。
法律可行性方面,该系统符合国家相关政策,符合国家法律法规。
三、需求分析:(一)系统的功能描述:随着人民物质文化于精神文化的日益丰富,超市收费管理也越来越多的使用了计算机管理的方式。
相对于传统的纸单收费,商品价格记录和计算都花费较长的时间,在统计店内商品库存等都有一定的困难。
而计算机收费管理系统采用数据库管理账单的方式,开单、结账、账单都可由计算机生成,极大的节省了时间提高了收费效率,并且方便查询,便于统计相关营业信息。
通过日常生活中的购物经历以及对学校现有超市的调查及分析,该系统应该能实现以下几个方面的功能:1、对于前台管理系统应包含的功能:(1)收银业务:通过扫描条形码或者直接输入商品名称时能自动计算本次交易的总金额。
对于相同多件商品可以扫描一次然后通过输入数量并计算的方式。
(2)找零计算:为避免人工运算出错也为了更加准确的计算销售者与消费者的(3)打印清单:打印交易清单,清单应该包括本次交易的流水账号、商品的商品名、数量、商品的总金额、交易的时间等。
(4)会员折扣:现在几乎所有的超市都采用了会员制来提高销售量。
如果顾客是本店会员,则在交易前先扫描会员卡或输入会员号,对所购物品给予相应的折扣,并显示原价和折扣后的价钱。
同时根据消费增加会员的相应积分。
(5)录入商品:可以通过输入唯一编号、扫描条形码、商品名称等来实现精确或模糊的商品扫描录入。
为收银业务,打印清单等做准备。
(6)安全性:OS登陆、退出、换班与操作锁定等权限验证保护;断电自动保护最大限度防止意外及恶意非法操作。
2、后台管理系统应包含的功能:(1)进货管理:根据销售情况及库存情况,制定进货计划。
另一方面可以根据商品的销售情况判定畅销产品,并可适当的多购入该类产品。
对于不畅销的商品则应少购或不购。
并且给出各类商品的采购数量、进价、总金额等信息。
(2)销售管理:通过综合查询各种商品的销售记录,包括规定售价及该价格下的销量,促销价及相应销量,会员价及相应销售数量等,按多种方式统计生成销售排行榜,计算出总的进价金额和售出所得金额,求出净收入。
(3)库存管理:通过进货信息和销售信息得出库存信息,从而查看各商品的库存量。
(4)提示:当某商品库存数量很少或者很多时能自动的给出提示。
提醒管理者采取相应的措施。
避免库存的货物堆积和货物短缺等情况的发生,保证超市的更好运营。
(5)人员管理:对于超市的员工、会员、供货商等需要一定的了解,所以在此需要对他们基本信息记录管理。
(6)权限管理:不是每一个员工都具有相同的权限,经营者可能会给管理权交给自己信任的员工,因而对超市的所以员工其对系统的操作有权限。
(二)系统的功能模块图:通过对系统的需求分析,考虑满足用户对数据库的信息需求、处理需求、安全性与完整性要求,得出了上述所需的系统功能,根据其功能得出系统功能模块图。
总体部分前台管理模块1、收银业务:扫描条形码或直接输入商品名称时自动计算本次交易的总金额。
相同多件商品可扫描一次然后输入数量计算。
2、会员折扣:能对商品打折并根据消费情况积分3、商品录入子系统要求能快速录入商品,因此必须支持条形码扫描4、安全性:OS登陆、退出、换班与操作锁定等权限验证保护;断电自动保护最大限度防止意外及恶意非法操作。
5、进货管理:能制定合理进货计划、自动入库登记、进货与入库记录、查询打印计划。
6、销售管理:查询各种商品的销售记录,统计生成销售排行榜,求出净收入7、库存管理:通过进货信息和销售信息得出库存信息,从而查看各商品的库存量。
8、提示:给出库存过多或过少的提示9、人员管理:提供员工、会员、供应商的基本信息。
10、权限管理:普通员工和管理员操作权限设置。
(三)系统的数据流程图:前台管理系统顶层数据流图第0层数据流图后台管理系统顶层数据流图第0层数据流图四、数据库设计(一)概念结构设计:1、分E-R图:((3)、(4)、(5)、2、综合E-R图:(二)逻辑结构设计:E-R模型转换成关系模型:1、商品信息表(商品编号,商品名称,价格,条形码,促销价格,促销起日期,促销止日期,允许打折,库存数量,库存报警数量,计划进货数,允许销售,厂商编号,供货商编号)2、用户表(用户编号,用户名称,用户密码,用户类型)3、会员表(会员编号,会员卡号,累积消费金额,注册日期)4、销售表(销售编号,商品编号,销售数量,销售金额,销售日期)5、交易表(交易编号,用户名称,交易金额,会员编号,交易日期)6、进货入库表(入库编号,入库商品编号,入库数量,单额,总额,入库日期,计划进货日期,入库状态)7、供货商表(供货商编号,供货商名称,供货商地址,供货商电话)8、厂商表(厂商编号,厂商名称,厂商地址,厂商电话)(三)数据库结构的详细设计:说明:创建名为chaoshi的数据库,创建上述上述八个表:为简便分别在数据库中将商品信息表对应于sp,用户表对应yh,会员表对应hy,销售表对应xs,交易表对应jy,进货入库表对应rk,供货商表对应gh,厂商表对应cs。
每个表的每一列具体属性如下:Spyhhyxsjyrkghcs/*----------创建数据库----------*/create database chaoshion primary(name=chaoshi,filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\chaoshi.mdf',size=50MB,maxsize=100MB,filegrowth=10)log on(name=chaoshilog,filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\chaoshi.ldf',size=50MB,maxsize=100MB,filegrowth=10MB)GoGo/*创建商品信息表*/CREATE TABLE sp (spno varchar(10) Primary key ,spName varchar(40) Unique NOT NULL ,spPrice money NOT NULL ,spNum int NOT NULL ,CautionNum int NOT NULL ,PlanNum int NOT NULL ,BarCode varchar(20) Unique NOT NULL ,SalesProPrice money NULL ,SalesProDateS datetime NULL ,SalesProDateE datetime NULL ,AllowAbate int NOT NULL ,AllowSale int NOT NULL ,csno varchar(10) NOT NULL ,ghno varchar(10) NOT NULL)GO/*创建用户表*/CREATE TABLE yh (yhno varchar(10) Primary key ,yhName varchar(30) NOT NULL ,yhPW varchar(40) NOT NULL ,yhStyle int NOT NULL ,)GO/*创建会员表*/CREATE TABLE hy (hyno varchar(10) Primary key ,hyCard varchar(20) NOT NULL ,hyCost money NOT NULL ,RegDate datetime NOT NULL)GO/*创建销售表*/CREATE TABLE xs (xsno int identity(1,1) Primary key , spno varchar(10) NOT NULL ,xsDate datetime NOT NULL ,xsNum int NOT NULL,xsPrice money NOT NULL)GO/*创建交易表*/CREATE TABLE jy (jyno varchar(20) not NULL Primary key , jyDate datetime NOT NULL ,jyPrice money NOT NULL ,yhName varchar(30) NULL ,hyno varchar(10) NULL)GO/*创建入库表*/CREATE TABLE rk (rkno varchar(10) Primary key ,spno varchar(10) NOT NULL ,rkNum int NOT NULL ,spPrice money NULL ,TotalPrice money NULL ,PlanDate datetime NULL ,rkDate datetime NULL,rkState int NOT NULL)GO/*创建供应商表*/CREATE TABLE gh (ghno varchar(10) Primary key ,ghName varchar(50) NOT NULL ,ghAddress varchar(300) NULL ,ghPhone varchar(30) NULL)GO/*创建厂商表*/CREATE TABLE cs (csno varchar(10) Primary key ,csName varchar(50) NOT NULL ,csAddress varchar(300) NULL ,csPhone varchar(30) NULL)GO/*----------创建表间约束----------*//*商品信息表中厂商编号、供应商编号分别与厂商表、供应商表之间的外键约束*/ALTER TABLE sp ADDCONSTRAINT [FK_sp_cs] FOREIGN KEY([csno]) REFERENCES cs ([csno]),CONSTRAINT [FK_sp_gh] FOREIGN KEY([ghno]) REFERENCES gh ([ghno])GO/*销售表中商品编号与商品信息表之间的外键约束*/ALTER TABLE xs ADDCONSTRAINT [FK_xs_sp] FOREIGN KEY([spno]) REFERENCES sp ([spno]) ON DELETE CASCADEGO/*入库表中商品编号与商品信息表之间的外键约束*/ALTER TABLE rk ADDCONSTRAINT [FK_rk_sp] FOREIGN KEY([spno]) REFERENCES sp ([spno]) ON DELETE CASCADEGO/*----------创建视图----------*//*创建用于查询交易情况的视图*/CREATE VIEW v_jyASSELECT jyDate as 交易日期,yhName as 用户名称,hyno as 会员编号,jyPrice as 交易金额FROM jyGO/*创建用于查询进货计划的视图*/ CREATE VIEW v_rkplanASSELECT rk.rkno as 入库编号,sp.spName as 商品名称,sp.BarCode as 条形码,cs.csName as 厂商,gh.ghName as 供货商,rk.rkNum as 入库数量,rk.PlanDate as 计划进货日期FROM rk,sp,gh,csWhere rk.spno = sp.spnoand gh.ghno=sp.ghnoand cs.csno=sp.spnoand rk.rkState=0GO/*创建用于查询销售明细记录的视图*/ CREATE VIEW v_xsASSELECT sp.spName as 商品名称,sp.BarCode as 条形码,sp.spPrice as 商品价格,xs.xsPrice as 销售价格,xs.xsNum as 销售数量,xs.xsDate as 销售日期FROM xs INNER JOINsp ON xs.spno = sp.spnoGO/*创建用于查询入库情况的视图*/ CREATE VIEW v_rkASSELECT sp.spName as 商品名称,sp.BarCode as 条形码,cs.csName as 厂商,gh.ghName as 供货商,rk.spPrice as 入库价格,rk.rkNum as 入库数量,rk.TotalPrice as 入库总额, rk.rkDate as 入库日期FROM rk,sp,gh,csWhere rk.spno = sp.spnoand gh.ghno=sp.ghnoand cs.csno=sp.csnoand rk.rkState=1GO视图:五、数据库与vb结合:1、连接准备:使用ADO连接数据库Private Sub Command1_Click()Dim CN As New ADODB.ConnectionDim RS As New ADODB.RecordsetCN.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & App.Path & "\chaoshi.mdb"RS.Open "yh", CN, adOpenKeyset, adLockOptimisticSet MSHFlexGrid1.DataSource = RSMSHFlexGrid1.ColWidth(0) = 100CN.CloseEnd SubPrivate Sub Command2_Click()EndEnd Sub2、主要功能模块设计:(1)、主窗体界面的设计:创建MDI多文档窗体,通过菜单编辑器得到以下界面:(2)、管理员登陆界面模块设计:通过添加frame控件、标签控件、命令按钮控件等得如下界面:为登录窗体添加启动事件:Private Sub FORM_LOAD()Dim I As IntegerFRMLOGIN.Icon = LoadPicture(App.Path & "\pic\sx.ico") rs1.Open "select 用户名 from 系统 ", cn, adOpenKeyset, adLockOptimisticrs1.MoveNextNext Irs1.Closeint_dl = 0End Sub设置登录按钮功能:Private Sub Command1_Click()Dim strpassword As StringIf Combo1.Text = "" Or Text1.Text = "" ThenMsgBox "请选择用户名和输入密码!", vbCritical, "警告"Exit SubEnd Ifrs1.Open "select 密码 from 系统 where 用户名=' " & Combo1.Text & " ' ", cn, adOpenKeyset, adLockOptimisticstrpassword = rs1.Fields(0)rs1.CloseIf Text1.Text = strpassword ThenOpen App.Path & "\jxcd1.log" For Append As #1Print #1, "登录者:" & Combo1.TextPrint #1, Now()MDIForm1.ShowUnload MeElseint_dl = int_dl + 1MsgBox "密码错误!", vbCritical, "警告"Text1.Text = ""Combo1.ListIndex = -1If int_dl = 3 ThenMsgBox "登录错误次数超过三次,请确认后在登录!", vbCritical, "警告" EndEnd IfExit SubEnd IfEnd Sub设置定时器:Private Sub Timer1_Timer()Label1.Caption = Date & " " & Time()End Sub(3)、进货管理模块的设计新建窗体并将其添加为MDI子窗体,布置frame控件、标签控件、命令按钮控件等,并编写相应的命令按钮程序,最后得到如下界面:(4)、销售管理模块的设计新建窗体并将其添加为MDI子窗体,布置frame控件、标签控件、命令按钮控件等,并编写相应的命令按钮程序,最后得到如下界面:(5)、存货查询模块的设计:例如在商品名处输入:“喜之郎果冻“按下库存数量按钮得:........忽略此处.......。