版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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否For
6、eignkey生产日期date否进货日期date否缺省默认值(当天日期)有效期date否进货单价Int否进货数量Int否Ø Sale:销售信息字段名类型大小是否可为空备注销售编号Int否primary key仓位号Int否Foreignkey销售单价Int否销售数量Int否柜台号Int否销售人工号Int否销售日期Date否缺省默认值(当天日期)Ø Warehouse:仓储信息字段名类型大小是否可为空备注仓位号Int否primary key进货编号Int否Foreignkey库存数量Int否Ø Item :采购字段名类型大小是否可为空备注采购编号Int否primar
7、y key药品名称Varchar20否Foreignkey采购价格Int否生产商varchar20否采购数量Int否(2)子模式设计:I、视图:逼仓情况(进货编号,药品名称,进货单价,进货数量,有效期,库存数量)仓储情况(仓位号,药品编号,进货编号,药品类别,药品名称,进货日期,有效期,库存数量,产地)进货情况(进货编号,药品编号,药品类别,药品名称,仓位号,进货日期,有效期,进货数量,产地,进货单价)销售情况(销售编号,.药品编号,柜台号,销售人工号,药品名称,销售单价, 进货数量,销售数量,库存数量,药品类别,仓位号,销售日期)选项卡专用(药品类别,药品名称,产地,库存数量,生产日期,进货
8、日期,有效期)II、查询信息:A、 查询进货信息:进货编号、药品编号、药品类型、药品数量、进货日期、有效期、生产日期B、 查询药品信息:药品编号、药品数量、药品名字、生产日期、有效期、产地C、 查询销售信息:进货编号、药品编号、进货单价、销售数量、进货日期D、 库存信息查询:药品编号、库存数量、有效期、生产日期四、数据库的物理设计为了提高在表中搜索元组的速度,在实际实现的时候应该基于某些属性建立索引。给出所建立的索引。(包括按哪些表中哪些属性按升序还是降序来创建索引及相应的T-SQL的创建语句)。Create index index_Meon Medicine(药品编号)Create inde
9、x index_kucunon Warehouse(仓位号)五、数据库设计实现及运行(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 tab
10、le Sale( 销售编号 int identity(1,1) primary key, 仓位号 int 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.Put
11、In.有效期, dbo.Warehouse.库存数量FROM dbo.Item INNER JOIN 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.库存数量 < 60)(4)存储过程的定义实现(仅需给出自己设计模块中所用的)T-SQL语句:USE MedicineGO/* Obje
12、ct: StoredProcedure dbo.Out Script Date: 2015/6/11 12:21:41 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE dbo.Out仓位号 int ,数量 int ASif exists(select * from Warehouse where 仓位号=仓位号)BEGINif(select 库存数量 from Warehouse where 仓位号=仓位号) > 数量 )BEGIN update Warehouse set 库存数量 =(select 库存数量
13、 from Warehouse where 仓位号=仓位号)-数量 where 仓位号=仓位号ENDelseBEGINreturn 2ENDENDelseBEGINreturn 3END 在宿主语言中调用存储过程代码段(粘贴):public void OutW(int t1,int t2)/出货tryClass.forName(driverName);Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);CallableStatement cmd=dbConn.prepareCall("call O
14、ut(?,?)");cmd.setInt(1, t1);cmd.setInt(2, t2);cmd.execute();cmd.close();catch(Exception e)e.printStackTrace();javax.swing.JOptionPane.showMessageDialog(null, "无法链接数据库");测试结果粘贴:此处举例的存储过程为仓库出货过程:(5)触发器的定义实现(仅需给出自己设计模块中所用的)T-SQL语句:USE MedicineGO/* Object: Trigger dbo.UpIn Script Date: 20
15、15/6/11 12:32:32 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER TRIGGER dbo.UpIn ON dbo.PutIn FOR InsertAS declare 仓位号 INTdeclare 进货编号 INTdeclare 库存数量 INTselect 进货编号=进货编号from INSERTEDselect 库存数量=进货数量from INSERTEDselect 仓位号=(1000*RAND()begininsertinto Warehousevalues (仓位号,进货编号,库存数量)END测试结果:该触发器
16、作用于进货记录表,作用是当出现新插入行为时,将相应信息插入库存表。1)插入数据操作"insert into PutIn values('"+t1+"','"+t2+"','"+t3+"','"+t4+"','"+t5+"','"+t6+"','"+t7+"')"每个功能模块描述方法如下:功能界面(粘贴);功能界面简单描述;使用
17、进货界面时,按信息填入记录按确定即可。T-SQL语句与宿主语言嵌套使用代码段(粘贴);Fin1.addActionListener(new ActionListener() /*进货记录*/Overridepublic void actionPerformed(ActionEvent e) try String te1=year.getSelectedItem().toString(),te2=month.getSelectedItem().toString();String te3=year2.getSelectedItem().toString(),te4=month2.getSelect
18、edItem().toString();te1=te1+"-"+te2+"-1"te2=te3+"-"+te4+"-1"Welcome5.setVisible(false);String cols="仓位号","进货编号","药品编号","药品名称","进货日期","有效期","进货数量"rows=DW.Wym(te1,te2 );DefaultTableModel dtm =
19、 new DefaultTableModel(rows,cols);yitable.setModel(dtm);yitable1.setVisible(true); catch (Exception e1) e1.printStackTrace();System.out.println("输入错误");javax.swing.JOptionPane.showMessageDialog(null, "输入有误,请重新输入"););测试结果粘贴;2)插入数据操作使用者可按需修改商品信息,先查找,后修改:SQL语句实现:String sql="upd
20、ate Item set 药品名称='"+text+"' ,药品类别='"+text2+"' ,产地='"+text3+"' where 药品编号='"+parseInt+"'"六、系统详细设计及实现(1)系统功能模块说明本程序分仓库管理,销售管理,信息查询,统计管理,逼仓巡视5个界面。只有超级用户在仓库管理页面具有修改按钮,而其他用户只拥有查询按钮。本程序通过预读数据库内容,在信息查询页面采用人性化的选项卡选择,避免了可能出现的输入错误而造
21、成的失误,同时本程序所有查询均满足单一查询,即多空只填一即可。在销售管理页面中,用户可以添加新的销售信息,但销售数量等仍需满足库存要求,若库存不足将无法添加并自动滚回操作。若插入成功,则自动更新库存数量表格。(2)每个模块的关键语句及关键技术说明I、仓库管理:多按钮,分线界面,使用户视觉清晰,不至于觉得界面太过凌乱。表格可随时使用不同按钮更新。jPanel1.add(Welcome);jPanel1.add(wtable1);T1.setLayout(null);T2.setLayout(null);T3.setLayout(null);T4.setLayout(null);T1.setBou
22、nds(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 JButton("更改");MedicineMs.setBounds(10,30,120,30);Search1.setBound
23、s(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=new JButton(&q
24、uot;进货记录");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_ID
25、ENTIFIER 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 '库存
26、量不足,不允许出库'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),药品类别 varch
27、ar(20)ASif(药品名称 is 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 药品
28、名称=药品名称if(药品类别 is not 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,库存数量intASif 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_NU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024医疗机构医疗服务与技术合作协议
- 2024年度品牌合作发展协议
- 2024年度版权许可使用合同许可期限与使用方式
- 2024复印机共享租用合同说明
- 2024年国际品牌服装连锁加盟合同
- 2024委托采购合同样本
- 04园林绿化工程设计与施工合同
- 2024年度旅游服务合同详细描述及合同标的
- 2024年度文化创意产业项目投资合同
- 2024个人租房合同范例
- (试卷)建瓯市2024-2025学年第一学期七年级期中质量监测
- 《安徽省二年级上学期数学期末试卷全套》
- 2024年企业业绩对赌协议模板指南
- “全民消防生命至上”主题班会教案(3篇)
- 24秋国家开放大学《当代中国政治制度》形考任务1-4参考答案
- “以德育心,以心育德”
- 临床用药管理制度
- 多层工业厂房施工组织设计#现浇框架结构
- 消防控制室值班记录(制式表格).doc
- 艰辛与快乐并存-压力与收获同在——我的课题研究故事
- 混凝土拦挡坝的施工方案
评论
0/150
提交评论