公司庫存管理系統C++_第1頁
公司庫存管理系統C++_第2頁
公司庫存管理系統C++_第3頁
公司庫存管理系統C++_第4頁
公司庫存管理系統C++_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、設計內容 公司庫存管理系統一、設計要求1目的和要求(1)要求學生熟練掌握c+語言的基本知識和技能; (2)要求利用面向對象的方法以及c+的編程思想來完成系統的設計,在設計的過程中,建立清晰的類層次; (3)基本掌握面向對象程序設計的基本思路和方法; (4)在系統中定義類,每個類中要有各自的屬性和方法; (5)在系統的設計中,至少要用到面向對象的一種機制。 (6)能夠利用所學的基本知識和技能,解決簡單的面向對象程序設計問題。 (7)寫出設計說明書2設計內容1、問題描述(功能要求): 某公司現有以下設備:普通電視機、dvd、帶dvd的電視機,帶dvd的電視機的售價為普通電視機和dvd單價之和的80

2、%,要求對所有的庫存設備都能按照品名進行顯示、查找、入庫和出庫、保存的功能。普通電視機有下列屬性:尺寸、類型(液晶或等離子) 、售價、重量、品牌、入庫數量、入庫編號dvd有下列屬性:規(guī)格(高清、藍光高清、普通)、售價、重量、品牌、入庫數量、入庫編號帶dvd的電視機是上兩者的派生類,但請注意有些屬性的重復問題。要求生成的相關庫存數據結果以文件方式存放在硬盤中,或用鏈表、數組來進行管理。2、問題的解決方案: 根據系統功能要求,可以將問題解決分為以下步驟: (1)寫出需求分析(做什么),建立該系統的功能模塊框圖;(2)分析系統中的各個實體之間的關系及其屬性和行為; (3)根據問題描述,設計系統的類層

3、次; (4)完成類層次中各個類的描述(包括屬性和方法); (5)完成類中各個成員函數的定義; (6)完成系統的應用模塊; (7)功能調試; (8)完成系統總結報告以及系統使用說明書。3設計環(huán)境windows操作系統、vc+6.0、c語言4個人承擔任務主要負責系統的顯示、查找、入庫、出庫主要功能實現和系統封裝。二、系統需求分析公司庫存管理系統程序中,系統要求我們設計四個類:一個基礎類device,由device類派生出來的普通電視機類和dvd類;再由普通電視機類和dvd類共同派生出來的帶dvd的普通電視機類。在這個系統中我們需要實現主要的五個功能:1、顯示物品功能;2、查找物品功能;3、入庫物品

4、功能;4、出庫物品功能;5、保存物品功能。公司庫存管理系統主要是為了讓用戶根據自己的需要自己想輸入的一些物品,然后將其保存,當用戶想查看所有物品時可以查看,想添加物品時可以添加自己想添加的相關物品信息;當用戶根據實際物品的庫存調整時,可以進行出入庫操作,并且記錄每一次的出入庫的時間和數量,以便日后查看;當用戶想查找某一物品時,用戶可以輸入這一物品的名稱或入庫編碼,然后搜索并查看這一物品的所有信息。在這個系統中,用戶可以根據系統的提示分別執(zhí)行用戶自己想實現的功能,比如:在顯示物品功能中用戶可以查看用戶所保存的所有物品信息;在查找物品功能中用戶可以根據自己的需要輸入自己想查找的物品名稱或入庫編碼,

5、然后查找用戶想查找的物品的所有相關信息;在出、入庫物品功能中用戶可以根據自己的需要輸入自己想要出、入庫的物品名稱或入庫編碼,然后進行出、入庫操作;在物品保存功能中,凡是用戶每對庫存系統內部的信息進行一次操作,系統就會自動保存并記錄相關信息。三、程序設計思路1、系統功能模塊圖: 從系統的需求中我們可以看到:該系統要對產品進行顯示、查找、入庫、出庫和保存功能。這就意味著這個系統需要一個show函數(通過cout將數據顯示在屏幕上)來實現顯示功能,而其他各個功能需要不同的模塊來實現,也就意味著這個系統需要五個不同的功能模塊。菜單1、顯示物品信息2、查找物品信息3、入庫物品信息4、出庫物品信息5、退出

6、系統 派生派生2、公司庫存管理系統中各功能模塊的實現: a. 顯示物品模塊: 在輸入好庫存信息后,庫存信息就會被保存到“庫存清單。txt”文本中,然后根據菜單顯示選擇“1、顯示物品信息”,就會直接調用文本文件中的所有信息并加以顯示。b.查找物品信息:查找物品信息查找類型查找名稱顯示物品信息顯示物品出、入庫記錄c.入庫物品信息:選擇“3、入庫物品信息”后,首先刷屏顯示現有庫存信息的全部內容,方便用戶觀察需要入庫的產品信息和具體庫存數量。之后,可以根據選擇入庫編碼或者設備名稱來查找需要入庫的具體設備。如果該設備存在于庫存當中,則輸入入庫數量,提示入庫成功;如果倉庫中沒有該種設備,則提示“對不起,沒

7、有找到該庫存物品?!比霂斐晒?,該物品庫存數量增加,庫存記錄增加。如圖:d.出庫物品信息:出庫物品信息和入庫物品信息操作原理一樣,顯示相同;只不過一個增加一個減少,在此就不再贅述。e.保存效果:3、具體程序代碼書寫思路:因為用的c+編程語言和環(huán)境,所以針對于面向對象的程序書寫理念。我將程序模塊化,把類的實現進行了封裝,運用創(chuàng)建一個工程的方式把程序做的更為具體和清晰。在關鍵地方,在程序后面做有注釋,便于其他人閱讀和分析。四、總結本公司庫存管理系統很好的實現了“顯示、查找、入庫、出庫、保存”的主要功能,較為完美的實現了本次程序設計的主要要求。除此之外,我還在程序中增加了一定的糾錯能力,比如當出庫數

8、量大于現有庫存是會提示“庫存不足,請重新輸入”的提示,直到用戶輸入正確的數值為止。而且,在用戶對于菜單的屬于操作出現失誤時,系統也會根據具體情況進行相應的提示,避免了死循環(huán)的出現,方便了用戶的操作、增加了系統的健壯性。對于程序的書寫,可以說這個程序的封裝以及模塊化結構做的很好,主程序很簡單,需要運用函數的時候直接調用相應部分即可。這對于程序書寫時的修改、校正也極為方便,避免了“牽一發(fā)而動全身”的麻煩。我覺得這種模塊化的思想應該繼續(xù)保持,運用到今后的程序設計當中,既避免了主程序過于繁雜的麻煩,也為其他人的閱讀、分析和今后的程序改良提供了方便。在程序應用中,菜單選項僅是對于現有庫存的各種操作和處理

9、,但并沒有提供外部接口讓用戶主動添加其它的物品信息。對于此,我們特意增加了文本修改功能,可以從后臺的地方增加或刪減現有庫存信息。彌補了庫存不可變動的缺陷。也體現了,重要信息需要掌握在公司內部人員手中,而不能隨意進行修改的理念。五、調試及其測試(調試出現的主要問題,編譯語法錯誤及修改,重點是運行邏輯問題修改和調整)1、 由于本次設計用到了類,而類中有受保護的對像和私有對象,他們都不可以在類外使用。于是使得下邊一些數據不能使用。最后我只能將數據全改成公有數據。這樣也讓繼承的時候不會出現問題。2、 本次程序幾經修改才做到了現在這個樣子,起初是一個長達700多行的程序,沒有運用封裝和工程,顯得程序比較

10、冗長。但是有個嚴重的問題就是每次程序重新啟動的時候上次錄入的信息和記錄就全部清零,必須重新錄入才可以進行出、入庫處理,這樣就使程序喪失了實用性,所以針對這個問題我特意書寫的錄入代碼,讓程序可以在一開始運行的時候就把庫存清單里的信息先讀入系統,然后再在這個基礎上進行添加刪除等操作,這樣才能真正做到一個實用的系統。3、 因為系統要求必須把庫存的信息保存到文本文件,這個操作我們課上只做了簡單的介紹,而且憑借現有的知識還有所欠缺,我在查閱了大量資料和請教他人之后才逐步搞懂了這個環(huán)節(jié)。由此經過修改寫出了第二個程序,能夠調用文本文件并且可以進行復雜操作的程序。4、 除此之外,一開始我保存和顯示庫存信息的文

11、件方式也有所欠缺,沒有做到空間的合理利用,經過老師的點撥和修改后,我設立了“string”字符串,讓所有信息以字符串的形式顯示和保存,并控制了每一個字段的長度,這樣在現實的時候就顯得十分美觀,也便于讀取和觀察。5、 之后,我又在這個程序的基礎上,進行了進一步的延伸。因為程序要求必須把每一個庫存信息都要儲存,為了避免重復與不好記錄的方面,我只好把添加信息的菜單隱藏,放于后臺處理。對于用戶界面只對現有庫存信息進行顯示、查找、入庫、出庫的操作。如果想要添加信息,那就得在“庫存菜單.txt”的這個文件里直接進行輸入。這樣修改的好處在于,我可以把信息做的系統化,并且能夠記錄每一次的出、入庫記錄,并加以顯

12、示。6、 最后,我將四個類封裝處理,設立工程,程序模塊化設計,真正的體現了一個c+程序設計的思想。六、用戶手冊1、顯示菜單 在這里輸入“1、2、3、4、5”進行菜單操作,每一步都會有系統字樣提示,根據提示進行信息錄入即可。如果錄入錯誤,系統會有自動提示,重新錄入正確信息即可。2、顯示信息。 在主菜單中直接輸入數字1,進行菜單顯示,因為顯示信息較多,所以最好調整一下顯示框大小,避免出現顯示錯位的現象。 顯示后,根據菜單提示輸入“1”返回主菜單,輸入“2”退出程序。(以下相同,不再提示)3、查找物品信息在主菜單中直接輸入數字2,進行物品查找,在查找選項中可以通過入庫編碼和設備名稱兩樣分別進行查找。

13、 查找后,顯示該物品的詳細信息并且顯示近期來針對于本物品的出、入庫信息。4、出、入庫物品信息在主菜單中直接輸入數字3或4,進行物品出、入庫。選擇物品出、入庫后,系統會自動把所有庫存信息進行顯示,讓用戶可以看到能夠入庫的設備名稱和入庫編碼,然后進行選擇。首先要選擇進行出、入庫的設備,之后按提示輸入出、入庫的數量。(注:在出庫時,如果出庫數量大于現有庫存就會提示“庫存不足”)。等到屏幕顯示“入(出)庫成功!”時,物品入(出)庫成功。5、退出程序在主菜單中直接輸入數字5,退出程序。七、附錄: (程序源代碼)1、device類#include#include#include#include#inclu

14、deusing namespace std;class device public:bool mask11;/定義字段是否應該被屏蔽(true:字段無效,false:字段有效)void *fs;/指向全局filesystem對象的指針string strcategory; /設備分類:1-普通電視機, 2-dvd, 3-dvd電視機string strname; /貨物名稱string strdate; /日期/string strsize;/僅對tv有效,tv尺寸/string strtype;/僅對tv有效,tv類型/string strcharactor;/僅對dvd有效,dvd規(guī)格st

15、ring strweight; /重量string strprice; /價格string strbrand; /品牌int ntotal; /數量 string strcode; /入庫編碼device();virtual device();virtual void update(int n) = 0;/ 出入庫n臺設備的操作,n0:入庫;n0:出庫virtual void show() = 0;/ 展示當前庫存和出入庫記錄;#include stdafx.h#include device.hdevice:device()device:device()2、dvd類#include devic

16、e.hclass dvd : virtual public device public:string strcharactor;/僅對dvd有效,規(guī)格dvd();virtual dvd();void update(int n);/ 入庫n臺設備的操作void show();/ 展示當前庫存和出入庫記錄;#include stdafx.h#include dvd.h#include filesystem.hdvd:dvd()strcategory = dvd;for (int i = 0; i 0) sprintf(buf, %s (%s) 入庫 %d 臺。 , strname.c_str(),

17、 strcategory.c_str(), n); else sprintf(buf, %s (%s) 出庫 %d 臺。 , strname.c_str(), strcategory.c_str(), -n);(filesystem *)fs)-save(buf);/進行物品記錄保存void dvd:show()/ 展示當前庫存和出入庫記錄/顯示當前庫存/顯示標題行for(int i = 0; i fieldnum; i +)if (maski) continue;cout strtitlesi;cout endl;/顯示全部數據string valuesfieldnum;char total

18、bufsize;values0 = strcategory;values1 = strname;values2 = strdate;values6 = strprice;values7 = strweight;values8 = strbrand;sprintf(total, %d, ntotal);values9 = total;values10 = strcode;values3 = na;values4 = na;values5 = strcharactor;for(int ii = 0; ii fieldnum; ii +)if (maskii) continue;for(int j

19、= valuesii.size(); j col_width; j +) valuesii.append( );cout valuesii;cout endl;/顯示出入庫記錄cout endl 出入庫記錄如下: showlog(strname);3、tv類#include device.h#include#include#includeclass tv : virtual public device public:string strsize;/僅對tv有效, 尺寸string strtype;/僅對tv有效,類型tv();virtual tv();void update(int n);/

20、出入庫n臺設備的操作,n0:入庫;n0:出庫void show();/ 展示當前庫存和出入庫記錄;#include stdafx.h#include tv.h#include filesystem.htv:tv()strcategory = 普通電視機;for (int i = 0; i 0) sprintf(buf, %s (%s) 入庫 %d 臺。 , strname.c_str(), strcategory.c_str(), n); else sprintf(buf, %s (%s) 出庫 %d 臺。 , strname.c_str(), strcategory.c_str(), -n)

21、;(filesystem *)fs)-save(buf);void tv:show()/ 展示當前庫存和出入庫記錄/顯示當前庫存/顯示標題行for(int i = 0; i fieldnum; i +)if (maski) continue;cout strtitlesi;cout endl;/顯示全部數據string valuesfieldnum;char totalbufsize;values0 = strcategory;values1 = strname;values2 = strdate;values6 = strprice;values7 = strweight;values8 =

22、 strbrand;sprintf(total, %d, ntotal);values9 = total;values10 = strcode;values3 = strsize;values4 = strtype;values5 = na;for(int ii = 0; ii fieldnum; ii +)if (maskii) continue;for(int j = valuesii.size(); j col_width; j +) valuesii.append( );cout valuesii;cout endl;/顯示出入庫記錄cout endl 出入庫記錄如下: showlog

23、(strname);4、tv_dvd類#include dvd.h#include tv.hclass tv_dvd : virtual public tvpublic:dvd innerdvd;tv_dvd();virtual tv_dvd();void show();/ 展示當前庫存和出入庫記錄;#include stdafx.h#include tv_dvd.h#include filesystem.htv_dvd:tv_dvd()strcategory = dvd電視機;for (int i = 0; i fieldnum; i +)maski = false;tv_dvd:tv_dv

24、d()void tv_dvd:show()/ 展示當前庫存和出入庫記錄/顯示當前庫存/顯示標題行for(int i = 0; i fieldnum; i +)if (maski) continue;cout strtitlesi;cout endl;/顯示全部數據string valuesfieldnum;char totalbufsize;values0 = strcategory;values1 = strname;values2 = strdate;values6 = strprice;values7 = strweight;values8 = strbrand;sprintf(tota

25、l, %d, ntotal);values9 = total;values10 = strcode;values3 = strsize;values4 = strtype;values5 = innerdvd.strcharactor;for(int ii = 0; ii fieldnum; ii +)if (maskii) continue;for(int j = valuesii.size(); j col_width; j +) valuesii.append( );cout valuesii;cout endl;/顯示出入庫記錄cout endl 出入庫記錄如下: showlog(st

26、rname);5、filesystem函數#include#include#include#include#includeusing namespace std;#define fieldnum11/庫存數據文件的字段數量#define bufsize100/庫存數據文件的每行最大字數#define col_width 12 /用于顯示的列寬#define maxdevice20/系統最大允許設備數量#include device.h#include tv.h#include dvd.h#include tv_dvd.h#include time.h#include stdio.hclass

27、filesystem public:void showlog(string strname);void save(string strmsg);void show();string strtitlesfieldnum;void initalldevices();void * devsmaxdevice;int devscategorymaxdevice;/設備分類:1-普通電視機, 2-dvd, 3-dvd電視機int ndevs;/庫存設備個數string strkcfilename;/庫存數據文件名string strlogfilename;/出入庫日志文件名filesystem();vi

28、rtual filesystem();private:void release();string strvaluesfieldnum;#include stdafx.h#include filesystem.husing namespace std;filesystem:filesystem()strkcfilename = 庫存清單.txt;strlogfilename = 出入庫日志.txt;ndevs = 0;initalldevices();/show();/save(save);/showlog(a型電視機);/(dvd *)devs5)-update(-5);/(tv *)devs

29、5)-show();filesystem:filesystem()release();void filesystem:initalldevices()release();ifstream in(strkcfilename.c_str();/ 第一行是字段標題for (int i = 0; i strtitlesi;for(int j = strtitlesi.size(); j col_width; j +) strtitlesi.append( );/cout strtitlesi;/cout endl;/ 讀取全部庫存記錄ndevs = 0; bool bread = true;while

30、 (bread) for (int i = 0; i strvaluesi;if (strvaluesi.size() = 0) bread = false;break;/cout strname = strvalues1;tvtemp-strdate = strvalues2;tvtemp-strsize = strvalues3;tvtemp-strtype = strvalues4;tvtemp-strprice = strvalues6;tvtemp-strweight = strvalues7;tvtemp-strbrand = strvalues8;tvtemp-ntotal =

31、atoi(strvalues9.c_str();tvtemp-strcode = strvalues10;devscategoryndevs = 1;tvtemp-fs = this; else if (strvalues3 = na) / create dvd classdvd *dvdtemp = new dvd();devsndevs = dvdtemp;dvdtemp-strname = strvalues1;dvdtemp-strdate = strvalues2;dvdtemp-strcharactor = strvalues5;dvdtemp-strprice = strvalu

32、es6;dvdtemp-strweight = strvalues7;dvdtemp-strbrand = strvalues8;dvdtemp-ntotal = atoi(strvalues9.c_str();dvdtemp-strcode = strvalues10;devscategoryndevs = 2;dvdtemp-fs = this; else / create tv_dvd classtv_dvd *tdtemp = new tv_dvd();devsndevs = tdtemp;tdtemp-strname = strvalues1;tdtemp-strdate = str

33、values2;tdtemp-strsize = strvalues3;tdtemp-strtype = strvalues4;tdtemp-strprice = strvalues6;tdtemp-strweight = strvalues7;tdtemp-strbrand = strvalues8;tdtemp-ntotal = atoi(strvalues9.c_str();tdtemp-strcode = strvalues10;tdtemp-innerdvd.strcharactor = strvalues5;devscategoryndevs = 3;tdtemp-fs = thi

34、s;/cout endl;ndevs +;in.close();/show();void filesystem:release()for (int i = 0; i ndevs; i +) delete(devsi);devsi = 0;devscategoryi = 0;ndevs = 0;void filesystem:show()/顯示標題行for(int i = 0; i fieldnum; i +)cout strtitlesi;cout endl;/顯示全部數據for (int n = 0; n strcategory;values1 = (tv *)devsn)-strname;

35、values2 = (tv *)devsn)-strdate;values6 = (tv *)devsn)-strprice;values7 = (tv *)devsn)-strweight;values8 = (tv *)devsn)-strbrand;sprintf(total, %d, (tv *)devsn)-ntotal);values9 = total;values10 = (tv *)devsn)-strcode;values3 = (tv *)devsn)-strsize;values4 = (tv *)devsn)-strtype;values5 = na;break;cas

36、e 2:values0 = (dvd *)devsn)-strcategory;values1 = (dvd *)devsn)-strname;values2 = (dvd *)devsn)-strdate;values6 = (dvd *)devsn)-strprice;values7 = (dvd *)devsn)-strweight;values8 = (dvd *)devsn)-strbrand;sprintf(total, %d, (dvd *)devsn)-ntotal);values9 = total;values10 = (dvd *)devsn)-strcode;values

37、3 = na;values4 = na;values5 = (dvd *)devsn)-strcharactor;break;case 3:values0 = (tv_dvd *)devsn)-strcategory;values1 = (tv_dvd *)devsn)-strname;values2 = (tv_dvd *)devsn)-strdate;values6 = (tv_dvd *)devsn)-strprice;values7 = (tv_dvd *)devsn)-strweight;values8 = (tv_dvd *)devsn)-strbrand;sprintf(tota

38、l, %d, (tv_dvd *)devsn)-ntotal);values9 = total;values10 = (tv_dvd *)devsn)-strcode;values3 = (tv_dvd *)devsn)-strsize;values4 = (tv_dvd *)devsn)-strtype;values5 = (tv_dvd *)devsn)-innerdvd.strcharactor;break;default:break;for(int i = 0; i fieldnum; i +)for(int j = valuesi.size(); j col_width; j +)

39、valuesi.append( );cout valuesi;cout endl;void filesystem:save(string strmsg)/將全部庫存數據更新至文件ofstream out(strkcfilename.c_str() );/顯示標題行for(int i = 0; i fieldnum; i +)for(int j = strtitlesi.size(); j col_width; j +) strtitlesi.append( );out strtitlesi;out endl;/顯示全部數據for (int n = 0; n strcategory;values

40、1 = (tv *)devsn)-strname;values2 = (tv *)devsn)-strdate;values6 = (tv *)devsn)-strprice;values7 = (tv *)devsn)-strweight;values8 = (tv *)devsn)-strbrand;sprintf(total, %d, (tv *)devsn)-ntotal);values9 = total;values10 = (tv *)devsn)-strcode;values3 = (tv *)devsn)-strsize;values4 = (tv *)devsn)-strty

41、pe;values5 = na;break;case 2:values0 = (dvd *)devsn)-strcategory;values1 = (dvd *)devsn)-strname;values2 = (dvd *)devsn)-strdate;values6 = (dvd *)devsn)-strprice;values7 = (dvd *)devsn)-strweight;values8 = (dvd *)devsn)-strbrand;sprintf(total, %d, (dvd *)devsn)-ntotal);values9 = total;values10 = (dv

42、d *)devsn)-strcode;values3 = na;values4 = na;values5 = (dvd *)devsn)-strcharactor;break;case 3:values0 = (tv_dvd *)devsn)-strcategory;values1 = (tv_dvd *)devsn)-strname;values2 = (tv_dvd *)devsn)-strdate;values6 = (tv_dvd *)devsn)-strprice;values7 = (tv_dvd *)devsn)-strweight;values8 = (tv_dvd *)dev

43、sn)-strbrand;sprintf(total, %d, (tv_dvd *)devsn)-ntotal);values9 = total;values10 = (tv_dvd *)devsn)-strcode;values3 = (tv_dvd *)devsn)-strsize;values4 = (tv_dvd *)devsn)-strtype;values5 = (tv_dvd *)devsn)-innerdvd.strcharactor;break;default:break;for(int i = 0; i fieldnum; i +)for(int j = valuesi.size(); j col_width; j +) valuesi.append( );out valuesi;out endl;out.close();/增加一條出入庫記錄ifstream log(strlogfilename.c_str

溫馨提示

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

評論

0/150

提交評論