收藏 分销(赏)

本科毕业论文---超市物流管理系统设计.doc

上传人:胜**** 文档编号:3007468 上传时间:2024-06-13 格式:DOC 页数:20 大小:1.04MB 下载积分:10 金币
下载 相关 举报
本科毕业论文---超市物流管理系统设计.doc_第1页
第1页 / 共20页
本科毕业论文---超市物流管理系统设计.doc_第2页
第2页 / 共20页


点击查看更多>>
资源描述
学 号 03100810 数据库系统原理课程设计 设计说明书 超市物流管理系统 起止日期: 2014 年 6月 30 日 至 2014 年 7 月 4 日 学生姓名 苏 宇 班级 06计算机5班 成绩 指导教师(签字) 计算机与信息工程学院 2014年7月4日 摘 要 当今中国零售业发展正盛,大量超市涌现于各个城市,很大程度上改变了人民的消费方式。而现在大多数中小型超市还在使用手工管理,大量频繁的物资流通,使得传统低效的人工管理已不合时宜,因此,开发一个小型超市物流管理系统非常必要。 本系统采用C/S开发模式,以VC+SQLSERVER作为开发工具,通过实际调研、系统分析、系统设计和程序编码,完成了小型超市物流管理系统的设计与开发,基本达到了要求的效果。 系统以一个统一的界面,给收银员、采购员和管理人员提供了不同的操作及管理功能。数据库服务器可配置在独立的服务器上,也可配置在一台运行本系统的计算机上。系统适用于中小型无连锁店,或连锁店间经济独立的超市的物流管理。 关键词:超市;物流管理;VC 目 录 第1章 系统定义 1 第2章 需求分析 1 2.1 系统综合需求 1 2.2 系统逻辑模型 1 第3章 系统设计 4 3.1 概念结构设计 4 3.2 逻辑结构设计 4 3.3 子模块划分及功能概述 7 第4章 详细设计 11 4.1 开发平台及工具 11 4.2 存储过程及触发器 11 4.3 编码设计 14 4.4 界面设计 15 第5章 课程设计总结 17 参考文献 17 第1章 系统定义 当今中国零售业发展正盛,大量超市涌现于各个城市,很大程度上改变了人民的消费方式。大量频繁的物资流通,使得传统低效的人工管理已不合时宜。本系统以一个统一的界面,给收银员、采购员和管理人员提供了不同的操作及管理功能。数据库服务器可配置在独立的服务器上,也可配置在一台运行本系统的计算机上。适用于中小型无连锁店,或连锁店间经济独立的超市的物流管理。 第2章 需求分析 2.1 系统综合需求 作为一个超市物流管理系统,应该给用户提供方便、友好而简洁的界面进行应用,并对超市的运营过程中物资的流动详细记录归档,并将这些数据进行逻辑上的融合,以便于用户查看、分析及管理。 针对中小型超市的运营模式,有三类核心员工:收银员、采购员和管理人员,分别有三个核心功能需要实现,销售功能,采购功能,库存管理和员工管理功能。管理人员的功能应该在此基础上进行扩展,实现销售记录查询,采购记录查询,商品信息查询、添加、删除和修改,以及促销活动的设置。 很多超市实行了会员制度,会员享受优惠待遇。所以本系统应该引入会员管理的模块,对会员进行注册、删除、查询、消费跟踪。 此外,一个成熟的管理系统不仅应该具有基本的处理、查询功能,还应该有一些分析、后台监控的功能。所以可以将基本的供销数据进行融合,以图形化的界面展示给用户进行供销情况的分析。在后台实时监控商品库存量,当低于某一值时,向前台发出预警通知。 最后,本系统中对实际中应该机械化处理的过程,如条形码扫描仪,读卡机等,进行手工操作模拟的简化,加入相应功能模块即可在现实中使用。 2.2 系统逻辑模型 1.数据流图 系统数据流图如图2-1所示。 图2-1 系统数据流图 2.数据字典 数据字典如表2-1所示。 表2-1 系统数据字典 项目 组成 类型 来源 去向 存储者 使用频度 变动频度 当前打折情况 会员优惠规则,全场优惠规则 数据流 管理人员 收银员 - 频繁 有时 (打折信息) 管理人员 管理人员 (当前优惠规则) 优惠规则 数据存储 - - 管理人员 销售商品信息 商品编号,售价,销售数量,销售日期,会员编号,收银员工号 数据流 收银员 管理人员 - 频繁 增加频繁,基本无更改 (销售信息) (历史销售记录) 销售记录 数据存储 - - 收银员 会员信息 会员编号,姓名,住址,电话,身份证号,消费金额 数据流 管理人员,收银员 管理人员 - 频繁 增加不频繁,基本无更改 (会员资料) 消费清单 商品编号,售价,销售数量,销售日期,会员编号,收银员工号 收银员 管理人员 - 会员信息 会员编号,姓名,住址,电话,身份证号 数据存储 - - 管理人员 商品信息列表 编号,名称,规格,供应商,售价,库存量 数据流 管理人员,采购员,收银员 管理人员 - 频繁 增加不频繁,更改不频繁 商品信息 数据存储 - - 管理人员 本次采购信息 采购编号,商品编号,采购价格,采购数量,采购日期,采购员 数据流 采购员 管理人员 - 有时 增加有时,基本无更改 历史采购信息 采购信息 采购记录 采购记录 数据存储 - - 采购员 第3章 系统设计 3.1 概念结构设计 系统E-R图如图3-1所示。 图3-1 系统E-R图 3.2 逻辑结构设计 系统数据表如表3-1~表3-7所示。 表3-1员工信息表 员工信息表 Employee 字段名 类型 NULL 其他 备注 e_id varchar(10) PK 员工号 e_name varchar(10) Index 员工姓名 e_pwd varchar(100) Y 登录密码 e_position tinyint(1) 职位(0:管理人员 1:收银员 2:采购人员) e_state bit(1)     在职情况 表3-2会员信息表 会员信息表 Member 字段名 类型 NULL 其他 备注 m_id bigint(8) PK 会员编号 m_name varchar(10) Index 会员姓名 m_addr varchar(50) 会员住址 m_tel varchar(15) 会员电话 m_code varchar(18) 会员身份证号 m_consume decimal     会员消费金额 表3-3商品信息表 商品信息表 Product 字段名 类型 NULL 其他 备注 p_id bigint(8) PK 商品编号 p_name varchar(30) Index 商品名称 p_scale varchar(6) 规格 p_price decimal 商品当前单价 p_manu varchar(30) 供应商 p_qty int(5)   Index 库存量 表3-4采购记录表 采购记录表 Buy 字段名 类型 NULL 其他 备注 b_id bigint(8) PK 采购编号 p_id bigint(8) Index,FK 商品编号 b_price decimal 购入价格 b_qty int(5) 购入数量 b_time varchar(19) 采购时间 e_id varchar(10)   FK 采购员工号 表3-5 销售记录表 销售记录表 Sell 字段名 类型 NULL 其他 备注 s_id bigint(10) PK 销售编号 p_id bigint(8) Index,FK 商品编号 s_price decimal 销售价格 s_qty int(5) 销售数量 s_time varchar(19) 销售时间 e_id varchar(10) FK 收银员 m_id bigint(8) Y FK,Index 会员编号 表3-6 预警日志表 预警日志表 Warning 字段名 类型 NULL 其他 备注 w_id int(4) PK 预警编号 w_content text     预警内容 表3-7优惠规则表 优惠规则表 Discount 字段名 类型 NULL 其他 备注 m_all float 所有会员打折数 d_all float     全场打折数 部分表关系图如图3-2所示: 图3-2 部分表关系图 3.3 子模块划分及功能概述 系统层次结构图如图3-3所示。 图3-3 系统层次结构图 系统设置三种权限:收银员、采购员和管理人员。登录后,可以进入不同的功能模块,在登录界面可以修改登录密码。子模块划分如下: l 收银台POS系统(需要权限:收银员) 顾客拿商品到收银台时,首先出示会员卡(如果是会员),收银员通过读卡机读取会员卡的会员号,然后通过条形码扫描仪一一扫描商品,获得商品编号,并手动输入购买数量,结算后显示应付金额。在扫描过程中,结算之前,可以取消某项商品的购买信息。收银员还可以在这里看到管理人员发送的通知消息。收银台POS系统工作流程如图3-4所示。 图3-4 收银台POS系统工作流程 l 采购入库(需要权限:采购员) 采购员只能采购数据库中已存在的商品。对每种采购的商品输入采购的商品编号,采购数量,和采购价格,这些商品的信息和采购的信息显示在列表中,结算入库后列表清空,并将数据写入数据库。采购入库系统工作流程如图3-5所示。 图3-5 采购入库系统工作流程 l 商品及库存管理(需要权限:管理人员) (1) 引入新商品:填写商品的名称,规格,供应商和售价,将商品引入超市。添加后的商品库存量为0,需要采购。供应商或规格不同的同名商品,应作为不同的商品对待。商品及库存管理工作流程如图3-6所示。 图3-6 商品及库存管理工作流程 (2)商品查询:可以根据商品的名称,供应商,库存量进行查询,并可以查看所有商品的信息列表。显示的信息包括编号,名称,规格,供应商和库存量。商品查询工作流程如图3-7所示。 图3-7 查询工作流程 (3)删除商品:只能删除库存量为0的商品,表明不再引进此商品。支持批量删除。删除商品工作流程如图3-8所示。 图3-8 删除商品工作流程 (4)修改商品信息:在商品信息列表中选择一行,对其基本信息进行修改。修改商品工作流程如图3-9所示。 图3-9 修改商品工作流程 l 会员管理(需要权限:管理人员) (1)会员注册:填写顾客姓名,住址,电话及身份证号,即可注册成为会员,享受优惠待遇。会员注册工作流程如图3-10所示。 图3-10 会员注册工作流程 (2)会员查询:可以按会员的编号和姓名进行查询,并可以查看所有会员的信息列表。显示的信息包括编号,姓名,住址,电话,身份证号和累计消费金额。会员查询工作流程如图3-11所示。 图3-11 会员查询工作流程 (3)取消会员身份:删除会员资料,使其会员卡失效。支持批量删除。取消会员身份工作流程如图3-12所示。 图3-12 取消会员身份工作流程 (4)查看消费记录:在会员信息列表中选择一行,对其详细的消费记录进行查询。查看消费记录工作流程如图3-13所示。 图3-13 查看消费记录工作流程 l 销售管理(需要权限:管理人员) 对历史的销售记录进行查看。可以按商品编号,商品名称或日期进行查询,也可以列出所有的销售记录。显示信息包括商品编号,商品名称,商品规格,销售数量,销售价格,收银员和销售时间。销售管理工作流程如图3-14所示。 图3-14销售管理工作流程 l 员工管理(需要权限:管理人员) (1)增加员工:添加新上岗的员工的信息。需要填写工号,姓名,登录密码和职位。增加员工工作流程如图3-15所示。 图3-15增加员工工作流程 (2)员工信息列表:列出了所有员工的信息列表。显示的信息包括工号,姓名,职位和在职情况。员工信息列表工作流程如图3-16所示。 图3-16 员工信息列表工作流程 (3)员工离职:将离职员工的在职情况置为“离职”。 员工离职工作流程如图3-17所示。 图3-17员工离职工作流程 (4)修改员工信息:在员工信息列表中选择一行,修改其基本信息(姓名和职位)。修改员工信息工作流程如图3-18所示。 图3-18 修改员工信息工作流程 (5)向收银台发送消息:输入运行本系统的收银台的IP和消息,可以向收银员发送通知消息。向收银台发送消息工作流程如图3-19所示。 图3-19向收银台发送消息工作流程 l 采购管理(需要权限:管理人员) 对历史的采购记录进行查看。可以按商品编号,商品名称或日期进行查询,也可以列出所有的采购记录。显示信息包括商品编号,商品名称,商品规格,供应商,采购数量,采购价格,采购时间,采购员和当前库存量。采购管理工作流程如图3-20所示。 图3-20 采购管理工作流程 l 供销情况分析(需要权限:管理人员) 对历史采购及销售数据,用图形的方式显示其供销情况及盈利状况,直观的供管理人员分析。供销情况分析工作流程如图3-21所示。 图3-21 供销情况分析工作流程 l 优惠规则管理(需要权限:管理人员) (1)会员优惠规则:设置对会员购物实行多少折优惠。 (2)全场优惠规则:设置促销活动,全场商品打折多少。优惠规则工作流程如图3-22所示。 图3-22 优惠规则工作流程 l 缺货报告日志(需要权限:管理人员) 后台实时监测商品的库存量,当库存量低于某值时,就发出预警,并记入日志。这里可以查看和清空所有的预警日志。管理员可控制预警开关,如果打开,则发出报警,否则,只在后台写入日志。缺货报告日志工作流程如图3-23所示。 图3-23缺货报告日志工作流程 l 其他附加功能 (1) 修改密码,重新登录 (2) 配置数据源连接,将数据源连接信息写入配置文件,避免硬编码数据源名,用户名和密码带来的弊端。 (3) 帮助文档:解释如何配置服务器及一些常见问题。 (4) 备份(增量备份和完全备份),恢复数据库。 第4章 详细设计 4.1 开发平台及工具 l 开发工具 Microsoft Visual C++ 6.0 l DBMS: Microsoft SQL Server 2000 l 建模工具: Microsoft Visio, Sybase PowerDesigner l 第三方库: Skin++换肤库, MD5加密类 说明:为了方便的实现多线程及Socket通信等功能,以及个人熟悉程度的因素,选择了VC 6.0的开发平台。 而在Windows平台上为数不多的DBMS产品中,Oracle过于庞大,不利于在低配置的机器上运行;Access又过于小型,不能负载大量的数据访问请求,所以选择了适中的MS SQL Server。 为了弥补VC做界面困难的缺陷,软件用了一个换肤的共享库Skin++,以dll形式附带在程序包中。 另外在登录密码的加密存储中,用到了流行的MD5加密,算法实现来源于。 4.2 存储过程及触发器 作为数据库应用系统,数据的一致性需要得到保证,通过单纯的手工编码方式,工作烦琐,容易出错,而且不易于扩展。采用DBMS的外码约束,Unique约束,触发器的使用来解决这一问题。 在查询效率方面,三表及四表连接查询的过程用存储过程实现。 对商品,采购,销售表的外码没有强制级联删除和级联修改,因不再进购某种商品,或某雇员辞职,不应该影响过去的采购,销售记录。 l 查询销售记录的存储过程 CREATE PROCEDURE [dbo].search_sell_rec @id varchar(8), @name varchar(30), @time varchar(30), @mid varchar(8) AS IF (@mid = '') BEGIN SELECT P.p_id AS pid, P.p_name AS pname , P.p_scale AS pscale , S.s_qty AS sqty , S.s_price AS sprice , S.s_time AS stime , E.e_name AS ename FROM product P, sell S, employee E WHERE P.p_id like '%'+@id+'%' and P.p_name like '%'+@name+'%' and S.s_time like '%'+@time+'%' and S.p_id = P.p_id and S.e_id = E.e_id ORDER BY S.s_id desc END IF (@mid<>'') BEGIN SELECT P.p_id AS pid, P.p_name AS pname , P.p_scale AS pscale , S.s_qty AS sqty , S.s_price AS sprice , S.s_time AS stime , E.e_name AS ename , P.p_qty AS pqty FROM product P, sell S, employee E WHERE P.p_id like '%'+@id+'%' and P.p_name like '%'+@name+'%' and S.s_time like '%'+@time+'%' and S.m_id =@mid and S.p_id = P.p_id and S.e_id = E.e_id ORDER BY S.s_id desc END GO l 查询采购记录的存储过程 CREATE PROCEDURE [dbo].search_buy_rec @id varchar(8), @name varchar(30), @time varchar(30) AS BEGIN SELECT P.p_id AS pid, P.p_name AS pname , P.p_scale AS pscale , P.p_manu AS pmanu, B.b_qty AS bqty , B.b_price AS bprice ,B.b_time AS btime , E.e_name AS ename FROM product P, buy B, employee E WHERE P.p_id like '%'+@id+'%' and P.p_name like '%'+@name+'%' and B.b_time like '%'+@time+'%' and B.p_id = P.p_id and B.e_id = E.e_id ORDER BY B.b_id desc END GO l 触发器:采购商品后,自动增长库存量 CREATE TRIGGER qty_inc ON [dbo].[buy] FOR INSERT AS UPDATE P SET P.p_qty = P.p_qty + I.b_qty FROM product AS P INNER JOIN INSERTED AS I ON P.p_id = I.p_id l 触发器:销售商品后,自动减少库存量,并为相应会员增加其消费金额记录 CREATE TRIGGER qty_dec ON dbo.sell FOR INSERT AS UPDATE P SET P.p_qty = P.p_qty - I.s_qty FROM product AS P INNER JOIN INSERTED AS I ON P.p_id = I.p_id DECLARE @member varchar(10) DECLARE @consume decimal(9,2) SET @member = (SELECT m_id FROM INSERTED) SET @consume = (SELECT s_price FROM INSERTED) if @member <> '' BEGIN UPDATE member SET m_consume = m_consume + @consume WHERE m_id = @member END l 触发器:删除商品时,如果库存量不为0,则撤销操作。并将相应销售及采购记录的编号字段置空。 CREATE TRIGGER p_del ON [dbo].[product] FOR DELETE AS DECLARE @qty int SET @qty = (SELECT D.p_qty FROM DELETED AS D) IF (@qty <> 0) BEGIN RAISERROR ('该商品的库存量不为0,不能删除',0,1) ROLLBACK TRANSACTION END ELSE Update S SET S.p_id = NULL FROM sell AS S INNER JOIN DELETED AS D ON S.p_id = D.p_id Update B SET B.p_id = NULL FROM buy AS B INNER JOIN DELETED AS D ON B.p_id = D.p_id COMMIT TRANSACTION l 触发器:删除会员时,将相应销售记录中会员编号字段置空 CREATE TRIGGER mem_del ON [dbo].[member] FOR DELETE AS UPDATE sell SET m_id = null WHERE m_id = ( SELECT m_id FROM DELETED ) 4.3 编码设计 系统采用MFC对话框应用程序以方便开发,MFC对常用API做了很好的封装。每个对话框对应一个类,每个数据库表对应一个类。根据程序需要,自己再一次做了封装。 1. 在数据源连接方面,使用ini配置文件来存储DSN, UID, PWD的信息,以避免硬编码方式带来的种种问题:不能修改密码,不能换数据库用户等等。主要采用了GetPrivateProfileString和WritePrivateProfileString两个Windows API。 2. 很多数据需要通过列表框来显示,因此封装了一个CListStyle类来设置列表框样式及对其进行通用操作。 #ifndef _LISTSET_H_ #define _LISTSET_H_ class CListStyle { protected: CListCtrl *m_pList; //列表框控件指针 public: CListStyle(); void AttachCtrl (CListCtrl *pList); //把对象与列表框关联 void SetStyle (void); //设置列表框的ExStyle //为列表框添加Header属性 void SetCol (CString *pCol , int *pWidth , int size); //将上两个函数融合 void SetStyleAndCol (CString *pCol , int *pWidth , int size); //向列表框插入一行数据 void InsertItems (int nItem , CString *pItem , int size); }; #endif 3.由于存储过程不能通过ClassWizard创建类,所以手工完成类建立和RFX数据交换。 4.在需要的地方采用多线程。 n 程序启动初始化数据库连接时,显示启动画面。 n 备份数据库时显示进度。 n 后台监控商品库存量 4.4 界面设计 登录界面(如图4-1所示): 图4-1登录界面 收银台POS界面(如图4-2所示): 图4-2收银台POS界面 l 采购入库界面(如图4-3所示): 图4-3采购入库界面 l 管理人员主界面(如图4-4所示): 图4-4管理人员主界面 第5章 课程设计总结 这次课程设计我花了一个月的时间来完成,前期做了一些准备工作,了解了一般超市物流管理方面的背景知识,然后再权衡了时间和人力,做了适量简化,并完成了初步的需求分析。稍作细化后,便开始设计数据库。而后做了界面设计,完成了程序大部分的主要界面。 而在编码方面,我从系统的功能、规模和实用方面考虑,并没有去学习和采用过多花哨的新技术,如.net、分布式等企业级应用。我在规划前,进行了近半个月的时间来学习MFC ODBC的使用,以及MFC中DDX和RFX数据交换技术,还有SQL Server中触发器和存储过程的知识和编写方法。而且在以后的编码过程中,也在不断的学习并解决遇到的问题。 在数据库设计时,由于有些仓促,没有深入的考虑外码约束的问题,使得编码阶段,发现了一个重大问题。销售记录和采购记录中对商品号进行了引用,而删除某种商品后,如果设置了级联删除,则记录不能真实体现收支金额;如果不设,则数据库出现不一致现象。基于这种情况,我写了几个将外码字段置空的DELETE触发器作为弥补措施。 在工程接近完成的时候,我对部分代码做了优化,将一些重复工作加以封装调节;将批处理操作改为以事务方式处理;并将费时的连表查询写成了存储过程。在研究如何把存储过程和MFC的Recordset类联系起来的过程中,走了很多弯路,想了很多办法都不能成功。在找到解决方案的同时,也在MSDN中找到了答案。 这次课程设计,我更加深入的了解到软件工程的复杂性,以及前期规划分析的重要性。其实在MFC这种面向对象的程序设计中,我的瀑布开发模型并不太合适。而且如果系统再稍微大型一些,以一人之力也难以完成。以后的学习中应该学习一些先进的思想,并多加实践,从写程序和软件架构两个方面都增强自己的能力。 参考文献 [1] 何炜等.Visual C++ .net 2003程序设计[M].冶金工业出版社, 2005 [2] 萨师煊等.数据库系统概论(第三版)[M].高等教育出版社,2004 [3] [美] Everett N. McKay著.Windows用户界面开发[M].北京大学出版社,2004 [4] 常州VC编程网.用Visual C++开发数据库应用程序. 17
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服