《数据库原理课程设计》课程设计.docx
《《数据库原理课程设计》课程设计.docx》由会员分享,可在线阅读,更多相关《《数据库原理课程设计》课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
《数据库原理课程设计》课程设计
《数据库系统原理课程设计报告》
学生姓名:
系别:
班级:
专业:
指导教师:
2011年11月15日
1引言
问题描述
随着市场竞争的不断加剧,作为中小企业也迫切需要规范管理。
然而目前中小型企业在具体的业务流程处理过程中仍然使用手工操作的方式来实施,由于商品繁多、业务零杂,各类采购、销售单据数量非常多,人工处理比较困难,并且准确性难以确保。
所以这种现状不仅费时、费力、效率低下,而且无法达到理想的效果。
因此,中小企业实施规范管理势在必行,如何实现内部流程管理和外部市场竞争的管理,无疑是企业经营最核心的问题。
建立一个有效的商务进销存管理系统,可以使企业拥有比竞争对手更严谨的业务管理和控制,可以比竞争对手更快速地获得效益。
开发环境和运行环境
企业进销存管理系统运用了当前流行的SQLSERVER2005、C#、VS2010等运行和开发的。
1.库、基本表的建立和修改:
在SQL-SERVER环境下用CREATETABLE建立库以及库中基本表。
2.数据加载:
用手工录入或导入等方法实现基本表中的数据加载。
3.单表查询以及多表查询:
在建立的基本表中使用select基本格式和聚集函数;设计合适的视图,实现多表间查询。
4.触发器:
设计触发器,可实现表间关联字段修改时的完整性等问题。
5.存储器:
设计存储过程,并用语句调用。
6.用SQLSERVER2005/2008、C#、VisualStudio2010等开发环境设计、实现系统主要功能。
2需求分析
系统功能基本的要求
试设计一个企业进销存管理系统,便于企业对产品进行进销业务流程规划化管理。
企业对系统实现的要求
要求实现的主要模块:
(1)用户管理
(2)数据库维护(3)产品入库管理(4)产品出库管理(5)库存管理(6)维修管理(7)个人信息(8)基础数据维护。
1.信息要求:
信息的录入是通过产品入库登记,基础数据维护添加新的产品,出库时输入销售记录等过程进行数据信息的录入与查询。
2.处理要求:
建立一个有效的商务进销存管理系统,以解决商品繁多、业务零杂,各类采购、销售单据数量非常多,人工处理困难,准确性难以确保等众多问题。
3.安全性与完整性要求:
(1)安全性要求
a.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
b.系统实现:
数据备份、数据恢复,以防止重大失误、或是系统故障引起的损失;
(2)完整性要求
a.各种信息记录的完整性,信息记录内容不能为空;
b.各种数据间相互的联系的正确性;
c.相同的数据在不同记录中的一致性。
系统功能的设计
系统实现
(1)用户管理
(2)数据库维护(3)产品入库管理(4)产品出库管理(5)库存管理(6)维修管理(7)个人信息(8)基础数据维护。
数据流图
数据字典
部分重要表:
表名:
UserInfo
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
UserID
varchar
16
6
是
是
否
用户名
登陆用
2
Name
varchar
8
4
否
姓名
真实姓名
3
Pwd
varchar
200
0
否
密码
4
Power
varchar
8
0
否
权限
固定位是1有权限,0无此权限
表名:
Storage
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
ListID
varchar
50
是
是
否
Lis
唯一标志
2
Number
Int
否
0
表名:
Computer
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
ListID
varchar
50
是
是
否
唯一标志
2
LotNum
varchar
3
是
否
否
批次号
3
Brand
Varchar
50
否
品牌
4
CPU
Varchar
50
否
5
Memory
varchar
50
否
6
VideoCard
Varchar
50
否
显卡
7
HardDisk
Varchar
50
否
8
MainBoard
Varchar
50
否
主板
9
RwDrive
Varchar
50
否
光驱
10
Remark
Varchar
50
否
备注
11
Screen
Varchar
50
是
12
Unit
Varchar
20
否
单位
13
IsDelete
Bit
否
False
逻辑删除批次号
True未删除
表名:
AroundDevice
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
ListID
varchar
50
是
是
否
唯一标志
2
Type1
varchar
50
否
Type1
类型或名称
3
Type2
varchar
50
是
Type2
类型或名称
4
Type3
varchar
50
是
Type3
类型或名称
5
ProductName
50
否
产品名称
6
Unit
Varchar
20
否
单位
7
IsDelete
Bit
逻辑删除
表名:
PurchaseOrder
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
PurchaseNum
varchar
20
否
采购单编号
2
Supplier
varchar
50
供货商
3
ListID
varchar
50
否
产品唯一标志
4
UserName
varchar
经办人
5
Price
Money
否
单价
6
Number
Int
否
产品数量
7
Date
Datetimes
否
8
IsBilling
Bit
否
False
是否开票
9
IsTax
Bit
否
False
是否含税
10
Remark
Varchar
50
是
备注
11
IsReturn
Int
否
0
区分标志
0.采购单
1退单,2退库存
销售单:
SaleOrder
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
SaleNum
varchar
20
否
销售单编号
2
ListID
Varchar
50
否
唯一标志
ProName
Varchar
50
否
产品名称
3
UserName
varchar
8
否
经办人
4
SaleMan
Varchar
8
否
业务员
4
Cost
Money
是
销售成本
5
SalePrice
Money
否
售价
6
SaleNumber
Int
否
1
产品数量
7
Date
Datetime
否
8
Client
Varchar
50
否
客户
9
InMark
Varchar
20
是
内部票号
10
Remark
Varchar
50
是
备注
11
Screen
Varchar
50
是
11
IsReturn
Bit
否
False
是否退单
税票:
Ticket
序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明
备注
1
InMark
Varchar
20
否
内部票号都放在一起
2
TicketNum
varchar
50
否
外部票号
3
Office
Varchar
50
否
开票单位
4
Content
Varchar
50
否
内容
5
Amount
Money
否
每种产品金额
6
TaxAmount
Money
否
税收金额
7
Total
Money
否
总金额
3概念设计
设计分e-r图
由于表格过多只列举部分表格设计E-R图如下:
职员E-R图
周边设备E-R
销售单E-R图
分E-R图
分E-R图
设计完成的总e-r图
4逻辑结构设计
图向关系模式的转换
部分关系模式如下:
1、职员(职员ID,名字,密码,权限)
2、销售单(销售单ID,产品数量,经办人,业务员,是否开票,内部票号,销售日期,客户,销售成品,销售单编号,备注,是否退单,售价)
3、产品(产品ID,产品名称,单位,一级分类,二级分类,三级分类,批次号,品牌,类型,CPU,内存,显卡···显示器大小,是否删除等)
4、库存(产品ID,库存数量)
数据模型的优化
在概念设计的基础上,根据设计得到系统总的E-R图,按照概念模式与关系表转化的一般规则,结合实际的需要进行逻辑设计,E—R图中的实体、实体的属性和实体之间的联系转化为关系模式。
最后生成的部分关系及关系表如下(同时附优化说明):
1、电脑(产品ID,批次号,品牌,型号,CPU,内存,显卡,硬盘,主板,显示器大小,光驱,是否是笔记本,是否删除)
2、单独显示器(产品ID,品牌,大小,是否删除)
3、周边设备(产品ID,产品名称,单位,一级分类,二级分类,三级分类,是否删除)
优化说明:
原来是所有产品对象放在一起,由于这些不同的产品属性差别太大,放在一起造成很大的数据冗余,而且易出错,所以把他们分为三大类,如上面,这样就解决了很多问题。
用户子模式的设计
在将概念模型转化为全局逻辑模型后,根据用户对进销存管理系统的局部应用需求,以下设计用户子模式:
考虑需求
考虑以下的几个需求:
1管理员有可能是业务员或是经办人
2可随时对任意产品进行开票的需求
定义用户级别
对用户职员的权限限制:
1用户职工:
用户登录系统,系统会判断其权限,他只能操作在他权限范围内的事务。
制作查询子系统:
根据分析需求,我们设计了一个开票管理系统
提供对销售产品的开票,查询税收相关情况。
5数据实施和维护
建立数据库
CreatedatabaseSaleManage;
建表
要求:
至少5张表
1.建用户表
CREATETABLEUserInfo
(UserIDVARCHAR(16)primarykeyNOTNULL,
NAMEVARCHAR(8)NOTNULL,
Pwdvarchar(200)NOTNULL,
Powervarchar(8)NOTNULL,
);
2.建维修表单
CREATETABLERepairList
(listIDVARCHAR(50)PRIMARYKEY,
RepairNumVARCHAR(20),
ClientVARCHAR(50),
FaultPartVARCHAR(50),
FaultNumVARCHAR(20),
FaultReasonVARCHAR(50),
RepairDatedatetime,
ReCompanyVARCHAR(50),
IsFinishBit,
FinishDateDATEtime,
RepairCostMoney,
ChargeMoney
);
3.建库存
CREATETABLEStorage
(ListIDVARCHAR(50)PRIMARYKEY,
NumberINT
);
4.建销售单
CREATETABLESaleOrder
(IDuniqueidentifiernotnull,
SaleNumvarchar(20)NOTNULL,
ListIDvarchar(50)NOTNULL,
ProNamevarchar(50)NOTNULL,
UserNamevarchar(8)NOTNULL,
SaleManvarchar(8)NOTNULL,
CostMoneyNULL,
SalePriceMoneyNOTNULL,
SaleNumberIntNOTNULL,
DateDatetimeNOTNULL,
Clientvarchar(50)NOTNULL,
InMarkvarchar(20)NULL,
Remarkvarchar(50)NULL,
Screenvarchar(50)NULL,
IsReturnBitNOTNULL,
)
5.建税票表
CREATETABLETicket
(InMarkVARCHAR(20),
TicketNumVARCHAR(50),
OfficeVARCHAR(50),
ContentVARCHAR(50),
AmountMoney,
TaxAmountMoney,
TotalMoney
);
……
建查询
要求:
5个查询以上
1、查询指定日期的所有的销售单
2、查询指定日期的所有的销售单
3、查询指定日期的所有的销售单
4、查询指定日期的所有的销售单
5、查询指定日期的所有的销售单
selectassaID,as销售单编号,as选择,as产品名称,isnull,'')+isnull(''+,'')+isnull,'')+
isnull('批次:
'+,'')+isnull('CPU:
'+,'')+
isnull('显卡:
'+,'')+isnull('显示器:
'+,'')+
isnull('显示器品牌:
'+,'')+isnull('大小:
'+,'')as产品详细信息,
as售价,as数量,isnull,'')*isnull(,'')
as金额,as是否开票,as业务员,as客户,
as经办人,as销售日期,as开销,as备注
fromSaleOrderasSaleftjoinAroundDeviceasAron=
leftjoinComputerasComon=
leftjoinScreenasScon=
whereDateBETWEEN'2011/12/14'AND'2011/12/14'and
='false'orderbydesc
建存储过程
要求:
三个以上
1.业务员的显示,如果是管理员,则显示为公司(不带参数)
createprocpro_UserShow
as
selectcasewhenpower='1111111'then'公司'elseNameENDNamefromUserInfo
execpro_UserShow
2.根据所选产品查看它最近三次售价(带参数)
createprocedurepro_RecentPrice
@ListIDvarchar(30),@SellIDvarchar(20)
AS
selecttop3SalePricefromSaleOrder
whereListID=@ListIDandSaleNum!
=@SellIDorderbySaleNumdesc
两种调用示例:
execpro_RecentPrice'B2011/12/1412:
46:
573','S20'
execpro_RecentPrice
@ListID='B2011/12/1412:
46:
573',@SellID='S20'
3.查询库存(带输出参数):
CREATEPROCpro_StoNumber
@ListIDvarchar(30),
@Numberintoutput
AS
SELECT@Number=Number
fromStorage
whereListID=@ListID
调用示例:
declare@ListIDvarchar(30),@Numberint
select@ListID='B2011/12/1412:
46:
573'
EXECpro_StoNumber@ListID,
@NumberOUTPUT
SELECT@Number
建触发器
要求:
INSERT,UPDATE,DELETE三种触发器任选
插入销售单数据时,同时库存减去销售数量
createtriggerTr_SaleOrder
onSaleOrderforinsert
AS
DECLARE@outNumberint,@ListIDvarchar(30)
SELECT@outNumber=SaleNumber,@ListID=ListIDFROMinserted
UPDATEStorageSETNumber=Number-@outNumber
WHEREListID=@ListID
GO
示例:
insertintoSaleOrder(ID,SaleNum,ListID,ProName,SalePrice,SaleNumber,IsBilling,InMark,SaleMan,Client,UserName,Cost,Date,Remark)
values('12e1c6b1-999b-41ee-a385-edec847dde4e','S20','B2011/12/1412:
46:
573','ProBook4321s','4600','1','True','001','公司','上海直销商','dahu','','2011/12/14','')
6总结
据库有保持数据的独立性,所谓数据独立,是指存储在数据库中的数据独立于处理数据的所有应用程序而存在。
也就是说,数据是客观实体的符号化标识,它就是一个客观存在,不会因为某一项应用的需要而改变它的结构,因此是独立于应用而存在着的客观实体。
而某一项应用是处理数据获取信息的过程,也就是应用程序,它只能根据客观存在着的数据来设计所需要的数据处理方法,而不会去改变客观存在着的数据本身数据库的传统定义是以一定的组织方式存储的一组相关数据的集合,主要表现为数据表的集合。
语句按其功能可以分为如下3大类
(1)数据定义语句DDL(DataDefinitionLanguage)
(2)数据操作语句DML(DataManipulationLanguage);
(3)数据控制语句DCL(DataControlLanguage)。
。
2.学习心得
我做的是住房公积金测算系统,刚刚拿到题目完全不知道从那下手,应该是第一次做的原因吧!
以前只知道上课听老师讲从来没做过,数据库我认为和生活或者以后的生活没什么联系,所以我平时也就随便听听,但题目一手就知道那是自己一个人的事了,应为题目几乎两三个人一题,就算是两三个人一题也得写的不同,所以刚开始两天我都没怎么做,为了看书上的内容。
参考文献
数据库系统概论/王珊萨师煊主编——高等教育出版社,第四版
数据库实用教程/郑阿奇主编.—北京:
电子工业出版社,高等学校计算机教材