用rational rose 2003 設計商業銷售系統
本次分析設計是針對一個商業銷售系統中的幾個主要業務進行建模。
我們的設計對象是一個商場的商業銷售系統。商場下設有業務部、倉庫、若干柜臺組及收銀臺等,業務部負責組織進貨、保管及銷售,倉庫對購進的商品進行保管,而柜臺則是進行商品零售的場所,收銀臺作為大廈財務出納的收款點負責零售商品的收款。
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*/ /***************************************************************************/ |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=252955
總的來說還是不錯的,總算是用rose完成了全過程。
posted on 2006-03-13 00:10 都市淘沙者 閱讀(1993) 評論(1) 編輯 收藏 所屬分類: PatterDesign/UML/Rose/ERwin