庫存成本核算系統(tǒng)的需求分析和系統(tǒng)設(shè)計(jì)_第1頁
庫存成本核算系統(tǒng)的需求分析和系統(tǒng)設(shè)計(jì)_第2頁
庫存成本核算系統(tǒng)的需求分析和系統(tǒng)設(shè)計(jì)_第3頁
庫存成本核算系統(tǒng)的需求分析和系統(tǒng)設(shè)計(jì)_第4頁
庫存成本核算系統(tǒng)的需求分析和系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)習(xí)題:庫存成本核算系統(tǒng) 設(shè)計(jì)一個(gè)庫存成本核算程序STOCK。位于世界貿(mào)易大廈底層的成本部管理著食品倉、日用倉、煙酒倉等倉庫,并將倉庫中的貨物調(diào)撥給超級(jí)市場(chǎng)、西餐廳、酒吧、潮江春等部門。采購貨物進(jìn)倉時(shí),進(jìn)庫單上記錄著貨物的編號(hào)、數(shù)量以及金額;部門領(lǐng)料時(shí),出庫單上記錄著貨物的編號(hào)與數(shù)量,出庫金額(即成本)是根據(jù)先進(jìn)先出的原則計(jì)算的。成本部要求掌握每日進(jìn)貨與領(lǐng)料的明細(xì)清單,以及每一樣貨物的最新庫存數(shù)量與金額。每個(gè)月終還要求匯總每一個(gè)倉庫本月的采購數(shù)量與金額(每一樣貨物的明細(xì)以及小計(jì))、每一個(gè)部門本月的領(lǐng)料數(shù)量與金額(每一樣貨物的明細(xì)以及小計(jì))。(提示:完成你的類設(shè)計(jì)后,請(qǐng)考慮以下問題:¬

2、有了新的貨物品種后可以加入嗎?­有了新的倉庫也可以管理嗎?®大廈新開了一間日本料理店,你的程序可以處理嗎?¯如果發(fā)現(xiàn)以前的入庫單或出庫單錄入時(shí)有錯(cuò),你的程序是否允許修改?°如果可以修改,相應(yīng)的成本是否可以正確地重新調(diào)整?)首先明確系統(tǒng)功能,上述需求中以下句子涉及系統(tǒng)功能:1.成本部管理著食品倉、日用倉、煙酒倉等倉庫;2.成本部將倉庫的貨物調(diào)撥給超級(jí)市場(chǎng)、西餐廳、酒吧、潮江春等部門;3.(成本部)采購貨物進(jìn)倉;4.部門領(lǐng)料,領(lǐng)料時(shí)要按照先進(jìn)先出的原則計(jì)算成本(出庫金額);5.成本部要掌握每日進(jìn)貨與領(lǐng)料的明細(xì)清單;6.成本部要掌握每一樣貨物的最新庫存數(shù)量和金

3、額;7.每個(gè)月終要求匯總每個(gè)倉庫本月的采購數(shù)量與金額(每一樣貨物的明細(xì)及小計(jì));8.每個(gè)月終要求匯總每個(gè)部門本月的領(lǐng)料數(shù)量與金額(每一樣貨物的明細(xì)及小計(jì))。上述功能需求可歸納為以下幾條:1.入庫管理:包括采購貨物進(jìn)倉、查詢每日進(jìn)貨明細(xì)清單以及月終匯總;2.部門領(lǐng)料:包括部門從倉庫領(lǐng)料、查詢每日領(lǐng)料明細(xì)清單以及月終匯總;3.庫存查詢:成本部要掌握每一樣貨物的最新庫存數(shù)量和金額;對(duì)系統(tǒng)功能有初步了解后,考慮系統(tǒng)的可能對(duì)象??砂l(fā)現(xiàn)下面一些可能對(duì)象:1.成本部;2.倉庫,很容易地知道,倉庫應(yīng)該是類,而食品倉、日用倉、煙酒倉等是對(duì)象;3.部門,部門是類,而超級(jí)市場(chǎng)、西餐廳、酒吧、潮江春等是對(duì)象;4.進(jìn)庫

4、單和出庫單;5.每日進(jìn)貨與領(lǐng)料清單,每月匯總的進(jìn)貨與領(lǐng)料表。不難發(fā)現(xiàn)“成本部”是系統(tǒng)的使用者,系統(tǒng)并不需要對(duì)其信息進(jìn)行保存和加工,可以說是系統(tǒng)邊界外的活動(dòng)者。而“每日的進(jìn)貨與領(lǐng)料清單,每月匯總的進(jìn)貨與領(lǐng)料表”可由進(jìn)庫單與出庫單計(jì)算得到。根據(jù)“庫存查詢”功能得知系統(tǒng)最好設(shè)置“庫存貨物”對(duì)象,以保存最新的庫存數(shù)量和金額,當(dāng)然最新庫存數(shù)量和金額也可通過進(jìn)庫單和出庫單計(jì)算得到,但這種計(jì)算很復(fù)雜,而且倉庫就是用于保存貨物的,所以設(shè)置庫存貨物對(duì)象也很合理,有應(yīng)用領(lǐng)域所對(duì)應(yīng)的事物。同理也應(yīng)增加“貨物”對(duì)象,以保存有關(guān)貨物的一般信息。因此,初步得到的對(duì)象包括:1.倉庫:保存?zhèn)}庫的信息;2.部門:保存部門的信息

5、;3.貨物:保存貨物的一般信息;4.進(jìn)庫單:貨物進(jìn)庫的憑證;5.出庫單:部門領(lǐng)料的憑證;6.庫存貨物:保存存放在倉庫中貨物的信息。下面考慮每個(gè)對(duì)象的屬性:1.倉庫:應(yīng)至少有名稱,而且最好每個(gè)倉庫有一個(gè)編碼,因?yàn)閭}庫的名稱可能不唯一,也可能很長,不適合用于唯一區(qū)分每個(gè)倉庫。根據(jù)常識(shí),倉庫屬性可能還包括地點(diǎn),容量等。但經(jīng)分析可發(fā)現(xiàn),這些屬性與系統(tǒng)功能無直接關(guān)系,是可有可無的屬性。2.部門:至少有編碼和名稱,也許還有負(fù)責(zé)人等,但該屬性也是可有可無的。3.貨物:至少有編碼和名稱。可能還要對(duì)貨物進(jìn)行分類,例如分為食品類、日用類、煙酒類等,貨物分類可用編碼體現(xiàn)。通常許多行業(yè)經(jīng)營管理的貨物都有其分類和編碼標(biāo)

6、準(zhǔn)。4.進(jìn)庫單:應(yīng)該有進(jìn)庫日期、進(jìn)庫倉庫、進(jìn)庫貨物的數(shù)量和金額,不難知道,每個(gè)進(jìn)庫單可能進(jìn)庫多種貨物,因此應(yīng)使用進(jìn)庫貨物對(duì)象保存每個(gè)進(jìn)庫單的某個(gè)進(jìn)庫貨物信息,包括貨物編碼、名稱、數(shù)量和金額等。進(jìn)庫單可能還需要經(jīng)手人等屬性。5.出庫單:應(yīng)該有出庫日期、出庫倉庫、領(lǐng)料部門、出庫貨物的數(shù)量和金額,同樣應(yīng)使用出庫貨物對(duì)象保存某個(gè)出庫貨物的信息,包括貨物編碼、名稱、數(shù)量和金額等。出庫單也可能還需要有經(jīng)手人等屬性。6.庫存貨物:至少有存貨倉庫、貨物編號(hào)、貨物數(shù)量和貨物金額等屬性。下面考慮每個(gè)對(duì)象應(yīng)提供的服務(wù):1.對(duì)于倉庫、部門、貨物等對(duì)象,從完成系統(tǒng)功能角度看,沒有特別的服務(wù)需要提供,主要用于保存某些信息

7、。如果從實(shí)現(xiàn)角度看,它們也許需要提供一些簡單服務(wù),例如根據(jù)倉庫編號(hào)查找相應(yīng)名稱等,這些服務(wù)可在設(shè)計(jì)階段再仔細(xì)考慮。2.進(jìn)庫單:根據(jù)系統(tǒng)功能應(yīng)提供貨物進(jìn)庫、匯總每日貨物進(jìn)庫清單、匯總每月貨物進(jìn)庫總數(shù)等服務(wù)。3.出庫單:根據(jù)系統(tǒng)功能應(yīng)提供貨物出庫、匯總每日貨物出庫清單、匯總每月部門領(lǐng)料總數(shù)等服務(wù)。4.庫存貨物:至少應(yīng)提供取某種貨物當(dāng)前最新數(shù)量和金額,根據(jù)進(jìn)庫單或出庫單修改貨物當(dāng)前最新數(shù)量和金額等服務(wù)。至此已經(jīng)得到了整個(gè)系統(tǒng)的輪廓,但讀者肯定還會(huì)覺得有不少模糊之處。這主要是因?yàn)閷?duì)貨物進(jìn)庫以及貨物出庫這兩個(gè)功能還沒有作更進(jìn)一步的分析,在對(duì)這兩個(gè)關(guān)鍵的功能進(jìn)行分解后,就可以更加確定對(duì)象所應(yīng)提供的屬性和服

8、務(wù)。在分解這兩個(gè)功能前分析一下上述對(duì)象之間的關(guān)系很有用處,這使得我們對(duì)這些對(duì)象可有更深入的了解。因?yàn)榭紤]消息連接會(huì)涉及許多服務(wù)的實(shí)現(xiàn)細(xì)節(jié),所以消息連接在分解上述兩個(gè)關(guān)鍵功能后再考慮。這里先考慮對(duì)象間的繼承關(guān)系、聚合關(guān)系和實(shí)例連接。首先考慮繼承關(guān)系,最容易想到的繼承關(guān)系可能是,庫存貨物是否能繼承貨物類?另外進(jìn)庫貨物和出庫貨物是否也可繼承貨物類?而且不難發(fā)現(xiàn)進(jìn)庫單和出庫單有許多相同的屬性和行為,是否能為它們?cè)O(shè)置共同的基類,例如稱為“庫存單據(jù)”?其次考慮聚合關(guān)系,發(fā)現(xiàn)有進(jìn)庫貨物是進(jìn)庫單的部分類,出庫貨物是出庫單的部分類。最后考慮實(shí)例連接,可發(fā)現(xiàn)有如下實(shí)例連接:1.倉庫管理庫存貨物,每個(gè)倉庫管理多個(gè)庫

9、存貨物,而一種庫存貨物只由一個(gè)倉庫存放,因此這是一對(duì)多的關(guān)系。2.倉庫采購貨物進(jìn)庫,并產(chǎn)生進(jìn)庫單,每一次采購產(chǎn)生一個(gè)進(jìn)庫單,一個(gè)進(jìn)庫單有多種采購的進(jìn)庫貨物。3.部門從倉庫領(lǐng)料,并產(chǎn)生出庫單,多個(gè)部門從多個(gè)倉庫領(lǐng)料,但每一次領(lǐng)料產(chǎn)生一個(gè)出庫單,一個(gè)出庫單有多種出庫貨物。在深入思考這些對(duì)象類及其關(guān)系時(shí),讀者也許會(huì)感覺到有一個(gè)越來越突出的問題,就是上面初步確定的對(duì)象類到底代表該類的某個(gè)對(duì)象的類型,還是代表該類的所有對(duì)象的全體?例如,對(duì)于入庫單,到底指某具體的入庫單的抽象描述,還是所有入庫單的全體的抽象描述?我們認(rèn)為這是習(xí)慣用C+語言思考的開發(fā)人員在開發(fā)管理信息系統(tǒng)這類軟件時(shí)常常迷惑的問題。C+語言的

10、類就是對(duì)象的類型,從而容易產(chǎn)生這種誤解。我們認(rèn)為類傾向于是全體對(duì)象所具有的共同特性的抽象,而對(duì)象的類型更傾向于是單個(gè)對(duì)象的抽象。為分開這兩種不同的類,確定系統(tǒng)要實(shí)現(xiàn)的類包括:1.倉庫編碼表類STORAGE_LIST和倉庫類STORAGE:倉庫編碼表類用于模擬所有倉庫的全體,對(duì)具體的倉庫類對(duì)象進(jìn)行管理,包括增加、修改和刪除倉庫對(duì)象等。2.部門編碼表類DEPART_LIST和部門類DEPART。3.貨物編碼表類GOODS_LIST和貨物類GOODS。4.進(jìn)庫單清單類PURCHASE_BILL_LIST和進(jìn)庫單類PURCHASES_BILL,進(jìn)庫單清單類表示所有進(jìn)庫單的全體,這樣匯總每日貨物進(jìn)庫清單

11、、匯總每月貨物進(jìn)庫總數(shù)等行為應(yīng)屬于進(jìn)庫單清單類對(duì)象的行為,而不是某具體進(jìn)庫單的行為。同樣,進(jìn)庫貨物的全體為進(jìn)庫貨物清單類PURCHASE_GOOD_LIST,而某具體進(jìn)庫貨物為PURCHASE_GOOD.5.出庫單清單類SELL_BILL_LIST和出庫單類SELL_BILL,以及出庫貨物清單類SELL_GOOD_LIST和出庫貨物類SELL_GOOD。6.庫存貨物清單類STORAGE_GOOD_LIST和庫存貨物類STORAGE_GOOD。不難看出,在系統(tǒng)中代表所有對(duì)象全體的類象容器類,用于存放和管理其它對(duì)象,所以在實(shí)現(xiàn)時(shí)它們應(yīng)用數(shù)組或鏈表表示,或者若用數(shù)據(jù)庫存放則代表數(shù)據(jù)庫表本身的抽象,而

12、那些由具體對(duì)象抽象得到的類是數(shù)據(jù)庫表的記錄的抽象。但是否用數(shù)據(jù)庫實(shí)現(xiàn),現(xiàn)在還暫時(shí)不用考慮?,F(xiàn)在需進(jìn)一步分析上述類應(yīng)具有的屬性和行為,那些由具體對(duì)象的抽象得到的類,應(yīng)保存上述分析中得到的各種屬性,行為應(yīng)該主要是設(shè)置和返回這些屬性的值。而對(duì)于管理具體對(duì)象的類,其屬性應(yīng)是一個(gè)數(shù)組或者一個(gè)鏈表,行為則包括創(chuàng)建、修改、刪除和查找所管理的對(duì)象。當(dāng)然,這些類的更多行為還需在對(duì)進(jìn)庫和出庫功能的分解后才能確定。對(duì)于進(jìn)庫,其過程可分解如下:1.填寫進(jìn)庫單,包括進(jìn)庫日期、進(jìn)庫單編號(hào)、進(jìn)庫倉庫及進(jìn)庫貨物的數(shù)量、金額等;2.檢查進(jìn)庫單的正確性,例如進(jìn)庫倉庫的正確性、貨物編碼的正確性,數(shù)量和金額不能為零等。3.對(duì)進(jìn)庫單的

13、每種貨物,修改進(jìn)庫倉庫的庫存貨物的數(shù)量和金額。為更深入理解進(jìn)庫功能,使用Use Case交互圖描述該功能如下: Use Case 進(jìn)庫單清單類 進(jìn)庫單類 倉庫類 貨物類 庫存貨物類填寫進(jìn)庫單 創(chuàng)建進(jìn)庫單檢查進(jìn)庫單 讀取指定編號(hào)的倉庫信息FOR 進(jìn)庫單的每種貨物 DO檢查貨物信息的正確性 讀取指定編號(hào)的貨物信息ENDFORFOR 進(jìn)庫單的每種貨物 DO修改庫存貨物信息 修改庫存貨物信息ENDFOR注意:上圖只是簡單地說明進(jìn)庫時(shí)所要涉及的對(duì)象類,沒有詳細(xì)給出對(duì)象類之間的消息交互,至少進(jìn)庫單類、倉庫類、貨物類和庫存貨物類向進(jìn)庫單清單類發(fā)回的返回消息沒有標(biāo)記出來。實(shí)際管理時(shí),填寫進(jìn)庫單與審核進(jìn)庫單及修

14、改庫存貨物可能不是同時(shí)進(jìn)行,且往往由不同的經(jīng)手人員處理。因此應(yīng)將進(jìn)庫單劃分為兩種狀態(tài),一是進(jìn)庫前狀態(tài),一是進(jìn)庫后狀態(tài),進(jìn)庫前可進(jìn)行修改、刪除,進(jìn)庫后則真正修改了庫存貨物的信息,該進(jìn)庫單不能再被修改和刪除。如果發(fā)現(xiàn)已進(jìn)庫的進(jìn)庫單有錯(cuò),那么要更正這種錯(cuò)誤則十分麻煩,因?yàn)檫@不僅要重新修改庫存貨物信息,還要重新計(jì)算出庫單成本(即出庫金額)。實(shí)際管理時(shí)將填寫進(jìn)庫單與真正進(jìn)庫分開也就是為盡量減少這種錯(cuò)誤。因此進(jìn)庫單的狀態(tài)轉(zhuǎn)換關(guān)系是: 創(chuàng)建進(jìn)庫單 進(jìn)庫前 修改庫存貨物信息 進(jìn)庫后對(duì)于出庫,其過程可分解如下:1.填寫出庫單2.檢查出庫單的正確性3.根據(jù)出庫單中的每種貨物進(jìn)行出庫,這時(shí)要計(jì)算每種出庫貨物的出庫金

15、額對(duì)于第三步,還需作進(jìn)一步分解,這一步的分解與成本計(jì)算方法有關(guān),除教材介紹的先進(jìn)先出法外,還有移動(dòng)平均法(該方法用計(jì)算機(jī)最易處理)、后進(jìn)先出法等,每種方法得到的出庫金額都不一樣。這里根據(jù)題目要求,使用先進(jìn)先出法計(jì)算每一貨物的出庫金額:3.1檢查庫存貨物數(shù)量是否小于出庫貨物數(shù)量,如果小于,則出庫不成功!否則,3.2檢查庫存貨物數(shù)量是否等于出庫貨物數(shù)量,如果等于,則出庫金額等于庫存貨物金額(即貨物數(shù)量出完,金額也出完)。否則,3.3令已出庫貨物數(shù)量為零,已出庫貨物金額為零,下面稱出庫單中的出庫貨物數(shù)量為總出庫貨物數(shù)量。3.4做下面的步驟,直到已出庫貨物數(shù)量等于總出庫貨物數(shù)量:3.4.1查找進(jìn)庫時(shí)間

16、最早且有剩余數(shù)量的進(jìn)庫單3.4.2如果該進(jìn)庫單中的剩余數(shù)量小于或等于總出庫貨物數(shù)量減去已出庫貨物數(shù)量,則已出庫數(shù)量等于原先的已出庫數(shù)量加上該進(jìn)庫單的剩余數(shù)量,已出庫金額等于原先的已出庫金額加上該進(jìn)庫單的剩余金額,同時(shí)該進(jìn)庫單剩下的數(shù)量和金額置為零。否則,3.4.3令臨時(shí)數(shù)量等于總出庫貨物數(shù)量減去已出庫貨物數(shù)量,臨時(shí)單價(jià)等于該進(jìn)庫單的金額除以該進(jìn)庫單的數(shù)量,臨時(shí)金額等于臨時(shí)數(shù)量乘以臨時(shí)單價(jià),而已出庫金額等于原先的已出庫金額加上該臨時(shí)金額,已出庫貨物數(shù)量等于總出庫貨物數(shù)量。進(jìn)庫單的剩余數(shù)量為原來數(shù)量減去臨時(shí)數(shù)量,剩余金額為原先的金額減去臨時(shí)金額。3.5出庫單中的庫存金額置為剛才計(jì)算出來的已出庫貨物

17、金額。而且將庫存貨物數(shù)量置為原先的庫存貨物數(shù)量減去已出庫貨物數(shù)量,庫存貨物金額置為原先的庫存貨物金額減去已出庫貨物金額。實(shí)現(xiàn)上述算法的關(guān)鍵是能找到進(jìn)庫時(shí)間最早的沒有出完其數(shù)量的進(jìn)庫單,這要求進(jìn)庫單在邏輯上能按進(jìn)庫時(shí)間排序,并且要記錄每個(gè)進(jìn)庫單的剩余數(shù)量和金額。上述算法十分詳細(xì),這里不再使用Use Case和交互圖方法給出該功能的進(jìn)一步說明。出庫單也應(yīng)有兩種狀態(tài),即出庫前與出庫后兩種狀態(tài)。為進(jìn)一步明確各對(duì)象類的屬性和行為,現(xiàn)在重新考慮各對(duì)象類之間的關(guān)系,并進(jìn)一步考慮如何增加對(duì)象的屬性和行為以體現(xiàn)這種關(guān)系。對(duì)于繼承關(guān)系,可考慮為所有管理性質(zhì)的類抽象出一個(gè)基類,例如命名為數(shù)據(jù)表類DATA_LIST,

18、其主要行為與鏈表類或數(shù)組類相同,但也有與待開發(fā)系統(tǒng)密切相關(guān)的屬性和行為,例如若使用數(shù)據(jù)庫的話,那么該類應(yīng)負(fù)責(zé)完成與數(shù)據(jù)庫接口的公共功能,若使用文件系統(tǒng)的話,那么負(fù)責(zé)與文件系統(tǒng)的接口。設(shè)置類DATA_LIST后,就也應(yīng)為其所管理的的對(duì)象抽象出基類,這命名為數(shù)據(jù)記錄類DATA_RECORD。也可讓庫存貨物繼承貨物類,而讓進(jìn)庫貨物和出庫貨物再繼承庫存貨物類。庫存貨物和出庫貨物只比一般貨物增加數(shù)量和金額兩個(gè)屬性,進(jìn)庫貨物則除增加這兩個(gè)屬性外,還要增加剩余數(shù)量和剩余金額兩個(gè)屬性。提供的服務(wù)則主要用于設(shè)置和返回各屬性的值。我們認(rèn)為沒有必要增加庫存單據(jù)類作為進(jìn)庫單和出庫單的共同基類,其原因是,一是這兩種單據(jù)

19、包含不同貨物,為貨物設(shè)置的基類不適合作為庫存單據(jù)類所包含的貨物。二是進(jìn)庫單和出庫單類的屬性和行為都不復(fù)雜,增加共同基類所提供的代碼重用意義不大。聚合關(guān)系仍只存在于進(jìn)庫單與進(jìn)庫貨物,出庫單與出庫貨物之間。當(dāng)然也可認(rèn)為管理性質(zhì)的類與它所管理的類都具有聚合關(guān)系,但我們更傾向于將這種關(guān)系理解為利用關(guān)系。對(duì)于實(shí)例連接,考慮怎樣體現(xiàn)倉庫管理庫存貨物這個(gè)實(shí)例連接,這可在倉庫類中設(shè)置庫存貨物清單對(duì)象,用于代表該倉庫存放的貨物,也可在庫存貨物類使用所屬倉庫的屬性指明該貨物由哪個(gè)倉庫存放。后一種方法更簡單,因此這里采用后一種方法。對(duì)于倉庫采購貨物進(jìn)庫的實(shí)例連接,也采用進(jìn)庫單類中增加進(jìn)庫倉庫的屬性標(biāo)識(shí)該進(jìn)庫單所進(jìn)庫

20、的倉庫。對(duì)于部門從倉庫領(lǐng)料的實(shí)例連接,則在出庫單類中增加出庫倉庫以及領(lǐng)料部門的屬性。讀者可能發(fā)現(xiàn)這里已涉及了許多實(shí)現(xiàn)細(xì)節(jié)。實(shí)際上現(xiàn)在應(yīng)該已經(jīng)算進(jìn)入了設(shè)計(jì)階段。不過面向?qū)ο蠓椒ǖ姆治鲭A段和設(shè)計(jì)階段本來就沒有嚴(yán)格的界限。現(xiàn)在要決定的事情是用數(shù)據(jù)庫保存信息,還是用文件系統(tǒng)保存信息。如果用文件系統(tǒng)保存信息,就要設(shè)計(jì)文件系統(tǒng)的結(jié)構(gòu),顯然用數(shù)據(jù)庫比較簡單。這時(shí)需要設(shè)計(jì)數(shù)據(jù)庫,決定使用哪些數(shù)據(jù)庫,各數(shù)據(jù)庫使用哪些字段等。根據(jù)上述分析,再加上一點(diǎn)點(diǎn)數(shù)據(jù)庫設(shè)計(jì)知識(shí)(這些知識(shí)將在數(shù)據(jù)庫課程學(xué)到)就可設(shè)計(jì)本系統(tǒng)的數(shù)據(jù)庫,這里不再詳細(xì)給出數(shù)據(jù)庫的設(shè)計(jì)。在設(shè)計(jì)階段還要確定的事情是如何設(shè)計(jì)用戶界面。C+語言提供的輸入輸出

21、流的功能顯然不夠。一般來說,當(dāng)前流行的C+語言編程環(huán)境,如Visual C+或C+ Builder都會(huì)提供許多有關(guān)界面的類庫,實(shí)際開發(fā)軟件時(shí)要利用這些類庫。用戶界面的實(shí)現(xiàn)更多地依賴于編程環(huán)境所提供的類庫,但也有一些決策點(diǎn),需要在設(shè)計(jì)階段的早期確定,包括使用下拉菜單還是使用圖標(biāo),使用基于瀏覽器的界面,還是非瀏覽器界面等等。這里我們也不設(shè)計(jì)用戶界面。至此,需要實(shí)現(xiàn)的類包括:1.數(shù)據(jù)表類DATA_LIST,用于提供管理性質(zhì)類的共同基類;2.數(shù)據(jù)記錄類DATA_RECORD,用于提供被管理的對(duì)象的共同基類;3.倉庫編碼表類STORAGE_LIST,管理所有倉庫信息;4.倉庫類STORAGE,具體倉庫信

22、息的抽象;5.部門編碼表類DEPART_LIST,管理所有部門信息;6.部門類DEPART,具體部門的信息的抽象;7.貨物編碼表類GOODS_LIST,管理所有貨物的編碼;8.貨物類GOODS,具體貨物信息的抽象;9.進(jìn)庫單清單類PURCHASE_BILL_LIST,管理所有進(jìn)庫單;10.進(jìn)庫單類PURCHASE_BILL,具體進(jìn)庫單信息的抽象;11.進(jìn)庫貨物清單類PURCHASE_GOOD_LIST,管理某進(jìn)庫單的所有進(jìn)庫貨物;12.進(jìn)庫貨物類PURCHASE_GOOD,進(jìn)庫單的某具體進(jìn)庫貨物信息的抽象;13.出庫單清單類SELL_BILL_LIST,管理所有出庫單;14.出庫單類SELL_

23、BILL,具體出庫單信息的抽象;15.出庫貨物清單類SELL_GOOD_LIST,管理某出庫單的所有出庫貨物;16.出庫貨物類SELL_GOOD,出庫單的某具體出庫貨物信息的抽象;17.庫存貨物清單類STORAGE_GOOD_LIST,管理所有庫存貨物;18.庫存貨物類STORAGE_GOOD,具體庫存貨物信息的抽象。根據(jù)上述分析,下面使用C+語言給出每個(gè)類的主要數(shù)據(jù)成員和成員函數(shù),當(dāng)然這些類界面在實(shí)現(xiàn)時(shí)可能還要作進(jìn)一步的細(xì)化和修改。/ 數(shù)據(jù)記錄類DATA_RECORD,用于提供被管理的對(duì)象的共同基類class DATA_RECORD public:/ 使用數(shù)據(jù)庫存放對(duì)象的真正信息,這里的虛函

24、數(shù)load()用于從數(shù)據(jù)庫讀取當(dāng)前記錄(對(duì)象)/ 的信息。save()用于將當(dāng)前對(duì)象信息保存到數(shù)庫當(dāng)前記錄中。返回值表示操作是否成功。virtual int load() = 0;virtual int save() = 0;/ 使用與用戶界面有關(guān)的構(gòu)件,給出輸入對(duì)象信息的界面,并保存有關(guān)的信息。virtual int input() = 0;/ 使用與用戶界面有關(guān)的構(gòu)件,輸出一個(gè)對(duì)象的信息。virtual int output() = 0;/ 數(shù)據(jù)表類DATA_LIST,用于提供管理性質(zhì)類的共同基類class DATA_LIST public:DATA_LIST(char* base);/

25、參數(shù)base指定數(shù)據(jù)庫名稱。DATA_LIST();/ 增加一個(gè)對(duì)象。返回值用于表示操作是否成功。virtual int add(const DATA_RECORD& obj);/ 刪除一個(gè)對(duì)象,參數(shù)obj只包含該對(duì)象的關(guān)鍵碼屬性的值。后面的設(shè)計(jì)指出了每個(gè)/ 從DATA_RECORD類派生的類的關(guān)鍵碼屬性。返回值用于表示操作是否成功。virtual int remove(const DATA_RECORD& obj);/ 修改一個(gè)對(duì)象,參數(shù)old存放舊的對(duì)象的關(guān)鍵碼屬性的值,參數(shù)new_obj存放該對(duì)象的/ 新的屬性值。返回值用于表示操作是否成功。virtual int mod

26、ify(const DATA_RECORD& old, const DATA_RECORD& new_obj);/ 查找對(duì)象,參數(shù)obj給出所要查找的對(duì)象的關(guān)鍵碼屬性的值。返回值表示是否找到。virtual int locate(DATA_RECORD& obj);/ 返回第一個(gè)對(duì)象,返回值表示是否有第一個(gè)對(duì)象。virtual int get_first(DATA_RECORD& obj);/ 返回下一對(duì)象,返回值表示是否有下一對(duì)象。調(diào)用get_first()后,連續(xù)調(diào)用get_next()可得到/ 數(shù)據(jù)庫保存的所有對(duì)象。這兩個(gè)函數(shù)的實(shí)現(xiàn)依賴于數(shù)據(jù)庫的接口構(gòu)件,

27、例如數(shù)據(jù)庫一般提供/ 當(dāng)前記錄的概念。通常數(shù)據(jù)庫的接口構(gòu)件也會(huì)提供與這兩個(gè)函數(shù)類似的功能。virtual int get_next(DATA_RECORD& obj);protected:/ 數(shù)據(jù)表類用于完成與數(shù)據(jù)庫的接口(準(zhǔn)確地說是完成與數(shù)據(jù)庫接口構(gòu)件,如ODBC構(gòu)件的接/ 口),用以屏蔽數(shù)據(jù)存放方式。從其它類看來只需知道可通過設(shè)置關(guān)鍵碼屬性得到一個(gè)對(duì)象/ 的信息,或順序地可獲得所有對(duì)象的信息,至于這些對(duì)象信息的存儲(chǔ)、組織方式則完全不需/ 要關(guān)心。因此此類的屬性依賴于數(shù)據(jù)庫接口構(gòu)件,通常用于作為緩沖區(qū),存放從數(shù)據(jù)庫接口/ 構(gòu)件獲得的對(duì)象的有關(guān)信息。char* base_name;/

28、存放數(shù)據(jù)的數(shù)據(jù)庫名稱;/ 倉庫編碼表類STORAGE_LIST,管理所有倉庫信息class STORAGE_LIST: public DATA_LIST public:STORAGE_LIST(char* base);/ 必要時(shí)要重定義DATA_LIST的部分成員函數(shù)。/ 不難設(shè)想如何實(shí)現(xiàn)倉庫信息的管理。假定界面構(gòu)件能讓用戶發(fā)出插入倉庫的請(qǐng)求,在接收到/ 該請(qǐng)求時(shí),該構(gòu)件創(chuàng)建一個(gè)STORAGE對(duì)象,并調(diào)用其input()函數(shù)輸入STORAGE對(duì)象的信/ 息,然后調(diào)用STORAGE_LIST對(duì)象(這個(gè)對(duì)象應(yīng)早已創(chuàng)建)的add()函數(shù)將該STORAGE對(duì)/ 象增加到數(shù)據(jù)庫。修改和刪除倉庫對(duì)象的方法

29、類似。/ 因此為管理倉庫信息,要使用類STORAGE的對(duì)象保存某個(gè)倉庫的信息,并提供界面在必要/ 時(shí)輸入倉庫的信息。類STORAGE_LIST的對(duì)象負(fù)責(zé)與數(shù)據(jù)庫接口,對(duì)外屏蔽倉庫信息的存/ 儲(chǔ)方式。有關(guān)的界面構(gòu)件則與用戶進(jìn)行交互,并驅(qū)動(dòng)這兩個(gè)類完成插入、修改和刪除等管理/ 工作。這里與數(shù)據(jù)庫接口的構(gòu)件(考慮如何存儲(chǔ)信息)、與用戶交互的構(gòu)件(考慮如何得到/ 信息),以及所處理的信息本身的抽象這三個(gè)構(gòu)件分開,使得整個(gè)系統(tǒng)的結(jié)構(gòu)更為清晰。/ 其他信息,如貨物編碼、部門編碼等的管理(插入、修改和刪除等)類似,不再贅述。;/ 倉庫類STORAGE,具體倉庫信息的抽象class STORAGE: publ

30、ic DATA_RECORD public:STORAGE(char* code = NULL, char* name = NULL);STORAGE();/ 重定義在DATA_RECORD所定義的純虛函數(shù)virtual int load();virtual int save();virtual int input();virtual int output();/ 設(shè)置倉庫屬性的值void set_code(char* code);void set_name(char* name);/ 返回倉庫屬性的值char* get_code();char* get_name();protected:ch

31、ar* code;/ 倉庫編號(hào)char* name;/ 倉庫名稱/ 暫時(shí)只考慮這兩個(gè)屬性,因?yàn)槠渌膶傩詫?duì)于成本核算來說不是必需的。;/ 部門編碼表類DEPART_LIST,管理所有部門信息class DEPART_LIST: public DATA_LIST public:DEPART_LIST(char* base);/ 部門類DEPART,具體部門信息的抽象class DEPART: public DATA_RECORD public:DEPART(char* code = NULL, char* name = NULL);DEPART(); / 重定義在DATA_RECORD所定義的純

32、虛函數(shù)/ 設(shè)置部門屬性的值void set_code(char* code);void set_name(char* name);/ 返回部門屬性的值char* get_code();char* get_name();protected:char* code;/ 部門編號(hào)char* name;/ 部門名稱;/ 貨物編碼表類GOODS_LIST,管理所有貨物的編碼;class GOODS_LIST: public DATA_LIST public:GOODS_LIST(char* base);/ 貨物類GOODS,某個(gè)貨物的有關(guān)信息的抽象;class GOODS: public DATA_REC

33、ORD public:GOODS(char* code = NULL, char* name = NULL);GOODS(); / 重定義在DATA_RECORD所定義的純虛函數(shù)/ 設(shè)置貨物屬性的值void set_code(char* code);void set_name(char* name);void set_unit(char* unit);/ 返回貨物屬性的值char* get_code();char* get_name();char* get_unit();protected:char* code;/ 貨物編號(hào)char* name;/ 貨物名稱char* unit;/ 計(jì)量單位/

34、 實(shí)際系統(tǒng)中,貨物規(guī)格型號(hào)可能也是一個(gè)很重要的屬性,貨物編碼不可能編制得很細(xì)致,/ 同一編號(hào)、不同型號(hào)貨物的價(jià)格等可能大不相同。這里為簡單起見,暫不考慮貨物規(guī)格型號(hào)。;/ 進(jìn)庫單清單類PURCHASE_BILL_LIST,管理所有進(jìn)庫單class PURCHASE_BILL_LIST: public DATA_LIST public:PURCHASE_BILL_LIST(char* base);/ 將指定的進(jìn)庫單進(jìn)庫,其實(shí)現(xiàn)詳情請(qǐng)參見上面的分解int check_in_storage(const PURCHASE_BILL& bill);/ 返回指定日期范圍內(nèi)的所有進(jìn)庫單,可利用該服務(wù)

35、匯總每日進(jìn)庫清單int get_all_bills(char* start_date, char* end_date, PURCHASE_BILL_LIST* bills);/ 對(duì)指定日期范圍內(nèi)的進(jìn)庫單進(jìn)行匯總,返回進(jìn)庫貨物的總數(shù)和金額等int total_all_bills(char* start_date, char* end_date, GOODS_LIST* goods);/ 給定貨物,給出其剩余數(shù)量和金額大于零的最早進(jìn)庫單int get_the_pioneer(const GOODS& goods, PURCHASE_BILL& bill);/ 單據(jù)狀態(tài)enum ST

36、ATUS NO_CHECK,/ 該單據(jù)剛剛輸入,還沒有進(jìn)庫或者出庫CHECKED/ 該單據(jù)已經(jīng)進(jìn)庫或者出庫;/ 進(jìn)庫單類PURCHASES_BILL,具體進(jìn)庫單信息的抽象class PURCHASE_BILL: public DATA_RECORD public:PURCHASE_BILL();PURCHASE_BILL();/ 設(shè)置進(jìn)庫單各屬性的值int set_no(char* no);int set_date(char* date);int set_storage(char* storage);int set_good(PURCHASE_GOOD_LIST* good);int set_

37、status(STATUS status);/ 返回進(jìn)庫單各屬性的值char* get_no();char* get_date();char* get_storage();PURCHASE_GOOD_LIST* get_good();STATUS get_status();/ 查找是否有指定的貨物,如果有則返回其數(shù)量和金額,剩余金額和數(shù)量等信息int find(PURCHASE_GOOD& good);protected:char* no;/ 進(jìn)庫單編號(hào)char* date;/ 進(jìn)庫時(shí)間char* storage;/ 進(jìn)庫倉庫PURCHASE_GOOD_LIST* good_list;

38、/ 進(jìn)庫貨物STATUS status;/ 進(jìn)庫貨物清單類PURCHASE_GOOD_LIST,管理某進(jìn)庫單的所有進(jìn)庫貨物class PURCHASE_GOOD_LIST: public DATA_LIST public:PURCHASE_GOOD_LIST(char* base);/ 裝入指定進(jìn)庫單號(hào)的所有進(jìn)庫貨物的清單int load(char* bill_no);/ 查找是否有指定的貨物,如果有則返回其數(shù)量和金額,剩余金額和數(shù)量等信息int find(PURCHASE_GOOD& good);/ 進(jìn)庫貨物類PURCHASE_GOOD,進(jìn)庫單的具體進(jìn)庫貨物信息的抽象class PU

39、RCHASE_GOOD: public GOODS public:PURCHASE_GOOD();PURCHASE_GOOD();/ 返回進(jìn)庫貨物的各屬性double get_qty();double get_cost();double get_remain_qty();double get_remain_cost();/ 設(shè)置進(jìn)庫貨物的各屬性int set_qty(double qty);int set_cost(double cost);int set_remain_qty(double qty);int set_remain_cost(double cost);protected:dou

40、ble qty;/ 貨物數(shù)量double cost; / 貨物金額double remain_qty;/ 出庫后貨物剩余數(shù)量double remain_cost;/ 出庫后貨物剩余金額;/ 出庫單清單類SELL_BILL_LIST,管理所有的出庫單class SELL_BILL_LIST: public DATA_LIST public:SELL_BILL_LIST(char* base);/ 將指定的出庫單出庫,其實(shí)現(xiàn)詳情請(qǐng)參見上面的分解int check_out_storage(const SELL_BILL& bill);/ 返回指定日期范圍內(nèi)的指定部門的所有出庫單,可利用該服務(wù)

41、匯總每日出庫清單int get_all_bills(char* start_date, char* end_date, char* depart, SELL_BILL_LIST* bills);/ 對(duì)指定日期范圍內(nèi)的出庫單進(jìn)行匯總,返回出庫貨物的總數(shù)和金額等int total_all_bills(char* start_date, char* end_date, GOODS_LIST* goods);/ 出庫單類SELL_BILL,具體出庫單信息的抽象class SELL_BILL: public DATA_RECORD public:SELL_BILL();SELL_BILL();/ 設(shè)置出

42、庫單的各屬性的值int set_no(char* no);int set_date(char* date);int set_storage(char* storage);int set_depart(char* depart);int set_good(SELL_GOOD_LIST* good);int set_status(STATUS status);/ 返回出庫單的各屬性的值char* get_no();char* get_date();char* get_storage();char* get_depart();SELL_GOOD_LIST* get_good();STATUS get_status();/ 查找是否有指定的貨物,如果有則返回其數(shù)量和金額,剩余金額和數(shù)量等信息int find(PURCHASE_GOOD& good);protected:char* no;/ 出庫單編號(hào)char* date;/ 出庫時(shí)間char* storage;/ 出庫倉庫char* depart;/ 領(lǐng)料部門SELL_GOOD_LIST* good_list

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論