項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)與重用_第1頁(yè)
項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)與重用_第2頁(yè)
項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)與重用_第3頁(yè)
項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)與重用_第4頁(yè)
項(xiàng)目中學(xué)生數(shù)據(jù)的存儲(chǔ)與重用_第5頁(yè)
已閱讀5頁(yè),還剩34頁(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)介

1、編輯課件編輯課件l技能目標(biāo)技能目標(biāo)n能用fopen函數(shù)和fclose函數(shù)打開(kāi)和關(guān)閉文件n能正確地讀寫文件n能用文件定位函數(shù)對(duì)文件進(jìn)行正確的定位操作n能用格式化讀寫函數(shù)讀寫數(shù)據(jù)編輯課件l知識(shí)目標(biāo)知識(shí)目標(biāo)n理解文件的概念、作用和文件的類型n理解文件指針的概念和定義方法n理解并掌握字符、字符串、數(shù)據(jù)塊、格式化文件讀寫函數(shù)的格式n理解文件定位函數(shù)的功能和使用方法編輯課件l項(xiàng)目任務(wù)與解析項(xiàng)目任務(wù)與解析編輯課件l 主要內(nèi)容主要內(nèi)容8.1 8.1 任務(wù)任務(wù)2020:學(xué)生信息的保存:學(xué)生信息的保存8.2 8.2 任務(wù)任務(wù)2121:學(xué)生信息文件的打開(kāi):學(xué)生信息文件的打開(kāi)8.3 8.3 必備知識(shí)與理論必備知識(shí)與理

2、論8.4 8.4 擴(kuò)展知識(shí)與理論擴(kuò)展知識(shí)與理論編輯課件1. 問(wèn)題描述學(xué)生屬性是用結(jié)構(gòu)體類型來(lái)實(shí)現(xiàn)的,首先定義學(xué)生數(shù)組長(zhǎng)度、再定義學(xué)生信息結(jié)構(gòu)體類型、最后定義能存儲(chǔ)40個(gè)學(xué)生信息的數(shù)組和記錄當(dāng)前學(xué)生數(shù)的整型變量。2. 具體實(shí)現(xiàn)學(xué)生信息保存在一個(gè)名為stuscore的文件中,以二進(jìn)制文件的形式保存,保存的學(xué)生數(shù)由形參size決定,用寫數(shù)據(jù)塊函數(shù)實(shí)現(xiàn)保存,保存文件成功后給出提示。P240程序3. 知識(shí)分析使用文件來(lái)對(duì)學(xué)生信息進(jìn)行保存。編輯課件 1. 問(wèn)題描述 該函數(shù)用讀數(shù)據(jù)塊函數(shù)打開(kāi)保存在stuscore文件中的學(xué)生信息,文件中的學(xué)生數(shù)由形參指針變量size返回。 2. 具體實(shí)現(xiàn) P241-P242

3、程序 3. 知識(shí)分析 對(duì)保存在文件中的學(xué)生信息進(jìn)行讀取。編輯課件8.3.1 文件及其分類文件及其分類 文件(文件(file)是一種組織外部介質(zhì)上的數(shù)據(jù)的數(shù)據(jù)類)是一種組織外部介質(zhì)上的數(shù)據(jù)的數(shù)據(jù)類型。它有兩個(gè)特征:一是對(duì)一個(gè)數(shù)據(jù)集合可以用一個(gè)名字型。它有兩個(gè)特征:一是對(duì)一個(gè)數(shù)據(jù)集合可以用一個(gè)名字命名;二是保存在外部介質(zhì)上,例如磁帶、磁盤、光盤、命名;二是保存在外部介質(zhì)上,例如磁帶、磁盤、光盤、U盤上,可以長(zhǎng)期保存。例如用文字處理軟件盤上,可以長(zhǎng)期保存。例如用文字處理軟件(如如WPS或或Word)寫好的一篇文章,把它起一個(gè)名字存放到磁盤上就寫好的一篇文章,把它起一個(gè)名字存放到磁盤上就是一個(gè)文件。是

4、一個(gè)文件。 與程序設(shè)計(jì)有關(guān)的文件,按內(nèi)容來(lái)分,有:源程序文與程序設(shè)計(jì)有關(guān)的文件,按內(nèi)容來(lái)分,有:源程序文件、目標(biāo)程序文件、可執(zhí)行程序文件和數(shù)據(jù)文件等。本章件、目標(biāo)程序文件、可執(zhí)行程序文件和數(shù)據(jù)文件等。本章主要討論數(shù)據(jù)文件,即如何將程序處理的數(shù)據(jù)組織成文件主要討論數(shù)據(jù)文件,即如何將程序處理的數(shù)據(jù)組織成文件保存到外部介質(zhì)上,以及息怎樣從外部介質(zhì)上讀取這些數(shù)保存到外部介質(zhì)上,以及息怎樣從外部介質(zhì)上讀取這些數(shù)據(jù)。據(jù)。編輯課件二進(jìn)制文件是指以數(shù)據(jù)在內(nèi)存中存儲(chǔ)形式原樣輸出到磁盤上去。例如50201,在例7.18中知道50201二進(jìn)制表示為00001。字符代碼文件是指文件的內(nèi)容是由一個(gè)一個(gè)字符組成的,每一個(gè)

5、字符用一個(gè)代碼表示,一般用ASCII代碼,例如50201,共有5個(gè)字符,每個(gè)字符占一個(gè)字節(jié),故共占5個(gè)字節(jié)。圖8.2為兩種這存儲(chǔ)形式。一般說(shuō),二進(jìn)制文件節(jié)省存儲(chǔ)空間而且輸入輸出的速度快(因?yàn)樵谳敵鰰r(shí)不需要把數(shù)據(jù)由二進(jìn)制形式轉(zhuǎn)換為字符代碼,在輸入時(shí)也不需要把字符代碼先轉(zhuǎn)換成二進(jìn)制形式然后存入內(nèi)存)。如果存入磁盤中的數(shù)據(jù)只是暫存的中間結(jié)果數(shù)據(jù),以后還要調(diào)入繼續(xù)處理的,一般用二進(jìn)制文件以節(jié)省時(shí)間和空間。如果輸出的數(shù)據(jù)是準(zhǔn)備作為文檔供給人們閱讀的,一般用字符代碼文件,它們通過(guò)顯示器或打印機(jī)轉(zhuǎn)換成字符輸出。一般高級(jí)語(yǔ)言都能提供字符代碼文件(ASCII文件)和二進(jìn)制文件,用不同的方法來(lái)讀寫這兩種不同的文件

6、。編輯課件8.3.2 文件名文件名一個(gè)文件必須有一個(gè)文件名。文件名包括三部分:文件路徑、文件名主干和文件名后綴。文件路徑表明文件的存儲(chǔ)位置。在操作系統(tǒng)中用反斜杠符()作為目錄、子目錄、文件之間的分隔。如f:exe3表明文件保存在f盤中的exe3目錄(文件夾)中。但是,在C語(yǔ)言程序中,由于反斜杠符()是作為轉(zhuǎn)義字符的起始符號(hào),因此如果想用反斜杠符時(shí)要用兩個(gè)反斜杠符表示。即要寫成f:exe3文件名是文件的主要標(biāo)志,它必須符合C語(yǔ)言關(guān)于標(biāo)識(shí)符的規(guī)定。文件名后綴,用于對(duì)文件進(jìn)行補(bǔ)充說(shuō)明,一般不超過(guò)三個(gè)字符,通常用特定的后綴表明文件的類型。例如.txt表明是純字符文件,用.c表示是C語(yǔ)言源程序文件,用.

7、exe表示是可執(zhí)行文件等。編輯課件8.3.3 文件的位置指針與讀寫方式文件的位置指針與讀寫方式為了進(jìn)行讀寫,系統(tǒng)要為每個(gè)文件設(shè)置一個(gè)位置指針,用于指向當(dāng)前的讀寫位置。文件的位置指針的初始值可以按照程序員要進(jìn)行的操作自動(dòng)初始化: 當(dāng)要進(jìn)行讀或?qū)憰r(shí),文件的位置指針的初始值為文件頭。 當(dāng)要為文件追加數(shù)據(jù)時(shí),文件的位置指針指向文件尾。在ASCII文件中,通常,每進(jìn)行一次讀或?qū)?,位置指針就自?dòng)加1,指向下一個(gè)字符位置,為下一次讀或?qū)懽鳒?zhǔn)備,形成順序讀寫方式。為了方便使用,C語(yǔ)言允許人為地移動(dòng)位置指針,使位置指針跳動(dòng)一個(gè)距離,或返回到文件頭,形成文件的隨機(jī)讀寫方式。編輯課件8.3.4 FILE類型指針類型

8、指針FILE類型類型 結(jié)構(gòu)體類型結(jié)構(gòu)體類型2. FILE類型指針類型指針 FILE *fp;3. 標(biāo)準(zhǔn)文件標(biāo)準(zhǔn)文件 sdtin、stdout、stderr編輯課件8.3.5 流流 對(duì)文件的操作是高級(jí)語(yǔ)言的一種重要功能。由于對(duì)文件的操作要與各種外部設(shè)備發(fā)生聯(lián)系,而所有外部設(shè)備都是由操作系統(tǒng)統(tǒng)一管理的,因此對(duì)文件的輸入輸出過(guò)程是通過(guò)操作系統(tǒng)來(lái)實(shí)現(xiàn)的。 程序?qū)ξ募牟僮鳎ㄗx/寫)過(guò)程如下頁(yè)圖所示。進(jìn)行文件的讀寫,首先要為文件建立一個(gè)相應(yīng)的緩沖區(qū)。當(dāng)要向文件寫據(jù)時(shí),程序先把數(shù)據(jù)送到緩沖區(qū),再把數(shù)據(jù)送到外部設(shè)備的指定文件中;當(dāng)要從文件讀取數(shù)據(jù)時(shí),也要先把數(shù)據(jù)送到緩沖區(qū),再由變量從緩沖區(qū)中提取相應(yīng)的數(shù)據(jù)。

9、編輯課件程序數(shù)據(jù)區(qū)輸入緩沖區(qū)輸出緩沖區(qū)外部介質(zhì)編輯課件 緩沖區(qū)可以由系統(tǒng)自動(dòng)為每個(gè)文件設(shè)置,也可以由程序員自己設(shè)置。采用前者的系統(tǒng)稱為緩沖文件系統(tǒng),而由用戶自己根據(jù)需要設(shè)置緩沖區(qū)的系統(tǒng)稱為非緩沖文件系統(tǒng)。ANSI C只建議使用緩沖文件系統(tǒng),并對(duì)緩沖文件系統(tǒng)的功能進(jìn)行了擴(kuò)充,使之既能用于處理字符代碼文件,也能處理二進(jìn)制文件。 在現(xiàn)代操作系統(tǒng)中,考慮到一個(gè)計(jì)算機(jī)系統(tǒng)要使用許多外部設(shè)備,如鍵盤、顯示器、打印機(jī)、磁盤等。為了使簡(jiǎn)化用戶對(duì)這些設(shè)備的操作,使用戶不必具體考慮設(shè)備間的差異,可以將設(shè)備緩沖區(qū)應(yīng)用程序之間的輸入輸出過(guò)程抽象為“數(shù)據(jù)的流動(dòng)”,并稱為“流”(stream)。這樣就可以使用統(tǒng)一的流處理

10、函數(shù)進(jìn)行設(shè)備(文件)的操作了。 流包含了設(shè)備(文件)、緩沖區(qū)以及操作性質(zhì)、狀態(tài)等。要進(jìn)行文件操作,首先要建立一個(gè)流。編輯課件 建立了與文件相應(yīng)的流,與該文件相應(yīng)的文件結(jié)構(gòu)體變量(即文件的信息區(qū))才會(huì)有具體的值,F(xiàn)ILE類型的指針也就會(huì)指向相應(yīng)的文件的結(jié)構(gòu)體變量。下圖為三個(gè)FILE類型的指針指向?qū)?yīng)的文件信息區(qū)(結(jié)構(gòu)體變量)的示意圖。所以文件指針和流是C語(yǔ)言文件系統(tǒng)的兩個(gè)很重要的概念。文件1的信息區(qū)fp1文 件 2的 信 息區(qū)fp2文 件 3的 信 息區(qū)fp3編輯課件8.3.6 文件的打開(kāi)與關(guān)閉文件的打開(kāi)與關(guān)閉流的創(chuàng)建與撤銷流的創(chuàng)建與撤銷文件的打開(kāi)fopen (文件名,文件操作方式);說(shuō)明:(1

11、)文件名應(yīng)當(dāng)包含文件路徑、主文件名和文件后綴,即提供找到文件的有關(guān)信息。(2)應(yīng)當(dāng)理解文件操作方式的意義。 編輯課件操作方式操作方式符號(hào)對(duì)文本文件對(duì)二進(jìn)制文件讀打開(kāi)rrb寫生成wwb追加aab讀寫打開(kāi)r+rb+/r+b讀寫生成w+wb+/w+b讀寫追加a+ab+/a+b編輯課件(3)fopen()執(zhí)行成功,則返回一個(gè)FILE類型的指針值;如果執(zhí)行失敗(如文件不存在、設(shè)備故障、磁盤滿等原因),則返回一個(gè)NULL值。通常把該函數(shù)的返回值賦值給一個(gè)FILE類型的指針變量,后面就可以使用這個(gè)指針變量對(duì)文件進(jìn)行操作。因此常用下面的方法打開(kāi)一個(gè)文件。FILE * fp;if (fp=fopen(“file

12、1”,”r”)=NULL) printf(“cannot open this filen”); exit(1); 編輯課件(4)對(duì)磁盤文件,在使用前先要打開(kāi),而對(duì)終端設(shè)備,盡管它們也作為文件來(lái)處理,但為什么在前面的程序中從未使用過(guò)“打開(kāi)文件”的操作呢?這是由于在程序運(yùn)行時(shí),系統(tǒng)自動(dòng)地打開(kāi)三個(gè)標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)輸出。系統(tǒng)自動(dòng)地定義了三個(gè)指針變量:stdin,stdout和stderr,分別指向標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)輸出。這三個(gè)文件都是以終端設(shè)備作為輸入輸出對(duì)象的。如果指定輸出一個(gè)數(shù)據(jù)到stdout所指向的文件,就是指輸出到終端設(shè)備。為使用方便,允許在程序中不指定這三個(gè)文

13、件,也就是說(shuō),系統(tǒng)隱含的標(biāo)準(zhǔn)輸入輸出文件是指終端。(5)每次最多能夠同時(shí)打開(kāi)的文件數(shù)目由一個(gè)宏FOPEN_MAX決定,一般不少于8個(gè)。具體數(shù)目需要查閱編譯手冊(cè)。編輯課件2. 文件的關(guān)閉 簡(jiǎn)單地說(shuō),關(guān)閉文件就是撤銷與操作文件相關(guān)的流。即通過(guò)關(guān)閉操作,通知系統(tǒng)釋放相應(yīng)的文件信息區(qū)(結(jié)構(gòu)體變量)。這樣,原來(lái)的指針變量不再指向該文件,此后也就不可能通過(guò)此指針來(lái)訪問(wèn)該文件。如果是執(zhí)行寫操作后用fclose關(guān)閉文件,則系統(tǒng)會(huì)先輸出文件緩沖區(qū)的內(nèi)容(不論緩沖區(qū)是否已滿)給文件,然后再關(guān)閉文件。這樣可以防止丟失本來(lái)應(yīng)寫到文件上的數(shù)據(jù)。 如果不關(guān)閉文件而直接使程序停止運(yùn)行,這時(shí)就會(huì)丟失緩沖區(qū)中還未寫入文件的信息

14、。因此必須注意:文件用完后必須關(guān)閉。fclose (文件指針變量); C語(yǔ)言中,關(guān)閉緩沖文件使用fclose函數(shù),它的格式為:fclose (文件指針變量);編輯課件8.3.7 文件的字符讀寫文件的字符讀寫1. 寫一個(gè)字符到磁盤文件int fputc(int ch, FILE *fp);參數(shù):ch要寫到文件的字符;fpFILE類型的數(shù)據(jù)文件指針變量(簡(jiǎn)稱為指向該文件的指針)。功能:把字符變量的值輸出到指針變量fp所指向的文件。返回:該函數(shù)執(zhí)行成功,返回寫出的字符;失敗,返回EOF。編輯課件#include #include int main(void)FILE *fp;int ch;if (f

15、p=fopen(“f:C3ex”,”w”)=NULL)printf(“cannot open this file.n”);exit(1);while (ch=getchar()!=n)fputc(ch,fp);fclose(fp); return 0;運(yùn)行情況如下,當(dāng)鍵入: love China.時(shí),這些字符將逐個(gè)被輸出到磁盤文件中。編輯課件2. 從磁盤文件中讀一個(gè)字符 fgetc函數(shù)能從磁盤文件接收一個(gè)字符,其原型為:int fgetc(FILE *fp);#include #include int main(void)FILE *fp;char ch;if ( fp=fopen(“f:C3

16、ex”,”r”)=NULL) printf(“cannot open this file.n”);編輯課件 exit(1);while ( ch=fgetc(fp)!=EOF) /* 將用fgetc()讀入的字符逐個(gè)顯示 */ putchar(ch);fclose(fp);return 0;程序運(yùn)行顯示如下結(jié)果:I love China.編輯課件8.3.8 文件的字符串讀寫文件的字符串讀寫(1)fputs函數(shù)可以向文件寫入一個(gè)字符串,其原型為: int fputs (const str, FILE *fp);參數(shù):str字符數(shù)組或字符串。功能:把字符數(shù)組str中的所有字符(或字符指針指向的串,

17、或字符串常量)輸出到fp所指向的文件,但字符串結(jié)束符“0”不輸出。返回:成功,返回非負(fù)值;失敗,返回EOF。(2)函數(shù)fgets()可以從文件讀取一個(gè)字符串,其原型為:char * fgets (char *str, int n, FILE *fp);參數(shù):str用于存放讀入的字符串。n送入到str中的字符個(gè)數(shù)。包括從文件中讀取的n-1個(gè)字符和自動(dòng)添加的“0”。功能:從fp指向的文件讀取n-1個(gè)字符,放到字符數(shù)組str中。如果在讀入n-1個(gè)字符完成之前遇到換行符“n”或文件結(jié)束符EOF,即結(jié)束讀入。但將遇到的換行符“n”也作為一個(gè)字符送入str數(shù)組。在讀入的字符串之后自動(dòng)加一個(gè)“0”。返回:成

18、功,str數(shù)組首地址;如讀到文件尾或出錯(cuò)則返回NULL。編輯課件#include #include #include int main(void)FILE *fp;char string81;if (fp=fopen(“f:C3exe”,”w”)=NULL)printf(“cant open file”);exit(1);while (strlen (gets(string)0)fputs(string, fp);fputs(”n“,fp);fclose(fp);return 0;編輯課件8.3.9 文件的格式化讀/寫文件的格式化輸出文件的格式化輸出使用fpintf()函數(shù),其原型為:int

19、fprintf(FILE *stream, char *format, argument,.);參數(shù):stream-文件指針。format、argument:格式字符串和輸出參數(shù)列表與printf函數(shù)的含義是相同的。功能:傳送格式化輸出到一個(gè)stream所指向的流中。返回:成功,實(shí)際輸出的字符數(shù)。#include #include #include int main(void)FILE * fp;char name20;int num;float score;if (fp=fopen(“f:C3exe”,”w”)=NULL)printf(“cant open file”);exit(1);編輯

20、課件printf(“type name,num,score:”);scanf(“%s %d %f”,name,&num,&score);while (strlen (name)1)fprintf(fp,“%s %d %f”,name, num, score);printf(“type name, num, score:”);scanf(“%s %d %f”,name, &num, &score);fclose (fp);return 0;編輯課件文件的格式化輸入文件的格式化輸入使用fscanf()函數(shù),其原型為:int fscanf(FILE *stream,

21、char *format,argument.);參數(shù):stream-文件指針。format、argument:格式字符串和輸入?yún)?shù)列表與scanf函數(shù)的含義是相同的。功能:從一個(gè)流中執(zhí)行格式化輸入。返回:成功,實(shí)際輸入的數(shù)據(jù)個(gè)數(shù)。#include #include int main()FILE *fp;char name20;int num;float score;if (fp=fopen(“f:c3exe”,”r”)=NULL)編輯課件printf(“cant open file”); exit(1);while (fscanf(fp, “%s %d %f”,name, &num,

22、&score)!=EOF)printf(“%-20s %6d %6.2fn”, name, num, score);fclose (fp);return 0;編輯課件8.4.1 文件位置指針的定位文件位置指針的定位1. fseek函數(shù)fseek()函數(shù)的作用是使位置指針移動(dòng)到所需的位置。fseek函數(shù)的原型為:int fseek (FILE *fp, long int offst, int orgn);編輯課件2. ftell函數(shù) ftell函數(shù)能告知用戶位置指針的當(dāng)前指向。例如ftell(fp)的值是fp所指向的文件中位置指針的當(dāng)前指向。如果出錯(cuò)(例如不存在此文件),則ftell函數(shù)返回值為-1。其原型為:long int ftell(FILE *fp);3. rewind函數(shù)rewind函數(shù)的作用是使位置指針重新返回到文件的開(kāi)頭處。此函數(shù)無(wú)返回值。其原型為:void rewind(FILE *fp);編輯課件8.4.2 文件隨機(jī)讀寫程序的應(yīng)用文件隨機(jī)讀寫程序的應(yīng)用#include #include c

溫馨提示

  • 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)論