1、数据库课程设计医药销售管理系统数据库应用课程设计设计说明书医药销售管理系统课程设计学生姓名学号班级网络082成绩指导教师计算机科学与技术系 1月5日题目医药销售管理系统学生姓名学号指导教师评语及成绩指导教师签名: 年 月 日答辩评语及成绩答辩教师签名: 年 月 日教研室意见总成绩: 室主任签名: 年 月 日数据库应用课程设计评阅书课程设计任务书 第一学期专业: 网络工程 学号: 姓名: 课程设计名称: 数据库应用课程设计 设计题目: 医药销售管理系统 完成期限:自 年 12 月 25 日至 年 1 月 5 日共 2 周设计依据、要求及主要内容(可另加附页):指导教师(签字): 教研室主任(签字
2、): 批准日期: 年 月 日摘 要根据医药管理系统的需求分析结果总结系统内实体及联系并绘制系统的局部ER图然后画出全局ER图。结合需求分析与概念结构设计把设计好的ER图转换为DBMS所支持的数据模型所符合的逻辑结构,运用SQL数据库管理系统建好表和相关约束。关键词: 医药管理系统;ER图;DBMS;数据模型;SQL 目 录1课题描述32设计过程42.1 需求分析42.1.1 系统目标与要求42.1.2 系统分析42.1.3 业务流程图42.2 系统逻辑方案52.2.1 数据流程图(DFD):52.2.2 数据字典(简称DD)62.3系统总体结构设计72.3.1软件系统总体结构设计72.3.2数
3、据存储的总体设计72.3.3系统功能模块设计72.4数据库详细设计82.4.1数据库设计82.4.2 数据库的完整性和安全性122.5 数据库操作(SQL Server 语句完成)132.5.1创立医药销售管理系统132.5.2创立药品类别索引信息表132.5.3建立存储过程向表中插入、修改、删除数据142.5.4建立存储过程实现单表查询152.5.5视图建立172.5.6建立INSERT触发器172.5.7建立DELETE触发器172.5.8建立UPDATE触发器17总 结19参考文献201课题描述近年来,中国医药行业迅速发展,药店企业多业态经营,仓储式大型超市、中等规模超市、便利连锁综合发
4、展。随着规模的扩大,传统的医药管理已经不能适应发展的需要,很难在激烈的竞争中生存。经过对从事医药产品的零售、批发等工作企业的深入调查,发现其业务主要包括企业药品销售、出入库管理、企业的财务、人事管理等。医药管理是一项琐碎、复杂而又十分细致的工作。手工进行企业日常的药品销售、出入库的工作,容易出现”开空单”的现象,且呆账、错账时有发生,而且费时费力。本系统在设计中考虑和克服了上述问题,实现了企业管理工作的系统化、规范化和自动化。开发环境:CPU:Intel Pentium4 2GHz内存:1G操作系统:Microsoft Windows XP后台数据库在Microsoft SQL Server
5、2设计过程本系统进行了建立数据库的必要性和可行性的分析,需求分析,数据库的概念设计、逻辑设计、物理设计和数据库的实现、运行、维护以及相应的前台的主要功能模块的开发。2.1 需求分析2.1.1 系统目标与要求要求本系统能够投入实际的使用而且满足基本的功能要求。要求具有较高的可靠性、安全性和易维护性,具有较高的可移植性。本系统实现了以下的功能:基本信息模块:包括药品信息、员工信息、客户信息、供应商信息四个子模块。(1)进货管理模块:包括入库登记、入库登记查询二个子模块。(2)库房管理模块:包括库存查询、库存盘点、退货处理三个子模块。(3)销售管理模块:包括销售登记、销售退货、销售报表查询三个子模块
6、。(4)财务统计模块:包括当日统计、当月统计二个子模块。(5)系统维护模块:包括数据安全管理、操作员管理、权限设置三个模块。说明:根据对现实中医药销售管理业务,将用户分为二类超级管理员(经理)、普通管理员(操作员)。2.1.2 系统分析用户活动及活动图(1)经理主要参与活动有: 查询销售情况和财务状况以便了解本企业的经营状况,作出相应的决策; 管理员工,了解不同员工的上班时间和她的相关的业绩; 客户的管理,了解客户的数量,注销有问题的客户; 供应商的管理,了解供应信息,选择最合适的供应商。(2)营业员主要活动有:医药销售管理是指对药品信息的录入、更新、修改和删除;查询药品信息,以了解是否有该药
7、品和库存等信息;销售药品,出库记录;退还药品,入库记录;现金收支是指对进出帐目的记录统计。(3)顾客主要活动:查询药品信息;选购药品。2.1.3 业务流程图2.2 系统逻辑方案系统分析的主要成果是系统的逻辑模型。本系统的逻辑模型主要是以系统的数据流图和数据字典为主要描述工具。即在无纸化网络考试系统管理方式和业务流程进行认真分析和研究的基础上,排除现有组织机构和业务分工所造成的信息障碍。2.2.1 数据流程图(DFD):数据流图是组织中信息运动的抽象。是在调研的基础上,从系统的科学性、管理的合理性、实际运动的可行性角度出发。将信息处理功能和彼此之间的联系自顶向下,逐层分解,从逻辑上精确地描述系统
8、应具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向(外部实体)等项目。在数据流程图中能够很清楚的看到数据的流向,药品信息的数据分别能够流向经理、员工和顾客。药品销售信息的信息也流经理。药品销售信息记录的是药品销售和退还的信息。顾客表信息从顾客流出又能够流回到顾客和员工、经理。2.2.2 数据字典(简称DD)绘制DFD,只是对数据处理和彼此之间的联系进行了说明。为进一步明确数据的详细内容和数据加工过程,应将数据流图中的全部数据流及其组成部分的数据元素,数据存储,数据加工,经过数据字典描述清楚,以便于此后系统设计的进行。这就需要开发人员编写详细的数据字典,来描述系统开发过程的细节。
9、下面列出本系统中的数据项、数据流、数据存储、加工处理和数据结构的数据字典。数据字典可采用图表格式或较紧凑的记录格式描述,本文采用的是图表格式。数据项的DD表列举如下:表2.1 药品编号的数据字典 数 据 项系统名:医药销售管理系统 编号:I001 名称:药品编码 别名: 数据项值: 类型:字符型 长度:6个字节 取值范围:简述:每种药品都具有唯一的编号,它是某种药品的唯一标识符,每种药品都有唯一的编号,如”011976”一般见前两位数字表示入库的年份,中间两位表示类别,最后两位表示该药的序号。如果该类药数超过100种时,可用”0119A0”表示第100种药。修改记录:编写日期审核日期表2.2
10、药品名称 数 据 项系统名:医药销售管理系统 编号:I002 名称:药品名称 别名:数据项值: 类型:字符型 长度:32个字节 取值范围:简述:每种药品都具有唯一药品标识。修改记录:编写日期审核日期表2.3 密码 数 据 项系统名:医药销售管理系统 编号:I003 名称:售价 别名:数据项值: 类型:数值型 长度:8个字节 取值范围:简述:每种药品都要设置一个销售价格。修改记录:编写日期审核日期2.3系统总体结构设计2.3.1软件系统总体结构设计软件系统总体结构设计的主要任务就是将整个系统合理的划分成各个功能模块,正确处理模块之间与模块内部的联系及它们之间的调用关系和数据联系,定义各模块的内部
11、结构等,本系统的软件总体结构按分解协调的原则,信息隐蔽抽象的原则,自顶向下的原则,一致性原则,面向用户的原则进行设计。2.3.2数据存储的总体设计 按用途分类可把本系统文件分成以下几种:(1) 主文件:系统中的主文件是最重要的共享文件,主要存放具有固定值属性的数据。它需要长期保存,并不断更新。(2) 处理文件:处理文件包含下一次更新文件所需要的全部记录,本系统中的处理文件如新闻登录日志文件、待审核项目信息文件。2.3.3系统功能模块设计经过对系统的数据流图进行分析,进一步进行功能分解,直到分解成含义明确,功能单一的功能模块,从而得到系统的功能模块结构图。2.4数据库详细设计2.4.1数据库设计
12、数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。 E-R图:在系统的数据库设计中,先要对系统分析得到的数据字典中的数据存储进行分析,分析各数据存储之间的关系,然后才能得出系统的关系模式。能够采用E-R图的方法来进行数据结构分析,E-R设计方法是一种经过E-R图来描
13、述现实世界信息结构的DB设计方法。E-R图由实体、属性、联系三部分组成。各分E-R图说明如下: 经理E-R图: 供应商E-R图: 员工E-R图: 药品销售清单E-R图: 客户E-R图: 药品E-R图: 整体E-R图: 关系模式与码:药品信息(药品编号,药品名称,药品类别代号,售价,进价,库存量,供应商,有效期) 外码:药品类别代号、 供应商药品分类索引信息(药品类别代号,类别说明)员工信息(员工号,姓名,用户名,密码,职位,权限)客户信息(客户号,客户名称,联系人,联系方式,客户所在城市)供应商信息(供应商号,供应商名称,联系人,联系方式,供应商所在城市)药品销售信息(销售编码,销售日期,药品
14、编码,药品名称,单价,数量,供应商,总额,销售员编码) 外码:销售员编码、药品编码 关系模式优化: 在上述关系模式中,每一个分量都是不可分割的数据项因此都符合第一范式;而且前四个关系模式都是单个属性作为码,没有任何非主属性对码部分函数依赖,在药品销售信息内虽由三个属性作为码,但也不存在非主性对码的部分函数依赖,因此上都符合第二范式;药品信息、药品类别索引、客户信息、供应商信息四个关系模式中都不存在非主属性对码的传递函数依赖,都属于第三范式。在员工信息关系模式中,员工是按照权限分类的,职位不同权限也不同,这样该关系模式就存在了非主属性对码的传递依赖:职工号-职位,职位-权限,因此就将用员工信息分
15、解为如下现个模式:员工信息(员工号,姓名,用户名,用户口令,职位)职位权限信息(职位,权限)本系统不考虑职工信息的管理,为了使销售员编号与销售员的职工号连系起来,并能经过职工姓名和职位来修改用户信息因此把员工的部分信息(职工号,姓名,职位)和经理(用户名,密码)合成了员工信息(员工号,姓名,用户名,密码,职位,权限)以便系统功能的实现,因此在此不采用模式分解。药品销售信息中有大量的数据冗余,表示不明确,将其分解为如下两个模式:药品销售主表(销售编码,销售日期,销售员编号,总金额)药品销售子表(销售编码,销售日期,药品编码,药品名称,单价,数量,供应商) 数据库设计对上述E-R图所需的实体需要的
16、几个关键表的设计如下:表名:药品信息表字段名字段类型长度主键或外键字段值约束对应中文属性名MedicineCodeChar6Primary KeyNot Null药品编码MedicineNameVarchar32Not Null药品名称MedKindCodeChar10Foreign keyNot Null药品类别代码PriceMoney8售价ListPriceMoney8进价NumberInt4库存量FirmCodeChar10Foreign key供应商UsefulllifeDatetime8有效期至表名:客户信息字段名字段类型长度主键或外键字段值约束对应中文属性名GuestCodeCha
17、r10Primary KeyNot Null客户编码GuestNameVarchar16Not Null客户名称gLinkVarchar12联系人gLinkTellVarchar11联系方式CityVarchar8所在城市表名:供应商信息字段名字段类型长度主键或外键字段值约束对应中文属性名FirmCodeChar10Primary KeyNot Null供应商编码FirmNameVarchar16Not Null供应商名称LinkVarchar12联系人LinkTellVarchar11联系电话CityVarchar8所在城市表名:药品销售主表字段名字段类型长度主键或外键字段值约束对应中文属性
18、名SaleNoint4Primary KeyNot Null销售编码WorkNoChar10Foreign keyNot Null销售员编码SaleDateDateTime8销售日期AmountMoney8总金额表名:药品销售子表字段名字段类型长度主键或外键字段值约束对应中文属性名SaleNoint4Primary KeyNot Null销售编码MedicineCodeChar6Foreign keyNot Null药品编码MedicineNameVarchar32Not Null药品名称PriceMoney8售价NumberInt4数量UnitChar8单位AmountMoney8金额表名:
19、药品类别索引信息字段名字段类型长度主键或外键字段值约束对应中文属性名MedKindCodeChar10Primary KeyNot Null药品类别代码KindExplanationVarchar12Not Null类别说明表名:员工信息字段名字段类型长度主键或外键字段值约束对应中文属性名WorkNoChar10Primary KeyNot Null职工号NameVarchar12姓名UserRegNameChar6Not Null用户登录名PasswordChar10Not Null用户口令PositionChar10用户身份PowerInt4用户权限2.4.2 数据库的完整性和安全性 数据
20、库的完整性数据库的完整性是指数据的正确性和相容性。数据库管理系统(DBMS)用一定的机制来检查数据库中的数据是否满足规定的条件完整性约束条件,数据的约束条件是语义的体现,将作为模式的一部分存入数据库中。本系统中定义了表与表之间的联系有助于实现完整性规则,一般在程序中实现具体的完整性控制。实体完整性例如:CREATE TABLE MedInfor/*创立药品信息表*/ (MedicineCode char(6) constraint M_PRIM PRIMARY KEY, MedicineName varchar(8) NOT NULL, MedKindeCode char(10) FOREIG
21、N KEY REFERENCES MedID(MedKindeCode), Price Money(8), ListPrice Money(8), Number Int(4), FirmCode char(10) FOREIGN KEY REFERENCES FirmInfor(FirmCode), Userfulllife Datetime)参照完整性例如:create table sellMain/*创立医药销售主表*/ (SaleNo int constraint SM_PRIM PRIMARY KEY, WorkNo char(10) FOREIGN KEY REFERENCES Wo
22、rkInfor(WorkNo), SaleDate DateTime, Amount Money) 数据库的安全性数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。在数据库系统中,大量的数据集中存放,而且为许多用户直接共享,是宝贵的信息资源,系统的安全保护措施就显得更为重要,它保护数据库防止恶意的破坏和非法的存取。本系统包括数据库的安全和服务器的安全。采用管理员表示和鉴定的方法实现数据库的安全,此安全管理措施并不在前台开发工具中实现,而是在后台数据库中实现。在登录数据库时,系统让管理员户表示自己的身份,不同的管理员权限不同,系统进行核实,鉴别此管理员是否为合法用户,若
23、是,系统进一步核实用户,一般要求用户输入口令,系统和对用户口令以鉴别用户身份。服务器的安全也是经过用户在登录服务器时输入合法的用户名和密码来实现的。这是一种简单可行的方法,实现起来比较方便。没有采用更加复杂的系统安全管理措施是因为本管理系统一般是应用在校园网中,采用安全管理措施主要是为了防止没有修改权限的用户无意间修改了数据,因此采用用户标识和鉴定的安全管理措施就能够保障数据库的安全性。2.5 数据库操作(SQL Server 语句完成)数据库的选择和部分重要SQL代码2.5.1创立医药销售管理系统create database MedicalManagerSystem/*创立医药销售管理系统
24、*/use MedicalManagerSystem2.5.2创立药品类别索引信息表create table MedID/创立药品类别索引信息表 (MedKindeCode char(10) constraint MI_PRI PRIMARY KEY, KindExplanation varchar(12) NOT NULL)其余略2.5.3建立存储过程向表中插入、修改、删除数据 插入数据的存储过程 create proc MedID_procMedKindeCode char(10),KindExplanation varchar(12)asinsert into MedID (MedKin
25、deCode,KindExplanation) values(MedKindeCode ,KindExplanation )exec MedID_proc 0001,口腔溃疡exec MedID_proc 0002,感冒exec MedID_proc 0003,发烧exec MedID_proc 0004,拉肚子exec MedID_proc 0005 ,外伤其余略 删除数据的存储过程 create proc MedID_delete_procMedKindeCode char(10)asdelete from MedId where MedKindeCode=MedKindeCodeexec
26、 MedID_delete_proc 0002其余略 修改数据的存储过程 create proc MedID_update_procMedKindeCode char(10),KindExplanation varchar(12),MedKindeCode1 char(10)asupdate MedID set MedKindeCode=MedKindeCode,KindExplanation=KindExplanation where MedKindeCode=MedKindeCode1其余略2.5.4建立存储过程实现单表查询 /*建立名为”单表查询1”的存储过程,用来查询某种药品的信息*/
27、 create proc 单表查询1MedicineCode char(6)ASselect *from MedInfor where MedicineCode=MedicineCode 其余略建立存储过程实现连接查询 /*建立名为”连接查询1”的存储过程,用来查询某个药品名称对应的药品类型的信息*/ create proc 连接查询1MedicineName varchar(8)asselect MedicineName ,KindExplanationfrom MedInfor,MedIDwhere MedID.MedKindeCode=MedInfor.MedKindeCode and
28、MedicineName=MedicineName/建立存储过程实现嵌套查询/*建立名为”嵌套查询1”的存储过错,用来查询某类药品的销售量*/create proc 嵌套查询1KindExplanation varchar(12)asselect Number from sellChild where MedicineCode In(select MedicineCode from MedID where KindExplanation=KindExplanation)/*建立名为”嵌套查询2”的存储过错,用来查询某个供应商提供的商品*/create proc 嵌套查询2FirmName va
29、rchar(16)asselect MedicineName from MedInfor where FirmCode In (select FirmCode from FirmInfor where FirmName=FirmName)建立存储过程实现集合查询/*建立名为”集合查询1”的存储过错,用来查询提供某类商品的供应商数*/create proc 集合查询1MedicineName varchar(8)asselect avg(FirmCode) from FrimInfor where FirmCode in(select FirmCode from MedInfor,FrimInf
30、or where MedInfor.FirmCode=FrimInfor.FirmCode and MedicineName=MedicineName)其余略2.5.5视图建立由供应商信息表”FirmInfor”建立一个视图,该视图由供应商信息表的所有列构成*/create view 供应商信息(供应商编码,供应商名称,联系人,联系电话,所在城市)asselect* from FirmInfor2.5.6建立INSERT触发器/*建立INSERT触发器*/create trigger MedID_insert on MedIDfor insertas if(select count(*)fro
31、m MedID_med,insertedwhere MedID_med.MedKindeCode=inserted.MedKindeCode)=0rollback transaction2.5.7建立DELETE触发器 create trigger delete_MedID on MedIDfor deleteasselect* from MedIDdeclare MedKindeCode char(10) select MedKindeCode=MedKindeCode from deleteddelete from MedIDwhere MedKindeCode=MedKindeCodes
32、elect*from MedID2.5.8建立UPDATE触发器 create trigger MedID_update on MedIDfor updateasif update(MedKindeCode)beginraiserror(you can not modify this column,16,1)rollback transactionend总 结本次课程设计调查从事医药产品的零售、批发等工作的企业,根据其具体情况,设计医药销售管理系统。加深了对数据库课程知识的理解。由于时间仓促,软件还有很多不足之处,如:药品信息查询部分不够完善,软件代码交冗余、效率不高等等,都相关功能缺乏认识造
33、成的。在今后的学习中我们会加强理论的实践的结合,经过不断摸索来弥补自己在软件制作方面的差距。参考文献1 苗雪兰,刘瑞新,宋歌.数据库系统原理及应用教程M.北京.机械工业出版社. 2 萨师煊,王 珊.数据库系统概论M.北京:高等教育出版社.19973 刘真原.SQL SERVER 培训教程M.北京:清华大学出版社. 4 李清国.Windows + ASP SQL Server案例教程M.上海: 中科多媒体电子出版社. 5 李晓黎.ASP+SQLSERVER网络应用系统开发指南M.北京.人民邮电出版社. 附件:医药销售管理系统SQL语句,如下:create database MedicalMana
34、gerSystem/*创立医药销售管理系统*/use MedicalManagerSystemcreate table MedID/*创立药品类别索引信息*/ (MedKindeCode char(10) constraint MI_PRI PRIMARY KEY, KindExplanation varchar(12) NOT NULL)create table MedInfor/*创立药品信息表*/ (MedicineCode char(6) constraint M_PRIM PRIMARY KEY, MedicineName varchar(8) NOT NULL, MedKindeC
35、ode char(10) FOREIGN KEY REFERENCES MedID(MedKindeCode), Price Money, ListPrice Money, Number Int, FirmCode char(10) FOREIGN KEY REFERENCES FirmInfor(FirmCode), Userfulllife Datetime)create table GueInfor/*创立客户信息表*/ (GuestCode char(10) constraint G_PRIM PRIMARY KEY, GuestName varchar(16) NOT NULl, G
36、Link varchar(12), GLinkTell varchar(11), City varchar(8)create table FirmInfor/*创立供应商信息表*/ (FirmCode char(10) constraint F_PRIM PRIMARY KEY, FirmName varchar(16) NOT NULL, Link varchar(12), LinkTell varchar(11), City varchar(8)create table WorkInfor/*创立员工信息表*/ (WorkNo char(10) constraint W_PRIM PRIM
37、ARY KEY, Name varchar(12), UserRegName char(6) NOT NULL, Password char(10) NOT NULL, Position char(10), Power Int) create table sellMain/*创立医药销售主表*/ (SaleNo int constraint SM_PRIM PRIMARY KEY, WorkNo char(10) FOREIGN KEY REFERENCES WorkInfor(WorkNo), SaleDate DateTime, Amount Money)create table sell
38、Child/*创立医药销售子表*/ (SaleNo int constraint SC_PRIM PRIMARY KEY, MedicineCode char(6) FOREIGN KEY REFERENCES MedInfor(MedicineCode), MedicineName varchar(32) NOT NULL, Price Money, Number Int, Uint char(8), Amount Money) /*插入数据的存储过程 */create proc MedID_procMedKindeCode char(10),KindExplanation varchar(
39、12)asinsert into MedID (MedKindeCode,KindExplanation) values(MedKindeCode ,KindExplanation )exec MedID_proc 0001,口腔溃疡exec MedID_proc 0002,感冒exec MedID_proc 0003,发烧exec MedID_proc 0004,拉肚子exec MedID_proc 0005 ,外伤create proc MedInfor_procMedicineCode char(6),MedicineName varchar(8),MedKindeCode char(1
40、0),Price money,ListPrice money,Number int,FirmCode char(10),Userfulllife Datetimeasinsert into MedInfor(MedicineCode ,MedicineName,MedKindeCode,Price,ListPrice,Number,Supplicer,Userfulllife) values(MedicineCode,MedicineName,MedKindeCode,Price,ListPrice,Number,FirmCode,Userfulllife)exec MedInfor_proc 1001,板蓝根,0002,5,3,100,0