




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《程序設(shè)計(jì)》2007.9
第17章文件處理
A文件中的數(shù)據(jù)層次、
?文件和流
?順序訪問(wèn)文件
?隨機(jī)訪問(wèn)文件
?實(shí)例:事務(wù)處理程序
?對(duì)象的輸入輸出
?小結(jié)
程序設(shè)計(jì)-1
《程序設(shè)計(jì)》2007.9
文件
?臨時(shí)數(shù)據(jù)
?存儲(chǔ)在變量利數(shù)組中的數(shù)據(jù)是臨時(shí)的(內(nèi)存),
這些數(shù)據(jù)在程序運(yùn)行結(jié)束后都會(huì)消失。,
?文件
A目的:文件用來(lái)永久地保存大量的數(shù)據(jù)。
?存儲(chǔ):計(jì)算機(jī)把文件存儲(chǔ)在二級(jí)存儲(chǔ)設(shè)備
中(特別是磁盤存儲(chǔ)設(shè)備)。
程序設(shè)計(jì)-2
《程序設(shè)計(jì)》2007.9
數(shù)據(jù)的層次
位(bit):
>最小數(shù)據(jù)項(xiàng):0和1
字符(character)/字節(jié)(byte)文件
>字符:數(shù)字、字母和專門的符號(hào)
>字節(jié):由0、1組成的序列(常見(jiàn)的是8位/字節(jié))
>字符用字節(jié)表示
域(field):
>一組有意義的字符,例如姓名
記錄(record)
>一組相關(guān)的域
A
>記錄關(guān)鍵字(recordkey):用于檢索
文件(Ele)Judy域
>一組相關(guān)的記錄
數(shù)據(jù)庫(kù)01001010字節(jié)(ASCII字符J)
▲
>一組相關(guān)的文件
1位
程序設(shè)計(jì)-3
《程序設(shè)計(jì)》2007.9
舉例
。域與記錄:記錄是由多個(gè)域構(gòu)成。例如,在一張工資表中,為
某個(gè)特定雇員建立的一條記錄可能是由如下域組成的:
1.雇員標(biāo)識(shí)號(hào)\
2.名字\
3.地址
4.每小時(shí)工資等級(jí)
5.免稅申請(qǐng)?zhí)朶
6.年度收入
7.聯(lián)邦稅收額等等
文件:某個(gè)公司的工資表文件通常包含為每一個(gè)雇員建立的t4
錄。較小公司的工資表文件可能只包含22條記錄,而大型公司
的工資表文件可能要包含100000條記錄。一個(gè)機(jī)構(gòu)可能建立成
百上千個(gè)文件,而每一個(gè)文件又包含幾百萬(wàn)甚至幾十億個(gè)字符
信息。
程序設(shè)計(jì)-4
《程序設(shè)計(jì)》2007.9
文件中記錄的組織方式
?文件中記錄常見(jiàn)的兩種組織方式
>順序訪問(wèn)文件(sequentialaccessfile):
?按記錄關(guān)鍵字字段的順序存儲(chǔ)記錄余
?例:在工資表文件中,記錄通常按
的順序存儲(chǔ)與訪問(wèn)。
>隨機(jī)訪問(wèn)文件(randomaccessfile)
?按隨機(jī)順序訪問(wèn)存儲(chǔ)記錄的文件。
程序設(shè)計(jì)-5
《程序設(shè)計(jì)》2007.9
第17章文件處理
A文件中的數(shù)據(jù)層次、
O文件和流
?順序訪問(wèn)文件
?隨機(jī)訪問(wèn)文件I
A實(shí)例:事務(wù)處理程序I
?對(duì)象的輸入輸出|
?小結(jié)|■
程序設(shè)J-6
《程序設(shè)計(jì)》2007.9
文件和流
C++語(yǔ)言把每一個(gè)文件都看成一個(gè)字節(jié)
流(把文件看成n個(gè)字節(jié))
>每一個(gè)文件或者以文件結(jié)束符(end-of-file/EOF)結(jié)
束,或者在特定的字節(jié)號(hào)處結(jié)束。
>當(dāng)打開(kāi)一個(gè)文件時(shí),該文件就和某個(gè)流關(guān)聯(lián)起來(lái)。
0__Z34J__789…n-1
...文件結(jié)束符
程序設(shè)計(jì)-7
《程序設(shè)計(jì)》2007.9
ifstream,fstream,ofstream
頭文件<iostream>和<fstream>
ios
istreamostream
ifstreamiostreamofstream
fstream
程序設(shè)計(jì)-8
《程序設(shè)計(jì)》2007.9
第17章文件處理
?文件中的數(shù)據(jù)層次、
A文件和流
A順序訪問(wèn)文件
?隨機(jī)訪問(wèn)文件I
A實(shí)例:事務(wù)處理程序I
?對(duì)象的輸入輸出|.
?小結(jié)|1
程序設(shè)J-9
《程序設(shè)計(jì)》2007.9
建立順序訪問(wèn)文件
?C++把文件看作是無(wú)結(jié)構(gòu)的字節(jié)流
?記錄的說(shuō)法在C++文件中是不存在的。
程序員必須提供滿足特定應(yīng)用程序要求
的文件結(jié)構(gòu)。
?:?問(wèn)題:怎樣給文件強(qiáng)加一個(gè)記錄結(jié)構(gòu)?
程序設(shè)計(jì)-10
Jkl《程序設(shè)計(jì)》2007.9
例子(Fig17_04)
#include<iostream>
#include<fstream>
#include<cstdlib>
usingnamespacestd;
intmain()
(
ofstreamoutClientFile(nclients.dat0,ios::out);
if(outClientFile){//overloaded!operator
cerr?”Filecouldnotbeopened0?endl;
exit(1);//incstdlib
}
程序設(shè)計(jì)-11
《程序設(shè)計(jì)》2007.9
例子(Fig17_04續(xù))
cout?”Entertheaccount,name,andbalanceAn^
?“Enterend-of-filetoendinput.\n?
intaccount;
charname[30];
doublebalance;
while(cin?account?name?balance){
outClientFile?account?11?name
vv''vvbalance?endl;
cout?''?
return0;//ofstreamdestructorclosesfile
程序設(shè)計(jì)-12
《程序設(shè)計(jì)》2007.9
例子(續(xù))
?:?輸出結(jié)果:
Entertheaccount,name,andbalance.
Enterend-of-filetoendinput.
?100Jones24.98
?200Doe345.67
?300White0
?400Stone-42.16
?500Rich224.62
?Az
程序設(shè)計(jì)-13
豳輸入流(cin)的流狀態(tài)?
?failbit
當(dāng)流中發(fā)生格式錯(cuò)誤時(shí),設(shè)置failbit,但字符并末丟失。
cin.fail()判斷流操作是否失敗,這種錯(cuò)誤通??尚迯?fù)。
badbit
當(dāng)發(fā)生導(dǎo)致數(shù)據(jù)丟失的錯(cuò)誤時(shí),設(shè)置badbit。dn.badO判
斷流操作是否失敗,這種嚴(yán)重錯(cuò)誤通常不可修復(fù)。
eofbit
如果cin遇至!J了文件結(jié)束符,設(shè)置badbit。cin.eof()
判斷eofbit是否被設(shè)置。
goodbit
如果eofbit、failbit或badbit都沒(méi)有設(shè)置,則設(shè)置goodbit。
cin.good。判斷goodbit是否被設(shè)置。
程序設(shè)計(jì)-14
《程序設(shè)計(jì)》2007.9
輸入流(cin)的流狀態(tài)
?cin.rdstate()返回流的錯(cuò)誤狀態(tài)。
0:沒(méi)有錯(cuò)\
非0:有錯(cuò)\一
cin.clearO把一個(gè)流的狀態(tài)恢復(fù)為“好”,從而可以
對(duì)該流繼續(xù)執(zhí)行I/O操作。
?cin.ignore:在需要時(shí)跳過(guò)流中指定數(shù)量的字符(默認(rèn)
個(gè)數(shù)是1),或在遇到指定的分隔符(默認(rèn)分隔符是EOF,
使得ignore在讀文件的時(shí)候跳過(guò)文件末尾)時(shí)結(jié)束。
cin.ignore(10007\n,);
程序設(shè)計(jì)-15
intmain()
Fig15_22(P594)2007.9
cout?”Beforeabadinputoperation:11
?n\ncin.rdstate():“?cin.rdstate()
?n\ncin.eof():n?cin.eof()
?n\ncin.fail():"?cin.fail()
?n\ncin.bad():“?cin.bad()
?”\ncin.good():n?cin.good()
?H\n\nExpectsaninteger,butenteracharacter:n;
cin?x;
cout?n\nEnterabadinputoperation:11
?“\ncin.rdstate():n?cin.rdstate()
?n\ncin.eof():n?cin.eof()
?n\ncin.fail():''?cin.fail()
?n\ncin.bad():n?cin.bad()
?n\ncin.good()''?cin.good()?n\n\nn;
cin.clear();
cout?HAftercin.clear。"
?n\ncin.fail():n?cin.fail()
?“\ncin.good():H?cin.good()?endl;
return0;}計(jì)-16
constintMAXLEN=1000;
intget_NonNegtiveNumber()
(~獲取一個(gè)非負(fù)整數(shù)
intnumber=-1;1如果輸入的不是數(shù)字,提示重新輸入;
do2如果輸入的是浮點(diǎn)數(shù),例如5.6,會(huì)獲得
{一個(gè)整數(shù)5,同時(shí)清除輸入緩存區(qū),不影響
while(1)下次的cin操作
(
cin?number;
if(!cin)//沒(méi)有獲得一個(gè)int
(
number=-1;
cout?"Pleaseinputanon-negativeinteger(>=0)?endl;
break;
}
if(number>=0)break;
cout?"Pleaseinputanon-negativeinteger(>=0)?endl;
)
cin.clear();〃恢復(fù)輸入狀態(tài)信息
cin.ignore(MAXLEN,t\n,);〃清除輸入緩存區(qū)
}while(number==-1);
returnnumber;
)
《程序設(shè)計(jì)》2007.9
例子(續(xù))
?ofstreamoutClientFile("clients.dat",ios::out);
已存在的文件用ios::out打開(kāi)時(shí),文件中的所有數(shù)據(jù)均刪除。如果指
定文件還不存在,則用該文件名生成這個(gè)文件。
文件打開(kāi)方式說(shuō)明
ios::app將所有輸出寫入文件末尾(不修改文件中現(xiàn)有的
數(shù)據(jù))
ios::ate打開(kāi)文件以便輸出,并移到文件末尾
數(shù)據(jù)可以寫入文件中的任何地方
ios::in打開(kāi)文件以便輸入
ios::out打開(kāi)文件以便輸出
ios::trunc刪除文件現(xiàn)有內(nèi)容(是ios::out的默認(rèn)操作)
程序設(shè)計(jì)-18
《程序設(shè)計(jì)》2007.9
打開(kāi)與關(guān)閉文件
*打開(kāi)文件(三種方式):
方式1:ofstreamoutClientFile("clients.datn,ios::out);
方式2:ofstreamoutClientFile(£clients.dat,5);
方式3:ofstreamoutClientFile;
outClientFile.open("clients.dat”,ios::out);
關(guān)閉文件(兩種方式):
方式1:main終止時(shí),outClientFile的解析函數(shù)會(huì)關(guān)閉文件。
方式2:顯式方式:outClientFile.close();
程序設(shè)計(jì)-19
《程序設(shè)計(jì)》2007.9
測(cè)試文件打開(kāi)是否成功
?用重載的ios運(yùn)算符成員函數(shù)operator!確定打開(kāi)操作是
否成功。如果open操作的流將failbit或badbit設(shè)置,則
這個(gè)條件返回非0值(true)??赡艿腻e(cuò)誤是:
>試圖打開(kāi)讀取不存在的文件\
>試圖打開(kāi)讀取沒(méi)有權(quán)限的文件
>試圖打開(kāi)文件以便寫入而磁盤空間不足。
程序設(shè)計(jì)-20
《程序設(shè)計(jì)》2007.9
測(cè)試文件結(jié)束符與不合法輸入
?另一人重載的ios運(yùn)算符成員函數(shù)operatorvoid*將流
變成指針,使其測(cè)試為0(空指針)或非0(任何其他指針
值)。如果failbit或badbit(見(jiàn)第15章)對(duì)流進(jìn)行設(shè)置,
則返回O(false)。
?下列while首部的條件自動(dòng)調(diào)用operatorvoid*成員函
數(shù):
Line36:while(cin?account?name?balance)
只要cin的failbit和badbit都沒(méi)有設(shè)置,則條件保持true。
輸入文件結(jié)束符設(shè)置cin的failbitooperatorvoid*函數(shù)
可以側(cè)試輸入對(duì)象的文件結(jié)束符,而不必對(duì)輸入對(duì)象
顯同曲用eof成員函數(shù)。
程序設(shè)計(jì)-21
《程序設(shè)計(jì)》2007.9
讀取順序訪問(wèn)文件中的數(shù)據(jù)
?讀取文件(三種方式)
方式1:ifstreaminClientFile(uclients.datJ\ios::in);
方式2:ifstreaminClientFile(uclients.dat,J);
方式3:ifstreaminClientFile;
inClientFile.open(uclients.dat,J,ios::in);
程序設(shè)計(jì)-22
駕《程序設(shè)計(jì)》2007.9
1例子(Fig17_07)
#include<iostreamo>
#include<fstream>
#include<iomanip>
#include<string>
#include<cstdlib>
voidoutputLine(int,conststring,double);
intmain()
(
//ifstreamconstructoropensthefile
ifstreaminClientFile(nclients.datu,ios::in);
if(inClientFile){
cerr?"Filecouldnotbeopened\nu;
exit(1);
)
程序設(shè)計(jì)-23
《程序設(shè)計(jì)》2007.9
■例子(續(xù))
intaccountt;
charname[30];
doublebalance;
cout?left?setw(10)?''Account"?setw(13)
?“Name"?HBalance,,?endl?fixed?showpoint;
while(inClientFile?account?name?balance)
outputLine(account,name,balance);
return0;//ifstreamdestructorclosesthefile
)
voidoutputLine(intaccount,conststringname,doublebalance)
(
cout?left?setw(10)?account?setw(13)?name
?setw(7)?setprecision(2)?right?balance?endl;
}
程序設(shè)計(jì)-24
《程序設(shè)計(jì)》2007.9
例子(續(xù))
輸出結(jié)果:
AccountNam一Balance
100Jonas24.98
200D。一345.67
300Whit一0.00
400Stem一-42.16
500Rich224.62
程序設(shè)計(jì)-25
文件位置指針及其重新定檢39
文件位置指針(,lepositionpointer):用于指示讀寫操作所在的下一
個(gè)字節(jié)號(hào);是個(gè)整砥(值,語(yǔ)定文件中離文件開(kāi)頭的相對(duì)位置(也稱為
離文件開(kāi)頭的偏移量)。'
重新定位
>istream類的(long,參數(shù)2):每個(gè)istream對(duì)象有個(gè)get指針,表示
文件中下一個(gè)輸入相距的字節(jié)數(shù)。
seekg的第一個(gè)參數(shù)通常為long類型的整數(shù);
第二個(gè)參數(shù)可以指定尋找方向:
?ios::beg(默認(rèn))相對(duì)于流的開(kāi)頭定位
?ios::curj目對(duì)手流當(dāng)前位置定位
?ios::end相對(duì)于流結(jié)尾定位。
>ostream類的(即“seekput"):每個(gè)ostream對(duì)象有一個(gè)put指針,
表示文件中下一個(gè)輸出相距的學(xué)節(jié)數(shù)。
例子:inclientFile.§eekg(0);
將文件位置指針移薊文徉開(kāi)頭(位置0),連接inclientFile。
程序設(shè)計(jì)-26
文件位置指針的例子-9
。下面是一些get文件位置指針的例子:
//positiontothenthbyteofflleObject
//assumesios::beg
fileObject.seekg(n);
//positionnbytesforwardinflleObject
fileObject.seekg(n,ios::cur);
//positionybytesbackfromendofflleObject
fileObject.seekg(y,ios::end);
//positionatendofflleObject
fileObject.seekg(0,ios::end);
ostream成員函數(shù)seekp也可以進(jìn)行類似的操作。
成員函數(shù)tellg和tellp分別返回get和put指針的當(dāng)前位置
location=filObject.tellgO;
程序設(shè)計(jì)-27
更新順序訪問(wèn)文件《程序設(shè)計(jì)》2007.9
?:?格式化和寫入順序訪問(wèn)文件的數(shù)據(jù)修改時(shí)會(huì)有破壞文件
中其他數(shù)據(jù)的危險(xiǎn)
?例如,如果要把名字“White”改為“Worthington”,
White的原來(lái)的記錄是:300White0.00
修改后:300Worthington0.00
出現(xiàn)該問(wèn)題的原因在于:在使用流插入運(yùn)算符《和流讀
取運(yùn)算符>>的格式化輸入,輸出模型中,域的大小是不
定的,因而記錄的大小也是不定的。
例如,7、14、-117、2047和27383都是int類型的值,雖然
它們的內(nèi)部存儲(chǔ)占用相同的字節(jié)數(shù),因此,格式化輸入,
輸出模型通常不用來(lái)更新已有的記錄。
程序設(shè)計(jì)-28
《程序設(shè)計(jì)》2007.9
更新順序訪問(wèn)文件(續(xù))
?一種解決方法(但比較危險(xiǎn)):
1:將在300White0.00之前的記錄復(fù)制到
一個(gè)新的文件中
2:然后寫入新的記錄并把300White0.00
之后的記錄復(fù)制到新文件中。
程序設(shè)計(jì)-29
《程序設(shè)計(jì)》2007.9
第17章文件處理
?文件中的數(shù)據(jù)層出、
?文件和流
?順序訪問(wèn)文件
A隨機(jī)訪問(wèn)文件
?實(shí)例:事務(wù)處理程序|
?對(duì)象的輸入輸出|\
?小結(jié)|1
程序設(shè)計(jì)-30
《程序設(shè)計(jì)》2007.9
隨機(jī)訪問(wèn)文件
?順序訪問(wèn)文件不適合快速訪問(wèn)應(yīng)用程序,即要立即找
到特定記錄的信息。\
*快速訪問(wèn)應(yīng)用程序的例子有航空訂票系統(tǒng)、銀行系統(tǒng)、
第售網(wǎng)點(diǎn)系統(tǒng)、自動(dòng)柜員機(jī)和其他要求快速處理特定
數(shù)據(jù)的事務(wù)處理系統(tǒng)(transactionprocessingsystem)o
銀行要面對(duì)成千上萬(wàn)的客戶,但自動(dòng)柜員機(jī)能在瞬間
作出響應(yīng)。這種快速訪問(wèn)應(yīng)用程序是用隨機(jī)訪問(wèn)文件
(randomaccessfile)實(shí)壬見(jiàn)的。
隨機(jī)訪問(wèn)文件的各個(gè)記錄可以直接快速訪問(wèn),而不需
要進(jìn)行搜索。
程序設(shè)計(jì)-31
《程序設(shè)計(jì)》2007.9
使用定長(zhǎng)記錄的隨機(jī)訪問(wèn)文件
?C++不提供文件結(jié)構(gòu)。因此應(yīng)用程序要自己生成隨機(jī)
訪問(wèn)文件。雖然實(shí)現(xiàn)隨機(jī)訪問(wèn)文件還有其他方法,但
是本課程的討論只限于使用定長(zhǎng)記錄的這種簡(jiǎn)潔明了
的方法。
?因?yàn)殡S機(jī)訪問(wèn)文件中的每一條記錄都有相同的長(zhǎng)度,
所以能夠用記錄關(guān)鍵字的函數(shù)計(jì)算出每一條記錄相對(duì)
于文件起始點(diǎn)的位置。
將學(xué)到:怎樣立即訪問(wèn)到文件甚至大型文件中指定的
>可以在不破壞其他數(shù)據(jù)的情況下把數(shù)據(jù)插入到隨機(jī)訪問(wèn)文件
中。
>也能在不重寫整個(gè)文件的情況下更新和刪除以前存儲(chǔ)的數(shù)據(jù)。
>怎擇建立隨機(jī)訪問(wèn)文件、鍵入數(shù)據(jù)、順序和隨機(jī)地讀取數(shù)據(jù)、
更新藪據(jù)和刪除不再需要的數(shù)據(jù)。
程序設(shè)計(jì)-32
《程序設(shè)計(jì)》2007.9
整數(shù)寫入文件(固定占4個(gè)字節(jié))
?outFile?number;
貝U對(duì)4字節(jié)整數(shù)占1?11字節(jié)(10位數(shù)加"符號(hào)位)
改用:
outFile.(reinterpret_cast<constchar*>(&number),
sizeof(number));
>這種方法總是寫入4字節(jié)(在4字節(jié)整數(shù)機(jī)器上)。\
>用reinterpret_castvconstchar*>強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將number的地址
變?yōu)閏onstchar*指針。\
>write的第二個(gè)參數(shù)是sizet類型的整數(shù),指定寫入的字節(jié)數(shù)
*istream函數(shù)可以將4個(gè)字節(jié)讀回到整型變量number中。
*隨機(jī)存取文件處理程序很少只把一個(gè)域?qū)懭胛募校ǔ?huì)
一次寫入一個(gè)結(jié)構(gòu)或一個(gè)類對(duì)象。
程序設(shè)計(jì)-33
《程序設(shè)計(jì)》2007.9
例子
建立一個(gè)能夠存儲(chǔ)100個(gè)定長(zhǎng)記錄的借貸
處理系統(tǒng):
1、每一條記錄由賬號(hào)(用作記錄關(guān)鍵字卜,
姓、名和借貸金額組成。
2、程序要能夠更新、插入和刪除一條記
錄以及能夠以格式化文本形式列出所有
的記錄。\
3、要求使用隨機(jī)訪問(wèn)文件。■
程序設(shè)計(jì)-34
例子:順序生成隨機(jī)訪問(wèn)文侏一
(Fig17_10)
#ifndefCLIENTDATAH
#defineCLNTDATAH
classClientData{
public:
ClientData(int=O;string='"'double=0);
private:
intaccountNumber;
charlastName[15];
charfirstName[10];
floatbalance;
};
#endif
程序設(shè)計(jì)-35
《程序設(shè)計(jì)》2007.9
例子:順序生成隨機(jī)訪問(wèn)文件(續(xù))
intmain()
ofstreamoutCredit(ncredit.datn,ios::binary);
if(loutCredit){
cerr?”Filecouldnotbeopened."?endl;
exit(1);
}
clientDatablankClient;
for(inti=0;i<100;i++)
outCredit.write(
reinterpret_cast<constchar*>(&blankClient),
sizeof(clientData));
return0;
程序設(shè)計(jì)-36
例子:隨機(jī)地寫入隨機(jī)訪問(wèn)蝴小
(Fig17_13)
intmain()
intaccountNumber;
charlastName[15];
charfirstName[10];
doublebalance;
ofstreamoutCredit(ncredit.datn,ios:in|ios::out:ios::binary);
if(!outCredit){
cerr?"Filecouldnotbeopened/1?endl;
exit(1);
cout?”Enteraccountnumber”
?n(lto100,0toendinput)\n?n;
clientDataclient;
cin?accountNumber;程序設(shè)計(jì)-37
子:隨機(jī)地寫入隨機(jī)訪問(wèn)文件幺續(xù)黑9
f(Fig17_13)
while(accountNumber>0&accountNumber<=100){
cout?"Enterlastname,firstname,balance\n?
cin?setw(15)?lastName;
cin?setw(10)?firstName;
cin?balance;
client.setAccountNumber(accountNumber);
■■■
outCreditseekp((client.accountNumber-1)*sizeof(clientData));
outCredit.write(
reinterpret_cast<constchar*>(&client),sizeof(clientData));
cout?”Enteraccountnumber\n?”;
cin?accountNumber;
return0;
程序設(shè)計(jì)-38
《程序設(shè)計(jì)》2007.9
例子:隨機(jī)地寫入隨機(jī)訪問(wèn)文件(續(xù))
Enteraccountnumber(1to100,0toendinput)
?37
Enterlastname,firstname,balance
?BarkerDoug0.00
Enteraccountnumber
?29
Enterlastname,firstname,balance
?BarkerNancy-24.54
Enteraccountnumber
?96
Enterlastname,firstname,balance
?StoneSam34.98
Enteraccountnumber
?88
Enterlastname,firstname,balance
?SmithDave258.34
Enteraccountnumber
?33
Enterlastname,firstname,balance
?DunnStacey314.33
Enteraccountnumber
?0
程序設(shè)計(jì)-39
子:從隨機(jī)訪問(wèn)文件中順序地《數(shù)據(jù)2g9
(Fig17_14)
voidoutputLine(ostream<&,constclientData&);
intmain()
ifstreaminCredit(ncredit.dat);
if(!inCredit){
cerr?"Filecouldnotbeopened.0?endl;
exit(1);
cout?left?setw(10)?”Account"?setw(16)
?“LastName"?setw(11)?nfirstName"?left
?setw(10)?right〈〈''Balance''?endl;
程序設(shè)計(jì)-40
目例子:從隨機(jī)訪問(wèn)文件中順序地讀取數(shù)據(jù)^續(xù)2r9
(Fig17_14)
clientDataclient;
inCredit.(reinterpret_cast<char*>(&client),sizeof(clientData));
while(inCredit&&!inCredit.eof())
(
if(client.getAccountNumber!=0)
outputLine(cout,client);
inCredit.read(reinterpret_cast<char*>(&client),
sizeof(clientData));
}
return0;
}
程序設(shè)計(jì)-41
《程序設(shè)計(jì)》2007.9
Hi
例子:從隨機(jī)訪問(wèn)文件中順序地讀取數(shù)據(jù)(續(xù))
輸出結(jié)果:
AccountLastNameFirstNameBalance
29BrownNancy-24.54
33DunnStacey319.33
37BarkerDoug9.00
88SmithDave258.34
96StoneSam34.98
程序設(shè)計(jì)-42
《程序設(shè)計(jì)》2007.9
第14章文件處理
A文件中的數(shù)據(jù)層次、
A文件和流
A順序訪問(wèn)文件
A隨機(jī)訪問(wèn)文件I
A實(shí)例:事務(wù)處理程序|
?對(duì)象的輸入輸出|.
?小結(jié)|
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育學(xué)生要復(fù)習(xí)的快閃
- 2025北京豐臺(tái)高三一模物理試題及答案
- 物理-云南省2025屆高三下學(xué)期3月百萬(wàn)大聯(lián)考試題和答案
- 環(huán)境應(yīng)急管理1
- 電工電子技術(shù) 課件 2.汽車儀表盤亮度控制電路的連接與測(cè)試
- 免疫性胰腺炎護(hù)理
- 三次元基礎(chǔ)培訓(xùn)
- 陜西省安康市石泉縣后柳初級(jí)中學(xué)2024-2025學(xué)年九年級(jí)上學(xué)期期末考試物理試題(含答案)
- 不安全事件分析報(bào)告
- 團(tuán)日活動(dòng)團(tuán)知識(shí)
- 工程情況說(shuō)明表
- 聯(lián)鎖投運(yùn)、切除申請(qǐng)表
- 青少年心理韌性量表及計(jì)分方式 胡月琴版
- 正反平衡供電煤耗計(jì)算方法介紹
- 330KV代席線29301不停電跨越鐵路施工方案1解析
- 西師版數(shù)學(xué)六年級(jí)(上冊(cè))知識(shí)點(diǎn)匯總
- 常見(jiàn)化驗(yàn)指標(biāo)的正常值及臨床意義
- 三字經(jīng)全文帶拼音完整版可打印
- 畢業(yè)設(shè)計(jì) 論文 基于plc的全自動(dòng)洗衣機(jī)控制系統(tǒng)設(shè)計(jì)論文
- 員工通用請(qǐng)假條Excel模板
- 現(xiàn)金支票樣(標(biāo)準(zhǔn)-附圖片)
評(píng)論
0/150
提交評(píng)論