用rational rose 2003 設計商業銷售系統

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

本次分析設計是針對一個商業銷售系統中的幾個主要業務進行建模。

我們的設計對象是一個商場的商業銷售系統。商場下設有業務部、倉庫、若干櫃檯組及收銀臺等,業務部負責組織進貨、保管及銷售,倉庫對購進的商品進行保管,而櫃檯則是進行商品零售的場所,收銀臺作爲大廈財務出納的收款點負責零售商品的收款。

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 DiagramactorUse 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 DiagramCollaboration 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*/

/***************************************************************************/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章