数据库原理课程设计 进销存管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长治学院
课程设计报告课程名称:数据库原理课程设计
设计题目:进销存管理系统
系别:计算机系
专业:计算机科学与技术
组别:第一组
学生姓名: 韩伟伟学号: 08407106 起止日期: 2011年6月7日~ 2011年6月22日指导教师:马桂芳
目录
一、系统规划 (3)
二、总体设计 (4)
2.1系统功能简述 (5)
三、数据库原理 (5)
3.1 系统原理概述 (5)
3.1.1 E—R图 (5)
3.1.2 系统原理概述 (5)
3.1.3数据流图 (6)
3.2逻辑结构设计 (6)
3.2.1 基本表信息 (6)
3.2.2 存储过程\触发器\视图设计 (8)
四、模块划分(系统管理模块实现) (13)
4.1 系统登录界面及代码 (13)
4.2系统管理模块界面及代码 (13)
五、系统的优点及不足之处 (14)
六、总结和致谢 (15)
七、参考文献 (15)
进销存管理系统
系统背景说明
待开发的软件系统的名称:进销存管理系统
软件项目的用途:用于数据库课程设计及商业用途
软件项目的范围:系统涉及企业的库存,销售与进货提供了管理
功能,为库存,销售,进货等管理数据提供了分析功能
小组成员成员:韩伟伟,令狐岩,李江民,杨捷
指导老师:马桂芳
随着技术发展,电脑操作及管理日趋简化,电脑知识日趋普及,同时市场经济快速多变,竞争激烈,因此企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。

一、系统规划
1.1 可行性分析
经济上可行性分析
现在,计算机的价格已经十分低廉,性能却有了长足的进步。

而本系统的开发,为企业的工作效率带来了一个质的飞跃,为此主要表现有以下几个方面:第一,本系统的运行可以代替人工进行许多繁杂的劳动;
第二,本系统的运行可以节省许多资源;
第三,本系统的运行可以大大的提高企业的工作效率;
第四,本系统可以使敏感文档更加安全,等等。

本产品的开发所需的设备在现有条件下,只需要少量的投入资金就可以实现。

因此在经济上是可行的。

技术上可行性分析
a)软件可行性
PowerBuilder具有丰富的数据库功能,可以直接建立和编辑数据库,使用结构化查询语言直接访问SQL Sever上的数据库,并提供简单的面向对象的库操作命令、多用户数据库的加锁机制和网络数据库的编程技术。

SQL Sever2000是由微软公司推出的,能提供超大型系统所需的数据库服务,并对数据库提供全面的保护,具有防止问题发生的安全措施,他是一个采用SQL语言的关系型数据库管理系统。

作为客户机/服务器的后端数据
库,他是所有数据的汇总和管理中心。

b)硬件可行性
CPU:奔腾三代以上。

OS(操作系统):Windows2000/windows98以上。

内存:64MB以上。

硬盘:30G以上。

本系统的开发利用Microsoft SQL Server2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。

使用PowerBuilder作为系统开发的开发环境,此开发工具开发数据库管理系统,采用面向对象的方式,方便、简捷、功能强大。

管理上可行性分析
课设指导老师给与了精心的讲解和大力的支持。

综上所述,系统在技术上、经济上、管理上都是可行的。

二、总体设计
2.1系统功能简述
根据生活经验,我们开发该系统主要是为了实现:方便的查询信息,简单准确的进行插入和删除等操作。

所以在该系统中,我们主要实现了它的以上几个功能:查询功能是在查询客户消费、购物情况等信息,是提供给管理者参考的;插入、删除和保存功能是在客户信息表和购物信息表以及库存信息表中得到实现。

三、数据库原理
3.1 系统原理概述
管理信息系统的开发是一个复杂的系统工程,它涉及到计算机的处理技术、系统理论、组织结构、管理功能、管理知识等各方面的问题,每一种开发方法都要遵循相应的开发策略。

数据库由DBMS(数据库管理系统)处理,DBMS则由专业开发人员和用户通过应用程序直接或间接的使用。

数据库管理系统是指数据库系统中管理数据的软件系统。

它是数据库系统的核心组成部分。

对数据库的一切操作,包括定义,更新及各种控制,都是通过它实现的。

它总是基于某种数据模型,可以把DBMS看成是某种数据模型在计算机系统上的具体实现。

根据数据模型的不同,DBMS可以分成层次型、关系型、面向对象型等。

3.1.1 E—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 是
表五商品库存信息表
3.2.2 存储过程\触发器\视图设计--1创建库存视图
if exists (select 1 from sysobjects where name = 'view_storage_product')
drop view view_storage_product
go
create view view_storage_product
as
select a.*,b.StorageAddress,b.StorageNumber from ProductInfo a inner join
StorageInfo b on a.ProductID = b.ProductID
go
--查看库存视图
select * from view_storage_product
--2创建订单信息视图
if exists (select * from sysobjects where name = 'view_CustomerInfo_OrderInfo_ProductInfo') drop view view_CustomerInfo_OrderInfo_ProductInfo
go
create view view_CustomerInfo_OrderInfo_ProductInfo
as
select CustomerName,ProductName,OrderTime,OrderNumber,
RequireDate,OrderEmployee,IsConsignment from CustomerInfo
a inner join OrderInfo
b on a.CustomerID = b.CustomerID
inner join ProductInfo c on b.ProductID = c.ProductID
go
select * from view_CustomerInfo_OrderInfo_ProductInfo
--3.创建添加客户信息的存储过程
if exists (select 1 from sysobjects where name = 'proc_InsertCustomerInfo')
drop proc proc_InsertCustomerInfo
go
create procedure proc_InsertCustomerInfo
@CustomerName nvarchar(20),@CustomerAddress nvarchar(50),@CustomerPhone nvarchar(11), @Taxno nvarchar(10),@Repute nvarchar(10),
@Country nvarchar(10) ='中国',@Province nvarchar(10)
as
begin
insert into CustomerInfo
values(@CustomerName,@CustomerAddress,@CustomerPhone,@Taxno,@Repute,@Country,@ Province)
end
go
--调用存储过程
exec proc_InsertCustomerInfo '胡雷松','湖北神农架','622512','622512','优秀',default,'河南' select * from CustomerInfo
--4.创建添加产品信息存储过程(需验证产品的价格必须大于等于0)
if exists (select 1 from sysobjects where name = 'proc_InsertProductInfo')
drop procedure proc_InsertProductInfo
go
create proc proc_InsertProductInfo
@ComponyID int,@ProductName nvarchar(20),@ProductType nvarchar(20),@NumberPerMonth int ,@Price money
as
begin
if(@Price>=0)
begin
insert into ProductInfo
values(@ComponyID,@ProductName,@ProductType,@NumberPerMonth,@Price) end
else
begin
print '产品价格必须大于0!'
end
end
go
--调用存储过程
exec proc_InsertProductInfo NULL,'C#入门经典','书籍',3000,65
select * from ProductInfo
--5.创建进货时库存信息变化的触发器
--①如果没有该产品的信息,则将数据添加到库存信息表中
--②如果仓库中已经存在该产品,则增加该产品的库存数量
if exists (select 1 from sysobjects where name = 'trg_StockInfo_Insert')
drop trigger trg_StockInfo_Insert
go
create trigger trg_StockInfo_Insert
on StockInfo
for insert
as
declare @ProductID int,@StockNumber int
select @ProductID = ProductID from inserted
select @StockNumber = StockNumber from inserted where ProductID = @ProductID
if (@ProductID not in (select ProductID from StorageInfo ))
begin
insert into StorageInfo values(@ProductID,'东北仓库',@StockNumber) end
else
begin
update StorageInfo set StorageNumber = StorageNumber + @StockNumber where ProductID = @ProductID
end
go
--测试触发器
insert into StockInfo values(4,350,NULL,NULL,NULL,getdate(),'张三')
select * from StorageInfo
select * from StockInfo
--6.创建添加订单信息存储过程
--①订单时间默认为系统单前时间,②验证订单数量必须大于0③验证产品需要时间必须大于系统当前时间1月以上,④根据库存信息与产品生产能力判断,是否能在产品需要时间之前完成该产品的生产,⑤验证订单业务员长度必须大于2,⑥默认是否发货为“否”
if exists (select * from sysobjects where name = 'proc_InsertOrderInfo')
drop proc proc_InsertOrderInfo
go
create proc proc_InsertOrderInfo
@ProductID int,@OrderNumber int,@OrderEmployee nvarchar(20),@CustomerID int,@Price money,@Ordersum money,@RequireDate datetime,@IsConsignment nvarchar(2)
as
begin
declare @OrderTime char(20)
select @ProductID = ProductID from inserted
select @OrderNumber = OrderNumber from inserted
select @OrderEmployee = OrderEmployee from inserted
select @CustomerID= CustomerID from inserted
select @Price = Price from inserted
select @Ordersum = Ordersum from inserted
set @OrderTime = convert(char(20),getdate(),120)
set @RequireDate = convert(char(20),dateadd(month,1,getdate()),120) if(@OrderNumber>0 and len(@OrderEmployee)>2 and
datediff(dd,@OrderTime,dateadd(month,1,getdate()))=0 )
begin
if(@OrderNumber < (select NumberPerMonth from ProductInfo where
ProductID=@ProductID))
begin
insert into OrderInfo
values(@CustomerID,@ProductID,@OrderTime,@OrderNumber,@Price,@Ordersum,@Require Date,@OrderEmployee,'否')
end
end
end
go
--7.发货时库存信息的变化的触发器
--①如果发完货后,库存为0,则将该货物从库存信息表中删除,②如果发完货后,库存不为0,则减少相应的库存数量
if exists (select 1 from sysobjects where name = 'trg_SendInfo_Insert')
drop trigger trg_SendInfo_Insert
go
create trigger trg_SendInfo_Insert
on SendInfo
for insert
as
declare @ProductID int,@OrderID int,@StorageNumber int
select @OrderID = OrderID from inserted
select @StorageNumber = StorageNumber from StorageInfo where ProductID =
@ProductID
go
create proc proc_StorageChange
@StorageNumber int,@ProductID int,@OrderNumber int
as
select @StorageNumber = StorageNumber from StorageInfo where ProductID =
@ProductID
if(@StorageNumber = 0)
begin
select @ProductID = ProductID from OrderInfo where OrderID = (select OrderID from SendInfo)
delete from StorageInfo where ProductID = @ProductID
end
else
begin
select @OrderNumber = OrderNumber from OrderInfo where OrderID = (select OrderID from SendInfo )
select @ProductID = ProductID from OrderInfo where OrderID = (select OrderID from SendInfo)
update StorageInfo set StorageNumber = StorageNumber - @OrderNumber where ProductID = @ProductID
end
go
select * from StorageInfo;select * from SendInfo;select * from OrderInfo
--8.创建入库时总价自动生成的触发器
if exists (select 1 from sysobjects where name = 'trg_StockInfo_InsertandUpdate') drop trigger trg_StockInfo_InsertandUpdate
go
create trigger trg_StockInfo_InsertandUpdate
on StockInfo
for insert,update
as
declare @ProductID int,@StockNumber int,@Stock money,@Stocksum money select @ProductID = ProductID from inserted
select @StockNumber = StockNumber from inserted where ProductID = @ProductID select @Stock = Stock from inserted where ProductID = @ProductID begin
update StockInfo set Stocksum = @Stock * @StockNumber where ProductID = @ProductID end
四、模块划分(系统管理模块实现)
4.1 系统登录界面及代码
定义的函数wf_connect:
String ls_database
userid=Trim(userid)
password=Trim(password)
IF password="" THEN RETURN -1
ls_database="ConnectString='DSN=SellManageSystem;"
sqlca.dbparm=ls_database+"UID="+userid+";PWD="+password+"'" connect using sqlca;
return sqlca.sqlcode
确定按钮的代码:
SetPointer(hourglass!)
ls_user_id=string(sle_userid.text)
IF parent.wf_connect(sle_userid.text,sle_password.text)=-1 then MessageBox("连接数据库错误!","连接失败"+sqlca.sqlerrtext) halt
else
close(parent)
open(w_main)
end if
4.2系统管理模块界面及代码
查询按钮的代码:
if (sle_1.text="" and sle_2.text="") then
messagebox("","不能为空!")
end if
integer b
string bb
if sle_1.text="" then
bb=sle_2.text
dw_1.retrieve(bb)
end if
if sle_2.text="" then
b=dec(sle_1.text)
dw_1.retrieve(b)
end if
添加按钮的代码:dw_1.insertrow(0)
删除按钮的代码:dw_1.deleterow(0)
更新按钮的代码:
if dw_1.update()>0 then
commit;
else
messagebox("","无法保存!")
rollback;
end if
五、系统的优点及不足之处
系统的优点:实现了比较完善的系统管理,另外库存管理中若有商品价钱设置的不合理,可以直接在库存窗口中进行修改,方便用户使用。

还有就是销售,进货管理模块,也分别实现了他们的基本功能,同时还为他们设置了订单及进货单的查询和报表打印功能。

系统的不足:系统中只有唯一类型的用户——管理员,不能保证系统的绝对安全,应该对不同身份的用户设置不同的访问权限,来增强系统的安全性。

应该改善的地方:系统的利润统计模块设计的不够详细,不能很好的反应进销存系统的盈亏,应该完善一下利润统计模块,使其更方便用户使用。

六、总结和致谢
在数据库专业课的学习中,我们接触了高移植性的SQL Server语言,在这个星期里,我们专业的学生在马老师的带领下进行了数据库课程设计实践学习。

在这之前,我们已经学习过一个C++的课程,对数据库基础这门课程也学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,而且PowerBuilder 也是首次接触。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作,包括了PowerBuilder控件的使用,简单的SQL语句等。

通过此次课程设计,对于数据库的设计方法我有了基本的了解,对于PowerBuilder的编程环境也有所了解。

在编写程序的过程中,我也发现了自己的很多不足,比如平日程序编写量少,使得漏洞百出,错误很多。

在以后的学习过程中要注意这些问题,多向他人学习,取长补短。

总之,这次数据库课程设计对我的帮助很大,也使得将来在毕业设计中,对数据的处理,提供了一个优秀的方案。

七、参考文献
1. 数据库系统及应用高等教育出版社第二版崔巍编著
2. PowerBuilder实用教程电子工业大学出版社郑阿奇殷红先张为民编著。

相关文档
最新文档