【計(jì)算機(jī)課件】第十七章文件處理_第1頁(yè)
【計(jì)算機(jī)課件】第十七章文件處理_第2頁(yè)
【計(jì)算機(jī)課件】第十七章文件處理_第3頁(yè)
【計(jì)算機(jī)課件】第十七章文件處理_第4頁(yè)
【計(jì)算機(jī)課件】第十七章文件處理_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論