銅陵學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)模板_第1頁
銅陵學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)模板_第2頁
銅陵學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)模板_第3頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、頷按寥區(qū)2010級課程設(shè)計(jì)報(bào)告系 別:數(shù)學(xué)與計(jì)算機(jī)科學(xué)系信息管理與信息系統(tǒng)專專業(yè):業(yè)班級:2010 級信管班學(xué)號:姓名:二o年十二月數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告規(guī)范要求(按照如下格式完成報(bào)告)一. 課程設(shè)計(jì)目的1. 訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識,獨(dú)立完成問題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識,編寫程序求解 指定問題。2. 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;3. 提高綜合運(yùn)用所學(xué)的理論知識和方法獨(dú)立分析和解決問題的能力;4. 訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),鞏固、深化學(xué)生的理論知識,提高編程水平, 并在此過程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的工作作風(fēng)。二

2、. 課程設(shè)計(jì)任務(wù)與要求:任務(wù)學(xué)生成績管理學(xué)號姓名成績01101李平7501202王露7001205張強(qiáng)8501118曹雨90問題描述:已知某學(xué)生成績表中現(xiàn)有 N位同學(xué)的成績(要求各人數(shù)據(jù)不同),如:知識點(diǎn)提示:在線性表中刪除 某個(gè)指定元素,并在規(guī)定位置插 入一個(gè)新元素,要求操作后的結(jié) 果按元素(姓名)升序的方式顯 示出來?,F(xiàn)需要刪除已轉(zhuǎn)學(xué)的某位同學(xué)的成績,同時(shí)添加某位同學(xué)的成績(學(xué)號、姓名、成績自定),插入位置按姓名升序排列。請根據(jù)所學(xué)過的線性表知識用C/C+編程實(shí)現(xiàn)此操作。程序要求:1. 現(xiàn)有N位同學(xué)的數(shù)據(jù)要求從數(shù)據(jù)文件中讀入,不用交互方式錄入;2. 擬刪除同學(xué)的姓名及新添加同學(xué)的數(shù)據(jù)采用交

3、互方式輸入;3. 刪除及插入操作完畢,需將成績表中的所有記錄按姓名升序方式顯示出來;4. 將更新后的成績表保存到另一個(gè)數(shù)據(jù)文件中;5. 可以增加功能:如修改某位同學(xué)的成績。要求:1. 在處理每個(gè)題目時(shí),要求從分析題目的需求入手,按設(shè)計(jì)抽象數(shù)據(jù)類型、構(gòu)思算法、通過設(shè)計(jì)實(shí)現(xiàn) 抽象數(shù)據(jù)類型、編制上機(jī)程序和上機(jī)調(diào)試等若干步驟完成題目,最終寫出完整的分析報(bào)告。前期準(zhǔn)備工作完備與否直接影響到后序上機(jī)調(diào)試工作的效率。在程序設(shè)計(jì)階段應(yīng)盡量利用已有的標(biāo)準(zhǔn)函數(shù),加大代碼的重用率。2. 設(shè)計(jì)的題目要求達(dá)到一定工作量(300行以上代碼),并具有一定的深度和難度。3. 程序設(shè)計(jì)語言推薦使用 C/C+,程序書寫規(guī)范,源程

4、序需加必要的注釋;4. 每位同學(xué)需提交可獨(dú)立運(yùn)行的程序;5. 每位同學(xué)需獨(dú)立提交設(shè)計(jì)報(bào)告書(每人一份),要求編排格式統(tǒng)一、規(guī)范、內(nèi)容充實(shí),不少于 10頁(代碼不算);6. 課程設(shè)計(jì)實(shí)踐作為培養(yǎng)學(xué)生動手能力的一種手段,單獨(dú)考核。三. 課程設(shè)計(jì)說明書1、需求分析要求用到數(shù)據(jù)結(jié)構(gòu)課上學(xué)到的線性表的知識,所以就要充分而清晰的理解關(guān)于線性表的知識。要求實(shí)現(xiàn)的基本功能很簡單,只有刪除和插入,增加功能也不過是加上修改。這些在數(shù)據(jù)結(jié)構(gòu)課上已 經(jīng)講過,只要能夠理解關(guān)于線性表的幾個(gè)相關(guān)的基本算法就可以了。問題是將輸入的信息保存入文件和從文件輸出。這里基本是自學(xué)的內(nèi)容,而且要考慮到是否要自行選 擇保存的磁盤。綜上,

5、做這個(gè)課題,要具備的知識就是線性表的基本算法,文件的保存和讀取算法,必要的C或者C+知識(本次我將使用C實(shí)現(xiàn)),以及豐富的程序調(diào)適經(jīng)驗(yàn)。2、概要設(shè)計(jì)首先由于程序中要有對學(xué)生信息的增加和減少,定義一個(gè)全局變量n ,在此程序的任意的模塊中均可以使用。宏定義,用LEN來代替開辟地址空間,定義三個(gè)結(jié)構(gòu)體變量,學(xué)號num,姓名name,分?jǐn)?shù)marks.設(shè)計(jì)實(shí)現(xiàn)主要功能的函數(shù)有:創(chuàng)建學(xué)生信息的子函數(shù)creat();排序的子函數(shù)print();查找的子函數(shù)search。;文件保存的子函數(shù) wfile();文件讀取的子函數(shù) frile();插入信息的子函數(shù)insert();修改信息的子函數(shù) xg();刪除轉(zhuǎn)學(xué)

6、學(xué)生的信息的子函數(shù) del();然后在main()函數(shù)中使用一個(gè)switch()語句實(shí)現(xiàn)對各個(gè)子函數(shù)的調(diào) 用。為了使用的方便,程序中將設(shè)計(jì)三種排序的方式,按照學(xué)號排序funn um(),按照姓名的首字母排序funname(),按照分?jǐn)?shù)排序 funmarks()。 在排序子函數(shù) print()中還要用一個(gè)switch()語句用于對不同的 排序方法的函數(shù)的調(diào)用.為了直觀的看到操作以后的結(jié)果,還要有一個(gè)輸出顯示的函數(shù)listall()。程序運(yùn)行中,為了保持屏幕的清楚和美觀,時(shí)刻進(jìn)行清屏也是必要的。抽象數(shù)據(jù)類型線性表的定義如下:ADT List數(shù)據(jù)對象:D=a i| a i ElemSet,i=1,2

7、,3 ,n,n > 0數(shù)據(jù)關(guān)系:R1=<a i-1 ,ai>| a M ,ai D,i=1,2,3, n基本操作:In sert(&L,i,j)初始條件:線性表 L已存在,1 w i w n+1。操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素j,L的長度加1。Del (&L,i,j)初始條件:線性表 L已存在,1 w i w n。操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素丄的長度減1Xg(&L,i,j)初始條件:線性表L已存在。操作結(jié)果:用新的輸入數(shù)據(jù)項(xiàng)j代替原有的指定要修改的數(shù)據(jù)項(xiàng)i。Search(&L,i,e)初始條件:線性表L已存在。操作結(jié)果:查找

8、指定的某元素i,并將值賦給e,用e輸出。3、詳細(xì)設(shè)計(jì)1 )宏定義,定義全局變量、結(jié)構(gòu)體:#define LEN sizeof(struct student)/*宏定義 */static int n;/*n為靜態(tài)全局變量,本文件模塊中各函數(shù)均可使用它*/char numstr100;/*全局變量 */struct student/*定義結(jié)構(gòu)體 */Io ng num;char n ame10;double marks; stu1000,temp;2 )主函數(shù)的算法如下:void mai n()jm:system("cls");do choice=getchar();getch

9、ar();switch(choice)/*switch語句用于循環(huán)選擇所要的選項(xiàng)*/case '1':creat();goto jm;break;case 2:pri nt();goto jm;break;case 3:search();goto jm;break;case '4':wfile();goto jm;break;case '5':frile();goto jm;break;case '6':i nsert();goto jm;break;case '7':xg();goto jm;break;case

10、 '8':del();goto jm;break;case 'O':exit(O);default: /*用戶使用錯(cuò)誤*/puts("nEn ter only select ions listed");break;/*結(jié)束switch 語句*/while(1);/* 結(jié)束 while 語句 */*結(jié)束main函數(shù)*/3) 創(chuàng)建學(xué)生信息的算法如下:creat(void)/*創(chuàng)建學(xué)生成績信息*/while(ch='Y'|ch='y') gets( nu mstr);/輸入學(xué)號stu n. num=atoi( nu

11、mstr); gets(stu n. name);/輸入姓名gets( nu mstr);/輸入成績stu n+.marks=atof( nu mstr); ch=getchar();getchar();/* 用于輸入y或者n*/4) 排序函數(shù)的算法如下:int print(void)/* 排序輸出 */ch=getchar();/* 輸入 a,b,c 的語句 */ switch(ch)/*選擇排序的方式*/case 'a':funn ame();/*調(diào)用按姓名查找的函數(shù)*/getchar();break;case 'b':funm arks(); /*調(diào)用按成

12、績查找的函數(shù)*/getchar();break;case 'c':funnu m();/*調(diào)用按學(xué)號查找的函數(shù) */getchar();break;funname(void)/*按照姓名排序*/if(n<1)printf("tt該文件為空!n");elsefor(i=0;i< n; i+)for(j=i+1;j< n;j+)if(strcmp(stui. name,stuj. name)>0) funm arks(void)/* if(n <1) prin tf("tt temp=stui; stui=stuj; st

13、uj=temp;按照成績排序*/該文件為空!n");else.for(i=0;i< n; i+)for(j=i+1;j< n;j+)if(stui.marks>stuj.marks)temp=stui; stui=stuj; stuj=temp; funnum(void)/*按照學(xué)號排序*/if(n <1)printf("tt該文件為空!n");elsefor(i=0;i< n; i+)for(j=i+1;j< n;j+) if(stui. num >stuj. num)temp=stui; stui=stuj; stuj

14、=temp;5) 寫入文件的算法如下:wfile(void)/* 寫入文件 */FILE *fptr;if(n<1)pri ntf("t 文件為空,無法寫操作!n");else fwrite(stu,sizeof(stu0), n,fptr); fclose(fptr);6) 讀取文件的算法如下:frile(void)/*讀出文件 */FILE *fptr;while(fread( &stui,sizeof(stu0),1,fptr)=1) i+; n=i;fclose(fptr);7 )查找的算法如下:search(void)/* 查找 */flag=0;f

15、or(i=0;i< n;i+)if(strcmp( nu mstr,stui. name)=0)|atol( nu mstr)=stui. num)prin tf("%ld",stui. num);prin tf("%s ",stui. name);prin tf("%.2f ",stui.marks);flag=1; getchar(); return 0;8) 插入的算法如下:in sert(void)/* 插入 */gets( nu mstr);stu n. num=atoi( nu mstr);gets(stu n. n

16、ame);gets( nu mstr);stu n+.marks=atof( nu mstr); funn ame();9) 刪除的算法如下:del(void) /* 刪除 */prin tf("tt請輸入要刪除的學(xué)號:n");gets (nu mstr);for(i=0;i< n; i+)if(stui. num=atol( nu mstr)j=i;flag=1;if(flag=1) for(i=j;i< n;i+)stui=stui+1;n-;10 )修改的算法如下:xg(void)/* 修改 */flag=0;char ch;gets (nu mstr);

17、for(i=0;i< n;i+) if(stui. num=atol( nu mstr) j=i;flag=1;if(flag=1) switch(ch)case '1':prin tf("t請輸入修改后的姓名:");gets(stuj. name);break;case 2:prin tf("t請輸入修改后的成績:");gets (nu mstr);stuj.marks=atof( nu mstr);break;case 'O': return 0; 11 )各個(gè)模塊之間的調(diào)用關(guān)系如下:4、設(shè)計(jì)與調(diào)試分析從上面的算

18、法和調(diào)用關(guān)系可以看出,這個(gè)程序的基本樣子已經(jīng)非常的清楚,但是真正的程序中還要考慮各種限制條件。例如在查找的過程中,可能不存在要查找的信息,就要給出不存在此信息的提示等。還有就是涉及到返回值得問題和程序中所要用到的變量的問題。在調(diào)試的過程中所遇到的問題很多,其中最難的兩個(gè)問題是給出的六個(gè)警告錯(cuò)誤,在5.0的版本下就是兩個(gè)使得程序無法運(yùn)行的錯(cuò)誤。其中五個(gè)是因?yàn)樵谧兞康穆暶髦幸驗(yàn)槭褂昧烁↑c(diǎn)型和雙精度型兩種而造成在某些模塊中兩個(gè)變量相互賦值時(shí)類型不匹配。另一個(gè)是在查找的子函數(shù)中忘記了需要的返回語句,return 1.5、用戶手冊1 )本程序可以在VC+5.0和VC+6.0 的環(huán)境下運(yùn)行。2 )在vc中

19、創(chuàng)建一個(gè)工程,將源程序復(fù)制到.cpp中,編譯鏈接就可以。3 )選擇編譯、運(yùn)行以后會出現(xiàn)運(yùn)行界面,選擇相應(yīng)的選項(xiàng),根據(jù)提示即可進(jìn)行演示。界面如下:2 <- & 8、件'、 呂尊.E.自心“ "D; 堺屋文杵血譏hGUHAIyF" j&ct薊exe*+* + *+學(xué)生成績管理系 統(tǒng)*"m亠4創(chuàng)建信息系統(tǒng)*3.查找成績*開文件十仇修改信息+ p.i頁由索統(tǒng)4 )創(chuàng)建信息就是把最開始要輸入的信息輸入到系統(tǒng)里。5 )瀏覽信息就是按照要求的順序?yàn)g覽已經(jīng)輸入的信息。6)保存信息就是把輸入的信息保存如指定的磁盤。7)打開文件就是把保存的信息從磁盤讀取

20、保存的信息。8 )插入,修改,刪除分另惺對指定的某信息進(jìn)行相應(yīng)的操作6、測試成果' "D: jFXfrVC6i直hGLUtI,Pro曰bu監(jiān) cxeM-+ + 4-+ + +* 學(xué)生成績管理系統(tǒng) +M-+ + + + + + + + +訛請按相應(yīng)的數(shù)字鍵選擇您所需要的操作*2利覽信息+ 乩保存入文件t &-®A信息+ 昭刪除信息 + X創(chuàng)建信息系統(tǒng) 十禮查找成績*撲開文杵* 改信息*退出系統(tǒng)y UJ y n - A > z - n n n n - 01平 W02露彩鵬強(qiáng)“訶雨 W - 1 5(2 UJ 8 C 2|>戈 5 c 1 彗弓 0 (-

21、 1 弓 7 ?- 13 7 1 PT 9 7" 11 9 f - 加 加 加 加回 學(xué)姓成續(xù)學(xué)姓成續(xù)學(xué)姓成續(xù)學(xué)姓成續(xù)犍 入入入繼入入入繼入入入繼入入入繼意 否®®S否否否任 請隹苗請是燭®謫請是請送g請是請送1FI請是按1exen 學(xué)生成績管理系統(tǒng)*請按相應(yīng)的數(shù)字鍵選擇您所需要的操作件 卄 息文息息 信入信信 * 覽艮除 I 瀏保插刪“統(tǒng) 系 1 息績件息統(tǒng)卄 信成文信系- 建找開改出卄 創(chuàng)查曹退*13 5 7 0 * *4-* C 按學(xué)號排序 成績90.0075.0070.0085.00序fcl3 按姓名首 請5S1SS80回.0 0 exen 學(xué)生

22、成績管理系統(tǒng)mu*請按相應(yīng)的數(shù)字鍵選擇您所需要的操作*件 卄 自心文息息 信入信信 * 覽艮除 I 瀏保插刪“統(tǒng) 系 1 息績件息統(tǒng)“ 信成文信系】 建找開改出卄 創(chuàng)查養(yǎng)退一13 5 7 0 * *4-* c 按學(xué)號排序 成績75.0098.0070.0085.00C$1強(qiáng) 序轄畫至張S 一卜|4二 字按 目請 名 姓按0萬011802貼均任 a.學(xué)11111212平按遙保存完畢,關(guān)機(jī)以后下次重新啟動此程序的情況:因?yàn)闆]有打開文件操作,所以在瀏覽的時(shí)候提示為空文件2王成績?也0日70.80呂5 眄日夠70.00750085.639耳內(nèi)0兒技成績排序G按學(xué)號拆序-< "D: jS

23、tfSttVC6TithGLUTIyPro jectsZDeLugX2 ex«及瀏覽信息 乳保帝入文件E 插入信息 昭刪除信息請揃入姓名i編入戍績 學(xué)萬11161101120212051301 平均分是:83-08 接任意犍返回2 瀏覽信息 乩保存入文件& j擊兀信息 昭刪蹤信息+學(xué)生成績管理系統(tǒng)"+1301周公95姓名nm+學(xué)生成績管理系統(tǒng)“+*“* +撤軟拼音半徵軟拼音半訛請按相應(yīng)的數(shù)字犍選擇您所需要的操作*:-材建看息親統(tǒng) 十禮查找咸績 +扛開文件十7->fe信息-山退出系統(tǒng)+-b + +4H+- + +H|-fr+-fri-+ +-ki- +-Hh +

24、 + + -Hh+ + -ll- +Y請按相應(yīng)的數(shù)字鍵選擇您所需要的操作”:-材建看息親統(tǒng) 十禮查找成績 *扛開文件* 7 樓改信息-退出系統(tǒng)+-b + +4H+- + +H|-fr+-fri-+ +-ki- +-Hh + + + -Hh+ + -ll- +補(bǔ)按姓名首字迅口 請按 學(xué)號 120211011205彊雖1116曹雨匚陽孑杲:Hw.ua 採任意犍返回| n當(dāng)操作5打開文件以后,再次瀏覽的時(shí)候就可以瀏覽到在文件D:data,txt 中保存的文件內(nèi)容。c*D: 解壓文件VC6>ithGLUTIyProjects2Debug2. exe*請按相應(yīng)的數(shù)字犍選擇您所需要的操作” + +

25、t t 件 十 自宀文自t亠 i 覽費(fèi)除卄 瀏保插刪“ t 2 4 6 8 r統(tǒng) “系息績件息統(tǒng) 信要信系: 建找開改岀“ 刨查看退 13 5 7 0 十 t輸入您貿(mào)修改的學(xué)冇:11180.退田穆灰1.妊名2.成績 請輸入您要修改的項(xiàng):請輸入修改后的姓名:曉薇 修改咸功0 退岀修改1 姓名2 成績請輸入您要修改的項(xiàng):請輸入修改后的成績:65 修改成功0.退岀修改1.姓名2.成績請輸入您妾修改的項(xiàng):微軟拼-< "D: jStfSttVC6TithGLUTIyPro jectsZDeLugX2 ex«nm+學(xué)生成績管理系統(tǒng)“+*“* +訛請按相應(yīng)的數(shù)字犍選擇您所需要的操作

26、*2胡嵐倩息 + 4 保存入文件+ & - ®A信息 + 昭刪陳信息 +-創(chuàng)建信息系統(tǒng)十禮查找咸績 +扛開文件十7->fe信息-山退出系統(tǒng)+-b + +4H+- + +H|-fr+-fri-+ +-ki- +-Hh + + + -Hh+ + -ll- +補(bǔ)按姓名首字 迅口 請按 學(xué)號11011202me13051301平均分是:恥 按任意犍返回Af - 8為曰茗憂siiG技學(xué)號拆序 成績75.0073.00皈的9&.0B勺軟拼音半;' 初:I解圧文件VC6TithGLUrIyProject32Debug2. esc 丁亠丿內(nèi)護(hù)冃亠工祁纟充*十卄:吊箱歸更

27、辜破麗京鬲曜石:-70.60E丄眄回85 聊日 95-00-創(chuàng)建信息系統(tǒng) -3 查找咸績+打開文件* 丁慘改信息4 0-fii系繞件目>自心自皿sxIs2 4 & 84-+ 4- + -I- +HF - 4- + + +H-+J-+ + 4-H- + + -I- + + < 4-4- + 4-I-F + + 4- +請輸入妾刪除的學(xué)號;101確定;<311 >學(xué)號1202111812051301壬均分是;?8 按任意犍返回WA-名露薇強(qiáng)心 -!姓王曉張周 后功17、附錄(源程序清單)-n/*計(jì)算機(jī)051班 XXX的課程設(shè)計(jì)題目,選題是:學(xué)生成績管理系統(tǒng)*/#i

28、nclude "stdio.h"/* 頭文件 */#include "string.h"#include "stdlib.h"#defi ne LEN sizeof(struct stude nt)/* 宏定義 */static int n;/*n為靜態(tài)全局變量,本文件模塊中各函數(shù)均可使用它*/char numstr100;/* 全局變量 */struct student/*定義結(jié)構(gòu)體 */long num;char n ame10;double marks; stu1000,temp;creat(void)/* 創(chuàng)建學(xué)生成績信息*/

29、char ch='y'while(ch='Y'|ch='y')prin tf("tt請輸入學(xué)號:");gets( nu mstr);stu n. num=atoi( nu mstr);prin tf("tt請輸入姓名:");gets(stu n. name);gets( nu mstr);stu n+.marks=atof( nu mstr);printf("tt是否繼續(xù)添加?(y/n)");ch=getchar();/* 用于輸入 y 或者 n*/getchar();printf(&q

30、uot;tt按任意鍵返回 ");getchar();/*按鍵返回的輸入函數(shù)*/return 0;int prin t(void)/*排序 */int funnum (void);/*函數(shù)聲明 */int funname(void);/*函數(shù)聲明 */int funmarks(void);/*函數(shù)聲明 */char ch;printf("ta.按姓名首字母排序b.按成績排序c.按學(xué)號排序n");printf("tt請按鍵選擇");ch=getchar();getchar();/* 輸入 a,b,c 的語句 */switch(ch)/*選擇排序的方

31、式*/case 'a':funname();/*調(diào)用按姓名排序的函數(shù)*/printf("t按任意鍵返回");getchar();break;case 'b':funmarks(); /*調(diào)用按成績排序的函數(shù)*/ printf("t按任意鍵返回");getchar();break;case 'c':funnum();/*調(diào)用按學(xué)號排序的函數(shù)*/printf("t按任意鍵返回");getchar();break;default:printf("tt對不起選擇錯(cuò)誤n");p

32、rintf("t按任意鍵返回");getchar();break;return 0;funname(void)/*按照姓名排序*/if(n<1)elsefor(i=0;i<n;i+)/*按照姓名排序的循環(huán)語句*/for(j=i+1;j <n ;j+)/*比較姓名的首字母進(jìn)行相應(yīng)交換if(strcmp(stui. name,stuj. name)>0)操作*/ temp=stui;stui=stuj;stuj=temp;listall();/*調(diào)用listall函數(shù)顯示排序以后的信息*/return 0;funmarks(void)/*按照成績排序*/

33、if(n<1)elsefor(i=0;i<n;i+)/*按照成績進(jìn)行排序的循環(huán)語句*/for(j=i+1;j <n ;j+)if(stui.marks>stuj.marks)/*如果前面的成績大于后面的就進(jìn)行交換*/temp=stui;stui=stuj;stuj=temp;listall();/*調(diào)用listall函數(shù)顯示盤許以后的信息*/return 0;funnum(void)/*按照學(xué)號排序*/if(n<1)printf("tt該文件為空!n");elsefor(i=0;i<n;i+)/*按照學(xué)號進(jìn)行排序的循環(huán)語句*/for(j=

34、i+1;j <n ;j+)if(stui. num >stuj. num)temp=stui;stui=stuj;stuj=temp;listall();/*調(diào)用listall函數(shù)顯示盤許以后的信息*/return 0;int i;double sub=0;for(i=0;i< n;i+)sub+=stui.marks;return sub;/*把學(xué)生的分?jǐn)?shù)相加,返回總分?jǐn)?shù)sub*/listall(void)/* 輸出顯示排序的信息*/int j;double mark;if(n<0)printf("ntt 空文件!");printf("t

35、 按任意鍵返回”);getchar();else prin tf("t 學(xué)號姓名成績");for(j=0;j <n ;j+)pri ntf("nt%ldt",stuj. num);prin tf("t%st",stuj. name);prin tf("t%.2f",stuj.marks);mark=sub()/n;/*調(diào)用求總分?jǐn)?shù)的子函數(shù),除以學(xué)生人數(shù)n求出平均分*/prin tf("nt平均分是:%.2f",mark);pri ntf("n");return 0;wf

36、ile(void)/* 寫入文件 */FILE *fptr;if(n<1)printf("t 文件為空,無法寫操作!n");printf("t 按任意鍵返回");getchar();return 0;printf("t請輸入要保存的路徑及文件名(例如c:stus.txt):");scanf("%s",numstr);getchar();/*輸入需要保存的磁盤,可以是 c,d,e等任意磁盤*/if(fptr=fope n(nu mstr,"wb")=NULL) printf("nt

37、t 無法打開!%sn",numstr);printf("t按任意鍵返回 ");getchar();elsefwrite(stu,sizeof(stu0),n,fptr);/*把信息寫入磁盤的函數(shù) */fclose(fptr);printf("tt有%d個(gè)記錄保存成功!n",n);printf("t按任意鍵返回 ");getchar();return 0;從磁盤讀取數(shù)據(jù)的函數(shù)*/n");FILE *fptr;int i=0;printf("t請輸入要打開的文件(例如c:stus.txt):")se

38、a nf("%s", nu mstr);getchar();if(fptr=fope n(n umstr,"rb")=NULL)printf("ntt不能打開 %s!n",numstr);printf("t按任意鍵返回");getchar();elsewhile(fread(&stui,sizeof(stu0),1,fptr)=1)/*i+; n=i;printf("tt成功打開 %d 個(gè)記錄!n",i);fclose(fptr);printf("t按任意鍵返回");

39、getchar(); return 0;search(void)/* 查找 */ int i,flag=0;prin tf("t請輸入要查詢的關(guān)鍵字。例:姓名、學(xué)號gets( nu mstr);for(i=0;i< n;i+)if(strcmp(numstr,)=0)|atol(numstr)=stui.num)/*把要查找 的信息和存儲的信息進(jìn)行比較,如果相同就找到,并輸出。用|表示可以有姓名或者學(xué)號兩種查找方式。*/prin tf("t學(xué)號 tt 姓名 tt 成績 n");prin tf("t%ldtt",stui.

40、 num);prin tf("t%stt",stui. name);prin tf("t%.2fn",stui.marks);flag=1;printf("t按任意鍵返回");getchar(); return 0;if(flag!=1)/*當(dāng)計(jì)數(shù)不為1的時(shí)候,查不到所要的信息*/printf("tt不存在這樣的信息!n");printf("t按任意鍵返回 ");getchar();return 1; in sert(void)/* 插入 */gets( nu mstr);stu n. num=

41、atoi( nu mstr);prin tf("t請輸入姓名:");gets(stu n. name);prin tf("t請輸入成績:");gets( nu mstr);stu n+.marks=atof( nu mstr);funn ame();/*調(diào)用按照姓名排序的函數(shù),顯示添加以后所有學(xué)生的信息,并且按照姓名排序的方式輸出*/printf("t按任意鍵返回");getchar();return 0;del(void)/* 刪除*/ char ch;int i,j,flag;printf("tt請輸入要刪除的學(xué)號:n&

42、quot;);gets( nu mstr);printf("tt確定? (y/n)n");ch=getchar();getchar();if(ch='y'|ch='Y')for(i=0;i <n ;i+)if(stui. num=atol( nu mstr)/*比較學(xué)號相同時(shí)找到相應(yīng)得信息進(jìn)行刪除*/j=i;flag=1;if(flag=1)n");");getchar();prin tf("t正在刪除,請稍后for(i=j;i <n ;i+)stui=stui+1;printf("tt刪除

43、成功! n");n-;funn ame();printf("t按任意鍵返回return 0;xg(void)/* 修改 */int i,j,flag=0;char ch;prin tf("t輸入您要修改的學(xué)號:");gets( nu mstr);for(i=0;i <n ;i+)if(stui. num=atol( nu mstr) j=i;flag=1;if(flag=1) printf("tO.退出修改1.姓名2.成績n");prin tf("t請輸入您要修改的項(xiàng):n");ch=getchar();getchar();switch(ch)/*循環(huán)語句選擇相應(yīng)的修改選項(xiàng)*/case '1':prin tf("t 請輸入修改后的姓名:"); gets();printf(" 修改成功 n"); break;case 2:prin tf("t請輸入修改后的成績:");修改成功n");gets( nu mstr);stuj.marks=atof( nu mstr);pri ntf("

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論