本次分析设计是针对一个商业销售系统中的几个主要业务进行建模。
我们的设计对象是一个商场的商业销售系统。商场下设有业务部、仓库、若干柜台组及收银台等,业务部负责组织进货、保管及销售,仓库对购进的商品进行保管,而柜台则是进行商品零售的场所,收银台作为大厦财务出纳的收款点负责零售商品的收款。
1. 现有系统描述该商场现有部门如下:
家用电器经理部、家用电器大件柜、家用电器小件柜;
五金交电经理部、小五金柜、电气材料柜;
钟表眼镜经理部、钟表柜、眼镜柜;
文化用品经理部、文化用品一柜、文化用品二柜;
体育用品经理部、体育器材柜、体育服装柜;
服装用品经理部、妇女服装柜、儿童服装柜、男子服装柜;
大件商品仓库,服装用品仓库、精细商品仓库、普通商品仓库。
该商场的业务目前全部为手工处理,具体业务描述如下:
业务部从有关厂家和批发商订购商品;订购商品到货时,由业务部的制单人填写商品入库通知单,通知仓库进行行验收入库;仓库保管员按入库单对到货进行验收入库;无论验收情况如何,都要填写验收单,通知业务部及财务进行做账;
柜台需要库存商品上柜销售时,也由业务部的制单人填写商品调拨单分别通知仓库和柜台组;仓库按调拨单发货;柜台按调拨单提货到柜台;商品零售时,由售货员填写交款单给顾客,顾客拿交款单到收银台交钱,收款员按收款单的金额收款,然后在交款单上盖收款章,顾客凭盖章后的交款单到柜台取走商品;
而对批发业务来说,顾客直接到业务部进行洽谈,业务部的业务人员根据洽谈结果开售货单,顾客拿售货单到财务部出纳处交款,出纳收款后在售货单各联上加盖收款章;顾客交款后直接到仓库提货;仓库发货时按售货单发货,并将售货单的提货联留底。
2. 对新系统要求 2.1 经理业务部业务管理业务处理要求:
要求新系统能支持各经理业务部通过开具入库单、调拨单、调价单商品批发销售单以及库存调整单来对商品流通各个环节进行管理和控制。
数据处理要求:
入库单、调拨单、调价单、销售单以及库存调整单都是属于原始凭证,在新系统中应保存这些原始凭证的如下基本信息:凭证号、凭证名称、填制单位、接受单位、日期、制表人;以及,如下明细信息:入库编号、单位、数量、单价、摘要。
2.2 仓库业务管理业务处理要求:商品的入库、出库、盘点及查询。
商品入库主要是采购商品入库,入库时须按入库通知单对实物进行验收,并填写验收单。
出库有两种情况:一种是按商品调拨单将商品调入柜台进行销售,另一种是批发销售,顾客拿提货联来提货。
盘点主要是按库存账对实物进行盘查,查出各种实物的盈亏情况。
商品入库、出库都要对库存账进行登记,盘点要做出盘点报表
数据处理要求:
仓库的商品库存账记录了仓库各种商品的库存数量及资金占用量等库存状态,应能反映如下信息:入库编号、商品名称、单位、数量、单价、入库日期、库位
库存进出流水账记录仓库商品进出情况,这是一个随时间增加的流水账,应能反映如下信息:凭证编号、进出(借贷)、数量、单位、单价、入库编号、商品名称、日期、摘要。
入库验收单记录入库验收情况,应能反映如下信息:验收单编号、商品名称、入库编号、入库数量、验收数量、验收质量、单位、单价、入库单编号、验收日期、验收人、摘要。
盘点记录表记录盘点情况,应能反映如下信息:盘点日期、入库编号、商品名称、账面数量、实际盈亏数量、单位、单价、摘要。
2.3 柜台业务管理新系统应对以下业务进行处理:商品调柜处理、商品销售及柜台商品的统计查询。
商品调入柜台进行销售时,要按商品调拨单从仓库中领取商品,同时要登记柜台商品帐。
销售商品时先开售货单给顾客,顾客凭售货单去收银台交款后再将已盏收款章的售货单交给售货员并取走商品,售货员须将已售出的货物进行登记。
此外,查询主要查询柜台商品情况及销售情况。统计主要统计每天的销售情况,毛利润等信息。
数据处理要求:
1. 柜台商品的登记应该的两本账;一本是反映柜台商品状态的,另一本是反映柜台商品变动情况的流水账。
2. 用于记录柜台现有各商品存货的情况的柜台商品账,应能反映如下信息:入库编号、商品名称、单位、数量、进价。
3. 用于记录柜台商品的入库情况的柜台商品入库流水账,应能反映如下信息:凭证编号、入库编号、商品名称、数量、单价、单位、日期、摘要。
4. 用于记录柜台商品的销售库情况的柜台商品销售流水账,应能反映如下信息:凭证编号、入库编号、商品名称、销售数量、销售单价、单位、单位毛利、日期、摘要。
5. 售货数据:售货单编号、入库编号、商品名称、数量、售价、单位、有效否、柜台名称、日期。
6. 商品价格数据:商品名称、单位、价格、实行日期。
2.4 收银台管理收银台的主要工作就是按售货单收取现金。系统应提供以下业务处理功能:收款员联机管理、收款登记,收款查询、销售日报表及现金日报表的生成打印。
数据处理要求:
1. 收款台账,记录了收款流水账,应能反映如下信息:售货单编号、日期、柜台、入库编号、商品名称、数量、单位、单价、收款员、付款方式(现金、支票)。
2. 销售日报,记录了每天统计的销售情况,应能反映如下信息:日期、柜台号、入库编号、商品编号、数量、单位、金额。
3. 新系统至少应记录收款员如下一些信息:收款员姓名、口令、有效否、登记日期。
2.5 商品三级账管理商品三级账管理的主要有:根据仓库验收单在商品账中登记入库记录,填调拨单时须检查库存是否有相应的商品,调拨单填完后要自动对商品账中的库存和柜台商品变动进行登记,根据销售日报表对柜台销售商品登账。
数据处理要求:
1. 商品存货账,记录商场备部门的存货情况:入库编号、商品名称、存货单位名称、单位、数量、单价。
2. 商品变动流水账,记录商场各部门的存货的变动情况:入库编号、商品名称、科目编号、借贷、单位、数量,单价、日期、凭证号、摘要。
3. 商品销售流水账,记录商品的销售情况:入库编号、商品名称、销售部门、销售数量、单位、售价、进价、毛利、日期。
2.6 编码要求
新系统对诸如部门、人员、商品、厂家、各种凭证等分别制定一套简单易行的编码方案,以方便管理和使用。
商场方面还要求该系统应是一个多层体系结构的分布式系统。
本文档设计中,是把以上部门按功能把他们进行抽象成为四个管理系统。下图是Use Case Diagram View中对系统的一个描述。它虽然是个Use Case Diagram,但里面的内容只是Package,不包含具体Use Case Diagram的actor和Use Case.
图1。系统的结构图
Use Case应该是过程、操作而非一个实体的对象。如图,Use Case 的所有对象(商品入库单、库存入库单、商品调整单、商品批发销售单、商品调拨单)都是实实在在存在的实体。它们不是一个过程,亦不是一个操作。因而Use Case Diagram如下:
图二、单据管理系统用例图。
在单据管理系统中要求新系统能支持各经理业务部通过开具入库单、调拨单、调价单商品批发销售单以及库存调整单来对商品流通各个环节进行管理和控制。
在画Sequence Diagram中,为了很好的对类和操作作很好的映射,提高Sequence Diagram的实际用途,采用了“二步法”来做。如下图,先是对用户所关心的东西作一个描述性的说明。在这里面,不对具体的实体对象任何的描象,也不对类进行映射。
图三、“二步法”画Sequence Diagram (1)
图四、“二步法”画Sequence Diagram (2)
图五、“二步法”画Sequence Diagram (3)
和Sequence Diagram一样,Collaboration Diagram 也显示使用案例中特定的流程。Sequence Diagram与Collaboration Diagram中的信息相同,但Collaboration Diagram显示了不同的流程视图。在Collaboration Diagram中,更容易看出对象之间的关系。
Collaboration Diagram表示协作,在Collaboration Diagram中包含了一组由对象扮演的角色,以及一个特定的上下文中的关系。对最终得出的Sequence Diagram作转化,成为如图六所示的Collaboration Diagram:
图六、Sequence Diagram 转为Collaboration Diagram
C1ass框图显示系统中的类与类包,提供系统组件及其相互关系的静态图形。类是包装信息和行为的项目。习惯上,我们把系统的信息放在数据库”一方,行为放在应用程序一方。面向对象方法的特点之—就是将一小组息和影响信息的行为连接在—起。我们将一小组信息和影响信息的行为连接在一起,包装成类。一个系统通常要生成几个CIass框图。有些显示类及其关系的子集,有些显示类的子集,包括属性和操作,还有—些显尔类包及包之间的关系。
接着上面的这个制单例子,对图八中所映射的类添加一些必要的属性和操作,并反相关的类分类后打包为三个包:
图七、把类分类后打包
图八、包“界面”下属类
图九、包“后台数据库”下属类
图十、包“中间件”下属类
当然,也有对整个单据管理系统所有类及类之间关系的描述:
图十一、单据管理系统类及类之间的关系
组件是代码的物理模块。组件可以包括代码闸和运行文件。例如,如果使用C++,则每个个.CPP和.H文件是单独的组件。编译代码后生成的EXE文件也是组件。生成代码之前,将每个文件映射相应组件。在C++中,每个类映射两个组件,一个表示类的.CPP义件,—个表示.H的文件。组件生成之后,加进Component Dragram中,并画出其间关系:
图十二、组件包之间的关系
图十三、组件之间的关系
其它功能模块设计
上面已对单据管理系统的设计进行了详细说明。从技术角度来说,仓库管理系统、销售管理系统、账目管理系统的实现过程、步骤和方法都是一样的。为了避免不必要的冗余,以下部份直接给出图例,不再加于累述。
图十四、仓库管理系统用例图
图十五、销售管理系统用例图
图一六、帐目管理系统用例图
图一七、报表管理顺序图
商业销售系统类图汇总
图一八、后台数据库类图汇总
图一九、界面类图汇总
图二○、中间件类图汇总
图二一、商业销售系统类图汇总
图二二、商业销售系统类图汇总组件图汇总
尚未解决的问题1.若此高场有进出口贸易,刚对进出口商品的管理没有细分。
2.界面的完全实现。
3.高级管理者与普通用户拥有优先的权利没有体现出来。
附录一、数据库建表代码
use master
go
if exists (select * from dbo.sysdatabases where name = 'vendition')
drop database vendition
GO
create database vendition
go
use vendition
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'ZreceiverInfo') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'Dorder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'CcheckOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'ZgoodDailyOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'SgainTotal') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'CstorageInfo') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'CinStorage') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'CprepareOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'ZmoneyDailyOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'SpayforOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'SpayforOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'SgoodsTotal') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'DorderItem') = 1)
drop table [dbo].[TravelService_Loan]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TravelService_Loan]') and OBJECTPROPERTY(id, N'CpickUpGoodsOrder') = 1)
drop table [dbo].[TravelService_Loan]
GO
CREATE TABLE ZreceiverInfo (
ReceiverID INTEGER NOT NULL,
ReceiverName VARCHAR ( 255 ) NOT NULL,
ReceiverPassW SMALLINT NOT NULL,
Gender SMALLINT NOT NULL,
ApplyDate datetime NOT NULL,
LastLoginDate datetime NOT NULL,
CounterID SMALLINT NOT NULL,
Others SMALLINT NOT NULL,
ZreceiverInfo_ID INTEGER NOT NULL,
CONSTRAINT PK_ZreceiverInfo11 PRIMARY KEY (ZreceiverInfo_ID)
);
CREATE TABLE Dorder (
OrderNumber INTEGER NOT NULL,
OrderName VARCHAR ( 255 ) NOT NULL,
OrderFillUnit VARCHAR ( 255 ) NOT NULL,
OrderRequreUnit VARCHAR ( 255 ) NOT NULL,
OrderDate datetime NOT NULL,
OrderFillDate datetime NOT NULL,
OrderLister VARCHAR ( 255 ) NOT NULL,
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_Dorder4 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE CcheckOrder (
CheckNumber INTEGER NOT NULL,
CheckPerson VARCHAR ( 255 ) NOT NULL,
CheckResult SMALLINT NOT NULL,
COL_0 SMALLINT NOT NULL,
Dorder_ID INTEGER NOT NULL,
GoodName VARCHAR ( 255 ) NOT NULL,
InStorageOrderID INTEGER NOT NULL,
CONSTRAINT PK_CcheckOrder21 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE ZgoodDailyOrder (
ZmoneyDailyOrder_ID INTEGER,
SgoodsTotal_ID INTEGER,
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_ZgoodDailyOrder24 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE SgainTotal (
Date datetime NOT NULL,
GoodOrderID INTEGER NOT NULL,
OrderId INTEGER NOT NULL,
SgainTotal_ID INTEGER NOT NULL,
TotalCash SMALLINT NOT NULL,
CONSTRAINT PK_SgainTotal18 PRIMARY KEY (SgainTotal_ID)
);
CREATE TABLE CstorageInfo (
GoodPlace VARCHAR ( 255 ) NOT NULL,
Dorder_ID INTEGER NOT NULL,
CinStorage_Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_CstorageInfo19 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE CinStorage (
InStorageTime SMALLINT NOT NULL,
CpickUpGoodsOrder_ID INTEGER,
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_CinStorage20 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE CprepareOrder (
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_CprepareOrder22 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE ZmoneyDailyOrder (
OrderId INTEGER NOT NULL,
TotalCash DOUBLE PRECISION NOT NULL,
Date datetime NOT NULL,
GoodOrderId INTEGER NOT NULL,
ZmoneyDailyOrder_ID INTEGER NOT NULL,
SgainTotal_ID INTEGER,
CONSTRAINT PK_ZmoneyDailyOrder14 PRIMARY KEY (ZmoneyDailyOrder_ID)
);
CREATE TABLE SpayforOrder (
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_SpayforOrder25 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE ZgatheringOrder (
PayForm VARCHAR ( 255 ) NOT NULL,
CounterID INTEGER NOT NULL,
ZmoneyDailyOrder_ID INTEGER,
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_ZgatheringOrder23 PRIMARY KEY (Dorder_ID)
);
CREATE TABLE SgoodsTotal (
OrderId INTEGER NOT NULL,
GoodName VARCHAR ( 255 ) NOT NULL,
GoodTotal INTEGER NOT NULL,
SgainTotalID INTEGER NOT NULL,
GoodPrice DOUBLE PRECISION NOT NULL,
SgoodsTotal_ID INTEGER NOT NULL,
CONSTRAINT PK_SgoodsTotal17 PRIMARY KEY (SgoodsTotal_ID)
);
CREATE TABLE DorderItem (
ItemID INTEGER NOT NULL,
ItemUnit VARCHAR ( 255 ) NOT NULL,
ItemNumber INTEGER NOT NULL,
ItemPrise DOUBLE PRECISION NOT NULL,
ItemTabloid VARCHAR ( 255 ) NOT NULL,
DorderItem_ID INTEGER NOT NULL,
Dorder_ID INTEGER NOT NULL,
CONSTRAINT PK_DorderItem5 PRIMARY KEY (DorderItem_ID)
);
CREATE TABLE CpickUpGoodsOrder (
PickUpID SMALLINT NOT NULL,
PickUpObject VARCHAR ( 255 ) NOT NULL,
PickUpTime datetime NOT NULL,
PickUpGoodName VARCHAR ( 255 ) NOT NULL,
PickUpGoodPrice DOUBLE PRECISION NOT NULL,
PickUpMoney DOUBLE PRECISION NOT NULL,
CpickUpGoodsOrder_ID INTEGER NOT NULL,
CONSTRAINT PK_CpickUpGoodsOrder10 PRIMARY KEY (CpickUpGoodsOrder_ID)
);
CREATE INDEX TC_ZgoodDailyOrder13 ON ZgoodDailyOrder (ZmoneyDailyOrder_ID);
CREATE INDEX TC_ZgoodDailyOrder15 ON ZgoodDailyOrder (SgoodsTotal_ID);
CREATE INDEX TC_CinStorage9 ON CinStorage (CpickUpGoodsOrder_ID);
CREATE INDEX TC_ZmoneyDailyOrder17 ON ZmoneyDailyOrder (SgainTotal_ID);
CREATE INDEX TC_ZgatheringOrder11 ON ZgatheringOrder (ZmoneyDailyOrder_ID);
CREATE INDEX TC_DorderItem5 ON DorderItem (Dorder_ID);
ALTER TABLE CcheckOrder ADD CONSTRAINT FK_CcheckOrder12 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZgoodDailyOrder ADD CONSTRAINT FK_ZgoodDailyOrder6 FOREIGN KEY (ZmoneyDailyOrder_ID) REFERENCES ZmoneyDailyOrder (ZmoneyDailyOrder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZgoodDailyOrder ADD CONSTRAINT FK_ZgoodDailyOrder15 FOREIGN KEY (Dorder_ID) REFERENCES CinStorage (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZgoodDailyOrder ADD CONSTRAINT FK_ZgoodDailyOrder7 FOREIGN KEY (SgoodsTotal_ID) REFERENCES SgoodsTotal (SgoodsTotal_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CstorageInfo ADD CONSTRAINT FK_CstorageInfo10 FOREIGN KEY (CinStorage_Dorder_ID) REFERENCES CinStorage (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CstorageInfo ADD CONSTRAINT FK_CstorageInfo9 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CinStorage ADD CONSTRAINT FK_CinStorage4 FOREIGN KEY (CpickUpGoodsOrder_ID) REFERENCES CpickUpGoodsOrder (CpickUpGoodsOrder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CinStorage ADD CONSTRAINT FK_CinStorage11 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE CprepareOrder ADD CONSTRAINT FK_CprepareOrder13 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZmoneyDailyOrder ADD CONSTRAINT FK_ZmoneyDailyOrder8 FOREIGN KEY (SgainTotal_ID) REFERENCES SgainTotal (SgainTotal_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE SpayforOrder ADD CONSTRAINT FK_SpayforOrder16 FOREIGN KEY (Dorder_ID) REFERENCES ZgatheringOrder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZgatheringOrder ADD CONSTRAINT FK_ZgatheringOrder14 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE ZgatheringOrder ADD CONSTRAINT FK_ZgatheringOrder5 FOREIGN KEY (ZmoneyDailyOrder_ID) REFERENCES ZmoneyDailyOrder (ZmoneyDailyOrder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE DorderItem ADD CONSTRAINT FK_DorderItem2 FOREIGN KEY (Dorder_ID) REFERENCES Dorder (Dorder_ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
附录二、几个简单的存储过程和触发器的实现
/***************************************************************************/
create trigger CheckGoods on Cinstroage /*填调拨单时检查库存是否有相应的商品*/
for insert
as
begin
declare @GoodsName varchar(20),
@GoodsNum int,
@Mark int,set @Mark=0
set @GoodsName=(select @GoodsName from inserted)
set @GoodsNum=(select @@GoodsNum from inserted)
set @Mark=(select (*) from Cinstroage where Cinstroage.GoodName=@GoodsName)
if@Mark=0
begin
insert into Cinstroage values(select * from inserted)
end
else if
begin
update Cinstroage
set GoodsNum=GoodsNum+@GoodsNum
where GoodsName=@GoodsName
end
end
/***************************************************************************/
create trigger PickOut on CprepareOrder/*调拨单填完后要自动对商品账中的库存和柜台商品变动进行登记*/
for insert
as
begin
declare @GoodsName varchar(20),
@GoodsNum int,
set @GoodsName=(select @GoodsName from inserted)
set @GoodsNum=(select @@GoodsNum from inserted)
update Cinstroage
set GoodsNum=GoodsNum-@GoodsNum
where GoodsName=@GoodsName
delete * from Cinstroage where GoodsNum=0
update ScountStroage
set GoodsNum=GoodsNum-@GoodsNum
where GoodsName=@GoodsName
delete * from ScountStroage where GoodsNum=0
end
end
/***************************************************************************/
create proc Cdaily(@Cdate datetime) /*销售日报表现金日报表的生成*/
as
create table CdailyResult /*创建临时表 CdailyResult*/
(GoodName varchar(20),
GoodPrice int,
GoodNum int,
GoodCountCash varchar(10),
)
go
declare @GoodName varchar(20), /*从收款单和提货单中把名字相同的商品销售信息汇总放在临时表中*/
@GoodPrice int,
@GoodNum int,
@GoodCountCash varchar(10),
@TotalCash varchar(15),
@looptime1 set @looptime1=(select count(*) from ZgatheringOrder),
@looptime2 set @looptime1=(select count(*) from CpicpUpGoodsOrder)
declare DailyTotal1 cursor for
select a1.GoodName,a1.GoodPrice+a1.GoodPrice,a1.GoodNum+a2.GoodNum,a1.GoodCountCash+a2.GoodCountCash
from ZgatheringOrder as a1,a2
where a1.DailyDate=@Cdate
a1.GoodName=a2.GoodName
declare DailyTotal2 cursor for
select a1.GoodName,a1.GoodPrice+a1.GoodPrice,a1.GoodNum+a2.GoodNum,a1.GoodCountCash+a2.GoodCountCash
from CpicpUpGoodsOrder as a1,a2
where DailyDate=@Cdate
open ZgatheringOrder
open CpicpUpGoodsOrder
while @looptime1!=0
begin
fetch next from ZgatheringOrder into @GoodName,@GoodPrice,@GoodNum,@GoodCountCash
insert into result values(@GoodName,@GoodPrice,@GoodNum,@GoodCountCash)
set @looptime1=@looptime1-1
end
while @looptime2!=0
begin
fetch next from CpicpUpGoodsOrder into @GoodName,@GoodPrice,@GoodNum,@GoodCountCash
insert into result values(@GoodName,@GoodPrice,@GoodNum,@GoodCountCash)
set @looptime1=@looptime1-1
end
close ZgatheringOrder
close CpicpUpGoodsOrder
deallocate ZgatheringOrder
deallocate CpicpUpGoodsOrder
/*执行完后必须删除临时表 CdailyResult*/
/***************************************************************************/
create proc Ccheck(@Cdate datetime) /*些存储过程用来完成仓库管理系统中的商品盘点功能*/
as
create table CcheckResult /*创建临时表 CdailyResult*/
(CheckDate datetime,
InstorageOrderID int,
GoodName varchar(20),
GoodPrice int,
RemaningNum int,
Mark varchar(10),
Unit varchar(4),
Abstract varchar(200)
)
go
declare @InstorageOrderID int,
@GoodName varchar(20),
@GoodPrice int,
@RemaningNum int,
@Mark varchar(10),
@Unit varchar(4),
@Abstract varchar(200),
@looptime set @looptime1=(select count(*) from Cinstroage),
declare DateCcheck cursor for
select InstorageOrderID,GoodName,RemaningNum,Mark,Unit,Abstract,GoodPrice
from Cinstroage
open DateCcheck
while @looptime!=0
begin
fetch next from DateCcheck into @InstorageOrderID,@GoodName,@GoodNum,@GoodPrice,@Mark,Unit,@Abstract
set @CheckDate=@Cdate,
@RemaningNum=(select @GoodNum*@GoodPrice-GoodNum
from Cinstroage,SganToTal
where Cinstroage.GoodName=SganToTal.GoodName),
@Make=(select @GoodNum-GoodNum
from Cinstroage,SganToTal
where Cinstroage.GoodName=SganToTal.GoodName),
insert into result values(@CheckDate,@InstorageOrderID,@GoodName,@RemaningNum,@Mark,Unit,@Abstract)
set @looptime1=@looptime1-1
end
close DateCcheck
deallocate DateCcheck
/*执行完后必须删除临时表 CcheckResult*/
/***************************************************************************/
本文地址:http://com.8s8s.com/it/it32934.htm