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

下載本文檔

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

文檔簡介

設計內容公司庫存管理系統之樊仲川億創作一、設計要求1.目的和要求(1)要求學生熟練掌握C++語言的基本知識和技能;(2)要求利用面向對象的方法以及C++的編程思想來完成系統的設計,在設計的過程中,建立清晰的類條理;;(3)基本掌握面向對象程序設計的基本思路和方法;(4)在系統中定義類,每個類中要有各自的屬性和方法;(5)在系統的設計中,至少要用到面向對象的一種機制。(6)能夠利用所學的基本知識和技能,解決簡單的面向對象程序設計問題。(7)寫出設計說明書2.設計內容1、問題描述(功能要求):某公司現有以下設備:普通電視機、DVD、帶DVD的電視機,帶DVD的電視機的售價為普通電視機和DVD單價之和的80%,要求對所有的庫存設備都能依照品名進行顯示、查找、入庫和出庫、保管的功能。普通電視機有下列屬性:尺寸、類型(液晶或等離子)、售價、重量、品牌、入庫數量、入庫編號DVD有下列屬性:規格(高清、藍光高清、普通)、售價、重量、品牌、入庫數量、入庫編號帶DVD的電視機是上兩者的派生類,但請注意有些屬性的重復問題。要求生成的相關庫存數據結果以文件方式存放在硬盤中,或用鏈表、數組來進行管理。2、問題的解決方案:根據系統功能要求,可以將問題解決分為以下步調:(1)寫出需求分析(做什么),建立該系統的功能模塊框圖;(2)分析系統中的各個實體之間的關系及其屬性和行為;(3)根據問題描述,設計系統的類條理;(4)完成類條理中各個類的描述(包含屬性和方法);(5)完成類中各個成員函數的定義;(6)完成系統的應用模塊;(7)功能調試;(8)完成系統總結陳述以及系統使用說明書。3.設計環境Windows操縱系統、VC++6.0、C++語言4.個人承擔任務主要負責系統的顯示、查找、入庫、出庫主要功能實現和系統封裝。二、系統需求分析公司庫存管理系統程序中,系統要求我們設計四個類:一個基礎類Device由Device類派生出來的普通電視機類和DVD類;再由普通電視機類和DVD類共同派生出來的帶DVD的普通電視機類。在這個系統中我們需要實現主要的五個功能:1、顯示物品功能;2、查找物品功能;3、入庫物品功能;4、出庫物品功能;5、保管物品功能。公司庫存管理系統主要是為了讓用戶根據自己的需要自己想輸入的一些物品,然后將其保管,當用戶想檢查所有物品時可以檢查,想添加物品時可以添加自己想添加的相關物品信息;當用戶根據實際物品的庫存調整時,可以進行出入庫操縱,而且記錄每一次的出入庫的時間和數量,以便日后檢查;當用戶想查找某一物品時,用戶可以輸入這一物品的名稱或入庫編碼,然后搜索并檢查這一物品的所有信息。在這個系統中,用戶可以根據系統的提示分別執行用戶自己想實現的功能,比方:在顯示物品功能中用戶可以檢查用戶所保管的所有物品信息;在查找物品功能中用戶可以根據自己的需要輸入自己想查找的物品名稱或入庫編碼,然后查找用戶想查找的物品的所有相關信息;在出、入庫物品功能中用戶可以根據自己的需要輸入自己想要出、入庫的物品名稱或入庫編碼,然后進行出、入庫操縱;在物品保管功能中,凡是用戶每對庫存系統內部的信息進行一

次操縱,系統就會自動保管并記錄相關信息。三、程序設計思路1、系統功能模塊圖:從系統的需求中我們可以看到:該系統要對產品進行顯示、查找、入庫、出庫和保管功能。這就意味著這個系統需要一個show函數(通過cout將數據顯示在屏幕上)來實現顯示功能,而其他各個功能需要分歧的模塊來實現,也就意味著這個系統需要五個分歧的功能模塊。派生1、顯示物品信息、耳2、派生1、顯示物品信息、耳2、派生查找物品信廿一2、公司庫存管理系統中各功能模塊的實現:a.顯示物品模塊:a.顯示物品模塊:在輸入好庫存信息后,庫存信息就會被保管到“庫存清單。txt”文本中,然后根據菜單顯示選擇“1、顯示物品信息”,就會直接調用文本文件中的所有信息并加以顯示。b.查找物品信息:c.或者設備名稱來查找名需要入庫的具體設備。如果該設備存在于庫存當中,則輸c.或者設備名稱來查找名需要入庫的具體設備。如果該設備存在于庫存當中,則輸入入庫數量,提示入庫成功;如果倉庫中沒有該種設備,則提示“對不起,沒有找到該庫存物品。”入庫成功后,該物品庫存數量增加,庫存記錄增加。如圖:d.出庫物品信息:出庫物品信息和入庫物品信息操縱原理一樣,顯示相同;只不過一個增加一個減少,在此就不再贅述。e/保管效果:3、具體程序代碼書寫思路:因為用的C++編程語言和環境,所以針對于面向對象的程序書寫理念。我將程序模塊化,把類的實現進行了封裝,運用創建一個工程的方式把程序做的更為具體和清晰。在關鍵地方,在程序后面做有注釋,便于其他人閱讀和分析。四、總結本公司庫存管理系統很好的實現了“顯示、查找、入庫、出庫、保管”的主要功能,較為完美的實現了本次程序設計的主要要求。除此之外,我還在程序中增加了一定的糾錯能力,比方當出庫數量大于現有庫存是會提示“庫存缺乏,請重新輸入”的提示,直到用戶輸入正確的數值為止。而且,在用戶對于菜單的屬于操縱出現失誤時,系統也會根據具體情況進行相應的提示,防止了死循環的出現,方便了用戶的操縱、增加了系統的健壯性。對于程序的書寫,可以說這個程序的封裝以及模塊化結構做的很好,主程序很簡單,需要運用函數的時候直接調用相應部分即可。這對于程序書寫時的修改、校正也極為方便,防止了“牽一發而動全身”的麻煩。我覺得這種模塊化的思想應該繼續堅持,運用到今后的程序設計當中,既防止了主程序過于繁雜的麻煩,也為其他人的閱讀、分析和今后的程序改良提供了方便。在程序應用中,菜單選項僅是對于現有庫存的各種操縱和處理,但并沒有提供外部接口讓用戶主動添加其它的物品信息。對于此,我們特意增加了文本修改功能,可以從后臺的地方增加或刪減現有庫存信息。彌補了庫存不成變動的缺陷。也體現了,重要信息需要掌握在公司內部人員手中,而不克不及隨意進行修改的理念。五、調試及其測試(調試出現的主要問題,編譯語法錯誤及修改,重點是運行邏輯問題修改和調整)由于本次設計用到了類,而類中有受呵護的對像和私有對象,他們都不成以在類外使用。于是使得下邊一些數據不克不及使用。最后我只能將數據全改成公有數據。這樣也讓繼承的時候不會出現問題。本次程序幾經修改才做到了現在這個樣子,起初是一個長達700多行的程序,沒有運用封裝和工程,顯得程序比較冗長。但是有個嚴重的問題就是每次程序重新啟動的時候上次錄入的信息和記錄就全部清零,必須重新錄入才可以進行出、入庫處理,這樣就使程序喪失了實用性,所以針對這個問題我特意書寫的錄入代碼,讓程序可以在一開始運行的時候就把庫存清單里的信息先讀入系統,然后再在這個基礎上進行添加刪除等操縱,這樣才干真正做到一個實用的系統。因為系統要求必須把庫存的信息保管到文本文件,這個操縱我們課上只做了簡單的介紹,而且憑借現有的知識還有所欠缺,我在查閱了大量資料和請教他人之后才逐步搞懂了這個環節。由此經過修改寫出了第二個程序,能夠調用文本文件而且可以進行復雜操縱的程序。除此之外,一開始我保管和顯示庫存信息的文件方式也有所欠缺,沒有做到空間的合理利用,經過老師的點撥和修改后,我設立了“string”字符串,讓所有信息以字符串的形式顯示和保管,并控制了每一個字段的長度,這樣在現實的時候就顯得十分美觀,也便于讀取和觀察。之后,我又在這個程序的基礎上,進行了進一步的延伸。因為程序要求必須把每一個庫存信息都要儲存,為了防止重復與欠好記錄的方面,我只好把添加信息的菜單隱藏,放于后臺處理。對于用戶界面只對現有庫存信息進行顯示、查找、入庫、出庫的操縱。如果想要添加信息,那就得在“”的這個文件里直接進行輸入。這樣修改的好處在于,我可以把信息做的系統化,而且能夠記錄每一次的出、入庫記錄,并加以顯示。最后,我將四個類封裝處理,設立工程,程序模塊化設計,真正的體現了一個c++程序設計的思想。六、用戶手冊1、顯示菜單在這里輸入“1、2、3、4、5”進行菜單操縱,每一步都會有系統字樣提示,根據提示進行信息錄入即可。如果錄入錯誤,系統會有自動提示,重新錄入正確信息即可。2、顯示信息。在主菜單中直接輸入數字1,進行菜單顯示,因為顯示信息較多,所以最好調整一下顯示框大小,防止出現顯示錯位的現象。顯示后,根據菜單提示輸入“1”返回主菜單,輸入“2”退出程序。(以下相同,不再提示)3、查找物品信息在主菜單中直接輸入數字2,進行物品查找,在查找選項中可以通過入庫編碼和設備名稱兩樣分別進行查找。查找后,顯示該物品的詳細信息而且顯示近期來針對于本物品的出、入庫信息。4、出、入庫物品信息在主菜單中直接輸入數字3或4,進行物品出、入庫。選擇物品出、入庫后,系統會自動把所有庫存信息進行顯示,讓用戶可以看到能夠入庫的設備名稱和入庫編碼,然后進行選擇。首先要選擇進行出、入庫的設備,之后按提示輸入出、入庫的數量。(注:在出庫時,如果出庫數量大于現有庫存就會提示“庫存缺乏”)。等到屏幕顯示“入(出)庫成功!”時,物品入(出)庫成功。5、退出程序在主菜單中直接輸入數字5,退出程序。七、附錄:(程序源代碼)Device類#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<string>usingnamespacestd;classDevice{public:boolmask[11];〃定義字段是否應該被屏蔽(true:字段無效,false:字段有效)void*fs; //指向全局fileSystem對象的指針stringstrCategory;//設備分類:1-普通電視機,2-DVD,3-DVD電視機stringstrName; //貨物名稱stringstrDate; //日期//stringstrSize; //僅對TV有效,TV尺寸//stringstrType; //僅對TV有效,TV類型//stringstrCharactor; //僅對DVD有效,DVD規格string strWeight; //重量string strPrice; //價格string strBrand; //品牌intnTotal; //數量string strCode; //入庫編碼Device();virtual~Device();virtualvoidUpdate(intn)=0; //出入庫n臺設備的操縱,n>0:入庫;n<0:出庫virtualvoidShow()=0;//展示當前庫存和出入庫記錄};#include"stdafx.h"#include"Device.h"Device::Device(){}Device::~Device(){}DVD類#include"Device.h"classDVD:virtualpublicDevice{public:stringstrCharactor; //僅對DVD有效,規格DVD();virtual~DVD();voidUpdate(intn);//入庫n臺設備的操縱voidShow();//展示當前庫存和出入庫記錄};#include"stdafx.h"#include"DVD.h"#include"fileSystem.h"DVD::DVD(){strCategory="DVD";for(inti=0;i<FIELDNUM;i++){mask[i]=false;}mask[3]=true;mask[4]=true;}DVD::~DVD(){}voidDVD::Update(intn)//出入庫n臺設備的操縱{nTotal+=n;charbuf[BUFSIZE];if(n>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);}((fileSystem*)fs)->Save(buf);//進行物品記錄保管}voidDVD::Show()//展示當前庫存和出入庫記錄{//顯示當前庫存//顯示題目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//顯示全部數據stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]="NA";values[4]="NA";values[5]=strCharactor;for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//顯示出入庫記錄cout<<endl<<"出入庫記錄如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}3、TV類#include"Device.h"#include<cstring>#include<windows.h>#include<string>classTV:virtualpublicDevice{public:stringstrSize;//僅對TV有效,尺寸stringstrType;//僅對TV有效,類型TV();virtual~TV();voidUpdate(intn);//出入庫n臺設備的操縱,n>0:入庫;n<0:出庫voidShow();//展示當前庫存和出入庫記錄};#include"stdafx.h"#include"TV.h"#include"fileSystem.h"TV::TV(){strCategory="普通電視機";for(inti=0;i<FIELDNUM;i++){mask[i]=false;}mask[5]=true;}TV::~TV(){}voidTV::Update(intn)//出入庫n臺設備的操縱{nTotal+=n;charbuf[BUFSIZE];if(n>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);}((fileSystem*)fs)->Save(buf);}voidTV::Show()//展示當前庫存和出入庫記錄{//顯示當前庫存//顯示題目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//顯示全部數據stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]=strSize;values[4]=strType;values[5]="NA";for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//顯示出入庫記錄cout<<endl<<"出入庫記錄如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}4、TV_DVD類#include"DVD.h"#include"TV.h"classTV_DVD:virtualpublicTV{public:DVDinnerDvd;TV_DVD();virtual~TV_DVD();voidShow();//展示當前庫存和出入庫記錄};#include"stdafx.h"#include"TV_DVD.h"#include"fileSystem.h"TV_DVD::TV_DVD(){strCategory=""DVD電視機〃;for(inti=0;i<FIELDNUM;i++){mask[i]=false;}TV_DVD::~TV_DVD(){}voidTV_DVD::Show()//展示當前庫存和出入庫記錄{//顯示當前庫存//顯示題目行for(inti=0;i<FIELDNUM;i++){if(mask[i]){continue;}cout<<((fileSystem*)fs)->strTitles[i];}cout<<endl;//顯示全部數據stringvalues[FIELDNUM];chartotal[BUFSIZE];values[0]=strCategory;values[1]=strName;values[2]=strDate;values[6]=strPrice;values[7]=strWeight;values[8]=strBrand;sprintf(total,"%d",nTotal);values[9]=total;values[10]=strCode;values[3]=strSize;values[4]=strType;values[5]=innerDvd.strCharactor;for(intii=0;ii<FIELDNUM;ii++){if(mask[ii]){continue;}for(intj=values[ii].size();j<COL_WIDTH;j++){values[ii].append("");}cout<<values[ii];}cout<<endl;//顯示出入庫記錄cout<<endl<<"出入庫記錄如下:"<<endl;((fileSystem*)fs)->ShowLog(strName);}5、fileSystem函數#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<string>usingnamespacestd;defineFIELDNUM11 //庫存數據文件的字段數量defineBUFSIZE100//庫存數據文件的每行最大字數defineCOL_WIDTH12//用于顯示的列寬defineMAXDEVICE20 //系統最大允許設備數量#include"Device.h"#include"TV.h"#include"DVD.h"#include"TV_DVD.h"#include"time.h"#include"stdio.h"classfileSystem{public:voidShowLog(stringstrName);voidSave(stringstrMsg);voidShow();stringstrTitles[FIELDNUM];voidInitAllDevices();void*devs[MAXDEVICE];intdevsCategory[MAXDEVICE];//設備分類:1-普通電視機,2-DVD3-DVD電視機intnDevs; //庫存設備個數stringstrKCFileName; //庫存數據文件名stringstrLogFileName; //出入庫日志文件名fileSystem();virtual~fileSystem();private:voidrelease();stringstrValues[FIELDNUM];};#include"stdafx.h"#include"fileSystem.h"usingnamespacestd;fileSystem::fileSystem(){strKCFileName="庫存清單.txt”;strLogFileName="出入庫日志.txt”;nDevs=0;InitAllDevices();//Show();//Save("save");//ShowLog(〃A型電視機〃);//((DVD*)devs[5])->Update(-5);//((TV*)devs[5])->Show();}fileSystem::~fileSystem(){release();}voidfileSystem::InitAllDevices(){release();ifstreamin(strKCFileName.c_str());//第一行是字段題目for(inti=0;i<FIELDNUM;i++){in>>strTitles[i];for(intj=strTitles[i].size();j<COL_WIDTH;j++){strTitles[i].append(〃〃);}//cout<<strTitles[i];}//cout<<endl;//讀取全部庫存記錄nDevs=0;boolbRead=true;while(bRead){for(inti=0;i<FIELDNUM;i++){in>>strValues[i];if(strValues[i].size()==0){bRead=false;break;}//cout<<strValues[i];}if(!bRead){break;}if(strValues[5]==〃NA〃){//createTVclassTV*tvTemp=newTV();devs[nDevs]=tvTemp;tvTemp->strName=strValues[1];tvTemp->strDate=strValues[2];tvTemp->strSize=strValues[3];tvTemp->strType=strValues[4];tvTemp->strPrice=strValues[6];tvTemp->strWeight=strValues[7];tvTemp->strBrand=strValues[8];tvTemp->nTotal=atoi(strValues[9].c_str());tvTemp->strCode=strValues[10];devsCategory[nDevs]=1;tvTemp->f

溫馨提示

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

評論

0/150

提交評論