




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+面向?qū)ο蟪绦蛟O(shè)計(jì)(第二版)主編 曹靜 中國(guó)水利水電出版社C+面向?qū)ο蟪绦蛟O(shè)計(jì)(第二版)第八章 數(shù)據(jù)流與文件的輸入/輸出2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)第八章 數(shù)據(jù)流與文件的輸入/輸出t8.1 I/O流的概念t8.2 數(shù)據(jù)流的控制t8.3 文件的輸入/輸出t項(xiàng)目設(shè)計(jì)7 校園信息管理系統(tǒng)中的數(shù)據(jù)存儲(chǔ)2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.1 I/O流的概念t流是一種抽象,它負(fù)責(zé)在數(shù)據(jù)的生產(chǎn)者和數(shù)據(jù)的消費(fèi)者之間建立聯(lián)系,并管理數(shù)據(jù)的流動(dòng)。t當(dāng)程序與外界環(huán)境進(jìn)行信息交換時(shí),存在著兩個(gè)對(duì)象,一個(gè)是程序中的對(duì)象,另一個(gè)是文件對(duì)象。t程序建立一個(gè)流對(duì)象,并指定這個(gè)流對(duì)象與某個(gè)文件對(duì)象
2、建立連接,程序操作流對(duì)象,流對(duì)象通過(guò)文件系統(tǒng)對(duì)所連接的文件對(duì)象產(chǎn)生作用。t讀操作在流數(shù)據(jù)抽象中被稱為(從流中)提取,寫(xiě)操作被稱為(向流中)插入。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2 數(shù)據(jù)流的控制t8.2.1 數(shù)據(jù)流的格式控制t8.2.2 常用的輸入/輸出函數(shù)t8.2.3 數(shù)據(jù)流的錯(cuò)誤偵測(cè)2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.1 數(shù)據(jù)流的格式控制t插入()運(yùn)算符是為所有標(biāo)準(zhǔn)C+數(shù)據(jù)類型定義的,其作用是向流中傳送和讀取數(shù)據(jù)。插入和提取運(yùn)算符與預(yù)先定義的操作符一起工作,用來(lái)控制輸入和輸出格式。1輸出寬度l為了調(diào)整輸出時(shí)的顯示寬度,可以通過(guò)調(diào)用width成員函數(shù)為每個(gè)項(xiàng)(i
3、tem)指定輸出寬度或在流中放入setw操縱符。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.1 數(shù)據(jù)流的格式控制2對(duì)齊方式l輸出流的默認(rèn)對(duì)齊方式為文本右對(duì)齊,程序中可以用setiosflags和resetiosflags操作符重設(shè)對(duì)齊方式。 3精度l使用setprecision操作符改變精度,該操作符有兩個(gè)標(biāo)志,ios:fixed和ios:scientific。 4進(jìn)制l可以用dec、oct和hex操縱符設(shè)置輸入和輸出的默認(rèn)進(jìn)制。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.2 常用的輸入/輸出函數(shù)常用istream成員函數(shù)包含:tint istream:get()l如果輸入
4、流包括附加的數(shù)據(jù),函數(shù)取得并返回下一個(gè)字符;否則它返回EOF。tistream& istream:get(char &c)l如果輸入流包括附加的數(shù)據(jù),函數(shù)取得并將下一個(gè)字符分配給c;否則就是沒(méi)有定義對(duì)c的作用。返回一個(gè)對(duì)*this(調(diào)用對(duì)象)的引用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.2 常用的輸入/輸出函數(shù)tistream& istream:get(char s,int n,char delim=n)l從輸入流獲取字符并將它們分配給s直到下面的一個(gè)條件發(fā)生:取得n-1個(gè)字符,沒(méi)有輸入字符了,或者下一個(gè)接收的字符的值為delim。tistream&
5、; istream:getline(char s,int n,char delim=n)l從輸入流獲取字符并將它們分配給s直到下面的一個(gè)條件發(fā)生:取得n-1個(gè)字符,沒(méi)有輸入字符了,或者下一個(gè)接收的字符的值為delim。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.2 常用的輸入/輸出函數(shù)tint istream:peak()l如果輸入流包括附加的數(shù)據(jù),函數(shù)返回下一個(gè)接收的字符;否則它返回EOF。tistream& istream:unget(char c)l字符c被送到輸入流。它將是下一個(gè)要接收的字符。函數(shù)返回一個(gè)對(duì)*this的引用。庫(kù)iostream還提供對(duì)ios成員函數(shù)的訪
6、問(wèn),一些程序在輸入流中檢測(cè)文件尾。tbool ios:eof()l如果流中達(dá)到文件尾則返回真;否則函數(shù)返回假。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.2 常用的輸入/輸出函數(shù)庫(kù)iostream還提供兩個(gè)類似get()和getline()的ostream成員函數(shù)。tostream& ostream:put(char c)l將字符c插入輸入流中。函數(shù)返回一個(gè)對(duì)*this的引用。tostream& ostream:write(const char s,int n)l將s中的n個(gè)字符插入到輸入流中。空字符也是有效的。函數(shù)返回一個(gè)對(duì)*this的引用。庫(kù)iostream還提供常
7、用的ostream成員函數(shù)。tostream& ostream:flush()l強(qiáng)制任何沒(méi)有完成的操作符插入完成。函數(shù)返回一個(gè)對(duì)*this的引用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.3 數(shù)據(jù)流的錯(cuò)誤偵測(cè) 流cerr和clog把顯示輸出到默認(rèn)錯(cuò)誤日志上,該日志通常是控制臺(tái)顯示器。t對(duì)流cerr的每個(gè)插入請(qǐng)求應(yīng)該立即送出顯示。下面給出幾個(gè)錯(cuò)誤消息的例子:lcerr系統(tǒng)將在10秒后重起!n;lcerr輸入值無(wú)效,請(qǐng)重新輸入!n; 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.2.3 數(shù)據(jù)流的錯(cuò)誤偵測(cè)t如果出于效率的緣故,則有必要緩沖錯(cuò)誤和系統(tǒng)狀態(tài)消息,這樣就應(yīng)該使用帶緩沖的
8、錯(cuò)誤流clog。像cerr一樣,clog通常是定向到顯示器。下面給出幾個(gè)樣例:lclogUserName成功登陸!n;lclog有新郵件!n;2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3 文件的輸入/輸出t8.3.1 fstream類t8.3.2 格式化文字模式的文件I/Ot8.3.3 二進(jìn)制模式的文件I/Ot8.3.4 文件指針的使用2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.1 fstream類tC+里負(fù)責(zé)文件輸入/輸出的類主要有ifstream(文件輸入)、ofstream(文件輸出)以及fstream(文件輸入/輸出)。t所謂文件的I/O(輸入/輸出)是指以程序?yàn)橹鞯慕嵌?/p>
9、而言,文件打開(kāi)為輸入狀態(tài)時(shí)(in),表示程序?qū)⒂晌募x入數(shù)據(jù);文件打開(kāi)為輸出狀態(tài)時(shí)(out),表示程序?qū)⑤敵鰯?shù)據(jù)至文件。t我們通常將數(shù)據(jù)由文件輸入到程序稱之為讀取,程序?qū)?shù)據(jù)輸出到文件稱之為寫(xiě)入。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.1 fstream類tfstream類可以用于將數(shù)據(jù)寫(xiě)入文件,或讀取文件的數(shù)據(jù)。要使用fstream類執(zhí)行文件的I/O時(shí),首先必須先定義一個(gè)fstream類的對(duì)象。例如:lfstream file; / 定義一個(gè)fstream對(duì)象t利用fstream所提供的open成員函數(shù) ,打開(kāi)一個(gè)文件。傳入open函數(shù)的參數(shù)有兩個(gè),一個(gè)傳入欲打開(kāi)的磁盤(pán)文件的名
10、稱,另一個(gè)傳入打開(kāi)該文件的模式參數(shù)。lfile.open(MyFile.txt,ios:in); / 在讀取模式下打開(kāi)MyFile.txt文件 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.1 fstream類t表8-1 文件流的文件打開(kāi)模式模式參數(shù) 功 能ios:in文件打開(kāi)為讀取(輸入)狀態(tài),此為istream類的默認(rèn)模式參數(shù)ios:out文件打開(kāi)為寫(xiě)入(輸出)狀態(tài),此為ostream類的默認(rèn)模式參數(shù)ios:ate打開(kāi)一個(gè)現(xiàn)存文件,從文件結(jié)尾處讀?。ㄝ斎耄┗?qū)懭耄ㄝ敵觯﹊os:app打開(kāi)一個(gè)輸出文件從文件結(jié)尾寫(xiě)入(輸出)數(shù)據(jù)ios:trunc打開(kāi)一個(gè)文件,如果它已經(jīng)存在,就刪除其中原
11、有的內(nèi)容ios:nocreate如果一個(gè)文件存在則打開(kāi)它,否則該操作失敗ios:noreplace如果一個(gè)文件不存在則作為新文件打開(kāi)它;如果文件已存在,則該操作失敗ios:binary以二進(jìn)制模式打開(kāi)一個(gè)文件,默認(rèn)是文本模式2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.1 fstream類t表8-2 文件處理函數(shù)函 數(shù) 功 能 說(shuō) 明open(filename,mode)以mode模式打開(kāi)名為filename的文件close()關(guān)閉文件is_open()檢查文件是否為打開(kāi)狀態(tài),是則返回真,否則返回假write(str,size)將str數(shù)組中size個(gè)字符寫(xiě)入到文件中read(str,s
12、ize)從文件中讀取數(shù)據(jù)至文件結(jié)尾,并設(shè)定給str數(shù)組,但至多不超過(guò)size個(gè)字符2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.1 fstream類tC+的文件I/O模式分為兩種,一種為格式化文字模式,另一種為二進(jìn)制模式,默認(rèn)的文件I/O模式為文字模式。t當(dāng)使用格式化文字模式時(shí),輸出至文件的內(nèi)容將被儲(chǔ)存為字符,因此,格式化文字模式適合儲(chǔ)存字符或字符串。t如果以二進(jìn)制的方式處理數(shù)字,不論是儲(chǔ)存的方式,還是占有文件空間的方式都與其儲(chǔ)存在內(nèi)存中的方式相同,因此,在儲(chǔ)存數(shù)字時(shí)使用二進(jìn)制模式是比較合適的。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.2 格式化文字模式的文件I/Ot文件的最
13、小單位為字符,由字符組成一個(gè)字段,好幾個(gè)字段組成一個(gè)記錄,而一個(gè)文件則由好幾筆記錄組成。t將數(shù)據(jù)輸入輸出到文件中,除了可以使用write和read函數(shù)外,還可以使用“”運(yùn)算符,而所有在8.2.1節(jié)中提及的格式控制方法,均可以在文件I/O中使用。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.3 二進(jìn)制模式的文件I/Ot在二進(jìn)制模式下,文件的I/O將利用write和read函數(shù)將所有數(shù)據(jù)以字節(jié)形式儲(chǔ)存至文件里。t對(duì)于原本就是字符的數(shù)據(jù),并不需要轉(zhuǎn)型,即可讀取/寫(xiě)入到文件里;但對(duì)于數(shù)字型的數(shù)據(jù),則必須轉(zhuǎn)為字符指針,然后傳入write和read函數(shù)。2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8
14、.3.4 文件指針的使用t文件指針是文件讀取/寫(xiě)入數(shù)據(jù)時(shí)插入或輸出的位置。文件指針有兩種,一個(gè)是寫(xiě)入指針,另一個(gè)是讀取指針。當(dāng)文件被打開(kāi)時(shí),這兩個(gè)指針都將被設(shè)定指向文件的起始處。t在ios類里,定義了三個(gè)特定的文件指針。通過(guò)指針函數(shù)與特定的指針的配合使用,可供在處理文件I/O時(shí)移動(dòng)文件指針之用。這三個(gè)位移指針?lè)謩e是ios:beg(文件開(kāi)頭)、ios:end(文件結(jié)尾)、ios:cur(當(dāng)前的指針位置)。 2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)8.3.4 文件指針的使用t表8-3 文件指針函數(shù)文件指針函數(shù) 功 能 說(shuō) 明seekg(pos,seek_dir)設(shè)定文件讀取(輸入)指針到距離文
15、件某一特定指針pos個(gè)字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios:beg(文件起始)、ios:cur(當(dāng)前文件指針的位置)或ios:end(文件結(jié)尾)pos=tellg()返回當(dāng)前文件讀取指針的位置seekp(pos,seek_dir)設(shè)定文件寫(xiě)入(輸出)指針到距離文件某一特定指針pos個(gè)字節(jié)的位置。特定指針由seek_dir指定,有以下三種ios:beg(文件起始)、ios:cur(當(dāng)前文件指針的位置)或ios:end(文件結(jié)尾)pos=tellp()返回當(dāng)前文件寫(xiě)入指針的位置2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)項(xiàng)目設(shè)計(jì)7 校園信息管理系統(tǒng)中的數(shù)據(jù)存儲(chǔ)t1 設(shè)計(jì)題目校園信息管理系統(tǒng)中的數(shù)據(jù)存儲(chǔ)t2 設(shè)計(jì)概要 要求掌握面向?qū)ο蟪绦蛟O(shè)計(jì)方法,I/O流的概念,以及如何利用文件存儲(chǔ)對(duì)象。t3 系統(tǒng)分析t4 功能模塊設(shè)計(jì)2022年3月6日星期日C+面向?qū)ο蟪绦蛟O(shè)計(jì)3 系統(tǒng)分析t現(xiàn)在校園信息管理系統(tǒng)已經(jīng)能夠完成人員信息的輸入、顯示和分析等一系列工作,但是現(xiàn)在的程序并不能將信息長(zhǎng)期保存,所以,將數(shù)據(jù)永久的保存是校園信息管理系統(tǒng)必
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小兒藥品備貨管理制度
- 河道垃圾轉(zhuǎn)運(yùn)方案(3篇)
- 裝修異形改造方案(3篇)
- 冷飲工廠安全管理制度
- 單位規(guī)范采購(gòu)管理制度
- 公共信息安全管理制度
- 清淤運(yùn)輸管理方案(3篇)
- 墻面漏水修繕?lè)桨?3篇)
- 工程檢查公司管理制度
- 醫(yī)院服務(wù)接待管理制度
- 第6課 從隋唐盛世到五代十國(guó) 課件【高效備課+精講精研】高中歷史統(tǒng)編版(2019)必修中外歷史綱要上冊(cè)
- 膝跳反射課件
- 浙江工商大學(xué)-匯報(bào)答辯通用PPT模板
- 藥品短缺情況登記表
- 跨文化溝通分解課件
- 2023年北京中考地理試卷及答案
- 跨境電子商務(wù)實(shí)訓(xùn)
- 利用與非門(mén)或異或門(mén)構(gòu)成全加器
- 凍干物料的包裝與儲(chǔ)存
- 新蘇科版八年級(jí)下冊(cè)初中數(shù)學(xué) 7.2 統(tǒng)計(jì)圖的選用課時(shí)練(課后作業(yè)設(shè)計(jì))
- 籃球--傳切配合(縱切)課件.ppt
評(píng)論
0/150
提交評(píng)論