




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章保存和恢復(fù)工作 -文件的存取河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院2008年12月VC+案例教程VC+案例教程 北大出版社教學(xué)目標(biāo):掌握自定義類(lèi)的串行化方法和過(guò)程。熟悉CFile類(lèi)的使用。VC+案例教程 北大出版社案例介紹日常生活中,每個(gè)人都有一個(gè)或多個(gè)通訊錄,用來(lái)保存同學(xué)、同事、親朋好友、生意伙伴等的聯(lián)系信息。但是傳統(tǒng)的通訊錄對(duì)這些信息不方便進(jìn)行管理,特別是當(dāng)聯(lián)系人很多時(shí),需要查詢某個(gè)人的信息變得很困難。所以我們需要一個(gè)電子通訊錄來(lái)存儲(chǔ)聯(lián)系人的信息。本章將通過(guò)兩種方法來(lái)編寫(xiě)通訊錄程序,一是串行化,二是CFile類(lèi)。 VC+案例教程 北大出版社教學(xué)內(nèi)容:8.1 文檔串行化8.2 CFile類(lèi) VC+案
2、例教程 北大出版社8.1 文檔串行化 用戶處理的數(shù)據(jù)往往需要存盤(pán)作永久備份。將文檔類(lèi)中的成員變量的值以文件形式存儲(chǔ)在磁盤(pán)中,或者將文件中的數(shù)據(jù)讀取到相應(yīng)的成員變量,從而恢復(fù)應(yīng)用程序中的對(duì)象。這個(gè)過(guò)程稱(chēng)為文檔的串行化。串行化分為兩個(gè)部分當(dāng)應(yīng)用程序數(shù)據(jù)以文件形式存儲(chǔ)在磁盤(pán)中時(shí),叫做串行化。當(dāng)從文件中恢復(fù)應(yīng)用程序的狀態(tài)時(shí),則叫做反串行化。VC+案例教程 北大出版社8.1.1 對(duì)象串行化 Visual C+應(yīng)用程序中的串行化是通過(guò)Archive類(lèi)來(lái)實(shí)現(xiàn)的。CArchive類(lèi)不能離開(kāi)它所依附的CFile類(lèi)對(duì)象而孤立存在。CArchive類(lèi)用于Visual C+應(yīng)用程序中文檔和數(shù)據(jù)對(duì)象的 Serializ
3、e函數(shù)中。VC+案例教程 北大出版社8.1.2 使對(duì)象可串行化 要使自己定義的類(lèi)對(duì)象能夠被保存或被恢復(fù),必須做三件事:直接或間接從CObject類(lèi)公有派生;添加兩個(gè)宏: DECLARE_SERIAL和 IMPLEMENT_SERIAL,定義Serialize函數(shù)。 VC+案例教程 北大出版社8.1.3 案例8.1 串行化實(shí)現(xiàn)通訊錄 【例8.1】編寫(xiě)一個(gè)基于單文檔的程序,利用串行化功能實(shí)現(xiàn)對(duì)通訊錄的管理,要求能夠?qū)崿F(xiàn)對(duì)通訊錄的添加、刪除、瀏覽、查找等功能,運(yùn)行效果見(jiàn)圖8.2。圖 8.2 串行化實(shí)現(xiàn)通訊錄程序 VC+案例教程 北大出版社8.1.3. l 創(chuàng)建項(xiàng)目 利用AppWizard創(chuàng)建一個(gè)單文
4、檔應(yīng)用程序,取名為AddressBook_Serial。在第四步中,指定應(yīng)用程序?qū)?chuàng)建和讀取的文件的擴(kuò)展名為adr。在第六步,指定CFormView作為視圖類(lèi)的基類(lèi),這將允許使用對(duì)話框編輯器進(jìn)行應(yīng)用程序的界面設(shè)計(jì)。 VC+案例教程 北大出版社8.1.3.2 應(yīng)用程序界面設(shè)計(jì) 窗口布局如圖8.3所示,其中的控件及其屬性見(jiàn)表8-l。將表8-2中的變量關(guān)聯(lián)到指定的控件。 VC+案例教程 北大出版社8.1.3.3 創(chuàng)建新類(lèi)并串行化 創(chuàng)建新類(lèi)CAddressList,基類(lèi)為CObject。 CPerson類(lèi)的定義見(jiàn)教材。將類(lèi)串行化 (1)添加Serialize函數(shù) (2)添加DECLARE_SERIAL
5、宏 在CAddressList類(lèi)的頭文件(AddressList.h)中,加入DECLARE_SERIAL(CAddressList) (3)添加IMPLEMENT_SERIAL宏 在AddressList.cpp文件中構(gòu)造函數(shù)定義之前, 加入 IMPLEMENT_SERIAL(CAddressList, CObject, 1)VC+案例教程 北大出版社8.1.3.4 在文檔類(lèi)中建立支持 為了保存和處理大量CAddressList類(lèi)對(duì)象,本例使用MFC中的CObArray類(lèi),在文檔類(lèi)中添加兩個(gè)私有訪問(wèn)權(quán)限的成員變量,如表8-3所示。 添加新的記錄 定位記錄(1)取得當(dāng)前記錄 (2)取得第一條記
6、錄(3)取得下一條記錄 (4)取得上一條記錄 (5)取得最后一條記錄對(duì)象數(shù)組串行化 清除文檔內(nèi)容 打開(kāi)新文檔 刪除當(dāng)前記錄 取得記錄總數(shù) VC+案例教程 北大出版社8.1.3.5 為視圖類(lèi)增加定位和編輯支持 l. 顯示當(dāng)前記錄2. 在記錄集中定位 3. 保存編輯和更改4. 顯示新記錄集 5. 刪除記錄6. 查詢記錄7. 編譯運(yùn)行程序 VC+案例教程 北大出版社8.2 CFile類(lèi) 在MFC面向?qū)ο蟮木幊谭绞较?,有關(guān)文件的輸入和輸出都是由CFile類(lèi)完成的。CFile是以二進(jìn)制方式讀取和寫(xiě)入文件的類(lèi),是MFC中其他所有文件類(lèi)的基類(lèi),它封裝了Win32 API 用來(lái)處理文件I/O的那部分函數(shù)。 V
7、C+案例教程 北大出版社8.2.1 CFile類(lèi)的操作 在Visual C+中,數(shù)據(jù)文件的操作通常按照打開(kāi)(或創(chuàng)建)文件、進(jìn)行讀寫(xiě)操作、關(guān)閉文件的步驟進(jìn)行。一個(gè)文件必須打開(kāi)或創(chuàng)建之后才能使用。在文件操作中,把內(nèi)存中的數(shù)據(jù)傳送到外部存儲(chǔ)設(shè)備,并保存為文件的操作叫做寫(xiě)文件。而把數(shù)據(jù)文件中的數(shù)據(jù)傳送到內(nèi)存中的操作叫做讀文件。在對(duì)一個(gè)文件的讀寫(xiě)操作完成后,一定要將打開(kāi)的文件關(guān)閉。否則,各種各樣的操作就有可能對(duì)文件造成難以預(yù)料的破壞。 VC+案例教程 北大出版社8.2.1.l 打開(kāi)文件用CFile類(lèi)的構(gòu)造函數(shù)打開(kāi)文件。CFile類(lèi)提供了三個(gè)構(gòu)造函數(shù):CFile( ); CFile( int hFile
8、); CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); 參數(shù)nOpenFlags 指定文件的打開(kāi)方式,其取值見(jiàn)表8-4。用CFile:Open函數(shù)打開(kāi)文件。 CFile file;file.Open(MyFile.txt,CFile:modeRead ); VC+案例教程 北大出版社8.2.1.2 創(chuàng)建文件要?jiǎng)?chuàng)建一個(gè)新文件,并對(duì)新文件進(jìn)行打開(kāi)等操作,必須在CFile構(gòu)造函數(shù)或CFile:Open函數(shù)的第二個(gè)參數(shù)(文件打開(kāi)方式)中包含CFile:modeCreate標(biāo)志,該標(biāo)志與其他各標(biāo)志是位或(|)關(guān)系。例如:CFile file(MyFile.t
9、xt,CFile:modeRead|CFile:modeCreate ); 或CFile file;file.Open(MyFile.txt,CFile:modeWrite|CFile:modeCreate );VC+案例教程 北大出版社8.2.1.3 關(guān)閉文件當(dāng)文件操作完成后,必須關(guān)閉該文件。關(guān)閉一個(gè)已打開(kāi)的文件主要用Close函數(shù)。例如:CFile file;file.Open(MyFile.txt,CFile:modeWrite|CFile:modeCreate ); /文件其它操作file.Close(); / 關(guān)閉文件VC+案例教程 北大出版社8.2.1.4 讀寫(xiě)文件要在CFile類(lèi)
10、中,文件的讀寫(xiě)操作主要用Read函數(shù)和Write函數(shù)來(lái)完成。用Read函數(shù)所讀的文件必須以CFile:modeRead方式打開(kāi),用Write函數(shù)所寫(xiě)的文件必須以File:modeWrite方式打開(kāi)。VC+案例教程 北大出版社8.2.1.5 定位操作1Seek函數(shù) 2SeekToBegin函數(shù) 3SeekToEnd函數(shù) 4狀態(tài)函數(shù) 5靜態(tài)成員函數(shù) VC+案例教程 北大出版社8.2.2 案例8.2 使用CFile類(lèi)實(shí)現(xiàn)通訊錄 【例8.2】使用CFile類(lèi)來(lái)實(shí)現(xiàn)前面的通訊錄,我們首先將聯(lián)系人信息定義為一個(gè)結(jié)構(gòu)體類(lèi)型,然后通過(guò)對(duì)話框應(yīng)用程序來(lái)實(shí)現(xiàn)通訊錄文件的建立、讀寫(xiě)等操作。 VC+案例教程 北大出版
11、社8.2.2.l 應(yīng)用程序界面設(shè)計(jì) 創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,項(xiàng)目名為 AddressBook_File 。修改對(duì)話框的窗口標(biāo)題為“通訊錄(CFile類(lèi)實(shí)現(xiàn))”,將確定按鈕的標(biāo)題改為退出。采用列表控件來(lái)顯示數(shù)據(jù),窗口布局如圖8.4 所示。各控件屬性設(shè)置及連接變量參見(jiàn)表8-5。 VC+案例教程 北大出版社8.2.2.2 定義數(shù)據(jù)結(jié)構(gòu) 為了保存通訊錄中的數(shù)據(jù),必須定義相應(yīng)的數(shù)據(jù)結(jié)構(gòu)??梢詫⒙?lián)系人的數(shù)據(jù)信息定義為一個(gè)結(jié)構(gòu)體類(lèi)型,也可以將其定義為一個(gè)類(lèi)。在本例中,我們將其定義為一個(gè)結(jié)構(gòu)體類(lèi)型。typedef structchar Name20; / 姓名char Mobile20; / 電話char Birth20; / 生日char Email20; / E_Mail ADDRESSLIST; V
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度綠色建筑租賃管理服務(wù)合同范本
- 幼兒園房屋租賃合同范本2025年度專(zhuān)業(yè)修訂版
- 2025年二手單反相機(jī)二手市場(chǎng)數(shù)據(jù)采集與采購(gòu)合作協(xié)議
- 新版二零二五年度離異家庭子女醫(yī)療費(fèi)用承擔(dān)合同
- 2025年度船舶交易稅費(fèi)優(yōu)化及合規(guī)服務(wù)合同
- 二零二五年度家居裝飾導(dǎo)購(gòu)人員勞動(dòng)合同范本
- 2025年度室內(nèi)裝飾裝修工程安全責(zé)任險(xiǎn)合同3篇
- 2025年度環(huán)保產(chǎn)業(yè)投資合作變更協(xié)議模板
- 二零二五年度虛擬偶像創(chuàng)作與運(yùn)營(yíng)合同4篇
- 社區(qū)健康管理與家政服務(wù)的緊密結(jié)合
- 甘肅省蘭州市蘭煉一中2025屆數(shù)學(xué)高一上期末統(tǒng)考試題含解析
- EPC總承包項(xiàng)目工程設(shè)計(jì)各階段的服務(wù)承諾
- 期末試卷(試題)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)冀教版
- “小學(xué)英語(yǔ)對(duì)話教學(xué)”研究課題方案
- 城市地下管網(wǎng)建設(shè)工程投標(biāo)書(shū)(范文)
- 2024-2030年中國(guó)達(dá)克羅行業(yè)運(yùn)行態(tài)勢(shì)與前景展望分析報(bào)告
- 聯(lián)合體三方協(xié)議合同模板
- 五上數(shù)學(xué)簡(jiǎn)便運(yùn)算500道及答案
- 2023屆高考英語(yǔ)全國(guó)甲卷試卷講評(píng)課件
- 山東省臨沂市2024年中考物理真題
- 第2課《“友邦驚詫”論》(教學(xué)設(shè)計(jì))-【中職專(zhuān)用】高二語(yǔ)文同步課堂(高教版2024·拓展模塊上冊(cè))(同課異構(gòu))
評(píng)論
0/150
提交評(píng)論