《数据库系统原理课程设计报告》
企业进销存管理系统
学生姓名: 陈庆虎 20091514119
蒋虎振 20091514120
张 威 20091514101
张林慧 20091514129
韩秀真 20091514130
赵肖平 20091514125
系 别: 信息工程学院
班 级: 计科091
专 业: 计算机科学与技术
指导教师: 张丽娟
2011 年 11 月 15 日
目录
1 引言... 1
1.1 问题描述.... 1
1.2开发环境和运行环境.... 2
2 需求分析... 2
2.1系统功能基本的要求.... 2
2.2企业对系统实现的要求.... 2
2.3系统功能的设计.... 3
2.4数据字典.... 5
3 概念设计... 6
3.1设计分e-r图.... 6
3.2设计完成的总e-r图.... 9
4 逻辑结构设计... 9
4.1图向关系模式的转换.... 9
4.2数据模型的优化.... 10
4.3用户子模式的设计.... 10
5 数据实施和维护... 11
5.1建立数据库.... 11
5.2建表.... 11
5.3建查询.... 11
5.4建存储过程.... 12
6总结... 13
参考文献... 14
1 引言
1.1 问题描述
随着市场竞争的不断加剧,作为中小企业也迫切需要规范管理。
然而目前中小型企业在具体的业务流程处理过程中仍然使用手工操作的方式来实施,由于商品繁多、业务零杂,各类采购、销售单据数量非常多,人工处理比较困难,并且准确性难以确保。所以这种现状不仅费时、费力、效率低下,而且无法达到理想的效果。
因此,中小企业实施规范管理势在必行,如何实现内部流程管理和外部市场竞争的管理,无疑是企业经营最核心的问题。建立一个有效的商务进销存管理系统,可以使企业拥有比竞争对手更严谨的业务管理和控制,可以比竞争对手更快速地获得效益。
1.2开发环境和运行环境
企业进销存管理系统运用了当前流行的SQL SERVER20##、C#、VS2010等运行和开发的。
1.库、基本表的建立和修改:在SQL-SERVER环境下用CREATE TABLE 建立库以及库中基本表。
2.数据加载: 用手工录入或导入等方法实现基本表中的数据加载。
3.单表查询以及多表查询:在建立的基本表中使用select基本格式和聚集函数;设计合适的视图,实现多表间查询。
4.触发器:设计触发器,可实现表间关联字段修改时的完整性等问题。
5.存储器:设计存储过程,并用语句调用。
6.用SQL SERVER 2005/20##、C#、VisualStudio2010等开发环境设计、实现系统主要功能。
2 需求分析
2.1系统功能基本的要求
试设计一个企业进销存管理系统,便于企业对产品进行进销业务流程规划化管理。
2.2企业对系统实现的要求
要求实现的主要模块:(1)用户管理 (2)数据库维护 (3)产品入库管理 (4)产品出库管理 (5)库存管理 (6)维修管理 (7)个人信息 (8)基础数据维护。
1.信息要求:
信息的录入是通过产品入库登记,基础数据维护添加新的产品,出库时输入销售记录等过程进行数据信息的录入与查询。
2.处理要求:
建立一个有效的商务进销存管理系统,以解决商品繁多、业务零杂,各类采购、销售单据数量非常多,人工处理困难,准确性难以确保等众多问题。
3.安全性与完整性要求:
(1)安全性要求
a.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
b.系统实现:数据备份、数据恢复,以防止重大失误、或是系统故障引起的损失;
(2)完整性要求
a.各种信息记录的完整性,信息记录内容不能为空;
b.各种数据间相互的联系的正确性;
c.相同的数据在不同记录中的一致性。
2.3系统功能的设计
系统实现(1)用户管理 (2)数据库维护 (3)产品入库管理 (4)产品出库管理 (5)库存管理 (6)维修管理 (7)个人信息 (8)基础数据维护。
数据流图
2.4数据字典
部分重要表:
表名:UserInfo
表名:Storage
表名:Computer
表名:AroundDevice
表名:PurchaseOrder
销售单:SaleOrder
税票:Ticket
3 概念设计
3.1设计分e-r图
由于表格过多只列举部分表格设计E-R图如下:
职员E-R图
周边设备E-R
销售单E-R图
分E-R图
分E-R图
3.2设计完成的总e-r图
4 逻辑结构设计
4.1图向关系模式的转换
部分关系模式如下:
1、职员(职员ID,名字,密码,权限)
2、销售单(销售单ID,产品数量,经办人,业务员,是否开票,内部票号,销售日期,客户,销售成品,销售单编号,备注,是否退单,售价)
3、产品(产品ID,产品名称,单位,一级分类,二级分类,三级分类,批次号,品牌,类型,CPU,内存 ,显卡···显示器大小,是否删除等)
4、库存(产品ID,库存数量)
4.2数据模型的优化
在概念设计的基础上,根据设计得到系统总的E-R图,按照概念模式与关系表转化的一般规则,结合实际的需要进行逻辑设计,E—R图中的实体、实体的属性和实体之间的联系转化为关系模式。最后生成的部分关系及关系表如下(同时附优化说明):
1、 电脑(产品ID,批次号,品牌,型号,CPU,内存,显卡,硬盘,主板,显示器大小,光驱,是否是笔记本,是否删除)
2、单独显示器(产品ID,品牌,大小,是否删除)
3、周边设备(产品ID,产品名称,单位,一级分类,二级分类,三级分类,是否删除)
优化说明:原来是所有产品对象放在一起,由于这些不同的产品属性差别太大,放在一起造成很大的数据冗余,而且易出错,所以把他们分为三大类,如上面,这样就解决了很多问题。
4.3用户子模式的设计
在将概念模型转化为全局逻辑模型后,根据用户对进销存管理系统的局部应用需求,以下设计用户子模式:
l 考虑需求
考虑以下的几个需求:
⑴ 管理员有可能是业务员或是经办人
⑵ 可随时对任意产品进行开票的需求
l 定义用户级别
对用户职员的权限限制:
⑴ 用户职工:用户登录系统,系统会判断其权限,他只能操作在他权限范围内的事务。
l 制作查询子系统:
根据分析需求,我们设计了一个开票管理系统
提供对销售产品的开票,查询税收相关情况。
5 数据实施和维护
5.1建立数据库
Create database SaleManage;
5.2建表
要求:至少5张表
1.建用户表
CREATE TABLE UserInfo
(UserID VARCHAR(16) primary key NOTNULL,
NAME VARCHAR(8)NOTNULL,
Pwd varchar (200)NOTNULL,
Power varchar(8)NOTNULL,
);
2.建维修表单
CREATE TABLE RepairList
(listID VARCHAR(50) PRIMARY KEY,
RepairNum VARCHAR(20),
Client VARCHAR(50),
FaultPart VARCHAR(50),
FaultNum VARCHAR(20),
FaultReason VARCHAR(50),
RepairDate datetime,
ReCompany VARCHAR(50),
IsFinish Bit,
FinishDate DATEtime,
RepairCost Money,
Charge Money
);
3.建库存
CREATE TABLE Storage
(ListID VARCHAR(50) PRIMARY KEY,
Number INT
);
4.建销售单
CREATE TABLE SaleOrder
(ID uniqueidentifier notnull,
SaleNum varchar(20)NOTNULL,
ListID varchar(50)NOTNULL,
ProName varchar(50)NOTNULL,
UserName varchar(8)NOTNULL,
SaleMan varchar(8)NOTNULL,
Cost Money NULL,
SalePrice Money NOTNULL,
SaleNumber Int NOTNULL,
Date Datetime NOTNULL,
Client varchar(50)NOTNULL,
InMark varchar(20)NULL,
Remark varchar(50)NULL,
Screen varchar(50)NULL,
IsReturn Bit NOTNULL,
)
5.建税票表
CREATE TABLE Ticket
(InMark VARCHAR(20),
TicketNum VARCHAR(50),
Office VARCHAR(50),
Content VARCHAR(50),
Amount Money,
TaxAmount Money,
Total Money
);
……
5.3建查询
要求:5个查询以上
1、查询指定日期的所有的销售单
2、查询指定日期的所有的销售单
3、查询指定日期的所有的销售单
4、查询指定日期的所有的销售单
5、查询指定日期的所有的销售单
select Sa.ID as saID,Sa.SaleNum as 销售单编号,Sa.IsBilling as 选择,Sa.ProName as 产品名称,isnull(Ar.Type1,'')+isnull( ' '+Ar.Type2,'')+isnull(Com.Brand,'')+
isnull( ' 批次:'+Com.LotNum,'')+isnull( ' CPU:'+Com.CPU,'')+
isnull( ' 显卡:'+Com.VideoCard,'')+isnull( ' 显示器:'+Com.Screen,'')+
isnull( '显示器品牌:'+Sc.Brand,'')+isnull( ' 大小:'+Sc.Size,'') as 产品详细信息,
Sa.SalePrice as 售价,Sa.SaleNumber as 数量,isnull(Sa.SalePrice,'')*isnull( Sa.SaleNumber,'')
as 金额,Sa.IsBilling as 是否开票, Sa.SaleMan as 业务员,Sa.Client as 客户,
Sa.UserName as 经办人,Sa.Date as 销售日期, Sa.Cost as 开销,Sa.Remark as 备注
from SaleOrder as Sa leftjoin AroundDevice as Ar on Sa.ListID=Ar.ListID
leftjoin Computer as Com on Sa.ListID=Com.ListID
leftjoin Screen as Sc on Sa.ListID=Sc.ListID
where Date BETWEEN '2011/12/14' AND '2011/12/14' and
Sa.IsReturn= 'false 'order by Sa.SaleNum desc
5.4建存储过程
要求:三个以上
1.业务员的显示,如果是管理员,则显示为公司(不带参数)
create proc pro_UserShow
as
select case when power='1111111'then '公司' else Name END Name from UserInfo
exec pro_UserShow
2.根据所选产品查看它最近三次售价(带参数)
create procedure pro_RecentPrice
@ListID varchar(30),@SellID varchar(20)
AS
select top 3 SalePrice from SaleOrder
where ListID=@ListIDand SaleNum!=@SellID order by SaleNum desc
两种调用示例:
exec pro_RecentPrice 'B2011/12/14 12:46:573','S20111214205416'
exec pro_RecentPrice
@ListID='B2011/12/14 12:46:573',@SellID='S20111214205416'
3.查询库存(带输出参数):
CREATE PROC pro_StoNumber
@ListID varchar(30),
@Number int output
AS
SELECT @Number=Number
from Storage
where ListID=@ListID
调用示例:
declare @ListID varchar(30),@Number int
select @ListID='B2011/12/14 12:46:573'
EXEC pro_StoNumber @ListID ,
@Number OUTPUT
SELECT @Number
5.4建触发器
要求:INSERT,UPDATE,DELETE三种触发器任选
插入销售单数据时,同时库存减去销售数量
create trigger Tr_SaleOrder
on SaleOrder for insert
AS
DECLARE @outNumber int, @ListID varchar(30)
SELECT @outNumber=SaleNumber, @ListID=ListID FROM inserted
UPDATE Storage SET Number= Number -@outNumber
WHERE ListID=@ListID
GO
示例:
insert into SaleOrder (ID,SaleNum,ListID,ProName,SalePrice,SaleNumber,IsBilling,InMark,SaleMan,Client,UserName,Cost,Date,Remark)
values('12e1c6b1-999b-41ee-a385-edec847dde4e','S20111214163521','B2011/12/14 12:46:573','ProBook 4321s','4600','1','True','20111214001','公司','上海直销商','dahu','','2011/12/14','')
6总结
据库有保持数据的独立性,所谓数据独立,是指存储在数据库中的数据独立于处理数据的所有应用程序而存在。也就是说,数据是客观实体的符号化标识,它就是一个客观存在,不会因为某一项应用的需要而改变它的结构,因此是独立于应用而存在着的客观实体。而某一项应用是处理数据获取信息的过程,也就是应用程序,它只能根据客观存在着的数据来设计所需要的数据处理方法,而不会去改变客观存在着的数据本身数据库的传统定义是以一定的组织方式存储的一组相关数据的集合,主要表现为数据表的集合。
1.SQL语句按其功能可以分为如下3大类
(1)数据定义语句 DDL ( Data Definition Language)
(2)数据操作语句 DML (Data Manipulation Language);
(3)数据控制语句 DCL (Data Control Language)。。
2.学习心得
我做的是住房公积金测算系统,刚刚拿到题目完全不知道从那下手,应该是第一次做的原因吧!以前只知道上课听老师讲从来没做过,数据库我认为和生活或者以后的生活没什么联系,所以我平时也就随便听听,但题目一手就知道那是自己一个人的事了,应为题目几乎两三个人一题,就算是两三个人一题也得写的不同,所以刚开始两天我都没怎么做,为了看书上的内容。
参考文献
数据库系统概论/王珊 萨师煊 主编——高等教育出版社,2006.5第四版
数据库实用教程/郑阿奇主编.—北京:电子工业出版社,2009.1高等学校计算机教材