数据库设计-----中草药销售管理系统介绍(共21页).doc

上传人:飞****2 文档编号:13798410 上传时间:2022-05-01 格式:DOC 页数:21 大小:2.96MB
返回 下载 相关 举报
数据库设计-----中草药销售管理系统介绍(共21页).doc_第1页
第1页 / 共21页
数据库设计-----中草药销售管理系统介绍(共21页).doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《数据库设计-----中草药销售管理系统介绍(共21页).doc》由会员分享,可在线阅读,更多相关《数据库设计-----中草药销售管理系统介绍(共21页).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上上海电力学院数据库设计课程设计题目: 中草药销售管理系统 学生姓名: 李辰源 学 号: 班 级: 院系: 计算机科学与技术学院 专业年级: 计算机科学与技术(卓越) 级 2015年6 月10 日目录专心-专注-专业一、需求分析(1) 问题描述: 中草药销售管理系统主要面向于小型商户,实现管理层,门面销售层人员的权限分离,通过管理仓库,销售记录等数据统计并显示各类信息。(2) 系统性要求:i. 信息录入:进货、销售等环节,都需要往数据库中添加信息。ii. 信息修改:当数据库中信息发生了改变,需要及时修改信息iii. 信息查询:可以按条件查询药品基本信息、进货信息、销售信

2、息、当前仓库中的库存情况等,并尽可能实现多条件组合查询。iv. 统计、汇总各药品在规定时间段内的进货总量、销售总量等。v. 将近过期的商品、库存量较少的商品请给出提醒。vi. 用户权限的限定(超级用户,可以使用本系统提供的任何功能;管理人员,对药品的进货,定价等进行管理;销售员工用户,可以记录和查询货物的销售情况,但不可以登记商品的入库操作)(3) 完整性规则:a) 设定缺省约束。如进货日期为系统当前日期。b) 设置非空约束。如药品名称。c) 实施CHECK约束,如进货单价、进货数量应大于0等。d) 实施CHECK约束,约束药品类别为:中药、草药、中成药。e) 设计触发器,实现库存信息的自动更

3、新。(4) 安全性规则:a) 不同用户的权限界面,通过不同的登陆账户区分账户并开启不同的界面。b) 分离最低权限用户同时拥有仓管权限和销售权限的可能性。c) 程序代码中界面代码和数据库访问代码分开,加强安全性。 二、概念结构设计数据库E-R图:实体转化为关系模式:销售记录:(销售编号,仓位号,销售单价,销售量,柜台号,销售人工号,销售日期)库存信息:(仓位号,进货编号,库存数量)进货信息:(进货编号,商品编号,生产日期,进货日期,有效期,进货单价,进货数量)商品信息:(商品编号,商品类别,商品名称,产地)采购:(采购编号,商品编号,生产商,采购价格)权限层次:权限等级:超级权限为超级用户所有,

4、面向对象为企业的最高领导人,可使用所有项目,查看各项资料。一级权限为经理用户所用,面向对象为企业管理层,除查看企业季度营销外,可使用其他生育功能。二级权限为销售员所用,面向对象为企业营销最前方的工作人员,权限较低。功能模块图:功能模块:仓库管理:查询在库药物,仓储记录等一系列仓库记录,控制进/出货,查询记录。销售记录:查询搜友销售记录,可以添加新的销售记录,并自动与仓库记录同步。信息查询:通过指定药物类别,名称等一系列信息,查看相应的记录。季度查询:从整体角度观察某段时间的进出货情况,帮助企业制定战略。逼仓巡视:查询所有记录,确认其中逼仓,逼期药物。三、逻辑结构设计(1)模式设计:销售记录:(

5、销售编号,仓位号,销售单价,销售量,柜台号,销售人工号,销售日期)库存信息:(仓位号,进货编号,库存数量)进货信息:(进货编号,商品编号,生产日期,进货日期,有效期,进货单价,进货数量)商品信息:(商品编号,商品类别,商品名称,产地)采购:(采购编号,商品编号,生产商,采购价格) Item :药品信息字段名类型大小是否可为空备注药品编号Int否primary key药品类别Varchar20否Check_约束药品名称varchar20否产地varchar20否 PutIn :进货信息字段名类型大小是否可为空备注进货编号Int否primary key药品编号Int否Foreignkey生产日期d

6、ate否进货日期date否缺省默认值(当天日期)有效期date否进货单价Int否进货数量Int否 Sale:销售信息字段名类型大小是否可为空备注销售编号Int否primary key仓位号Int否Foreignkey销售单价Int否销售数量Int否柜台号Int否销售人工号Int否销售日期Date否缺省默认值(当天日期) Warehouse:仓储信息字段名类型大小是否可为空备注仓位号Int否primary key进货编号Int否Foreignkey库存数量Int否 Item :采购字段名类型大小是否可为空备注采购编号Int否primary key药品名称Varchar20否Foreignkey采

7、购价格Int否生产商varchar20否采购数量Int否(2)子模式设计:I、视图:逼仓情况(进货编号,药品名称,进货单价,进货数量,有效期,库存数量)仓储情况(仓位号,药品编号,进货编号,药品类别,药品名称,进货日期,有效期,库存数量,产地)进货情况(进货编号,药品编号,药品类别,药品名称,仓位号,进货日期,有效期,进货数量,产地,进货单价)销售情况(销售编号,.药品编号,柜台号,销售人工号,药品名称,销售单价, 进货数量,销售数量,库存数量,药品类别,仓位号,销售日期)选项卡专用(药品类别,药品名称,产地,库存数量,生产日期,进货日期,有效期)II、查询信息:A、 查询进货信息:进货编号、

8、药品编号、药品类型、药品数量、进货日期、有效期、生产日期B、 查询药品信息:药品编号、药品数量、药品名字、生产日期、有效期、产地C、 查询销售信息:进货编号、药品编号、进货单价、销售数量、进货日期D、 库存信息查询:药品编号、库存数量、有效期、生产日期四、数据库的物理设计为了提高在表中搜索元组的速度,在实际实现的时候应该基于某些属性建立索引。给出所建立的索引。(包括按哪些表中哪些属性按升序还是降序来创建索引及相应的T-SQL的创建语句)。Create index index_Meon Medicine(药品编号)Create index index_kucunon Warehouse(仓位号)

9、五、数据库设计实现及运行(1)数据库的创建T-SQL语句:create database Medicine ( name=Medicine_data, filename=D: Medicine _data.mdf, size=5mb maxsize=100mb filegrowth=15% )(2)数据表的创建(举例)T-SQL语句:说明:若有完整性约束的一方面可以创建时同时实现。按需求及自行设计模块中所实现的情况,在该部分对完整性约束加以实现。drop table Salecreate table Sale( 销售编号 int identity(1,1) primary key, 仓位号 i

10、nt not null, 销售单价 int not null, 销售量 int not null,柜台号 int not null 销售人工号 int not null销售日期 date not null)(3)视图的创建(仅需给出自己设计模块中所用的视图)T-SQL语句:Create view 仓储情况AsSELECT TOP (100) PERCENT dbo.PutIn.进货编号, dbo.Item.药品名称, dbo.PutIn.进货单价, dbo.PutIn.进货数量, dbo.PutIn.有效期, dbo.Warehouse.库存数量FROM dbo.Item INNER JOIN

11、 dbo.PutIn ON dbo.Item.药品编号 = dbo.PutIn.药品编号 INNER JOIN dbo.Warehouse ON dbo.PutIn.进货编号 = dbo.Warehouse.进货编号WHERE (DATEADD(yy, - 1, dbo.PutIn.有效期) GETDATE() OR (dbo.Warehouse.库存数量 数量 )BEGIN update Warehouse set 库存数量 =(select 库存数量 from Warehouse where 仓位号=仓位号)-数量 where 仓位号=仓位号ENDelseBEGINreturn 2ENDE

12、NDelseBEGINreturn 3END 在宿主语言中调用存储过程代码段(粘贴):public void OutW(int t1,int t2)/出货tryClass.forName(driverName);Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);CallableStatement cmd=dbConn.prepareCall(call Out(?,?);cmd.setInt(1, t1);cmd.setInt(2, t2);cmd.execute();cmd.close();catch(E

13、xception e)e.printStackTrace();javax.swing.JOptionPane.showMessageDialog(null, 无法链接数据库);测试结果粘贴:此处举例的存储过程为仓库出货过程:(5)触发器的定义实现(仅需给出自己设计模块中所用的)T-SQL语句:USE MedicineGO/* Object: Trigger dbo.UpIn Script Date: 2015/6/11 12:32:32 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER dbo.UpIn ON dbo.Pu

14、tIn FOR InsertAS declare 仓位号 INTdeclare 进货编号 INTdeclare 库存数量 INTselect 进货编号=进货编号from INSERTEDselect 库存数量=进货数量from INSERTEDselect 仓位号=(1000*RAND()begininsertinto Warehousevalues (仓位号,进货编号,库存数量)END测试结果:该触发器作用于进货记录表,作用是当出现新插入行为时,将相应信息插入库存表。1)插入数据操作insert into PutIn values(+t1+,+t2+,+t3+,+t4+,+t5+,+t6+,

15、+t7+)每个功能模块描述方法如下:功能界面(粘贴);功能界面简单描述;使用进货界面时,按信息填入记录按确定即可。T-SQL语句与宿主语言嵌套使用代码段(粘贴);Fin1.addActionListener(new ActionListener() /*进货记录*/Overridepublic void actionPerformed(ActionEvent e) try String te1=year.getSelectedItem().toString(),te2=month.getSelectedItem().toString();String te3=year2.getSelected

16、Item().toString(),te4=month2.getSelectedItem().toString();te1=te1+-+te2+-1;te2=te3+-+te4+-1;Welcome5.setVisible(false);String cols=仓位号,进货编号,药品编号,药品名称,进货日期,有效期,进货数量;rows=DW.Wym(te1,te2 );DefaultTableModel dtm = new DefaultTableModel(rows,cols);yitable.setModel(dtm);yitable1.setVisible(true); catch (E

17、xception e1) e1.printStackTrace();System.out.println(输入错误);javax.swing.JOptionPane.showMessageDialog(null, 输入有误,请重新输入););测试结果粘贴;2)插入数据操作使用者可按需修改商品信息,先查找,后修改:SQL语句实现:String sql=update Item set 药品名称=+text+ ,药品类别=+text2+ ,产地=+text3+ where 药品编号=+parseInt+六、系统详细设计及实现(1)系统功能模块说明本程序分仓库管理,销售管理,信息查询,统计管理,逼仓巡

18、视5个界面。只有超级用户在仓库管理页面具有修改按钮,而其他用户只拥有查询按钮。本程序通过预读数据库内容,在信息查询页面采用人性化的选项卡选择,避免了可能出现的输入错误而造成的失误,同时本程序所有查询均满足单一查询,即多空只填一即可。在销售管理页面中,用户可以添加新的销售信息,但销售数量等仍需满足库存要求,若库存不足将无法添加并自动滚回操作。若插入成功,则自动更新库存数量表格。(2)每个模块的关键语句及关键技术说明I、仓库管理:多按钮,分线界面,使用户视觉清晰,不至于觉得界面太过凌乱。表格可随时使用不同按钮更新。jPanel1.add(Welcome);jPanel1.add(wtable1);

19、T1.setLayout(null);T2.setLayout(null);T3.setLayout(null);T4.setLayout(null);T1.setBounds(515,20,270,80);T2.setBounds(515,120,270,80);T3.setBounds(515,220,270,80);T4.setBounds(515,320,270,80);jPanel1.add(T1);jPanel1.add(T2);jPanel1.add(T3);jPanel1.add(T4);MedicineMs=new JButton(在库药物信息);Search1=new JB

20、utton(更改);MedicineMs.setBounds(10,30,120,30);Search1.setBounds(160,30,100,30);AllMs=new JButton(仓储记录);Search2=new JButton(查找);AllMs.setBounds(10,30,120,30);Search2.setBounds(160,30,100,30);Insert=new JButton(进货);Out=new JButton(出货);Insert.setBounds(10,30,120,30);Out.setBounds(160,30,100,30);WareMs=n

21、ew JButton(进货记录);WareMs.setBounds(10,30,120,30);T1.add(MedicineMs);T1.add(Search1);T2.add(AllMs);T2.add(Search2);T3.add(Insert);T3.add(Out);T4.add(WareMs);II、销售管理:随时验证库存数量,从而决定是否可以插入新数据。(此由触发器实现).USE MedicineGO/* Object: Trigger dbo.Up Script Date: 2015/6/15 9:33:30 */SET ANSI_NULLS ONGOSET QUOTED_I

22、DENTIFIER ONGOALTER TRIGGER dbo.Up ON dbo.Sale FOR INSERTAS declare仓位号 intdeclare 数量 intdeclare 库存数量 intselect 仓位号=仓位号from INSERTEDif exists(select * from Warehouse where 仓位号=仓位号)BEGINselect 数量=销售数量from INSERTEDselect 库存数量=库存数量from Warehouse where 仓位号=仓位号if 库存数量-数量1BEGINROLLBACK TRANprint 库存量不足,不允许出

23、库ENDelseupdate Warehouse set 库存数量 =库存数量-数量 where 仓位号=仓位号END七、附录:部分代码 存储过程:1、 按名称或类别搜索销售记录USE MedicineGO/* Object: StoredProcedure dbo.SearchSale Script Date: 2015/6/15 21:23:16 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE dbo.SearchSale药品名称 varchar(20),药品类别 varchar(20)ASif(药品名称 is

24、null and 药品类别 is null )return 6elseif(药品名称 is not null and 药品类别 is not null )BEGINselect 销售编号,仓位号,药品名称,药品类别,销售单价,销售数量,柜台号,销售人工号,销售日期 from 销售情况 where 药品名称=药品名称 and 药品类别=药品类别ENDif(药品名称 is not null and 药品类别 is null)select 销售编号,仓位号,药品名称,药品类别,销售单价,销售数量,柜台号,销售人工号,销售日期 from 销售情况 where 药品名称=药品名称if(药品类别 is n

25、ot null and 药品名称 is null)select 销售编号,仓位号,药品名称,药品类别,销售单价,销售数量,柜台号,销售人工号,销售日期 from 销售情况 where 药品类别=药品类别2、 进货USE MedicineGO/* Object: StoredProcedure dbo.Ware_insert Script Date: 2015/6/15 21:23:43 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE dbo.Ware_insert 仓位号 int,进货编号 int,库存数量intAS

26、if exists(select * from Warehouse where 仓位号=仓位号)Rollback TransActionelseinsert into Warehouse(仓位号,进货编号,库存数量)values(仓位号,进货编号,库存数量) 触发器:1、 进货时更新库存表(位于PutIn表)USE MedicineGO/* Object: Trigger dbo.UpIn Script Date: 2015/6/15 21:28:58 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER dbo.UpIn O

27、N dbo.PutIn FOR InsertAS declare 仓位号 INTdeclare 进货编号 INTdeclare 库存数量 INTselect 进货编号=进货编号from INSERTEDselect 库存数量=进货数量from INSERTEDselect 仓位号=(1000*RAND()begininsertinto Warehousevalues (仓位号,进货编号,库存数量)END2、 增加销售记录时更新库存表(位于Sale表)USE MedicineGO/* Object: Trigger dbo.Up Script Date: 2015/6/15 21:29:44 *

28、/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER dbo.Up ON dbo.Sale FOR INSERTAS declare仓位号 intdeclare 数量 intdeclare 库存数量 intselect 仓位号=仓位号from INSERTEDif exists(select * from Warehouse where 仓位号=仓位号)BEGINselect 数量=销售数量from INSERTEDselect 库存数量=库存数量from Warehouse where 仓位号=仓位号if 库存数量-数量1BEGINROLLBACK TRANprint 库存量不足,不允许出库ENDelseupdate Warehouse set 库存数量 =库存数量-数量 where 仓位号=仓位号END八、心得体会这次课程设计我花了半个星期的时间从ER图设计,到数据库建立,以及触发器,存储过程编写,花费了许多时间,也深刻认识到设计并创建一个数据库并不是一件非常简单的事情,需要细心和用心地去设计和琢磨每一个地方,才可以给客户一个较为完善的数据库。起初由于我个人问题,课程设计报告格式上出了一些问题,导致被退回重制。精工老师多番提醒,终于出一个较为规范的设计报告。我还有很多地方待改进,需要更加努力。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁