*******************实践教学*******************大学计算机与通信学院2010年春季学期数据库课程设计题目:超市收银系统专业班级:计算机一班姓名:学号:074指导教师:李成绩:目录摘要 (1)正文 (2)1.问题描述 (2)2.需求分析 (2)3.系统总体设计 (3)4.详细设计 (4)5.系统测试 (10)5.1测试方法 (10)5.2测试用例 (10)5.1.3人员管理系统的测试 (12)6.软件使用说明书 (14)参考文献 (15)设计总结 (16)主要内容参考:1.需求分析:主要写系统的数据流程图和数据字典;2.系统总体设计:主要写概念结构设计(E-R图)和逻辑结构设计(数据库的设计)3.详细设计:程序流程图(主要程序的)以及主要算法的说明;4.系统测试:包含测试方案、测试用例、测试结果;5.软件使用说明书:核心界面说明。
摘要本系统采用的编程和数据库工具是powerbuilder9.0。
系统分为前台系统和后台系统,其中,前台系统提供了很方便的商品销售收费功能。
而后台系统则提供了一些商品管理功能,如采购入库,库存盘点,出库明细等模块。
本文主要介绍超市收费系统的运行环境、功能作用、设计的方案等各方面的内容。
论文共分为五大部分。
第一部分简要叙述了系统的基本概况。
第二,三部分分别从软件工程的要求出发,首先进行问题的定义,其次进行可行性研究,分别从技术可行性,经济可行性和操作可行性进行分析,然后进行总体设计和详细设计,并阐述了如何实现具体功能。
第四部分为系统调试,其中包括子模块测试和总体测试。
关键词:收费;销售;超市正文1. 问题描述(1)系统要实现基本信息录入、修改、查询等功能:●各种信息的输入,包括商品销售信息和商品入库信息等。
●各种信息的修改、删除。
●盘点(产生日、星期、月的商品销售明细表)。
●销售、库存的查询统计及报表输出。
(2)系统要实现满足多种条件的统计分析功能,有些统计数据要采用图表的格式呈现;(3)系统要有一定的安全控制策略;(4)整个系统可以选择采用2层结构。
数据库系统采用 DM,Access,SQL Server 2000,前台开发工具可以选用PowerBuilder或Visual C++等;(5)系统要采用实际数据进行测试。
(6)系统所涉及的信息有:●商品销售信息。
包括的数据项有:流水编号,日期,时间,商品代码,商品名称,数量,单价,金额,应收款合计,打折比例,实交金额等。
●商品入库信息。
包括的数据项有:入库单编号,日期,供应商,商品代码,商品名称、品牌,数量,进价,金额,合计金额等。
●库存信息。
包括的数据项有:商品代码,库存数量等。
2. 需求分析(1)、信息要求顾客信息:顾客编号(会员卡号)、顾客姓名、顾客性别、注册时间、是否到期、消费金额。
收银员信息:收银员编号、收银员姓名、收银员性别、登录名,密码。
商品信息:商品编号、商品名称、单价、现有库存。
收银信息:收银员编号、收银金额、登录时间,注销时间。
交易信息:顾客编号,商品编号,交易时间,交易数量。
(2)、处理要求A、处理方式:联机处理。
B、处理时间要求:< 2S。
C、处理功能:(I)、添加新信息,修改现存信息,删除无用信息,查询信息。
(II)、计算一次交易的金额,如果是会员,就可以享受9折优惠,如果非会员消费金额超过1000元,免费为其发放一张为期一年的会员卡。
(III)、只有收银员以正确的用户名和密码才能登录本系统。
(3)、安全性和完整性要求A、安全性要求:只有收银员以正确的用户名和密码才能登录本系统,进行相应操作。
后台服务器(达梦数据库)会生成相应的日志文件。
B、完整性要求:(I)实体完整性:如上信息要求一栏所示,带下划线的为primary key。
(II)参照完整性:收银信息和交易信息中的收银员编号,顾客编号和商品编号均为前面的参照。
(III)用户定义完整性:如性别只能为‘男’或‘女’,姓名不能为空,登录名必须唯一,密码必须六位以上,等等。
3. 系统总体设计根据需求分析得到的信息抽象为E-R模型如下:4. 详细设计关键技术和算法1)登录对话框增加了“记住用户名”这一选项。
实现算法为:将选项是否勾选的状态用一个bool变量表示,新建一个名为“user.dat”的文件。
每次登陆时,读取文件中的内容到“用户名”栏中。
如果选择了“记住用户名”,则将用户输入的用户名重新写到user.dat文件中,否则写入空。
2)系统中使用了很多对话框,而且每个对话框都不相同。
我采用了复用对话框的方式。
实现方法为:定义状态变量typedef enum stype{CASHIER_ADD,CASHIER_DELETE,CASHIER_EDIT,CASHIER_QUERY,CUSTOMER_ADD,CUSTOMER_DELETE,CUSTOMER_EDIT,CUSTOMER_QUERYGOODS_ADD, GOODS_DELETE, GOODS_EDIT, GOODS_QUERY,CASHINFO_ADD,CASHINFO_QUERY,TRADE_ADD, TRADE_QUERY}STYPE;在OnInitDialog()函数中,用switch-case语句来初始化不同用途的对话框。
这样,16个对话框只用1个对话框资源。
3)为了能够实时更新系统中的时间(如交易时间,上班下班时间等等),create几个触发器用来获得系统时间。
//添加新会员的时候,自动获得系统时间作为注册时间create trigger Insert_Customerbefore insert on Customerfor each rowbegin:new.Creg := curdate();end;//添加交易信息的时候,自动获得系统时间作为交易时间create trigger Insert_Tradebefore insert on Tradeinfofor each rowbegin:new.Ttime := current_timestamp();end;--用户登录系统时插入新记录create trigger Insert_CashinfoOnbefore insert on Cashinfofor each rowbegin:new.CtimeOn := current_timestamp();end;--用户更新Crecv时(logout)create trigger Insert_CashinfoOffbefore update on Cashinfofor each rowbeginif :old.CtimeOff is nullthen :new.CtimeOff := current_timestamp();end if;end;为了查询的方便,创建了Query_Tradeinfo和Query_Cashinfo两个视图。
Create viewQuery_Cashinfo(Qcno,Qcname,Qcrecv,Qctimeon,Qctimeoff)asselect o, Cname, Crecv, CtimeOn, CtimeOfffrom Cashinfo,Cashierwhere o = o;create viewQuery_Tradeinfo(Qcno,Qcname,Qgno,Qgname,Qgprice,Qttime ,Qtquantity)asselect o, Cname, Tradeinfo.Gno, Gname, Gprice, Ttime, Tquantityfrom Tradeinfo,Customer,Goodswhere o = o and Tradeinfo.Gno = Goods.Gno;4)在交易的过程中,会弹出其他的对话框用来更新数据库,采用了重载消息函数的方法,使得更新的数据能以参数的形式传到对话框中。
5)采用了动态条件修改,删除和查询的方式,实现方法是,在源程序中动态改变查询的条件。
以删除收银员为例:// m_Cashier是CCashierRecordSet(从CRecordSet继承,与Cashier表关联)的对象//如果输入不为空if(m_strEdit1.GetLength()){if(bFirst)m_Cashier.m_strFilter += " and ";strFilter.Format("Cno = '%s'",m_strEdit1);//增加对应的条件m_Cashier.m_strFilter += strFilter;bFirst = TRUE;}if(m_strEdit2.GetLength()){if(bFirst)m_Cashier.m_strFilter += " and ";strFilter.Format("Cname = '%s'",m_strEdit2);m_Cashier.m_strFilter += strFilter;bFirst = TRUE;}if(m_strEdit3.GetLength()){if(bFirst)m_Cashier.m_strFilter += " and ";strFilter.Format("Csex = '%s'",m_strEdit3);m_Cashier.m_strFilter += strFilter;bFirst = TRUE;}if(m_strEdit4.GetLength()){ if(bFirst)m_Cashier.m_strFilter += " and ";strFilter.Format("Clogname = '%s'",m_strEdit4);m_Cashier.m_strFilter += strFilter;bFirst = TRUE;}系统模块图如下:逻辑设计根据以上分析,得到本系统的基本关系模式为:顾客(顾客编号、顾客姓名、顾客性别、注册时间、是否到期、消费金额)。
create table Customer( Cno char(9) primary key,Cname char(20),Csex char(2) check(Csex in('男','女')),Creg date,Cactive char(2) check(Cactive in('是','否')),Cconsumption decimal(8,2));收银员(收银员编号、收银员姓名、收银员性别、登录名,密码)。