c語言課程設(shè)計學(xué)生成績管理系統(tǒng)七大功能模塊_第1頁
c語言課程設(shè)計學(xué)生成績管理系統(tǒng)七大功能模塊_第2頁
c語言課程設(shè)計學(xué)生成績管理系統(tǒng)七大功能模塊_第3頁
c語言課程設(shè)計學(xué)生成績管理系統(tǒng)七大功能模塊_第4頁
c語言課程設(shè)計學(xué)生成績管理系統(tǒng)七大功能模塊_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國地質(zhì)大學(xué)本科生課程論文封面課程名稱C語言課程設(shè)計教師姓名本科生姓名本科生學(xué)號20111000013本科生專業(yè)安全工程所在院系類別:本科生日期:2013 -1-122課程設(shè)計評語對課程論文的評語平時成績:課程論文成績:總成績:評閱人簽名:注:1無評閱人簽名成績無效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;3、如有平時成績,必須在上面評分表中標(biāo)出,并計算入總成績。目錄課程設(shè)計評語 2目 錄 31課程論文題目 42程序設(shè)計思路 43功能模塊圖 54數(shù)據(jù)結(jié)構(gòu)設(shè)計 75算法設(shè)計 86程序代碼 137程序運行結(jié)果 208編程中遇到的困難及解決方法 239總結(jié)心得及良好建議 2410 致謝 2541

2、 課程論文題目學(xué)生成績管理系統(tǒng):【要求】設(shè)計“學(xué)生成績管理系統(tǒng)” ,實現(xiàn)學(xué)生成績的錄入、顯示、查找、添加、保存 以及成績排序等功能模塊。要求功能選擇用菜單實現(xiàn),數(shù)據(jù)輸入和結(jié)果輸出要求 用文件存放。原始數(shù)據(jù)文件格式(具體數(shù)據(jù)自行編寫) :學(xué)號 姓名 英語 c 語言 高等數(shù)學(xué) 平均成績1張三758580802李四.2程序設(shè)計思路【思考】( 1) 需求分析由于要錄入、讀取、保存學(xué)生成績信息,因而要實現(xiàn)文件的輸入輸出功 能;要求用戶可以查詢各個學(xué)生的成績,并且可以添加學(xué)生成績信息等,因 而要提供查找和添加功能;另外,還應(yīng)該提供鍵盤式選擇菜單以實現(xiàn)功能選 擇。(2) 總體設(shè)計可以將這個系統(tǒng)的設(shè)計分為數(shù)據(jù)

3、輸入、 數(shù)據(jù)顯示、 數(shù)據(jù)查找、成績排序、 保存數(shù)據(jù)、讀取數(shù)據(jù)、數(shù)據(jù)插入 7 個模塊。(3) 數(shù)據(jù)結(jié)構(gòu)把學(xué)生的學(xué)號、姓名、科目成績、平均成績作為結(jié)構(gòu)體成員,存放若干 學(xué)生信息用結(jié)構(gòu)體數(shù)組。53.功能模塊圖【輸入學(xué)生數(shù)據(jù)模塊】:void input(struct Student sdu)<int i; printF('l>>«:*«*»*>*<*#*<*>*<»<*n*1); Pr-intFfi#錄入學(xué)生信息,學(xué)號姓名英語嘴盲高等數(shù)送(數(shù)據(jù)之間用空格P硏八for(i = B;i <N;i +

4、*)5Cdnf("%d %s %F %f tf", &sdui.num, sdui. name, &£dui.E(iB &sdu±>ct tsdui sdufi.duerM(sdui.Eng*sdui.c*sdui.nathj/3;pr jntF("*if* 輸, W應(yīng)書筈書薈長薈昌關(guān)關(guān)事關(guān)再關(guān)礙來褂關(guān)囲關(guān)番來*來番衽番蓋*螯*rf )/紜【顯示學(xué)生數(shù)據(jù)模塊】:vvid print(stniEt Student sdu|J)<int i;printf ('*fl*1*»#«

5、1;*!*n#*A# 輸出結(jié)卑尢;printFr學(xué)號姓名一 英語 匚語言 嵩髯辭平均成護嚴;/ i§歷輔岀學(xué)生低縣printf ("m Us %8TF %B.1F 19.1F He.1fn°li sriui .nuniv 5tfuiname. 5dui.Enga sOui|,cB. 5dui .Hath. sduil .aver);>/ M W W-1f W-W ilU-1 為搐岀格式包【查詢信息模塊】:void search(struct Student sdu >“ int 1n性"定乂鯉雯*丄用來捋牧需査詢的學(xué)宦的勢 printtCif

6、人要査詢的孝塵的學(xué)號:“);SEAil-f (|B%Jtl4|lp &rm:n get );訊“帆腫“5心1“町 ti追石査找,如果前人的羊號石成員M某個學(xué)號胡等別抉行正面期I示語胡嘴出該學(xué)主的信.虬巔宕<prlinitf (°*”in申學(xué)號姓名 英語 謫言平均fiWW"printiFr3d 雷話e.lfduiil.nun, '.iJijj.nnep S,du i .Eiiy(lui.ridtnpbreak;*所戲n4');ixdui.dVvr);if(i>'N)PHntfr±該學(xué)生信患! 5%"當(dāng)值”附表至未

7、査找芻棚應(yīng)的學(xué)生的學(xué)號.則撫亍握示諛語旬78【數(shù)據(jù)排序模塊】:uuid 'b-i (struct student: .-u)iint i, k,:;struct Student tenp;For (i=B;i<N-1<根據(jù)學(xué)生的平均成績從高到低進行排Fdf/ 用選擇排序,<iFliidufij-dui1 r <i>du(j .duet );>prliiLC *成績叢高到低排序結(jié)果九【數(shù)據(jù)保存模塊】:uoid()FILE *Fp1;int i ;if ( (fp1=fopen (student.tMf, "w") )=NULL)&l

8、t;printfC'cnnot open filen");return;"定義文件指針變量£PT"將印1指向所打開的SturiPRt.txt文件/如舷件打開失敗則握示邃語句Fprintf(fpl/ts", tips昇 For (i=0;i<N;i*+)"將主函數(shù)前的提示性語句探隹到打托fclose(fpl);prints ("*>*fprinhf( .第(I 崔職 訴一卄 誘一卄 %8.1f tlfl.lFXn'srluli .num, SElui . naniP , sriui.【數(shù)據(jù)讀取模塊】

9、:void read()<FILE »Fp?; int i;if (f p2«Fopen(studFrat "tiB) ) =HJLL)iprintf("canniot open this FijlEf + rT”】; return fl;>F<ir(i = O;UpL.iJt=fla*+)F軌yF甘DEJTkJ 吐iMli畀for f i牡時辭程茗豆進】區(qū)苜區(qū)需散?平覽虛丹 WfscanF(Fp?,a%d *F %F tf, &duiL.nn叭fclo5e(Fp?);"將Fp對詣指向哀杵的信息區(qū)打開方式為讀"

10、;打開袁杵失數(shù)的提云語旬5/爛豔|曙置鬱蘿竊翳蠶鬲熾宇土信息,實際輸曲亓未輸Vrsdiiril, nanFB iHsduil,Eng, i&£duriBcv Ksdiuri,ruith, ifisdurllr); ;wmE1 息prin tf (*«*fl*B*n*»*,«*ff#R*ff-R-H*iiff【數(shù)據(jù)插入模塊】ucldinsert()int "宀w;"宦義目的是動杏選擇恬氐學(xué)生啊SprintfC'il僅入.羽學(xué)主亍亂":圧平亠MfC'1", m/輸入誤展人的學(xué)亙的!鍛請錄人學(xué)生恬

11、息學(xué)號姓苦英語u語咅高導(dǎo)樹堂蝕據(jù)之聞用空格隔開: WJ;|pllnt-F("'l*B i«-HHHHH-N-fe«-M41HHHH-ii*-ii-M44HMHN-»««-HHHHH-N-»«HHHHHH-M-»««HHHHH-U-«H-HHHHH-H#-Bi-ljHHHHN-ai-««|r|") ?%疊謔臺裁裟世時呼生的篤屮t幵始廻卿人學(xué)生魏鸚鴨活則前面的刪糕I送 cjfiF('*d Xf V Wp ft. du!H-S imp*

12、 j .ini;np .du!H-trnfi* , iuiiw, fi1 hH-I i'n|:* j .Efi4j;p £ dul4-ti*np* .1: p .n.iil h;stiuH-teiip* j .awerH(sduNHtBRi*j | 叭百阿卜“叩巧-c*du: N-t p«fi* j j. nt in )/3 -printfC'NMi*播丸成砂! * "插人成功后的提示i百句4.數(shù)據(jù)結(jié)構(gòu)設(shè)計結(jié)構(gòu)體成員表列:把學(xué)生的學(xué)號、姓名、科目成績、平均成績作為結(jié)構(gòu)體成員,存放若干 學(xué)生信息用結(jié)構(gòu)體數(shù)組。用 while 循環(huán)控制功能菜單的選擇,

13、swith 中設(shè)置 相應(yīng)的功能模塊函數(shù)調(diào)用,調(diào)用完一個函數(shù)后然后返回 while 進行判斷,結(jié) 果為真則進行功能菜單的選擇,如果條件為假則終止函數(shù)。5 算法設(shè)計( 1) 總體設(shè)計把學(xué)生的學(xué)號、姓名、科目成績、平均成績作為結(jié)構(gòu)體成員,存放若干 個學(xué)生的信息用結(jié)構(gòu)體數(shù)組。將要實現(xiàn)的功能分為一個一個的函數(shù)模塊,需 實現(xiàn)哪個供的語句時就調(diào)用該功能語句。而要實現(xiàn)菜單式的功能選擇又需要 while 中嵌套 swith 語句,即調(diào)用完一個函數(shù)后進行 while 判斷, while 中的條 件控制語句如果為真,則執(zhí)行功能選項,然后進行swith判斷,符合case幾的選項就調(diào)用相應(yīng)的函數(shù),然后再進行 while

14、 判斷,直到不符合條件是跳出 循環(huán),結(jié)束函數(shù)。這樣就實現(xiàn)了函數(shù)的菜單式功能選擇并得到相應(yīng)的結(jié)果。(2) 各個功能模塊的設(shè)計各個函數(shù)功能模塊實現(xiàn)不同的功能,且互相不影響。加入需同時實現(xiàn)二 個或兩個以上的函數(shù)就同時調(diào)用函數(shù),這與函數(shù)模塊之間互相獨立互不影響 不矛盾,而且這樣寫思路清晰,程序可讀性高,不易出錯,能夠插入你想要 的模塊功能而不影響其他的函數(shù)和整體。( 3) 輸入數(shù)據(jù)模塊具體算法首先是聲明結(jié)構(gòu)體,然后定義結(jié)構(gòu)體數(shù)組,確定需輸入學(xué)生的個數(shù),即 結(jié)構(gòu)體數(shù)組的長度,數(shù)組的每一個元素都包含結(jié)構(gòu)體中的所有成員,即一個 學(xué)生的所有信息。用 for 循環(huán)遍歷分別輸入每一個學(xué)生的: 學(xué)號、姓名、英語成績

15、、 c 語 言成績、高等數(shù)學(xué)成績,計算平均成績。循環(huán)結(jié)束完后即完成了數(shù)據(jù)的錄入 操作。代碼如下:void input(struct Student sdu)int i;printf("請錄入學(xué)生信息:學(xué)號姓名英語c語言高等數(shù)學(xué)(數(shù)據(jù)之間用 空格隔開) :n");for(i=0;i<N;i+) scanf("%d %s %f %f %f", &sdui.num, sdui. name, &sdui.Eng, &sdui.c, &sdui.math);sdui.aver=(sdui.Eng+sdui.c+sdui.mat

16、h)/3;( 4) 學(xué)生信息輸出模塊具體算法輸出學(xué)生數(shù)據(jù)跟輸入學(xué)生信息類似, 用 for 循環(huán)遍歷結(jié)構(gòu)體中的每一個成 員,設(shè)置輸出格式,就能完成每一個學(xué)生信息的輸出顯示功能。代碼如下: void print(struct Student sdu)int i;for(i=0;i<N;i+)printf("%3d %8s %8.1f %8.1f %8.1f %10.1fn", sdui.num, sdui. name, sdui.Eng, sdui.c, sdui.math, sdui.aver);( 5)學(xué)生信息查詢模塊具體算法 查詢原理是,根據(jù)學(xué)生的學(xué)號查詢。定義一個

17、變量接收要查詢學(xué)生的學(xué)號, 然后用 for 循環(huán)中嵌套 if 語句遍歷查找結(jié)構(gòu)體成員中的學(xué)號成員,如果查到相等 的學(xué)號,執(zhí)行輸出語句,輸出該學(xué)生的所有信息,最后執(zhí)行break終止循環(huán)。如果 未找到匹配的學(xué)號則N值>=N,此時執(zhí)行提示語句,“無該學(xué)生信息!”最后結(jié)束 循環(huán)到功能選擇菜單。代碼如下:void search(struct Student sdu)inti,num_get;printf(" 請輸入要查詢的學(xué)生的學(xué)號 : ");scanf("%d", &num_get);for (i=0;i<N;i+)if(num_get=sd

18、ui.num) printf("%3d %8s %8.1f %8.1f %8.1f %10.1fn", sdui.num, , sdui.Eng, sdui.c, sdui.math, sdui.aver); break;if(i>=N)printf(" 無該學(xué)生信息! n");( 5) 學(xué)生成績排序模塊排序集體算法 按學(xué)生平均成績由高到低進行排序。用選擇排序的方法進行排序,排序成功 后再調(diào)用輸出函數(shù),實現(xiàn)學(xué)生平均成成績由高到低的信息的輸出。代碼如下: void order(struct Student sdu)int i, k,

19、 j; struct Student temp;for (i=0;i<N-1;i+)k=i;for (j=1;j<N;j+) if(sdui.aver<sduj.aver) k=j;if (k!=i) temp=sdui;sdui=sduk;sduk=temp; ( 6) 保存學(xué)生信息模塊具體算法首先定義一個結(jié)構(gòu)體指針變量fp1,然后將文件指向打開文件的信息區(qū),設(shè)置打開文件方式為寫方式,如果打開文件失敗則執(zhí)行提示語句,如果打開文件成功執(zhí)行 fprintf 函數(shù),將結(jié)構(gòu)體成員中的信息按指定的格式輸出到 fp1 指向的文件中, 關(guān)閉文件,然后返回到功能選項菜單。代碼如下: voi

20、d save()FILE *fp1;int i;if ( (fp1=fopen ("student.txt", "w") )=NULL)printf("cannot open filen"); return;fprintf(fp1,"%s", tips);for (i=0;i<N;i+) fprintf(fp1,"%3d %8s %8.1f %8.1f %8.1f %10.1fn",sdui.num, sdui. name,sdui.Eng, sdui.c, sdui.math, sdui

21、.aver);fclose(fp1);( 7) 讀取數(shù)據(jù)模塊具體算法與保存數(shù)據(jù)模塊原理一樣,首先定義文件指針變量fp2,將fp2指向要讀取數(shù)據(jù)的文件,設(shè)置打開方式為讀。如果文件打開失敗則執(zhí)行提示語句,如果打開成 功則執(zhí)行下面的讀入數(shù)據(jù)操作,讀入完成關(guān)閉文件,然后后再調(diào)用輸出函數(shù)顯示 讀取的數(shù)據(jù),最后返回到菜單功能選擇。代碼如下: void read()FILE *fp2;int i;if(fp2=fopen("student.txt","r")=NULL)printf("cannot open this file!n"); retur

22、n 0;for(i=0;tipsi!=0;i+)fscanf(fp2,"%c", &tipsi);for (i=0;!feof(fp2);i+)fscanf(fp2,"%d %s %f %f %f %f", &sdui.num, &sdui. name, &sdui.Eng, &sdui.c, &sdui.math, &sdui.aver);fclose(fp2);( 8) 插入學(xué)生信息模塊具體算法 插入學(xué)生信息是在原來設(shè)定的的 N 個學(xué)生基礎(chǔ)上又增加學(xué)生的信息,原理為插入的第一 個學(xué)生是結(jié)構(gòu)體數(shù)組

23、的第 N 個元素。定義整型變量, 可實現(xiàn)選擇添加幾個學(xué)生的信息, 用 for 循環(huán)遍歷輸入,信息輸入完成后執(zhí)行提示語句,即完成了學(xué)生信息的插入功能。代碼如下: void insert()int i,j,temp;printf(" 請輸入插入的學(xué)生個數(shù): "); scanf("%d", &temp);N=N+temp;for (j=0,i=(N-temp);i<N;i+,j+)/ 插入后是從最開始設(shè)置 N 個學(xué)生的第 N 個開始遍歷輸入學(xué)生數(shù)據(jù)數(shù)據(jù), 否則前面的數(shù)據(jù)被 覆蓋scanf("%d %s %f %f %f", &

24、amp;sduN-temp+j.num, sduN-temp+j. name, &sduN-temp+j.Eng, &sduN-temp+j.c, &sduN-temp+j.math);sduN-temp+j.aver=(sduN-temp+j.Eng+sduN-temp+j.c+sduN-temp+j.math)/3; 注意:為了節(jié)省篇幅程序模塊中的大多注釋都已刪除,如有不明白的地方可參考源程序中的 注釋!6程序代碼# include <stdio.h>struct Student int num;char name20; float Eng;float

25、c; float math;float aver;/ 聲明結(jié)構(gòu)體,成員表列包括下列成員:/ 學(xué)號/ 姓名/ 英語成績/ c 語言成績/ 高等數(shù)學(xué)/ 平均成績sdu100; / 定義結(jié)構(gòu)體數(shù)組,數(shù)組長度為 100 ,數(shù)組的每一個 元素都包含結(jié)構(gòu)體的所有成員數(shù)據(jù)int N=3;定義一個全局變量N,用來控制需輸入的學(xué)生的個數(shù),為了節(jié)省時間這里設(shè)置數(shù)組長度為 3char tips=" 學(xué)號 姓名 英語 c 語言 高等數(shù)學(xué) 平均成績 : n"/定義數(shù)組,目的是當(dāng)學(xué)生信息存到文件的同時將該文件存到文件中,起提示作用int main()void input(struct Student

26、sdu); 學(xué)生信息函數(shù)void print(struct Student sdu); 生信息函數(shù)void search(struct Student *p); 學(xué)生信息函數(shù)void order(struct Student sdu); 平均成績排序函數(shù)void save();保存學(xué)生信息函數(shù)函數(shù)/ 聲明輸入/ 聲明輸出學(xué)/ 聲明查找/ 聲明學(xué)生/ 聲明void read();/ 聲明從保存文件中讀取學(xué)生信息函數(shù)void insert();/ 聲明插入學(xué)生信息函數(shù)int menu;義整型菜單選項/ 定15/* 菜單功能提示性模塊 */printf(16*n");printf(&quo

27、t;* *n");printf("*n");printf("*n");printf("* *n");printf("*n");printf("*n");printf("*n");printf("* *n");printf("* *n");printf("*6) *n");printf("* *n");printf("*輸入學(xué)生數(shù)據(jù)(請輸入1)查詢(請輸入 3 )將學(xué)生信息保存到

28、文件中 (請輸入 5)輸出學(xué)生信息(請輸入2)成績排序(請輸入 4 )從文件中讀取學(xué)生信息 (請輸入17插 入 學(xué) 生 信 息 ( 請 輸 入 7)printf(*n");*n");printf("*n");printf("*n");printf("*n");H*#/ 菜單選項變量初始化為 1,menu=1;目的是進入 while 下面的 switch 語句選擇#while(menu>=1 && menu<=7)/ 該系統(tǒng)要實現(xiàn)七個功能, 每#一個數(shù)字代表一個函數(shù)模塊printf(&qu

29、ot; 請輸入功能選項 : "); scanf("%d", &menu);switch(menu)case 1: input(sdu);息函數(shù)break;case 2: print(sdu); 函數(shù)break;case 3:search(sdu);息函數(shù)break;case 4: order(sdu); print(sdu); 績排序函數(shù)和輸出學(xué)生信息函數(shù) break;case 5: save(); 息函數(shù) break;case 6: read(); 息函數(shù)和輸出學(xué)生信息函數(shù) print(sdu); break;case 7: insert(); 息函數(shù)b

30、reak;default: printf("error!n"); 該語句,終止/ 當(dāng)選擇 1 時,調(diào)用輸入學(xué)生信/ 當(dāng)選擇 2 時,調(diào)用輸出學(xué)生信息/ 當(dāng)選擇 3 時,調(diào)用查詢學(xué)生信/ 當(dāng)選擇 4 時,調(diào)用學(xué)生平均成/ 當(dāng)選擇 5 時,調(diào)用保存學(xué)生信/ 當(dāng)選擇 6 時,調(diào)用讀取學(xué)生信/ 當(dāng)選擇 7 時,調(diào)用插入學(xué)生信/ 當(dāng)選擇不在 1-7 范圍內(nèi)時,執(zhí)行 switch 語句,然后跳出循環(huán),函數(shù)結(jié)束break;1920return 0;/* 定義輸入學(xué)生信息模塊 */ void input(struct Student sdu) int i;printf( *n")

31、;printf(" 請錄入學(xué)生信息: 學(xué)號 姓名 英語 c 語言 高等數(shù)學(xué)(數(shù)據(jù)之間用空格隔開) n"); / 該語句為提示性語句for(i=0;i<N;i+) / 從數(shù)組的第一個元素遍歷,從終端鍵盤輸入設(shè)定數(shù)目的學(xué)生信息scanf("%d %s %f %f %f", &sdui.num, sdui. name, &sdui.Eng, &sdui.c, &sdui.math);sdui.aver=(sdui.Eng+sdui.c+sdui.math)/3;printf(H*入完成#*n");*/ 輸入完學(xué)生

32、信息后的提示語句,以便進入下一個功能選項/* 定義輸出學(xué)生信息模塊 */ void print(struct Student sdu) int i;printf(H*printf(" 學(xué)號 姓名 英語c 語言輸出結(jié)果高等數(shù)學(xué) 平均成績 n");for(i=0;i<N;i+)/ 遍歷輸出學(xué)生信息printf("%3d %8s %8.1f %8.1f %8.1f %10.1fn", sdui.num, sdui. name, sdui.Eng, sdui.c, sdui.math, sdui.aver);/ 3d %8s %8.1f %8.1f %8.

33、1f %10.1 為輸出格式,定義數(shù)據(jù)的域?qū)?/* 定義查詢學(xué)生信息模塊 */void search(struct Student sdu)num_get;int i,/ 定義 num_get 整型變量,用來接收需查詢的學(xué)生的學(xué)號 printf(" 請輸入要查詢的學(xué)生的學(xué)號 : "); scanf("%d", &num_get);for (i=0;i<N;i+)if(num_get=sdui.num) / 遍歷查找,如果輸入的學(xué)號與成員中的某個學(xué) 號相等則執(zhí)行下面的提示語句和輸出該學(xué)生的信息,最后 break 結(jié)束循環(huán)21#printf(*

34、n");printf(" 學(xué)號 姓名英語所查學(xué)生信息為c 語言 高等數(shù)學(xué) 平均成績 n");printf("%3d%8s %8.1f %8.1f%8.1f %10.1fn",sdui.num, ,#/ 當(dāng) i 的值 >=N 時則表示未查找到相應(yīng)的/ 用選擇排序, 根據(jù)學(xué)生的平均成績從高sdui.Eng, sdui.c, sdui.math, sdui.aver); break;if(i>=N) printf(" 無該學(xué)生信息! n"); 學(xué)生的學(xué)號,則執(zhí)行提示該語句/* 定義學(xué)生成績排序模塊 *

35、/ void order(struct Student sdu) int i, k, j;struct Student temp;for (i=0;i<N-1;i+)k=i;for (j=1;j<N;j+) 到低進行排序if(sdui.aver<sduj.aver)k=j; if (k!=i)temp=sdui;sdui=sduk;sduk=temp;printf(*n");成績從高到低/ 排序成功后的提示性語句排序結(jié)果為22#/ 定義文件指針變量 fp1/ 將 fp1 指向所打開的 student.txt/ 如果文件打開失敗則提示該語/ 將主函數(shù)前的提示性語句保f

36、or (i=0;i<N;i+)fprintf(fp1,"%3d%8s %8.1f %8.1f %8.1f%10.1fn",sdui.num,sdui. name,/* 定義保存學(xué)生信息模塊 */ void save()FILE *fp1;int i;if ( (fp1=fopen ("student.txt", "w") )=NULL) 文件的信息區(qū) ,打開文件方式為寫printf("cannot open filen");句return;fprintf(fp1,"%s", tips);

37、存到打開的文件中#/ 將變量中的學(xué)生信息sdui.Eng, sdui.c, sdui.math, sdui.aver);按預(yù)定的格式存入到打開的文件中fclose(fp1);printf(H*n"性語句/ 保存成功后關(guān)閉文件已將學(xué)生的信息保存到文件中/ 信息保存成功的提示#/* 讀取保存在文件中的學(xué)生信息模塊 */ void read()FILE *fp2;int i;/ 將 fp2 指針指向文件的信息區(qū),if(fp2=fopen("student.txt","r")=NULL) 打開方式為讀#printf("cannot open

38、this file!n"); return 0;/ 打開文件失敗的提示語句23for(i=0;tipsi!=0;i+)/ 遍歷從保存的文件中讀取文件中的提示語句fscanf(fp2,"%c", &tipsi);/ 讀取該提示信息是為了能夠順利讀取存入的學(xué)生信息,實際輸出時并未輸出該提示語句for (i=0;!feof(fp2);i+) fscanf(fp2,"%d %s %f %f %f %f", &sdui.num, &sdui. name, &sdui.Eng, &sdui.c, &sdui.

39、math, &sdui.aver); / 遍歷讀取保存在文件中 的學(xué)生信息fclose(fp2); / 讀取成功后關(guān)閉文件printf(*n");從文件中讀取的數(shù)據(jù)/ 讀取成功后的提示語句/* 定義插入學(xué)生信息模塊 */void insert()int i,j,temp;態(tài)選擇插入學(xué)生個數(shù)printf(" 請輸入插入的學(xué)生個數(shù): "); scanf("%d", &temp);/ 定義 temp 整型變量,目的是動/ 輸入需插入的學(xué)生的個數(shù)printf(H*n");#printf(" 請錄入學(xué)生信息: 學(xué)號 姓

40、名 英語 c 語言 高等數(shù)學(xué)(數(shù)據(jù)之間用空格隔開)n");N=N+temp; / 插入后的學(xué)生個數(shù)for (j=0,i=(N-temp);i<N;i+,j+) / 插入后是從最開始設(shè)置 N 個學(xué)生 的第 N 個開始遍歷輸入學(xué)生數(shù)據(jù)數(shù)據(jù),否則前面的數(shù)據(jù)被覆蓋scanf("%d %s %f %f %f", &sduN-temp+j.num, sduN-temp+j. name, &sduN-temp+j.Eng, &sduN-temp+j.c, &sduN-temp+j.math);sduN-temp+j.aver=(sduN-t

41、emp+j.Eng+sduN-temp+j.c+sduN-temp+j.math)/3;printf(H*插入成功*n"); /插入成功后的提示語句#7.程序運行結(jié)果菜單展示:*C:Ue rsAdmini5tratoADesktopaDebugc.exe24#輸入學(xué)生數(shù)據(jù)(請輸入1)輸出學(xué)生信息(請輸入;:)iW查詢請輸入3)成績排序(請輸入初#將學(xué)生信息保存到文件中(請輸入5)從文件中讀取學(xué)生信息(請輸人G :#插入學(xué)生信息(請輸入7)請輸入功能選項,1.輸入功能展示:2. 顯示功能展示:請輸入功能選項:2U J V HT輸岀結(jié)果為I學(xué)號姓銃英語G語百高等數(shù)學(xué)平均成績2)10 /卿

42、衛(wèi)85.0盹”32011 <81,®89,095.088-312012 丿7&,087.0B5.B33-3H青輸入功能選項:13. 查詢功能展示:“吾言85.8V.87.:2011000 語fl-二 英:?號學(xué)的J生 無學(xué) 名燈<& MJdqdl- 功要入入高等數(shù)學(xué)B5.0平詢成績86.38.363.3龍11%"吾言95,0XXMJCXXJOCHHXXJOOCMXJOCXXHXJOOCXM平均成績&B.33_ B!環(huán) 選詢盤 .能查聶 功要生功 aa¥a 務(wù)該輸 請請無請201425#4. 成績排序功能展示:4|汪疋梵耳耳耳aa

43、nMi 平均成績20102M12疋址耳耳耳1»11驚學(xué)序果數(shù)価.0齧等財肌*成績從咼if flf羸光光梵耳耳11 cig =W89,«985.0087.0#26保存功能展示:#光耳耳EE請輸入功能選項:5 iWWEEXfIMiEXiMiMtiE 請輸入功能選項:#6.讀取數(shù)據(jù)功能展示:| student.txt -記事本請輸入功能選項:&學(xué)號 姓苞2Q11 2&1Q 2M12請輸入功能選項:英諳81.0S8.078,0S宀3 0 從S言仁 f41 二數(shù)派團學(xué) 矍數(shù).0 讀結(jié)等95 £高t居 員員買貝K良覚理科黑:H UH員HM員員K輻鼻覺班黑: 平

44、均成績8S.385,086.0«?.MB5.0&3,37.插入學(xué)生信息功能展示:=哼舊 棊竊 喘式。詐:li =r.Hiux 于冇 20112010201220132014英語E.93.c語言89.0858L090.087.0o o o o OMr5.685-7.6.9 8 8 ©0 8平均咸績;88.386.383.3S3. 388.7288編程中遇到的困難及解決方法1) 總體設(shè)計中遇到的問題是, 知道每一個功能都能通過一個獨立的函 數(shù)來實現(xiàn),知道學(xué)生數(shù)據(jù)用結(jié)構(gòu)體形式存儲, 但是一次只能一開始 遇到的瓶頸是函數(shù)沒辦法返回到菜單選項,一次只能執(zhí)行

45、一個函 數(shù)。程序完成之初, 先完成的是每一個獨立功能函數(shù), 其中的大多 函數(shù)模塊來自于 c 程序設(shè)計教材和 c 語言課程設(shè)計及學(xué)習(xí)指 導(dǎo)。最后完成的是菜單功能循環(huán)選擇功能,即 while 循環(huán)語句的 運用。這個思想來自于 c 語言課程設(shè)計及學(xué)習(xí)指導(dǎo)中的工資信 息管理實現(xiàn)思路。2) 本程序有 7個功能模塊函數(shù), 其中的輸入功能、 輸出顯示功能、排 序功能、數(shù)據(jù)保存到文件功能、 從保存的文件中讀取數(shù)據(jù)功能很好 實現(xiàn),因為前面講的兩本書中都有模塊! 插入學(xué)生信息功能和查詢 功能難度稍大一點。下面就敘述一下當(dāng)時我是怎樣思考這個問題 的。3) 插入功能。教材上的例題是將結(jié)構(gòu)體數(shù)組的長度在函數(shù)的最前面宏 定義為一個常數(shù),當(dāng)需要改變結(jié)構(gòu)數(shù)組長度時,只需將 N 定義為 另一個常數(shù)即可, 但是假

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論