C語言程序設(shè)計學(xué)生信息的讀取與保存_第1頁
C語言程序設(shè)計學(xué)生信息的讀取與保存_第2頁
C語言程序設(shè)計學(xué)生信息的讀取與保存_第3頁
C語言程序設(shè)計學(xué)生信息的讀取與保存_第4頁
C語言程序設(shè)計學(xué)生信息的讀取與保存_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計 語言程序設(shè)計 項目十十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存- -文文 件件 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 【項目要求】【項目要求】 從文件從文件a.txta.txt讀取某班的期末考試成績,按總分讀取某班的期末考試成績,按總分 排序后寫入另外一個文件排序后寫入另外一個文件 b.txtb.txt。 【項目分析】【項目分析】 在上一章實現(xiàn)的項目中發(fā)現(xiàn),每次運行程序都要輸在上一章實現(xiàn)的項目中發(fā)現(xiàn),每次運行程序都要輸 入大量的數(shù)據(jù),如果用我們以前學(xué)過的輸入的方法入大量的數(shù)據(jù),如果用我們以前學(xué)過的輸入的方法 就很不方便

2、,最常用的方法就是預(yù)先將這些數(shù)據(jù)寫就很不方便,最常用的方法就是預(yù)先將這些數(shù)據(jù)寫 到一個文件里,再將這個文件存放在磁盤上,需要到一個文件里,再將這個文件存放在磁盤上,需要 時再將數(shù)據(jù)從該文件中讀取。時再將數(shù)據(jù)從該文件中讀取。 為實現(xiàn)本項目需要經(jīng)過打開文件、從文件進(jìn)行數(shù)據(jù)為實現(xiàn)本項目需要經(jīng)過打開文件、從文件進(jìn)行數(shù)據(jù) 的讀的讀/ /寫、關(guān)閉文件指針三步。寫、關(guān)閉文件指針三步。 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 問題情境及實現(xiàn)問題情境及實現(xiàn) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #i

3、nclude #include #define N 100#define N 100 typedef struct studenttypedef struct student char num11;char num11; char name9;char name9; int score3;int score3; float avr;float avr; STU;STU; void fsort(STU s,int n) /void fsort(STU s,int n) / 對結(jié)構(gòu)體數(shù)組中的對結(jié)構(gòu)體數(shù)組中的 n n個數(shù)據(jù)進(jìn)行簡單選擇排序個數(shù)據(jù)進(jìn)行簡單選擇排序 int i,j,k;int i,j,k

4、; STU t;STU t; for(i=0;in-1;i+)for(i=0;in-1;i+) k=i;k=i; for(j=i+1;jn;j+)for(j=i+1;jn;j+) if(sk.avrsj.avr) k=j;if(sk.avrsj.avr) k=j; if(i!=k)if(i!=k) t=si;si=sk;sk=t;t=si;si=sk;sk=t; 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 問題情境及實現(xiàn)問題情境及實現(xiàn) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void

5、 main()void main() FILE FILE * *fp1,fp1,* *fp2;fp2; STU sN;STU sN; int i,n,j,sum;int i,n,j,sum; if(fp1=fopen(f:cresource10w2.txt,r)=NULL)if(fp1=fopen(f:cresource10w2.txt,r)=NULL) printf(printf( 找不到該文件找不到該文件 n);/n);/* * 如果打不開文件則給出相應(yīng)的提示如果打不開文件則給出相應(yīng)的提示 * */ / getch();getch(); exit(0);exit(0); i=0;i=0;

6、while(!feof(fp1)/while(!feof(fp1)/* * 從文件中讀取有關(guān)數(shù)據(jù),一直讀到文件末尾從文件中讀取有關(guān)數(shù)據(jù),一直讀到文件末尾* */ / fscanf(fp1,%s%s,si.num,);fscanf(fp1,%s%s,si.num,); sum=0;sum=0; for(j=0;j3;j+)for(j=0;j3;j+) fscanf(fp1,%d,fscanf(fp1,%d, sum+=si.scorej;sum+=si.scorej; si.avr=sum/3.0;/si.avr=sum/3.0;/* * 同時求出平均分同時求出平均分

7、 * */ / i+;i+; 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 問題情境及實現(xiàn)問題情境及實現(xiàn) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(fp1); /fclose(fp1); /* * 關(guān)閉文件關(guān)閉文件 * */ / n=i;n=i; for(i=0;in;i+)for(i=0;in;i+) printf(nprintf(n 第第%d%d個學(xué)生的信息:個學(xué)生的信息: %s %s,i+1,si.num,);%s %s,i+1,si.num,); for(j

8、=0;j3;j+)for(j=0;j3;j+) printf( %d,si.scorej);printf( %d,si.scorej); fsort(s,n);fsort(s,n); fp2=fopen(f:cresource10w2_2.txt,w);/fp2=fopen(f:cresource10w2_2.txt,w);/* *打開文件進(jìn)行保存數(shù)據(jù)打開文件進(jìn)行保存數(shù)據(jù) * */ / for(i=0;in;i+)for(i=0;in;i+) fprintf(fp2,%s %s,si.num,);fprintf(fp2,%s %s,si.num,); for(j=0

9、;j3;j+)for(j=0;j文件讀文件讀/寫寫-關(guān)閉文件關(guān)閉文件 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 2 2 文件的打開與關(guān)閉文件的打開與關(guān)閉(1)(1) 2.1 2.1 打開文件打開文件 函數(shù)原型:函數(shù)原型: FILE *fopen (char *name , char *mode) 要打開的文件名要打開的文件名使用文件方式使用文件方式 返回值:返回值:正常打開,返回指向文件結(jié)構(gòu)體的指針;正常打開,返回指向文件結(jié)構(gòu)體的指針; 打開失敗,為打開失敗,為NULL 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語

10、言程序設(shè)計 語言程序設(shè)計 2 2 文件的打開與關(guān)閉文件的打開與關(guān)閉(2)(2) 2.1 2.1 打開文件打開文件 課堂練習(xí):課堂練習(xí): 打開當(dāng)前文件夾下的打開當(dāng)前文件夾下的 namelist.txt文件,打開方文件,打開方 式為追加式為追加 打開打開d盤盤test文件夾下的文件夾下的namelist.txt文件,如果文件,如果 該文件不存在,就創(chuàng)建該文件,然后增加文件內(nèi)容該文件不存在,就創(chuàng)建該文件,然后增加文件內(nèi)容 課堂練習(xí)編寫課堂練習(xí)編寫 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 2 2 文件的打開與關(guān)閉文件的打開與關(guān)閉(3)(3) 2.

11、2 2.2 關(guān)閉文件關(guān)閉文件 函數(shù)原型:函數(shù)原型: int fclose( FILE *fp ) 返回值:返回值:正常關(guān)閉為正常關(guān)閉為0; 返回主菜單返回主菜單 文件打開時返回文件打開時返回 的文件類型指針的文件類型指針 出錯時出錯時,非非0 課堂練習(xí):關(guān)閉前面課堂練習(xí)中打開的文件課堂練習(xí):關(guān)閉前面課堂練習(xí)中打開的文件 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(1)(1) 3.1 3.1 文件的順序讀寫文件的順序讀寫文件字符輸入文件字符輸入 / /輸出函數(shù)輸出函數(shù) 函數(shù)原型:函數(shù)原型:int fputc ( i

12、nt c, FILE *fp) 功能:把一字節(jié)功能:把一字節(jié)代碼代碼c寫入寫入fp指向的文件中指向的文件中 返值:正常,返回返值:正常,返回 c; ;出錯,為出錯,為EOF 函數(shù)原型:函數(shù)原型:int fgetc ( FILE *fp ) 功能:從功能:從fp指向的文件中指向的文件中讀取一字節(jié)代碼讀取一字節(jié)代碼 返值:正常,返回讀到的代碼值;返值:正常,返回讀到的代碼值; 讀到文件尾讀到文件尾( (EOFEOF) )或出錯或出錯( (NULLNULL) )為止為止 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(1)

13、(1) 3.1 3.1 文件的順序讀寫文件的順序讀寫文件字符輸入文件字符輸入 / /輸出函數(shù)輸出函數(shù) 例例1:從鍵盤輸入若干字符,逐個將它們寫入文從鍵盤輸入若干字符,逐個將它們寫入文 件件”file.txt”中,直到輸入一個中,直到輸入一個”*”為止。為止。 例例1 編寫編寫 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(2)(2) 3.1 3.1 文件的順序讀寫文件的順序讀寫文件字符串輸入文件字符串輸入 / /輸出函數(shù)輸出函數(shù) 函數(shù)原型:函數(shù)原型:int fputs(char *string, FILE *fp)

14、; 功能:把字符串功能:把字符串寫入寫入fp指向的文件中指向的文件中 返值:正常,返回返值:正常,返回 0; ; 出錯,為出錯,為EOF 函數(shù)原型:函數(shù)原型:char *fgets(char *s, int n, FILE *fp); 功能:從功能:從fp指向的文件中指向的文件中讀取長度不超過讀取長度不超過n-1n-1個字符個字符 返值:正常,返回讀到字符串的首地址;返值:正常,返回讀到字符串的首地址; 讀到文件尾讀到文件尾(EOF)或出錯或出錯(NULL)為止為止 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(3

15、)(3) 3.1 3.1 文件的順序讀寫文件的順序讀寫文件的格式化輸入文件的格式化輸入 / /輸出函數(shù)輸出函數(shù) int fprintf(FILE *fp,const char *format,argument,) int fscanf(FILE *fp,const char *format,address,) 功能:按格式對文件進(jìn)行功能:按格式對文件進(jìn)行 I/OI/O操作操作 返值:成功返值:成功, ,返回返回I/OI/O的個數(shù)的個數(shù); ;出錯或文件尾出錯或文件尾, ,返回返回EOFEOF 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3

16、文件的讀寫文件的讀寫(4)(4) 3.1 3.1 文件的順序讀寫文件的順序讀寫文件的格式化輸入文件的格式化輸入 / /輸出函數(shù)輸出函數(shù) 例例3:有如下的學(xué)生結(jié)構(gòu)定義,從鍵盤輸入有如下的學(xué)生結(jié)構(gòu)定義,從鍵盤輸入 4個學(xué)生個學(xué)生 的信息,保存到文件的信息,保存到文件 name-list.txt文件中文件中 struct student_type char name10; int num; int age; char addr15; 例例3 編寫編寫 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(5)(5) 3.1 3.

17、1 文件的順序讀寫文件的順序讀寫文件的數(shù)據(jù)塊輸入文件的數(shù)據(jù)塊輸入 / /輸出函數(shù)輸出函數(shù) 每個要讀每個要讀/ /寫的寫的 要讀要讀/ /寫的文寫的文 數(shù)據(jù)塊的大小數(shù)據(jù)塊的大小 件指針件指針 實現(xiàn)文件操作一次讀取一組數(shù)據(jù)實現(xiàn)文件操作一次讀取一組數(shù)據(jù) (字節(jié)數(shù))(字節(jié)數(shù)) size_t fread(void *buffer,size_t size, size_t count,FILE *fp) size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp) 指向要輸入指向要輸入/ /輸輸 出數(shù)據(jù)塊的首地出數(shù)據(jù)塊的首地 址的指針址的指針

18、要讀要讀/ /寫的數(shù)寫的數(shù) 據(jù)塊的個數(shù)據(jù)塊的個數(shù) 返值:返值:成功,返回讀成功,返回讀/寫的塊數(shù);出錯或文件尾,返回寫的塊數(shù);出錯或文件尾,返回 0 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(6)(6) 2 2 文件的隨機(jī)讀寫操作文件的隨機(jī)讀寫操作 rewindrewind函數(shù)函數(shù) 將文件的指針指向用戶指定的位置,進(jìn)行將文件的指針指向用戶指定的位置,進(jìn)行 文件操作文件操作 rewindrewind函數(shù)函數(shù) 函數(shù)原型:函數(shù)原型:void rewind(FILE *fp) 功能:重置文件位置指針到文件開頭功能:重置

19、文件位置指針到文件開頭 返值:無返值:無 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 #include 3 3 文件的讀寫文件的讀寫(7)(7) main() 2 2 文件的隨機(jī)讀寫操作文件的隨機(jī)讀寫操作 rewindrewind函數(shù)函數(shù) FILE *fp1,*fp2; fp1=fopen(file1.c,r); 例例4: 分析下面程序的功能分析下面程序的功能 fp2=fopen(file2.c,w); while(!feof(fp1) putchar(fgetc(fp1); rewind(fp1); while(!feof(fp1) fpu

20、tc(fgetc(fp1),fp2); fclose(fp1); 從文件中第一次將它內(nèi)容顯從文件中第一次將它內(nèi)容顯 fclose(fp2); 示在屏幕中,第二次讀取將示在屏幕中,第二次讀取將 其復(fù)制到另一個文件中其復(fù)制到另一個文件中 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 C語言程序設(shè)計 語言程序設(shè)計 3 3 文件的讀寫文件的讀寫(7)(7) 2 2 文件的隨機(jī)讀寫操作文件的隨機(jī)讀寫操作 fseekfseek函數(shù)函數(shù) fseekfseek函數(shù)函數(shù) 函數(shù)原型:函數(shù)原型: int fseek(FILE *fp, long offset, int whence) 功能:改變文件位置指針的位置功能:改變文件位置指針的位置 返值:成功,返回返值:成功,返回 0 0;失敗,返回非;失敗,返回非0 0值值 項目十項目十 學(xué)生信息的讀取與保存學(xué)生信息的讀取與保存-文件文件 #include stdio.h struct student_type 3 3 文件的讀寫文件的讀寫(8)(8

溫馨提示

  • 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

提交評論