版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、設(shè)計(jì)內(nèi)容 公司庫(kù)存管理系統(tǒng)一、設(shè)計(jì)要求1目的和要求(1)要求學(xué)生熟練掌握C+語(yǔ)言的基本知識(shí)和技能; (2)要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來(lái)完成系統(tǒng)的設(shè)計(jì),在設(shè)計(jì)的過(guò)程中,建立清晰的類(lèi)層次; (3)基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; (4)在系統(tǒng)中定義類(lèi),每個(gè)類(lèi)中要有各自的屬性和方法; (5)在系統(tǒng)的設(shè)計(jì)中,至少要用到面向?qū)ο蟮囊环N機(jī)制。 (6)能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問(wèn)題。 (7)寫(xiě)出設(shè)計(jì)說(shuō)明書(shū)2設(shè)計(jì)內(nèi)容1、問(wèn)題描述(功能要求): 某公司現(xiàn)有以下設(shè)備:普通電視機(jī)、DVD、帶DVD的電視機(jī),帶DVD的電視機(jī)的售價(jià)為普通電視機(jī)和DVD單價(jià)之和的80
2、%,要求對(duì)所有的庫(kù)存設(shè)備都能按照品名進(jìn)行顯示、查找、入庫(kù)和出庫(kù)、保存的功能。普通電視機(jī)有下列屬性:尺寸、類(lèi)型(液晶或等離子) 、售價(jià)、重量、品牌、入庫(kù)數(shù)量、入庫(kù)編號(hào)DVD有下列屬性:規(guī)格(高清、藍(lán)光高清、普通)、售價(jià)、重量、品牌、入庫(kù)數(shù)量、入庫(kù)編號(hào)帶DVD的電視機(jī)是上兩者的派生類(lèi),但請(qǐng)注意有些屬性的重復(fù)問(wèn)題。要求生成的相關(guān)庫(kù)存數(shù)據(jù)結(jié)果以文件方式存放在硬盤(pán)中,或用鏈表、數(shù)組來(lái)進(jìn)行管理。2、問(wèn)題的解決方案: 根據(jù)系統(tǒng)功能要求,可以將問(wèn)題解決分為以下步驟: (1)寫(xiě)出需求分析(做什么),建立該系統(tǒng)的功能模塊框圖;(2)分析系統(tǒng)中的各個(gè)實(shí)體之間的關(guān)系及其屬性和行為; (3)根據(jù)問(wèn)題描述,設(shè)計(jì)系統(tǒng)的類(lèi)層
3、次; (4)完成類(lèi)層次中各個(gè)類(lèi)的描述(包括屬性和方法); (5)完成類(lèi)中各個(gè)成員函數(shù)的定義; (6)完成系統(tǒng)的應(yīng)用模塊; (7)功能調(diào)試; (8)完成系統(tǒng)總結(jié)報(bào)告以及系統(tǒng)使用說(shuō)明書(shū)。3設(shè)計(jì)環(huán)境Windows操作系統(tǒng)、VC+6.0、C語(yǔ)言4個(gè)人承擔(dān)任務(wù)主要負(fù)責(zé)系統(tǒng)的顯示、查找、入庫(kù)、出庫(kù)主要功能實(shí)現(xiàn)和系統(tǒng)封裝。二、系統(tǒng)需求分析公司庫(kù)存管理系統(tǒng)程序中,系統(tǒng)要求我們?cè)O(shè)計(jì)四個(gè)類(lèi):一個(gè)基礎(chǔ)類(lèi)Device,由Device類(lèi)派生出來(lái)的普通電視機(jī)類(lèi)和DVD類(lèi);再由普通電視機(jī)類(lèi)和DVD類(lèi)共同派生出來(lái)的帶DVD的普通電視機(jī)類(lèi)。在這個(gè)系統(tǒng)中我們需要實(shí)現(xiàn)主要的五個(gè)功能:1、顯示物品功能;2、查找物品功能;3、入庫(kù)物品
4、功能;4、出庫(kù)物品功能;5、保存物品功能。公司庫(kù)存管理系統(tǒng)主要是為了讓用戶根據(jù)自己的需要自己想輸入的一些物品,然后將其保存,當(dāng)用戶想查看所有物品時(shí)可以查看,想添加物品時(shí)可以添加自己想添加的相關(guān)物品信息;當(dāng)用戶根據(jù)實(shí)際物品的庫(kù)存調(diào)整時(shí),可以進(jìn)行出入庫(kù)操作,并且記錄每一次的出入庫(kù)的時(shí)間和數(shù)量,以便日后查看;當(dāng)用戶想查找某一物品時(shí),用戶可以輸入這一物品的名稱(chēng)或入庫(kù)編碼,然后搜索并查看這一物品的所有信息。在這個(gè)系統(tǒng)中,用戶可以根據(jù)系統(tǒng)的提示分別執(zhí)行用戶自己想實(shí)現(xiàn)的功能,比如:在顯示物品功能中用戶可以查看用戶所保存的所有物品信息;在查找物品功能中用戶可以根據(jù)自己的需要輸入自己想查找的物品名稱(chēng)或入庫(kù)編碼,
5、然后查找用戶想查找的物品的所有相關(guān)信息;在出、入庫(kù)物品功能中用戶可以根據(jù)自己的需要輸入自己想要出、入庫(kù)的物品名稱(chēng)或入庫(kù)編碼,然后進(jìn)行出、入庫(kù)操作;在物品保存功能中,凡是用戶每對(duì)庫(kù)存系統(tǒng)內(nèi)部的信息進(jìn)行一次操作,系統(tǒng)就會(huì)自動(dòng)保存并記錄相關(guān)信息。三、程序設(shè)計(jì)思路1、系統(tǒng)功能模塊圖:從系統(tǒng)的需求中我們可以看到:該系統(tǒng)要對(duì)產(chǎn)品進(jìn)行顯示、查找、入庫(kù)、出庫(kù)和保存功能。這就意味著這個(gè)系統(tǒng)需要一個(gè)show函數(shù)(通過(guò)cout將數(shù)據(jù)顯示在屏幕上)來(lái)實(shí)現(xiàn)顯示功能,而其他各個(gè)功能需要不同的模塊來(lái)實(shí)現(xiàn),也就意味著這個(gè)系統(tǒng)需要五個(gè)不同的功能模塊。菜單1、顯示物品信息2、查找物品信息3、入庫(kù)物品信息4、出庫(kù)物品信息5、退出系
6、統(tǒng)派生派生2、公司庫(kù)存管理系統(tǒng)中各功能模塊的實(shí)現(xiàn): a. 顯示物品模塊:在輸入好庫(kù)存信息后,庫(kù)存信息就會(huì)被保存到“庫(kù)存清單。txt”文本中,然后根據(jù)菜單顯示選擇“1、顯示物品信息”,就會(huì)直接調(diào)用文本文件中的所有信息并加以顯示。b.查找物品信息:查找物品信息查找類(lèi)型查找名稱(chēng)顯示物品信息顯示物品出、入庫(kù)記錄c.入庫(kù)物品信息:選擇“3、入庫(kù)物品信息”后,首先刷屏顯示現(xiàn)有庫(kù)存信息的全部?jī)?nèi)容,方便用戶觀察需要入庫(kù)的產(chǎn)品信息和具體庫(kù)存數(shù)量。之后,可以根據(jù)選擇入庫(kù)編碼或者設(shè)備名稱(chēng)來(lái)查找需要入庫(kù)的具體設(shè)備。如果該設(shè)備存在于庫(kù)存當(dāng)中,則輸入入庫(kù)數(shù)量,提示入庫(kù)成功;如果倉(cāng)庫(kù)中沒(méi)有該種設(shè)備,則提示“對(duì)不起,沒(méi)有找到
7、該庫(kù)存物品?!比霂?kù)成功后,該物品庫(kù)存數(shù)量增加,庫(kù)存記錄增加。如圖:d.出庫(kù)物品信息:出庫(kù)物品信息和入庫(kù)物品信息操作原理一樣,顯示相同;只不過(guò)一個(gè)增加一個(gè)減少,在此就不再贅述。e.保存效果:3、具體程序代碼書(shū)寫(xiě)思路:因?yàn)橛玫腸+編程語(yǔ)言和環(huán)境,所以針對(duì)于面向?qū)ο蟮某绦驎?shū)寫(xiě)理念。我將程序模塊化,把類(lèi)的實(shí)現(xiàn)進(jìn)行了封裝,運(yùn)用創(chuàng)建一個(gè)工程的方式把程序做的更為具體和清晰。在關(guān)鍵地方,在程序后面做有注釋?zhuān)阌谄渌碎喿x和分析。四、總結(jié)本公司庫(kù)存管理系統(tǒng)很好的實(shí)現(xiàn)了“顯示、查找、入庫(kù)、出庫(kù)、保存”的主要功能,較為完美的實(shí)現(xiàn)了本次程序設(shè)計(jì)的主要要求。除此之外,我還在程序中增加了一定的糾錯(cuò)能力,比如當(dāng)出庫(kù)數(shù)量大于
8、現(xiàn)有庫(kù)存是會(huì)提示“庫(kù)存不足,請(qǐng)重新輸入”的提示,直到用戶輸入正確的數(shù)值為止。而且,在用戶對(duì)于菜單的屬于操作出現(xiàn)失誤時(shí),系統(tǒng)也會(huì)根據(jù)具體情況進(jìn)行相應(yīng)的提示,避免了死循環(huán)的出現(xiàn),方便了用戶的操作、增加了系統(tǒng)的健壯性。對(duì)于程序的書(shū)寫(xiě),可以說(shuō)這個(gè)程序的封裝以及模塊化結(jié)構(gòu)做的很好,主程序很簡(jiǎn)單,需要運(yùn)用函數(shù)的時(shí)候直接調(diào)用相應(yīng)部分即可。這對(duì)于程序書(shū)寫(xiě)時(shí)的修改、校正也極為方便,避免了“牽一發(fā)而動(dòng)全身”的麻煩。我覺(jué)得這種模塊化的思想應(yīng)該繼續(xù)保持,運(yùn)用到今后的程序設(shè)計(jì)當(dāng)中,既避免了主程序過(guò)于繁雜的麻煩,也為其他人的閱讀、分析和今后的程序改良提供了方便。在程序應(yīng)用中,菜單選項(xiàng)僅是對(duì)于現(xiàn)有庫(kù)存的各種操作和處理,但并
9、沒(méi)有提供外部接口讓用戶主動(dòng)添加其它的物品信息。對(duì)于此,我們特意增加了文本修改功能,可以從后臺(tái)的地方增加或刪減現(xiàn)有庫(kù)存信息。彌補(bǔ)了庫(kù)存不可變動(dòng)的缺陷。也體現(xiàn)了,重要信息需要掌握在公司內(nèi)部人員手中,而不能隨意進(jìn)行修改的理念。五、調(diào)試及其測(cè)試(調(diào)試出現(xiàn)的主要問(wèn)題,編譯語(yǔ)法錯(cuò)誤及修改,重點(diǎn)是運(yùn)行邏輯問(wèn)題修改和調(diào)整)1、 由于本次設(shè)計(jì)用到了類(lèi),而類(lèi)中有受保護(hù)的對(duì)像和私有對(duì)象,他們都不可以在類(lèi)外使用。于是使得下邊一些數(shù)據(jù)不能使用。最后我只能將數(shù)據(jù)全改成公有數(shù)據(jù)。這樣也讓繼承的時(shí)候不會(huì)出現(xiàn)問(wèn)題。2、 本次程序幾經(jīng)修改才做到了現(xiàn)在這個(gè)樣子,起初是一個(gè)長(zhǎng)達(dá)700多行的程序,沒(méi)有運(yùn)用封裝和工程,顯得程序比較冗長(zhǎng)。
10、但是有個(gè)嚴(yán)重的問(wèn)題就是每次程序重新啟動(dòng)的時(shí)候上次錄入的信息和記錄就全部清零,必須重新錄入才可以進(jìn)行出、入庫(kù)處理,這樣就使程序喪失了實(shí)用性,所以針對(duì)這個(gè)問(wèn)題我特意書(shū)寫(xiě)的錄入代碼,讓程序可以在一開(kāi)始運(yùn)行的時(shí)候就把庫(kù)存清單里的信息先讀入系統(tǒng),然后再在這個(gè)基礎(chǔ)上進(jìn)行添加刪除等操作,這樣才能真正做到一個(gè)實(shí)用的系統(tǒng)。3、 因?yàn)橄到y(tǒng)要求必須把庫(kù)存的信息保存到文本文件,這個(gè)操作我們課上只做了簡(jiǎn)單的介紹,而且憑借現(xiàn)有的知識(shí)還有所欠缺,我在查閱了大量資料和請(qǐng)教他人之后才逐步搞懂了這個(gè)環(huán)節(jié)。由此經(jīng)過(guò)修改寫(xiě)出了第二個(gè)程序,能夠調(diào)用文本文件并且可以進(jìn)行復(fù)雜操作的程序。4、 除此之外,一開(kāi)始我保存和顯示庫(kù)存信息的文件方式
11、也有所欠缺,沒(méi)有做到空間的合理利用,經(jīng)過(guò)老師的點(diǎn)撥和修改后,我設(shè)立了“string”字符串,讓所有信息以字符串的形式顯示和保存,并控制了每一個(gè)字段的長(zhǎng)度,這樣在現(xiàn)實(shí)的時(shí)候就顯得十分美觀,也便于讀取和觀察。5、 之后,我又在這個(gè)程序的基礎(chǔ)上,進(jìn)行了進(jìn)一步的延伸。因?yàn)槌绦蛞蟊仨毎衙恳粋€(gè)庫(kù)存信息都要儲(chǔ)存,為了避免重復(fù)與不好記錄的方面,我只好把添加信息的菜單隱藏,放于后臺(tái)處理。對(duì)于用戶界面只對(duì)現(xiàn)有庫(kù)存信息進(jìn)行顯示、查找、入庫(kù)、出庫(kù)的操作。如果想要添加信息,那就得在“庫(kù)存菜單.txt”的這個(gè)文件里直接進(jìn)行輸入。這樣修改的好處在于,我可以把信息做的系統(tǒng)化,并且能夠記錄每一次的出、入庫(kù)記錄,并加以顯示。6
12、、 最后,我將四個(gè)類(lèi)封裝處理,設(shè)立工程,程序模塊化設(shè)計(jì),真正的體現(xiàn)了一個(gè)c+程序設(shè)計(jì)的思想。六、用戶手冊(cè)1、顯示菜單在這里輸入“1、2、3、4、5”進(jìn)行菜單操作,每一步都會(huì)有系統(tǒng)字樣提示,根據(jù)提示進(jìn)行信息錄入即可。如果錄入錯(cuò)誤,系統(tǒng)會(huì)有自動(dòng)提示,重新錄入正確信息即可。2、顯示信息。 在主菜單中直接輸入數(shù)字1,進(jìn)行菜單顯示,因?yàn)轱@示信息較多,所以最好調(diào)整一下顯示框大小,避免出現(xiàn)顯示錯(cuò)位的現(xiàn)象。 顯示后,根據(jù)菜單提示輸入“1”返回主菜單,輸入“2”退出程序。(以下相同,不再提示)3、查找物品信息在主菜單中直接輸入數(shù)字2,進(jìn)行物品查找,在查找選項(xiàng)中可以通過(guò)入庫(kù)編碼和設(shè)備名稱(chēng)兩樣分別進(jìn)行查找。查找后,
13、顯示該物品的詳細(xì)信息并且顯示近期來(lái)針對(duì)于本物品的出、入庫(kù)信息。4、出、入庫(kù)物品信息在主菜單中直接輸入數(shù)字3或4,進(jìn)行物品出、入庫(kù)。選擇物品出、入庫(kù)后,系統(tǒng)會(huì)自動(dòng)把所有庫(kù)存信息進(jìn)行顯示,讓用戶可以看到能夠入庫(kù)的設(shè)備名稱(chēng)和入庫(kù)編碼,然后進(jìn)行選擇。首先要選擇進(jìn)行出、入庫(kù)的設(shè)備,之后按提示輸入出、入庫(kù)的數(shù)量。(注:在出庫(kù)時(shí),如果出庫(kù)數(shù)量大于現(xiàn)有庫(kù)存就會(huì)提示“庫(kù)存不足”)。等到屏幕顯示“入(出)庫(kù)成功!”時(shí),物品入(出)庫(kù)成功。5、退出程序在主菜單中直接輸入數(shù)字5,退出程序。七、附錄: (程序源代碼)1、Device類(lèi)#include<iostream>#include<fstream
14、>#include<cstring>#include<windows.h>#include<string>using namespace std;class Device public:bool mask11;/定義字段是否應(yīng)該被屏蔽(true:字段無(wú)效,false:字段有效)void *fs;/指向全局fileSystem對(duì)象的指針string strCategory; /設(shè)備分類(lèi):1-普通電視機(jī), 2-DVD, 3-DVD電視機(jī)string strName; /貨物名稱(chēng)string strDate; /日期/string strSize;/僅對(duì)TV
15、有效,TV尺寸/string strType;/僅對(duì)TV有效,TV類(lèi)型/string strCharactor;/僅對(duì)DVD有效,DVD規(guī)格string strWeight; /重量string strPrice; /價(jià)格string strBrand; /品牌int nTotal; /數(shù)量 string strCode; /入庫(kù)編碼Device();virtual Device();virtual void Update(int n) = 0;/ 出入庫(kù)n臺(tái)設(shè)備的操作,n>0:入庫(kù);n<0:出庫(kù)virtual void Show() = 0;/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄;#inc
16、lude "stdafx.h"#include "Device.h"Device:Device()Device:Device()2、DVD類(lèi)#include "Device.h"class DVD : virtual public Device public:string strCharactor;/僅對(duì)DVD有效,規(guī)格DVD();virtual DVD();void Update(int n);/ 入庫(kù)n臺(tái)設(shè)備的操作void Show();/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄;#include "stdafx.h"#in
17、clude "DVD.h"#include "fileSystem.h"DVD:DVD()strCategory = "DVD"for (int i = 0; i < FIELDNUM; i +)maski = false;mask3 = true;mask4 = true;DVD:DVD()void DVD:Update(int n)/ 出入庫(kù)n臺(tái)設(shè)備的操作nTotal += n;char bufBUFSIZE;if (n > 0) sprintf(buf, "%s (%s) 入庫(kù) %d 臺(tái)。 ",
18、strName.c_str(), strCategory.c_str(), n); else sprintf(buf, "%s (%s) 出庫(kù) %d 臺(tái)。 ", strName.c_str(), strCategory.c_str(), -n);(fileSystem *)fs)->Save(buf);/進(jìn)行物品記錄保存void DVD:Show()/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄/顯示當(dāng)前庫(kù)存/顯示標(biāo)題行for(int i = 0; i < FIELDNUM; i +)if (maski) continue;cout << (fileSystem *)
19、fs)->strTitlesi;cout << endl;/顯示全部數(shù)據(jù)string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values10 = strCode;values3 = "NA"v
20、alues4 = "NA"values5 = 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;/顯示出入庫(kù)記錄cout << endl << "出入庫(kù)記錄如下:" << end
21、l;(fileSystem *)fs)->ShowLog(strName);3、TV類(lèi)#include "Device.h"#include<cstring>#include<windows.h>#include<string>class TV : virtual public Device public:string strSize;/僅對(duì)TV有效, 尺寸string strType;/僅對(duì)TV有效,類(lèi)型TV();virtual TV();void Update(int n);/ 出入庫(kù)n臺(tái)設(shè)備的操作,n>0:入庫(kù);n<
22、;0:出庫(kù)void Show();/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄;#include "stdafx.h"#include "TV.h"#include "fileSystem.h"TV:TV()strCategory = "普通電視機(jī)"for (int i = 0; i < FIELDNUM; i +)maski = false;mask5 = true;TV:TV()void TV:Update(int n)/ 出入庫(kù)n臺(tái)設(shè)備的操作nTotal += n;char bufBUFSIZE;if (n >
23、0) sprintf(buf, "%s (%s) 入庫(kù) %d 臺(tái)。 ", strName.c_str(), strCategory.c_str(), n); else sprintf(buf, "%s (%s) 出庫(kù) %d 臺(tái)。 ", strName.c_str(), strCategory.c_str(), -n);(fileSystem *)fs)->Save(buf);void TV:Show()/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄/顯示當(dāng)前庫(kù)存/顯示標(biāo)題行for(int i = 0; i < FIELDNUM; i +)if (maski)
24、continue;cout << (fileSystem *)fs)->strTitlesi;cout << endl;/顯示全部數(shù)據(jù)string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values1
25、0 = 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;/顯示出入庫(kù)記錄cout << endl << "出
26、入庫(kù)記錄如下:" << endl;(fileSystem *)fs)->ShowLog(strName);4、TV_DVD類(lèi)#include "DVD.h"#include "TV.h"class TV_DVD : virtual public TVpublic:DVD innerDvd;TV_DVD();virtual TV_DVD();void Show();/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄;#include "stdafx.h"#include "TV_DVD.h"#include &
27、quot;fileSystem.h"TV_DVD:TV_DVD()strCategory = "DVD電視機(jī)"for (int i = 0; i < FIELDNUM; i +)maski = false;TV_DVD:TV_DVD()void TV_DVD:Show()/ 展示當(dāng)前庫(kù)存和出入庫(kù)記錄/顯示當(dāng)前庫(kù)存/顯示標(biāo)題行for(int i = 0; i < FIELDNUM; i +)if (maski) continue;cout << (fileSystem *)fs)->strTitlesi;cout << en
28、dl;/顯示全部數(shù)據(jù)string valuesFIELDNUM;char totalBUFSIZE;values0 = strCategory;values1 = strName;values2 = strDate;values6 = strPrice;values7 = strWeight;values8 = strBrand;sprintf(total, "%d", nTotal);values9 = total;values10 = strCode;values3 = strSize;values4 = strType;values5 = innerDvd.strCh
29、aractor;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;/顯示出入庫(kù)記錄cout << endl << "出入庫(kù)記錄如下:" << endl;(fileSystem *)fs)->ShowLog(strNam
30、e);5、fileSystem函數(shù)#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<string>using namespace std;#define FIELDNUM11/庫(kù)存數(shù)據(jù)文件的字段數(shù)量#define BUFSIZE100/庫(kù)存數(shù)據(jù)文件的每行最大字?jǐn)?shù)#define COL_WIDTH 12 /用于顯示的列寬#define MAXDEVICE20/系統(tǒng)最大允許設(shè)備數(shù)量#include "Device.h&q
31、uot;#include "TV.h"#include "DVD.h"#include "TV_DVD.h"#include "time.h"#include "stdio.h"class fileSystem public:void ShowLog(string strName);void Save(string strMsg);void Show();string strTitlesFIELDNUM;void InitAllDevices();void * devsMAXDEVICE;int
32、 devsCategoryMAXDEVICE;/設(shè)備分類(lèi):1-普通電視機(jī), 2-DVD, 3-DVD電視機(jī)int nDevs;/庫(kù)存設(shè)備個(gè)數(shù)string strKCFileName;/庫(kù)存數(shù)據(jù)文件名string strLogFileName;/出入庫(kù)日志文件名fileSystem();virtual fileSystem();private:void release();string strValuesFIELDNUM;#include "stdafx.h"#include "fileSystem.h"using namespace std;fileSy
33、stem:fileSystem()strKCFileName = "庫(kù)存清單.txt"strLogFileName = "出入庫(kù)日志.txt"nDevs = 0;InitAllDevices();/Show();/Save("save");/ShowLog("A型電視機(jī)");/(DVD *)devs5)->Update(-5);/(TV *)devs5)->Show();fileSystem:fileSystem()release();void fileSystem:InitAllDevices()re
34、lease();ifstream in(strKCFileName.c_str();/ 第一行是字段標(biāo)題for (int i = 0; i < FIELDNUM; i +) in >> strTitlesi;for(int j = strTitlesi.size(); j < COL_WIDTH; j +) strTitlesi.append(" ");/cout << strTitlesi;/cout << endl;/ 讀取全部庫(kù)存記錄nDevs = 0; bool bRead = true;while (bRead) f
35、or (int i = 0; i < FIELDNUM; i +) in >> strValuesi;if (strValuesi.size() = 0) bRead = false;break;/cout << strValuesi;if (!bRead) break;if (strValues5 = "NA") / create TV classTV *tvTemp = new TV();devsnDevs = tvTemp;tvTemp->strName = strValues1;tvTemp->strDate = strVa
36、lues2;tvTemp->strSize = strValues3;tvTemp->strType = strValues4;tvTemp->strPrice = strValues6;tvTemp->strWeight = strValues7;tvTemp->strBrand = strValues8;tvTemp->nTotal = atoi(strValues9.c_str();tvTemp->strCode = strValues10;devsCategorynDevs = 1;tvTemp->fs = this; else if (
37、strValues3 = "NA") / create DVD classDVD *dvdTemp = new DVD();devsnDevs = dvdTemp;dvdTemp->strName = strValues1;dvdTemp->strDate = strValues2;dvdTemp->strCharactor = strValues5;dvdTemp->strPrice = strValues6;dvdTemp->strWeight = strValues7;dvdTemp->strBrand = strValues8;d
38、vdTemp->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 = strValues2;tdTemp->strSize = strValues3;tdTemp
39、->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 = this;/cout &l
40、t;< 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()/顯示標(biāo)題行for(int i = 0; i < FIELDNUM; i +)cout << strTitlesi;cout << endl;/顯示全部數(shù)據(jù)for (int n = 0; n < nDevs; n +)
41、 string valuesFIELDNUM;char totalBUFSIZE;switch (devsCategoryn) case 1: values0 = (TV *)devsn)->strCategory;values1 = (TV *)devsn)->strName;values2 = (TV *)devsn)->strDate;values6 = (TV *)devsn)->strPrice;values7 = (TV *)devsn)->strWeight;values8 = (TV *)devsn)->strBrand;sprintf(to
42、tal, "%d", (TV *)devsn)->nTotal);values9 = total;values10 = (TV *)devsn)->strCode;values3 = (TV *)devsn)->strSize;values4 = (TV *)devsn)->strType;values5 = "NA"break;case 2:values0 = (DVD *)devsn)->strCategory;values1 = (DVD *)devsn)->strName;values2 = (DVD *)de
43、vsn)->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;values3 = "NA"values4 = "NA"values5 = (DV
44、D *)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(total, &q
45、uot;%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 = va
46、luesi.size(); j < COL_WIDTH; j +) valuesi.append(" ");cout << valuesi;cout << endl;void fileSystem:Save(string strMsg)/將全部庫(kù)存數(shù)據(jù)更新至文件ofstream out(strKCFileName.c_str() );/顯示標(biāo)題行for(int i = 0; i < FIELDNUM; i +)for(int j = strTitlesi.size(); j < COL_WIDTH; j +) strTitlesi.
47、append(" ");out << strTitlesi;out << endl;/顯示全部數(shù)據(jù)for (int n = 0; n < nDevs; n +) string valuesFIELDNUM;char totalBUFSIZE;switch (devsCategoryn) case 1: values0 = (TV *)devsn)->strCategory;values1 = (TV *)devsn)->strName;values2 = (TV *)devsn)->strDate;values6 = (TV
48、*)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"bre
49、ak;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 =
50、 total;values10 = (DVD *)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)->st
51、rPrice;values7 = (TV_DVD *)devsn)->strWeight;values8 = (TV_DVD *)devsn)->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
52、*)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();/增加一條出入庫(kù)記錄ifstream log(strLogFileName.c_str(), ios:in | ios:out);ostream olog
53、(log.rdbuf();olog.seekp(0, ios:end);time_t t = time(0);char tmp64;strftime(tmp, sizeof(tmp), " %Y-%m-%d %H:%M:%S", localtime(&t);olog << strMsg << tmp << endl;log.close();/ 顯示指定名稱(chēng)設(shè)備的全部出入庫(kù)記錄void fileSystem:ShowLog(string strName)strName += " "ifstream in(strL
54、ogFileName.c_str();char bufBUFSIZE;char nameBUFSIZE;string strTemp = ""while (in.getline(buf, BUFSIZE) strncpy(name, buf, strName.size();namestrName.size() = 0;if (strName = name) cout << buf << endl;in.close();6、主函數(shù)#include "stdafx.h"#include<iostream>#include<fstream>#include<cstring>#include<windows.h>#include<stri
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村環(huán)境治理一體化設(shè)備實(shí)施方案
- 技術(shù)學(xué)院勞動(dòng)教育創(chuàng)新方案
- 工業(yè)廠房加固工程的最佳方案
- 農(nóng)村交通運(yùn)輸優(yōu)化方案
- 危重孕產(chǎn)婦康復(fù)護(hù)理方案
- 醫(yī)院與護(hù)理學(xué)校合作培訓(xùn)方案
- 門(mén)窗拆除施工方案的工期安排
- 醫(yī)療行業(yè)復(fù)工復(fù)產(chǎn)安全保障方案
- 酒店客房管理檔案建立與方案
- -鋼筋混凝土核芯筒專(zhuān)項(xiàng)方案
- 成人疝護(hù)理查房課件
- 東北林業(yè)大學(xué)電子電工學(xué)21-22年階段一考試試卷-答案
- 產(chǎn)品設(shè)計(jì)-淺談智能藍(lán)牙音響的外觀創(chuàng)新設(shè)計(jì)
- 2024屆重慶市永川區(qū)物理高一第一學(xué)期期中質(zhì)量檢測(cè)試題含解析
- 傳統(tǒng)節(jié)日文化在幼兒園課程中的應(yīng)用研究 論文
- 瀝青改色路面修補(bǔ)施工方案
- 香菇種植示范基地項(xiàng)目可行性策劃實(shí)施方案
- 混凝土硫酸鹽侵蝕基本機(jī)理研究
- 《機(jī)械設(shè)計(jì)基礎(chǔ)A》機(jī)械電子 教學(xué)大綱
- 水工巖石分級(jí)及圍巖分類(lèi)
- 斜井敷設(shè)電纜措施
評(píng)論
0/150
提交評(píng)論