用文件完善學(xué)生成績管理系統(tǒng)_第1頁
用文件完善學(xué)生成績管理系統(tǒng)_第2頁
用文件完善學(xué)生成績管理系統(tǒng)_第3頁
用文件完善學(xué)生成績管理系統(tǒng)_第4頁
用文件完善學(xué)生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

08任務(wù)八用文件完善學(xué)生成績管理系統(tǒng)學(xué)習(xí)情境

前面幾章中實現(xiàn)的學(xué)生成績管理系統(tǒng),數(shù)據(jù)無法保存,如果程序一關(guān)閉,那么已經(jīng)錄入的學(xué)生信息就會消失,下次打開程序后,還得重新錄入。而通過文件類型可以實現(xiàn)保存數(shù)據(jù)的功能。第一部分任務(wù)學(xué)習(xí)引導(dǎo)

8.1文件的概念8.2文件指針8.3文件的基本操作第二部分模塊實現(xiàn):用文件完善學(xué)生成績管理系統(tǒng)第三部分自學(xué)與拓展8.4文件的其他操作07任務(wù)七用指針實現(xiàn)查詢、修改、添加、刪除學(xué)生成績8.1文件的概念所謂文件一般指存儲在外部介質(zhì)上數(shù)據(jù)的集合。這個數(shù)據(jù)集有一個名稱,稱為文件名。實際上在前面的部分中已經(jīng)多次使用了文件,例如源程序文件、目標(biāo)文件、可執(zhí)行文件、庫文件(頭文件)等。外部介質(zhì)如硬盤、U盤、光盤等。操作系統(tǒng)是以文件為單位對數(shù)據(jù)進(jìn)行管理的,也就是說,如果想找存在外部介質(zhì)上的數(shù)據(jù),必須先按文件名找到指定的文件,然后再從該文件中讀取數(shù)據(jù)。要向外部介質(zhì)上存儲數(shù)據(jù)也必須先建立一個文件(以文件名標(biāo)識),然后才能向它輸出數(shù)據(jù)。8.1文件的概念為了簡化用戶對輸入和輸出設(shè)備的操作,操作系統(tǒng)把與主機(jī)相連的各種設(shè)備都作為文件來處理,這類文件被稱為設(shè)備文件。如鍵盤就是標(biāo)準(zhǔn)輸入文件,顯示器為標(biāo)準(zhǔn)輸出文件。從鍵盤上輸入就意味著從標(biāo)準(zhǔn)輸入文件上輸入數(shù)據(jù),scanf、getchar函數(shù)就屬于這類輸入。在屏幕上顯示有關(guān)信息就是向標(biāo)準(zhǔn)輸出文件輸出,printf、putchar函數(shù)就是這類輸出。在程序運(yùn)行時,將一些數(shù)據(jù)(運(yùn)行的最終結(jié)果或者中間數(shù)據(jù))輸出到磁盤上保存起來,以后需要時再從磁盤中輸入到計算機(jī)內(nèi)存,這就需要利用磁盤文件,也就是通常所說的文件。

8.1文件的概念C語言將文件看成是由若干字符(字節(jié))組成的序列。每一個字節(jié)放一個字符的ASCII代碼的文件被稱為ASCII碼文件,或者文本文件。按照內(nèi)存中的存儲形式原樣存儲到外部介質(zhì)上的文件就被稱為是二進(jìn)制文件。如有一個short型整數(shù)10000,在內(nèi)存中占2B,如果按ASCII碼形式,則要輸出5B(每個字符占一個字節(jié)),如圖8-2所示。8.2文件指針當(dāng)使用一個文件時,操作系統(tǒng)就會為該文件在內(nèi)存中開辟一個區(qū)域來存放該文件的相關(guān)信息,如文件的名字、狀態(tài)、位置等,這些信息保存在一個結(jié)構(gòu)體變量中。該結(jié)構(gòu)體類型是由系統(tǒng)聲明的,取名為FILE。每一個FILE類型變量都用來存放由編譯系統(tǒng)自動放入的對應(yīng)文件的相關(guān)信息,這些信息用戶不必去了解其中的細(xì)節(jié)。C語言里的頭文件中有其類型聲明。在程序中可以直接使用FILE類型名定義變量。例如,F(xiàn)ILEf;但使用時通常并不這么定義,而是通過一個指向FILE類型的指針變量來定義。一般形式為:FILEfp;fp就被定義為指向文件類型的指針變量,即文件指針。通過文件指針就可對它所指的文件進(jìn)行各種操作。8.3文件的基本操作定義了文件指針后,就可以通過文件指針來打開文件,然后才能對文件進(jìn)行其他操作,使用完畢后,最后再通過文件指針進(jìn)行關(guān)閉。本節(jié)將介紹文件的基本操作,它們都是通過C語言的庫函數(shù)完成的。1.文件的打開函數(shù)(1)用法fopen函數(shù)用來打開一個文件。其調(diào)用的一般形式為:文件指針名=fopen(文件名,使用文件方式);8.3文件的基本操作其中,①“文件指針名”必須是被說明為FILE類型的指針變量;②“文件名”是被打開文件的文件名,“文件名”是字符串常量或字符串?dāng)?shù)組。既可以是絕對路徑,如:“d:\\ex\\c\\1.txt”也可以是相對路徑,即可執(zhí)行文件所在路徑下的文件,如:“1.txt”8.3文件的基本操作其中,③“使用文件方式”是指文件的類型和操作要求。使用文件的方式共有12種,表8-1給出了相應(yīng)的符號、含義和說明。8.3文件的基本操作其中,(2)功能返回一個指向指定文件的指針。(3)說明①在打開一個文件時,如果出錯,fopen將返回一個空指針值NULL。在程序中可以用這一信息來判別是否完成打開文件的工作,并作相應(yīng)的處理。出錯有多種原因,如磁盤故障、磁盤已寫滿。另外,在表8-1中,指定文件須是存在的,如果不存在均會出錯,例如,用只讀方式打開一個不存在的文件等。故為增強(qiáng)程序的可靠性,常用下面的方法打開一個文件。if((fp=fopen("d:\\ex\\c\\1.txt","r"))==NULL){printf("Cannotopenthisfile!\n");exit(1);}這段程序的意義是,如果返回的指針為空,表示不能正常打開文件,則給出提示信息。exit是定義在頭文件里的函數(shù),作用是關(guān)閉程序已經(jīng)打開的所有文件,參數(shù)為0時,表示程序正常退出,非0時表示出錯后退出。8.3文件的基本操作其中,②當(dāng)程序開始運(yùn)行,系統(tǒng)就打開3個文件指針,分別是:stdin:對應(yīng)標(biāo)準(zhǔn)輸入文件(鍵盤),stdout:對應(yīng)標(biāo)準(zhǔn)輸出文件(顯示器),stderr:對應(yīng)標(biāo)準(zhǔn)出錯輸出(出錯信息),可直接使用。它們是文件指針常量,不能更改文件指針名。8.3文件的基本操作2.文件的關(guān)閉函數(shù)(1)用法fclose函數(shù)用來打開一個文件。其調(diào)用的一般形式為:fclose(文件指針名);例如,fclose(fp);(2)功能關(guān)閉文件指針?biāo)赶虻奈募?。正常完成關(guān)閉文件操作時,fclose函數(shù)返回值為0,返回EOF(即1)則表示有錯誤發(fā)生。8.3文件的基本操作2.文件的關(guān)閉函數(shù)(3)說明文件一旦使用完畢,應(yīng)用關(guān)閉文件函數(shù)把文件關(guān)閉,以避免文件的數(shù)據(jù)丟失等錯誤。關(guān)閉就是系統(tǒng)釋放存放該文件的相關(guān)信息等內(nèi)存區(qū)域,使文件指針與文件脫鉤。8.3文件的基本操作3.格式化讀函數(shù)(1)用法fscanf函數(shù)用來打開一個文件。其調(diào)用的一般形式為:fscanf(文件指針名,格式字符串,輸入表列);例如,fscanf(fp,"%d%s",&i,s);8.3文件的基本操作3.格式化讀函數(shù)(2)功能從文件中按照一定格式讀取數(shù)據(jù)到指定變量。(3)說明它與scanf函數(shù)的功能相仿,都是格式化讀。只不過scanf函數(shù)是從標(biāo)準(zhǔn)輸入(鍵盤)得到數(shù)據(jù),而fscanf函數(shù)是從文件中(通過文件指針)得到。要注意指定文件必須是以讀、讀寫方式打開的。8.3文件的基本操作3.格式化讀函數(shù)【例8-1】在文件(C:\)上有如下字符:張三100,請將其分別賦給一個字符串和一個整數(shù)。程序代碼如下:#include""#include""/exit函數(shù)在此頭函數(shù)中定義/voidmain(){FILEfp;charname[10];intn;if((fp=","r"))==NULL){/按照只讀方式打開文件/printf("Cannotopenc:\\test.dat\n");exit(1);}fscanf(fp,"%s%d",name,&n);printf("name:%s\nn:%d\n",name,n);fclose(fp);/用完要關(guān)閉文件/}8.3文件的基本操作4.格式化寫函數(shù)(1)用法fprintf函數(shù)用來打開一個文件。其調(diào)用的一般形式為:fprintf(文件指針名,格式字符串,輸出表列);例如,fprintf(fp,"%d%s",i,s);8.3文件的基本操作4.格式化寫函數(shù)(2)功能將數(shù)據(jù)從內(nèi)存中按照一定格式輸出到文件中。(3)說明它與printf函數(shù)的功能相仿,都是格式化寫。只不過printf函數(shù)是向標(biāo)準(zhǔn)輸出(顯示器)寫數(shù)據(jù),而fprintf函數(shù)是向磁盤文件中(通過文件指針)寫。要注意指定文件必須是以寫、讀寫或追加方式打開的。8.3文件的基本操作4.格式化寫函數(shù)【例8-2】從鍵盤上輸入一個字符串和一個整數(shù),并把它添加到【例8-1】的文件(C:\)中,如李四90。#include""#include""/exit函數(shù)在此頭函數(shù)中定義/voidmain(){FILEfp;charname[10];intn;if((fp=","a"))==NULL){/按照添加方式打開文件/printf("Cannotopenc:\\test.dat\n");exit(1);}scanf("%s%d",name,&n);fprintf(fp,"\n%s%d",name,n);fclose(fp);/用完要關(guān)閉文件/}第二部分模塊實現(xiàn):用文件完善學(xué)生成績管理系統(tǒng)1.對子函數(shù)的調(diào)用改變原來的調(diào)用方式,例如:xueshengnumber=mycreat(xueshengnumber,record);改成:mycreat();相應(yīng)的函數(shù)聲明為:voidmycreat();其他的依此類推,下面給出子函數(shù)聲明。voidprintmenu();voidmyshow();voidmyselect();voidmymodify();voidmyadd();voidmydelete();voidmysort();第二部分模塊實現(xiàn):用文件完善學(xué)生成績管理系統(tǒng)2.利用文件對子函數(shù)進(jìn)行改寫(1)錄入學(xué)生成績(2)顯示學(xué)生成績(3)查詢學(xué)生成績(4)修改學(xué)生成績(5)添加學(xué)生記錄(6)刪除學(xué)生記錄(7)排序?qū)W生成績8.4文件的其他操作1.字符讀、寫函數(shù)(1)用法fgetc函數(shù)的功能是從指定的文件中讀入一個字符。函數(shù)調(diào)用的形式為:字符變量=fgetc(文件指針名);fputc函數(shù)的功能是把一個字符寫入指定的文件中。函數(shù)調(diào)用的形式為:fputc(字符變量,文件指針名);8.4文件的其他操作1.字符讀、寫函數(shù)(2)功能字符讀寫函數(shù)是以字符(字節(jié))為單位的讀寫函數(shù)。每次可從文件讀出或向文件寫入一個字符。(3)說明fgetc函數(shù)使用時,指定的文件必須是以讀或讀寫方式打開的;fputc函數(shù)使用時,指定的文件必須是以讀或讀寫方式打開的。8.4文件的其他操作2.字符串讀、寫函數(shù)(1)用法fgets函數(shù)的功能是從指定的文件中讀一個字符串到字符數(shù)組中。函數(shù)調(diào)用的形式為:fgets(字符數(shù)組名,n,文件指針);fputs函數(shù)的功能是向指定的文件寫入一個字符串。其調(diào)用形式為:fputs(字符串,文件指針);fgets函數(shù)中,n是一個正整數(shù)。表示從文件中讀出的字符串不超過n1個字符。在讀入的最后一個字符后加上串結(jié)束標(biāo)志'\0'。例如:fgets(str,n,fp);的意義是從fp所指的文件中讀出n1個字符送入字符數(shù)組str中。在讀出n1個字符之前,如果遇到了換行符或文件結(jié)束符EOF,則讀出結(jié)束。8.4文件的其他操作2.字符串讀、寫函數(shù)(2)功能字符串讀寫函數(shù)是以字符串(字節(jié))為單位的讀寫函數(shù)。每次可從文件讀出或向文件寫入一個字符。(3)說明fgets函數(shù)使用時,該文件必須是以讀或讀寫方式打開的;fputs函數(shù)使用時,該文件必須是以讀或讀寫方式打開的。8.4文件的其他操作3.?dāng)?shù)據(jù)塊讀、寫函數(shù)(1)用法fread讀數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:fread(buffer,size,count,fp);fwrite寫數(shù)據(jù)塊函數(shù)調(diào)用的一般形式為:fwrite(buffer,size,count,fp);其中,buffer是一個指針,在fread函數(shù)中,表示存放輸入數(shù)據(jù)的首地址;在fwrite函數(shù)中,表示存放輸出數(shù)據(jù)的起始地址;size表示每個數(shù)據(jù)塊的字節(jié)數(shù);count表示待讀寫的數(shù)據(jù)塊塊數(shù)。

8.4文件的其他操作3.?dāng)?shù)據(jù)塊讀、寫函數(shù)(2)功能用于整塊數(shù)據(jù)的讀寫函數(shù)??捎脕碜x寫一組數(shù)據(jù),如一個數(shù)組元素,一個結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論