数据库原理课程设计 进销存管理系统.docx
《数据库原理课程设计 进销存管理系统.docx》由会员分享,可在线阅读,更多相关《数据库原理课程设计 进销存管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
数据库原理课程设计进销存管理系统
长治学院
课程设计报告
课程名称:
数据库原理课程设计
设计题目:
进销存管理系统
系别:
计算机系
专业:
计算机科学与技术
组别:
第一组
学生姓名:
韩伟伟学号:
08407106
起止日期:
2011年6月7日~2011年6月22日
指导教师:
马桂芳
目录
一、系统规划3
二、总体设计4
2.1系统功能简述5
三、数据库原理5
3.1系统原理概述5
3.1.1E—R图5
3.1.2系统原理概述5
3.1.3数据流图6
3.2逻辑结构设计6
3.2.1基本表信息6
3.2.2存储过程\触发器\视图设计9
四、模块划分(系统管理模块实现)13
4.1系统登录界面及代码13
4.2系统管理模块界面及代码14
五、系统的优点及不足之处15
六、总结和致谢15
七、参考文献15
进销存管理系统
系统背景说明
待开发的软件系统的名称:
进销存管理系统
软件项目的用途:
用于数据库课程设计及商业用途
软件项目的范围:
系统涉及企业的库存,销售与进货提供了管理
功能,为库存,销售,进货等管理数据提供了分析功能
小组成员成员:
韩伟伟,令狐岩,李江民,杨捷
指导老师:
马桂芳
随着技术发展,电脑操作及管理日趋简化,电脑知识日趋普及,同时市场经济快速多变,竞争激烈,因此企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。
一、系统规划
1.1可行性分析
经济上可行性分析
现在,计算机的价格已经十分低廉,性能却有了长足的进步。
而本系统的开发,为企业的工作效率带来了一个质的飞跃,为此主要表现有以下几个方面:
第一,本系统的运行可以代替人工进行许多繁杂的劳动;
第二,本系统的运行可以节省许多资源;
第三,本系统的运行可以大大的提高企业的工作效率;
第四,本系统可以使敏感文档更加安全,等等。
本产品的开发所需的设备在现有条件下,只需要少量的投入资金就可以实现。
因此在经济上是可行的。
技术上可行性分析
a)软件可行性
PowerBuilder具有丰富的数据库功能,可以直接建立和编辑数据库,使用结构化查询语言直接访问SQLSever上的数据库,并提供简单的面向对象的库操作命令、多用户数据库的加锁机制和网络数据库的编程技术。
SQLSever2000是由微软公司推出的,能提供超大型系统所需的数据库服务,并对数据库提供全面的保护,具有防止问题发生的安全措施,他是一个采用SQL语言的关系型数据库管理系统。
作为客户机/服务器的后端数据库,他是所有数据的汇总和管理中心。
b)硬件可行性
CPU:
奔腾三代以上。
OS(操作系统):
Windows2000/windows98以上。
内存:
64MB以上。
硬盘:
30G以上。
本系统的开发利用MicrosoftSQLServer2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。
使用PowerBuilder作为系统开发的开发环境,此开发工具开发数据库管理系统,采用面向对象的方式,方便、简捷、功能强大。
管理上可行性分析
课设指导老师给与了精心的讲解和大力的支持。
综上所述,系统在技术上、经济上、管理上都是可行的。
二、总体设计
2.1系统功能简述
根据生活经验,我们开发该系统主要是为了实现:
方便的查询信息,简单准确的进行插入和删除等操作。
所以在该系统中,我们主要实现了它的以上几个功能:
查询功能是在查询客户消费、购物情况等信息,是提供给管理者参考的;插入、删除和保存功能是在客户信息表和购物信息表以及库存信息表中得到实现。
三、数据库原理
3.1系统原理概述
管理信息系统的开发是一个复杂的系统工程,它涉及到计算机的处理技术、系统理论、组织结构、管理功能、管理知识等各方面的问题,每一种开发方法都要遵循相应的开发策略。
数据库由DBMS(数据库管理系统)处理,DBMS则由专业开发人员和用户通过应用程序直接或间接的使用。
数据库管理系统是指数据库系统中管理数据的软件系统。
它是数据库系统的核心组成部分。
对数据库的一切操作,包括定义,更新及各种控制,都是通过它实现的。
它总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。
根据数据模型的不同,DBMS可以分成层次型、关系型、面向对象型等。
3.1.1E—R图
3.1.2系统原理概述
管理信息系统的开发是一个复杂的系统工程,它涉及到计算机的处理技术、系统理论、组织结构、管理功能、管理知识等各方面的问题,每一种开发方法都要遵循相应的开发策略。
数据库由DBMS(数据库管理系统)处理,DBMS则由专业开发人员和用户通过应用程序直接或间接的使用。
数据库管理系统是指数据库系统中管理数据的软件系统。
它是数据库系统的核心组成部分。
对数据库的一切操作,包括定义,更新及各种控制,都是通过它实现的。
它总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。
根据数据模型的不同,DBMS可以分成层次型、关系型、面向对象型等。
3.1.3数据流图
3.2逻辑结构设计
3.2.1基本表信息
表一商品信息表
字段名
数据类型
长度
是否允许空
说明
商品编号
varchar
10
否
主键,惟一标识商品记录
商品名称
varchar
50
是
单价
varchar
50
是
月产量
varchar
50
是
供应商名称
varchar
50
是
备注信息
text
16
是
表二供应商信息表
字段名
数据类型
长度
是否允许空
说明
供应商编号
varchar
10
否
主键,惟一标识供应商记录
供应商名称
varchar
50
是
供应商单位全称
地址
varchar
50
是
邮政编码
varchar
10
是
联系电话
varcgar
20
是
企业网址
varchar
50
是
联系人
varchar
50
是
联系人电话
varcgar
20
是
开户银行
varchar
50
是
银行账号
varchar
13
是
备注信息
text
16
是
表三客户信息表
字段名
数据类型
长度
是否允许空
说明
客户编号
varchar
10
否
主键,惟一标识客户记录
客户名称
varchar
50
是
客户单位全称
地址
varchar
50
是
邮政编码
varchar
6
是
联系电话
varchar
20
是
企业网址
varcgar
30
是
联系人
varchar
50
是
联系人电话
varcgar
20
是
开户银行
varchar
50
是
银行账号
varchar
20
是
备注信息
text
16
是
表四商品进货信息表
字段名
数据类型
长度
是否允许空
说明
入库序号
decimal
9
否
主键,惟一标识商品入库记录
商品编号
varchar
10
否
外键,对应商品信息表中商品编号
商品名称
varchar
50
是
供应商编号
varchar
10
否
外键,对应供应商信息表中供应商编号
供应商名称
varchar
50
是
规格
varchar
30
是
数量
varchar
10
是
单价
varchar
50
是
总金额
varchar
50
是
日期
datetime
8
是
经手人
varchar
20
是
备注信息
text
16
是
修改人
varchar
20
是
修改日期
datetime
8
是
表五商品库存信息表
字段名
数据类型
长度
是否允许空
说明
库存序号
decimal
9
否
主键,惟一标识商品库存记录
库存编号
varchar
30
是
库存名称
varchar
50
是
商品编号
varchar
10
否
外键,对应商品信息表中商品编号
规格
varchar
30
是
数量
varchar
10
是
单价
varchar
50
是
总金额
varchar
50
是
日期
datetime
8
是
备注信息
text
16
是
表六商品销售信息表
字段名
数据类型
长度
是否允许空
说明
出库序号
decimal
9
否
主键,惟一标识商品入库记录
出库编号
varchar
10
是
商品编号
varchar
10
否
外键,对应商品信息表中商品编号
商品名称
varchar
50
是
规格
varchar
30
是
数量
varchar
10
是
单价
varchar
50
是
总金额
varchar
50
是
出库日期
datetime
8
是
提货人
varchar
50
是
经手人
varchar
20
是
备注信息
text
16
是
修改人
varchar
20
是
修改日期
datetime
8
是
表七库存明细表
字段名
数据类型
长度
是否允许空
说明
盘点编号
varchar
10
否
主键,惟一标识商品盘点记录
商品编号
varchar
10
否
外键,对应商品信息表中商品编号
商品名称
varchar
50
是
规格
varchar
30
是
单价
varchar
50
是
账面库存
varchar
50
是
实盘库存
varchar
50
是
盘点人员
varchar
50
是
盘点日期
datetime
8
是
备注信息
text
16
是
表八用户信息表
字段名
数据类型
长度
是否允许空
说明
用户名
varchar
10
否
主键
用户密码
varchar
10
否
用户名称
varchar
50
是
备注信息
text
16
是
3.2.2存储过程\触发器\视图设计
--1创建库存视图
ifexists(select1fromsysobjectswherename='view_storage_product')
dropviewview_storage_product
go
createviewview_storage_product
as
selecta.*,b.StorageAddress,b.StorageNumberfromProductInfoainnerjoin
StorageInfobona.ProductID=b.ProductID
go
--查看库存视图
select*fromview_storage_product
--2创建订单信息视图
ifexists(select*fromsysobjectswherename='view_CustomerInfo_OrderInfo_ProductInfo')
dropviewview_CustomerInfo_OrderInfo_ProductInfo
go
createviewview_CustomerInfo_OrderInfo_ProductInfo
as
selectCustomerName,ProductName,OrderTime,OrderNumber,
RequireDate,OrderEmployee,IsConsignmentfromCustomerInfo
ainnerjoinOrderInfobona.CustomerID=b.CustomerID
innerjoinProductInfoconb.ProductID=c.ProductID
go
select*fromview_CustomerInfo_OrderInfo_ProductInfo
--3.创建添加客户信息的存储过程
ifexists(select1fromsysobjectswherename='proc_InsertCustomerInfo')
dropprocproc_InsertCustomerInfo
go
createprocedureproc_InsertCustomerInfo
@CustomerNamenvarchar(20),@CustomerAddressnvarchar(50),@CustomerPhonenvarchar(11),
@Taxnonvarchar(10),@Reputenvarchar(10),
@Countrynvarchar(10)='中国',@Provincenvarchar(10)
as
begin
insertintoCustomerInfovalues(@CustomerName,@CustomerAddress,@CustomerPhone,@Taxno,@Repute,@Country,@Province)
end
go
--调用存储过程
execproc_InsertCustomerInfo'胡雷松','湖北神农架','622512','622512','优秀',default,'河南'
select*fromCustomerInfo
--4.创建添加产品信息存储过程(需验证产品的价格必须大于等于0)
ifexists(select1fromsysobjectswherename='proc_InsertProductInfo')
dropprocedureproc_InsertProductInfo
go
createprocproc_InsertProductInfo
@ComponyIDint,@ProductNamenvarchar(20),@ProductTypenvarchar(20),@NumberPerMonthint,@Pricemoney
as
begin
if(@Price>=0)
begin
insertintoProductInfovalues(@ComponyID,@ProductName,@ProductType,@NumberPerMonth,@Price)
end
else
begin
print'产品价格必须大于0!
'
end
end
go
--调用存储过程
execproc_InsertProductInfoNULL,'C#入门经典','书籍',3000,65
select*fromProductInfo
--5.创建进货时库存信息变化的触发器
--①如果没有该产品的信息,则将数据添加到库存信息表中
--②如果仓库中已经存在该产品,则增加该产品的库存数量
ifexists(select1fromsysobjectswherename='trg_StockInfo_Insert')
droptriggertrg_StockInfo_Insert
go
createtriggertrg_StockInfo_Insert
onStockInfo
forinsert
as
declare@ProductIDint,@StockNumberint
select@ProductID=ProductIDfrominserted
select@StockNumber=StockNumberfrominsertedwhereProductID=@ProductID
if(@ProductIDnotin(selectProductIDfromStorageInfo))
begin
insertintoStorageInfovalues(@ProductID,'东北仓库',@StockNumber)
end
else
begin
updateStorageInfosetStorageNumber=StorageNumber+@StockNumberwhereProductID=@ProductID
end
go
--测试触发器
insertintoStockInfovalues(4,350,NULL,NULL,NULL,getdate(),'张三')
select*fromStorageInfo
select*fromStockInfo
--6.创建添加订单信息存储过程
--①订单时间默认为系统单前时间,②验证订单数量必须大于0③验证产品需要时间必须大于系统当前时间1月以上,④根据库存信息与产品生产能力判断,是否能在产品需要时间之前完成该产品的生产,⑤验证订单业务员长度必须大于2,⑥默认是否发货为“否”
ifexists(select*fromsysobjectswherename='proc_InsertOrderInfo')
dropprocproc_InsertOrderInfo
go
createprocproc_InsertOrderInfo
@ProductIDint,@OrderNumberint,@OrderEmployeenvarchar(20),@CustomerIDint,@Pricemoney,@Ordersummoney,@RequireDatedatetime,@IsConsignmentnvarchar
(2)
as
begin
declare@OrderTimechar(20)
select@ProductID=ProductIDfrominserted
select@OrderNumber=OrderNumberfrominserted
select@OrderEmployee=OrderEmployeefrominserted
select@CustomerID=CustomerIDfrominserted
select@Price=Pricefrominserted
select@Ordersum=Ordersumfrominserted
set@OrderTime=convert(char(20),getdate(),120)
set@RequireDate=convert(char(20),dateadd(month,1,getdate()),120)
if(@OrderNumber>0andlen(@OrderEmployee)>2anddatediff(dd,@OrderTime,dateadd(month,1,getdate()))=0)
begin
if(@OrderNumber<(selectNumberPerMonthfromProductInfowhereProductID=@ProductID))
begin
insertintoOrderInfovalues(@CustomerID,@ProductID,@OrderTime,@OrderNumber,@Price,@Ordersum,@RequireDate,@OrderEmployee,'否')
end
end
end
go
--7.发货时库存信息的变化的触发器
--①如果发完货后,库存为0,则将该货物从库存信息表中删除,②如果发完货后,库存不为0,则减少相应的库存数量
ifexists(select1fromsysobjectswherename='trg_SendInfo_Insert')
droptriggertrg_SendInfo_Insert
go
createtriggertrg_SendInfo_Insert
onSendInfo
forinsert
as
declare@ProductIDint,@OrderIDint,@StorageNumberint
select@OrderID=OrderIDfrominserted
select@StorageNumber=StorageNumberfromStorageInfowhereProductID=@ProductID
go
createprocproc_StorageChange
@StorageNumberint,@ProductIDint,@OrderNumberint
as
select@StorageNumber=StorageNumberfromStorageInfowhereProductID=@ProductID
if(@StorageNumber=0)
begin
select@ProductID=ProductIDfromOrderInfowhereOrderID=(selectOrderIDfromSendInfo)
deletefromStorageInfowhereProductID=@ProductID
end
else
begin
select@OrderNumber=OrderNumberfromOrderInfowhereOrderID=(selectOrderIDfromSendInfo)
select@ProductID=ProductIDfromOrderInfowhereOrderID=(selectOrderIDfromSendInfo)
updateStorageInfosetStorageNumber=StorageNumber-@OrderNumberwhereProductID=@ProductID
end
go
select*fromStorageInfo;select*fromSendInfo;select*fromOrderInfo
--8.创建入库时总价自动生成的触发器