九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)

上傳人:無(wú)*** 文檔編號(hào):137975528 上傳時(shí)間:2022-08-19 格式:DOC 頁(yè)數(shù):47 大小:884KB
收藏 版權(quán)申訴 舉報(bào) 下載
C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)_第1頁(yè)
第1頁(yè) / 共47頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)_第2頁(yè)
第2頁(yè) / 共47頁(yè)
C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)_第3頁(yè)
第3頁(yè) / 共47頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《C語(yǔ)言程序設(shè)計(jì)實(shí)習(xí)報(bào)告 行編輯器 學(xué)生管理系統(tǒng)(47頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、C程序設(shè)計(jì)實(shí)習(xí)報(bào)告題目:簡(jiǎn)單的行編輯器(修改版) 學(xué) 院: 專(zhuān) 業(yè): 姓 名:班級(jí)學(xué)號(hào):指導(dǎo)教師: 2009年 7 月 3 日前言由于我們班選題是題號(hào)和學(xué)號(hào)一一對(duì)應(yīng),所以我抽到了16題,簡(jiǎn)單的行編輯器。剛開(kāi)始時(shí)不知道什么叫行編輯器,以為這個(gè)題目有多么的神秘,第二次實(shí)習(xí)時(shí)老師說(shuō)選這個(gè)題目最好換個(gè)題,與老師交流,老師建議在原有的題目上加些功能。只是還是不知道什么叫行編輯器,上網(wǎng),問(wèn)同學(xué),沒(méi)有一點(diǎn)思路。再一次問(wèn)老師,老師說(shuō)不用管它什么是行編輯器,編輯的目的是為了后面對(duì)文件進(jìn)行處理,于是這一次總算有了新的思路。等到這個(gè)題快要做完時(shí),也明白了為什么老師說(shuō)它太簡(jiǎn)單了,做完后自己感覺(jué)都有串改題目之嫌疑,原題

2、的要求實(shí)在太簡(jiǎn)單了,自己加的功能占了程序的大部分。8天下來(lái)感覺(jué)自己對(duì)C語(yǔ)言以及程序編輯的認(rèn)識(shí)加深了許多。以前覺(jué)得很難的結(jié)構(gòu)體,數(shù)組,文件全部用到了,雖然并不能完全掌握,那也有一些成就感。在這里要感謝老師以及我的同學(xué),在整個(gè)編程中給了我很大的幫助。目錄前言II目錄III1題目要求- 1 -2需求分析- 1 -3概要設(shè)計(jì)- 1 -3.1設(shè)計(jì)思想- 1 -3.2軟件運(yùn)行與開(kāi)發(fā)平臺(tái)- 2 -3.3數(shù)據(jù)結(jié)構(gòu)- 2 -3.4系統(tǒng)結(jié)構(gòu)圖- 2 -4詳細(xì)設(shè)計(jì)- 3 -4.1主函數(shù)- 3 -4.2各功能模塊設(shè)計(jì)- 4 -(1)輸入模塊- 4 -(2)瀏覽模塊- 5 -(3)添加模塊- 6 -(4)查找模塊- 8

3、 -(5)修改模塊- 13 -(6)排序模塊- 16 -(7)保存模塊- 19 -4.3公共函數(shù)- 19 -(1)加載函數(shù)- 19 -(2) 學(xué)號(hào)輸入函數(shù)- 20 -(3)輸入三個(gè)科目分?jǐn)?shù)函數(shù)- 20 -(4)求平均值函數(shù)- 21 -(5)輸入整個(gè)記錄函數(shù)- 21 -(6)修改整條記錄函數(shù)- 21 -(7)顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目- 22 -(8)顯示一個(gè)記錄的函數(shù)- 22 -5測(cè)試、結(jié)果進(jìn)行分析- 23 -5.1進(jìn)入頁(yè)面- 23 -5.2數(shù)據(jù)錄入- 24 -5.3數(shù)據(jù)錄入成功,直接返回菜單- 24 -5.4不進(jìn)行數(shù)據(jù)錄入,直接進(jìn)入菜單。- 25 -5.5瀏覽數(shù)據(jù)- 25 -5.6添加數(shù)據(jù)- 26 -

4、5.7瀏覽添加后的數(shù)據(jù)- 26 -5.8查找按姓名查找- 27 -5.9查找按學(xué)號(hào)查找- 27 -5.10修改對(duì)分?jǐn)?shù)2進(jìn)行修改- 28 -5.11排序按平均分進(jìn)行排序- 28 -6總結(jié)- 30 -7參考文獻(xiàn)- 30 -8附錄- 31 -主要程序模塊清單- 31 - 43 -1題目要求原題:簡(jiǎn)單的行編輯器【要求】(1) 設(shè)置一個(gè)簡(jiǎn)單的行編輯器,每行以回車(chē)結(jié)束。(2) 數(shù)據(jù)以文件形式儲(chǔ)存。(3) 編輯器具有查找、替換、修改數(shù)據(jù)的功能。修改后:修改思路是將由行編輯器生成的文件換成有關(guān)結(jié)構(gòu)體的內(nèi)容,建立一個(gè)結(jié)構(gòu)體輸入關(guān)信息,生成文件,再實(shí)現(xiàn)查找、替換、修改數(shù)據(jù)等的功能。這里具體是參考書(shū)上學(xué)生成績(jī)管理系

5、統(tǒng),實(shí)現(xiàn)成績(jī)的錄入,顯示,查找,添加,保存等功能模塊。2需求分析根據(jù)題目要求,由于學(xué)生信息是存放在文件中,所以應(yīng)提供文件的輸入、輸出等操作;在程序中需要瀏覽學(xué)生的信息,應(yīng)提供顯示、查找、排序等操作;另外還應(yīng)提供鍵盤(pán)式選擇菜單實(shí)現(xiàn)功能選擇。3概要設(shè)計(jì)3.1設(shè)計(jì)思想由于原題的特點(diǎn),對(duì)題目進(jìn)行了一定的拓展。本著提高自己編程能力,加深對(duì)C語(yǔ)言重點(diǎn)、難點(diǎn)內(nèi)容的理解,添加了關(guān)于結(jié)構(gòu)體、數(shù)組以及文件的運(yùn)用。將程序模塊化,使程序條理清楚,制作簡(jiǎn)單,容易讀懂,并能體會(huì)到程序開(kāi)發(fā)的思想與方法,加深對(duì)C語(yǔ)言編程的認(rèn)識(shí)。3.2軟件運(yùn)行與開(kāi)發(fā)平臺(tái)C語(yǔ)言,Windows平臺(tái),VC6.0,3.3數(shù)據(jù)結(jié)構(gòu)此處選用了結(jié)構(gòu)體的形

6、式來(lái)存放每一個(gè)學(xué)生的信息,對(duì)與若干個(gè)學(xué)生采用了結(jié)構(gòu)體數(shù)組。3.4系統(tǒng)結(jié)構(gòu)圖學(xué)生成績(jī)管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)顯示數(shù)據(jù)添加數(shù)據(jù)查找數(shù)據(jù)修改排序數(shù)據(jù)保存按姓名查找按學(xué)號(hào)查找按分?jǐn)?shù)1排序按分?jǐn)?shù)2排序按分?jǐn)?shù)3排序按平均分排序4詳細(xì)設(shè)計(jì)4.1主函數(shù)主函數(shù)比較簡(jiǎn)單,只提供了輸入和菜單函數(shù)的調(diào)用。各個(gè)功能的模塊用菜單方式選擇。圖4.11NY開(kāi)始顯示一系列功能選項(xiàng)輸入n,判斷m是否是12根據(jù)n的值調(diào)用各功能模塊函數(shù)結(jié)束【程序】void main()int q,w1;printf(tt*行編輯器(修改拓展版)*nn);printf(ttttt072092t周磊t20091002238nn);doprintf(tt重新

7、錄入數(shù)據(jù)請(qǐng)按1tt進(jìn)入菜單請(qǐng)按2: bb);scanf(%d,&q);if(q!=1&q!=2) /*對(duì)選擇數(shù)字作出判斷*/w1=1;getchar();else w1=0;while(w1=1);if(q=1) /*if語(yǔ)句選擇要進(jìn)行的操作*/enter();elsemenu();4.2各功能模塊設(shè)計(jì)(1)輸入模塊考慮到自己在C學(xué)習(xí)時(shí)遇到的問(wèn)題,以及在考計(jì)算機(jī)二級(jí)時(shí)薄弱的地方,以及聯(lián)系這個(gè)題目的要求,此處選用了結(jié)構(gòu)體的形式來(lái)存放每一個(gè)學(xué)生的信息,對(duì)與若干個(gè)學(xué)生采用了結(jié)構(gòu)體數(shù)組。具體到各個(gè)數(shù)據(jù)的信息,學(xué)號(hào)和姓名采用了字符型數(shù)組,分?jǐn)?shù)為整型,而平均分采用了實(shí)型。/*定義結(jié)構(gòu)體變量*/struct

8、 studentchar num20;/*學(xué)號(hào)*/char name100;/*姓名*/int score3;/*分?jǐn)?shù)*/float ave;/*平均分*/stuN; /*stuN中每個(gè)元素對(duì)應(yīng)一個(gè)學(xué)生*/N采用了宏定義的方式,可以隨時(shí)在源程序中修改?!境绦颉?*輸入模塊*/void enter()YN圖4.21開(kāi)始輸入用戶(hù)要輸入學(xué)生記錄的個(gè)數(shù)n從0n-1調(diào)用輸入函數(shù)input(i)i!=0嗎?調(diào)用保存函數(shù)save()返回主菜單結(jié)束int i,n;printf(請(qǐng)輸入學(xué)生數(shù)量(0-%d)?:,N-1);scanf(%d,&n);printf(n請(qǐng)輸入數(shù)據(jù)nn);for(i=0;in;i+)pr

9、intf(n 輸入第%d個(gè)學(xué)生記錄n,i+1);input(i); /*調(diào)用輸入函數(shù)*/if(i!=0) save(); /*調(diào)用保存函數(shù)*/(2)瀏覽模塊該模塊的功能是顯示所有學(xué)生的記錄信息,流程如圖。顯示學(xué)生記錄(10人一屏)按任意鍵顯示下一屏按任意鍵返回主菜單圖4.22【程序】/*瀏覽函數(shù)*/void browse()/*瀏覽模塊,前面多次用到*/int i,n;n=load();printf_face();for(i=0;in;i+)if(i!=0)&(i%10=0) /*目的是分屏顯示*/printf(任意鍵繼續(xù)n);getch();puts(nn);printf_one(i); p

10、rintf(nt共有%d條記錄.n,n);printf(n任意鍵返回nn);getch();menu();(3)添加模塊該模塊的功能是用戶(hù)需要增加新的學(xué)生記錄,注意新添加的內(nèi)容不能覆蓋原來(lái)的記錄。追加模塊流程圖:圖4.23開(kāi)始調(diào)用加載函數(shù),并計(jì)算可以記錄的個(gè)數(shù)K=m+ni從n到k調(diào)用輸入函數(shù)input(i)保存追加的記錄結(jié)束輸入用戶(hù)要追加學(xué)生記錄個(gè)數(shù)【程序】/*添加模塊*/void add()int i,n,m,k;FILE *fp;n=load();printf(請(qǐng)輸入添加的學(xué)生個(gè)數(shù)(0-%d)?:,N-1-n); scanf(%d,&m); /*m為添加學(xué)生的個(gè)數(shù)*/k=m+n-1;for

11、(i=n;i=k;i+)printf(n 輸入第%d個(gè)學(xué)生記錄n,i-n+1);input(i); /*調(diào)用輸入函數(shù)*/if(fp=fopen(zhoulei.txt,ab)=NULL)printf(n文件無(wú)法打開(kāi)n);for(i=n;i=k;i+)if(fwrite(&stui,sizeof(struct student),1,fp)=0)printf(文件寫(xiě)入錯(cuò)誤n);fclose(fp);save();(4)查找模塊該模塊在參考程序上做的一定邏輯上的修改,可以按姓名和按學(xué)號(hào)進(jìn)行查找,找到以后,可進(jìn)行修改和刪除信息的操作。由于改動(dòng)方便,這里的按姓名和按學(xué)號(hào)查找分了兩個(gè)函數(shù),使函數(shù)比較煩綴,

12、故函數(shù)還可以進(jìn)行優(yōu)化。圖4.24其他21開(kāi)始顯示查找方式讓用戶(hù)選擇調(diào)用按姓名查找函數(shù)search_name()調(diào)用按學(xué)號(hào)查找函數(shù)search_no()結(jié)束【程序】a)查找模塊 /*查找函數(shù)*/void search()int z,w1;doprintf(請(qǐng)輸入查找方式:1).按姓名查找 2).按學(xué)號(hào)查找 bb);scanf(%d,&z);if(z!=1&z!=2) /*對(duì)選擇數(shù)字作出判斷*/w1=1;getchar();else w1=0;while(w1=1);if(z=1)search_name(); /*調(diào)用按姓名查找程序*/elsesearch_no(); /*調(diào)用按學(xué)號(hào)查找程序*/b

13、) 按姓名查找模塊這個(gè)是根據(jù)姓名查找到對(duì)應(yīng)的學(xué)生記錄,但在此處程序有一定的缺陷,就是如果有相同的姓名,只能查到最上面的一個(gè),而其他的則不能找到。后來(lái)嘗試修改時(shí)發(fā)現(xiàn),還需要改動(dòng)其他相應(yīng)的函數(shù),故沒(méi)有進(jìn)行下去。NYYN開(kāi)始輸入學(xué)生姓名是否找到此學(xué)生記錄顯示找到的記錄提示沒(méi)有找到詢(xún)問(wèn)用戶(hù)是否繼續(xù)查找讓用戶(hù)做出選擇結(jié)束圖4.25【程序】/*按姓名查找*/void search_name()int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();dodok=-1;printf(nn請(qǐng)輸入要查找的姓名! 姓名:);scanf(%s,s.name); /*輸入要修

14、改的數(shù)據(jù)的姓名*/printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目的函數(shù)*/for(i=0;in;i+)if(strcmp(s.name,stui.name)=0) /*匹配姓名*/k=i; /*找到要修改的記錄*/ printf_one(k);break; /*調(diào)用顯示一個(gè)記錄的函數(shù)*/if(k=-1) printf(nn記錄不存在!); printf(nn是否繼續(xù)?nt1).是 2).否 返回 bb); scanf(%d,&w1); if(w1=1) search(); else menu();while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)printf(nn

15、請(qǐng)選擇下一步:nt1).查找其他 2).修改 3).刪除 4).返回菜單 bb);scanf(%d,&w2);switch(w2) case 2:w3=modify_data(k,n);break; case 3: printf(n確定刪除?nt1).確定 2).返回 bb); scanf(%d,&w4); if(w4=1) stuk.ave=0; break;if(w3=1|w4=1)save();printf(nn操作成功_);printf(nn請(qǐng)選擇下一步:nt1).查找其他 2).返回 bb);scanf(%d,&w2);while(w2=1);menu();c) 按學(xué)號(hào)查找模塊這個(gè)函

16、數(shù)是在按姓名查找模塊的基礎(chǔ)上做了相應(yīng)的改動(dòng),由于學(xué)號(hào)具有唯一性,故不存在查不到相同學(xué)號(hào)的情況。NYYN開(kāi)始輸入學(xué)生學(xué)號(hào)是否找到此學(xué)生記錄顯示找到的記錄提示沒(méi)有找到詢(xún)問(wèn)用戶(hù)是否繼續(xù)查找讓用戶(hù)做出選擇結(jié)束圖4.26【程序】/*按學(xué)號(hào)查找程序*/void search_no()int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();dodok=-1;printf(/n/n請(qǐng)輸入要查找的學(xué)號(hào)! 學(xué)號(hào):);scanf(%s,s.num);printf_face();for(i=0;in;i+)if(strcmp(s.num,stui.num)=0)k=i; p

17、rintf_one(k);break;if(k=-1) printf(nn記錄不存在!); printf(nn是否繼續(xù)?nt1).是 2).否 返回 bb); scanf(%d,&w1); if(w1=1) search(); else menu();while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)printf(nn請(qǐng)選擇下一步:nt1).查找下一個(gè) 2).修改 3).刪除 4).返回菜單 bb);scanf(%d,&w2);switch(w2) case 2:w3=modify_data(k,n);break; case 3: printf(n確定刪除?nt1).確定

18、 2).返回 bb); scanf(%d,&w4); if(w4=1) stuk.ave=0; break;if(w3=1|w4=1)save();printf(nn操作成功_);printf(nn請(qǐng)選擇下一步:nt1).查找其他 2).返回 bb);scanf(%d,&w2);while(w2=1);menu();/*瀏覽函數(shù)*/void browse()/*瀏覽模塊,前面多次用到*/int i,n;n=load();printf_face();for(i=0;in;i+)if(i!=0)&(i%10=0) /*目的是分屏顯示*/printf(任意鍵繼續(xù)n);getch();puts(nn)

19、;printf_one(i); printf(nt共有%d條記錄.n,n);printf(n任意鍵返回nn);getch();menu();(5)修改模塊該模塊首先要顯示所有學(xué)生的信息,并采用分屏顯示。顯示完所有記錄后,用戶(hù)輸入要修改的學(xué)生的學(xué)號(hào),根據(jù)學(xué)號(hào)查找學(xué)生記錄,并提示用戶(hù)修改該記錄的哪部分信息。NYYN開(kāi)始顯示所有記錄,讓用戶(hù)看哪條信息需要修改輸入要修改的學(xué)號(hào)i!=0嗎?顯示找到的記錄,調(diào)用修改函數(shù)提示沒(méi)有找到詢(xún)問(wèn)用戶(hù)是否繼續(xù)修改返回主菜單結(jié)束圖4.27【程序】/*修改函數(shù)*/void modify()struct student s;int i,n,k,w0=1,w1,w2=0;n=

20、load();dok=-1;printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/for(i=0;in;i+)if(i!=0)&(i%10=0) /*目的是分屏顯示*/ printf(nn記住你要修改的學(xué)號(hào).任意鍵繼續(xù) .); getch(); puts(nn);printf_one(i); /*調(diào)用顯示一個(gè)記錄的函數(shù)*/doprintf(nn請(qǐng)輸入你想要修改的學(xué)號(hào):);scanf(%s,s.num); /*輸入要修改的數(shù)據(jù)的學(xué)號(hào)*/for(i=0;in;i+)if(strcmp(s.num,stui.num)=0)k=i; /*找到要修改的記錄*/s=stui; /*備份當(dāng)次要修改的

21、學(xué)生記錄stui*/if(k=-1) printf(nn記錄不存在!); /*當(dāng)k=-1表示沒(méi)有找到*/while(k=-1);printf_face();printf_one(k);w1=modify_data(k,n); /*修改學(xué)生記錄并返回保存控制值*/if(w1=1)printf(n操作成功_.nn是否繼續(xù)修改?nnt1).是2).返回并保存t bb);scanf(%d,&w0);w2=1; /*用來(lái)控制保存,使w2=1是標(biāo)記已有過(guò)的修改*/elsew0=0;if(w2=1)stuk=s;if(w0!=1&w2=1)save();/*w2不等于1表示在此次之前沒(méi)有修改過(guò),這是就保存用

22、戶(hù)已確認(rèn)的修改并返回*/while(w0=1);printf(nn你所修改的內(nèi)容不存在);menu();(6)排序模塊該模塊在原有的排序模塊上做了一定的修改,可以按照分?jǐn)?shù)1,、分?jǐn)?shù)2、分?jǐn)?shù)3以及平均數(shù)進(jìn)行由大到小的排序。這里選擇了冒泡法排序。由于改動(dòng)方便,這里的4種排序方法在程序上其實(shí)是大同小異,因此程序還需進(jìn)行一定的優(yōu)化。還有一個(gè)問(wèn)題就是排序結(jié)束后不能直接瀏覽,需要手動(dòng)調(diào)用瀏覽模塊。其原因是在排序后調(diào)用了保存函數(shù),而保存函數(shù)保存完畢要直接返回主菜單。如果先進(jìn)行瀏覽的話(huà),所顯示內(nèi)容不是排序后的。非1414開(kāi)始顯示要進(jìn)行的排序方式用戶(hù)做出選擇調(diào)用相應(yīng)的函數(shù)結(jié)束圖4.28【程序】a) 排序模塊 /

23、*排序模塊*/void order() int m;printf(請(qǐng)選擇排序方式:1).按分?jǐn)?shù)1排序 2).按分?jǐn)?shù)2排序 3).按分?jǐn)?shù)3排序 4).按平均分排序nn);scanf(%d,&m);switch(m) case 1:order_score1();break;/*分?jǐn)?shù)1*/ case 2:order_score2();break;/*分?jǐn)?shù)2*/case 3:order_score3();break;/*分?jǐn)?shù)3*/case 4:order_ave();break; /*平均分*/b) 按四種方式排序圖4.29開(kāi)始用冒泡法排序保存返回主菜單結(jié)束/*按平均分排序*/void order_a

24、ve() int i,j,n; struct student s;n=load();for(i=0;in-1;i+) /*冒泡法排序*/for(j=i+1;jn;j+)if (stui.avestuj.ave )s=stui;stui =stuj;stuj =s;save();puts(nn);menu();/*按分?jǐn)?shù)1排序*/void order_score1() int i,j,n; struct student s;n=load();for(i=0;in-1;i+) /*冒泡法排序*/for(j=i+1;jn;j+)if (stui.score0stuj.score0 )s=stui;s

25、tui =stuj;stuj =s;save();puts(nn);menu();/*按分?jǐn)?shù)2排序*/void order_score2() int i,j,n; struct student s;n=load();for(i=0;in-1;i+) /*冒泡法排序*/for(j=i+1;jn;j+)if (stui.score1stuj.score1 )s=stui;stui =stuj;stuj =s;save();puts(nn);menu();/*按分?jǐn)?shù)3排序*/void order_score3() int i,j,n; struct student s;n=load();for(i=

26、0;in-1;i+) /*冒泡法排序*/for(j=i+1;jn;j+)if (stui.score2stuj.score2 )s=stui;stui =stuj;stuj =s;save();puts(nn);menu();(7)保存模塊這個(gè)模塊單獨(dú)放在菜單里其實(shí)有點(diǎn)綴余,因?yàn)槊總€(gè)對(duì)文件進(jìn)行寫(xiě)入或修改的操作都單獨(dú)進(jìn)行了保存。這里文件的讀寫(xiě)全用的是二進(jìn)制,所以保存的文件直接以文本打開(kāi)后會(huì)出現(xiàn)亂碼?!境绦颉?*保存函數(shù)*/void save()/*存儲(chǔ)函數(shù)*/ int i;FILE *fp;if(fp=fopen(zhoulei.txt,w)=NULL) /*按只寫(xiě)方式打開(kāi)文件*/printf(

27、文件無(wú)法打開(kāi)n);/*防止文件為空,并報(bào)錯(cuò)*/for(i=0;iN;i+)if(stui.ave!=0)/*stui.ave!=0表示此記錄已刪除*/if(fwrite(&stui,sizeof(struct student),1,fp)!=1) /*這里用二進(jìn)制進(jìn)行文件的讀寫(xiě),是文件不能通過(guò)電腦直接打開(kāi)*/printf(文件寫(xiě)入錯(cuò)誤n);fclose(fp);printf(nn保存成功!nn按任意鍵繼續(xù)nn);getch();menu(); /*一般的保存模塊,用于各種變動(dòng)之后,文件的保存*/4.3公共函數(shù)這里都是些在每個(gè)模塊都可能用到的公共函數(shù)(1)加載函數(shù)/*加載函數(shù)*/int load

28、()FILE *fp;int i;if(fp=fopen(zhoulei.txt,rb)=NULL) /*以只讀方式打開(kāi)一個(gè)二進(jìn)制文件*/printf(n無(wú)法打開(kāi)文件n);return NULL;for(i=0;!feof(fp);i+)fread(&stui,sizeof(struct student),1,fp);fclose(fp);return(i-1); /*返回記錄個(gè)數(shù)*/(2) 學(xué)號(hào)輸入函數(shù)/*學(xué)號(hào)輸入函數(shù)*/void no_input(int i,int n) /*i表示第i個(gè)學(xué)生的信息,n表示比較到第n個(gè)學(xué)生*/int j,k,w1;dow1=0;printf(學(xué)號(hào):);sc

29、anf(%s,stui.num);for(j=0;stui.numj!=0;j+) /*學(xué)號(hào)輸入函數(shù),作了嚴(yán)格的規(guī)定*/if(stui.numj9) /*判斷學(xué)號(hào)是否為數(shù)字*/puts(輸入錯(cuò)誤!僅可輸入(0-9),請(qǐng)重新輸入!n);w1=1;break;if(w1!=1)for(k=0;kn;k+) /*比較到第n個(gè)學(xué)生*/*排除第i個(gè)學(xué)生記錄*/if(k!=i&strcmp(stuk.num,stui.num)=0)/*判斷學(xué)號(hào)是否有雷同*/puts(此記錄已存在,請(qǐng)重新輸入!n);w1=1;break;while(w1=1);(3)輸入三個(gè)科目分?jǐn)?shù)函數(shù)/*i表示第i個(gè)學(xué)生記錄*/void

30、 score_input(int i)int j;for(j=0;j3;j+)printf(分?jǐn)?shù) %d:,j+1);scanf(%d,&stui.scorej);/*循環(huán)語(yǔ)句依次輸入三個(gè)分?jǐn)?shù)*/(4)求平均值函數(shù)/*求平均值函數(shù)*/void average(int i)int j,sum;for(sum=0,j=0;j8|c1) puts(n選擇錯(cuò)誤,請(qǐng)重新輸入!); getchar(); /*當(dāng)輸入是字符時(shí)可以防止是死循環(huán)*/ while(!(c=1);doswitch(c) /*選擇要修改的項(xiàng)目*/case 1:no_input(i,n);break;case 2:printf(姓名:);

31、scanf(%s,stui.name);break;case 3:printf(分?jǐn)?shù)1:);scanf(%d,&stui.score0);break;case 4:printf(分?jǐn)?shù)2:);scanf(%d,&stui.score1);break;case 5:printf(分?jǐn)?shù)3:);scanf(%d,&stui.score2);break;case 6:score_input(i);break;case 7:input(i);break;if(c2&c7)average(i);puts(n新數(shù)據(jù):n);printf_face(); /*顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目*/printf_one(i); /*

32、修改后的數(shù)據(jù)讓用戶(hù)確認(rèn)*/printf(n是否確定?nnt1).是 2).否,重新修改 3).直接返回 bb);scanf(%d,&w1);while(w1=2);return(w1); /*返回控制值*/(7)顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目/*顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/void printf_face() /*顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(shù)*/printf(nt學(xué)號(hào)t姓名 分?jǐn)?shù)1 分?jǐn)?shù)2 分?jǐn)?shù)3 平均n);(8)顯示一個(gè)記錄的函數(shù)/*顯示一個(gè)記錄的函數(shù)*/void printf_one(int i)int j;printf(%11st%-17s,stui.num,stui.name );for(j=0;j3;j+)p

33、rintf(%9d,stui.scorej);printf(t%9.2fn,stui.ave); /*保留兩位小數(shù)*/5測(cè)試、結(jié)果進(jìn)行分析5.1進(jìn)入頁(yè)面選擇1是重新錄入數(shù)據(jù),不管原文件是否有內(nèi)容,都會(huì)進(jìn)行覆蓋。選擇2直接進(jìn)入主菜單,可對(duì)原有文件進(jìn)行數(shù)據(jù)處理。圖515.2數(shù)據(jù)錄入圖525.3數(shù)據(jù)錄入成功,直接返回菜單圖535.4不進(jìn)行數(shù)據(jù)錄入,直接進(jìn)入菜單。圖545.5瀏覽數(shù)據(jù)圖555.6添加數(shù)據(jù)圖565.7瀏覽添加后的數(shù)據(jù)圖575.8查找按姓名查找圖585.9查找按學(xué)號(hào)查找圖595.10修改對(duì)分?jǐn)?shù)2進(jìn)行修改圖5105.11排序按平均分進(jìn)行排序這里的一個(gè)問(wèn)題是排序完了程序沒(méi)有自動(dòng)進(jìn)行瀏覽,需要手

34、動(dòng)調(diào)用瀏覽函數(shù)圖5115.12退出圖5126總結(jié)8天的實(shí)習(xí)是短暫的,頭兩天主要是對(duì)C語(yǔ)言的快速?gòu)?fù)習(xí)以及對(duì)題目的分析,第三天才開(kāi)始進(jìn)行程序的編寫(xiě)。而最后一天主要是進(jìn)行了界面的優(yōu)化。從剛開(kāi)始為了完成這項(xiàng)任務(wù)而實(shí)習(xí),變成了為了鍛煉自己,提高C語(yǔ)言編程能力而實(shí)習(xí)。8天下來(lái)感覺(jué)自己對(duì)C語(yǔ)言以及程序編輯的認(rèn)識(shí)加深了許多。以前覺(jué)得很難的結(jié)構(gòu)體,數(shù)組,文件全部用到了,雖然并不能完全掌握,那也有一些成就感。先說(shuō)中間遇到的小問(wèn)題,幾乎每一個(gè)模塊的錄入,都會(huì)因?yàn)橥思臃痔?hào),忘了加括號(hào),忘了加引號(hào)而出錯(cuò),雖然好解決,但浪費(fèi)了很大的時(shí)間,去修改語(yǔ)法上的錯(cuò)誤。然后就是邏輯錯(cuò)誤的修改,現(xiàn)在意識(shí)到,如果自己實(shí)在找不到錯(cuò)誤的話(huà)

35、,就主動(dòng)找別人看一下,打破了自己思維定勢(shì),也許別人會(huì)很快的找到。程序的注釋也是同樣重要,編完一段程序再反過(guò)來(lái)看的時(shí)候,沒(méi)有注釋有時(shí)會(huì)出現(xiàn)看不懂自己編的程序的情況。還有一個(gè)收獲就是當(dāng)自己遇到什么不懂時(shí),要積極的和同學(xué)們一起討論,這樣從中學(xué)到的就不只是你不懂的問(wèn)題。編程讓人最感到快樂(lè)的就是一個(gè)個(gè)的改掉上百的錯(cuò)誤,然后運(yùn)行出想要的結(jié)果,那種心情是無(wú)法用言語(yǔ)來(lái)描述的。雖然最后完成了自己的題目,但總感覺(jué)我們C語(yǔ)言編程的能力還是僅僅在皮毛上,程序很大一部分參考了書(shū)上,尤其是算法的設(shè)計(jì),自己做的就是搭建一個(gè)框架。路漫漫其修遠(yuǎn)兮,今后還有很多的東西等著我們?nèi)W(xué)習(xí),希望通過(guò)這次的實(shí)習(xí),我們能更容易的學(xué)習(xí)其他程序

36、的編寫(xiě),爭(zhēng)取做到學(xué)以致用。最后再一次感謝整個(gè)過(guò)程中幫助我的老師和同學(xué)們。7參考文獻(xiàn)1 張冬梅 劉遠(yuǎn)興 陳晶 王媛妮 編著,C語(yǔ)言課程設(shè)計(jì)與程序指導(dǎo),中國(guó)鐵道出版社,2008年7月第一版。2 作者:譚浩強(qiáng) C程序設(shè)計(jì)(第三版),清華大學(xué)出版社,2005年7月第三版8附錄 主要程序模塊清單#include#include#include#include#define N 50void save();void enter();void input(int i);void no_input(int i,int n);void score_input(int i);void average(int i)

37、;void menu();void browse();int modify_data(int i,int n);void printf_face();void search();void add();void modify();int load();void order();void printf_one(int i);void search_name();void search_no();void order_ave();void order_score1();void order_score2();void order_score3();void main()int q,w1;printf

38、(tt*行編輯器(修改拓展版)*nn);printf(ttttt072092t周磊t20091002238nn);doprintf(tt重新錄入數(shù)據(jù)請(qǐng)按1tt進(jìn)入菜單請(qǐng)按2: bb);scanf(%d,&q);if(q!=1&q!=2) /*對(duì)選擇數(shù)字作出判斷*/w1=1;getchar();else w1=0;while(w1=1);if(q=1) /*if語(yǔ)句選擇要進(jìn)行的操作*/enter();elsemenu();/*定義結(jié)構(gòu)體變量*/struct studentchar num20;/*學(xué)號(hào)*/char name100;/*姓名*/int score3;/*分?jǐn)?shù)*/float ave;

39、/*平均分*/stuN; /*stuN中每個(gè)元素對(duì)應(yīng)一個(gè)學(xué)生*/*輸入模塊*/void enter()int i,n;printf(請(qǐng)輸入學(xué)生數(shù)量(0-%d)?:,N-1);scanf(%d,&n);printf(n請(qǐng)輸入數(shù)據(jù)nn);for(i=0;in;i+)printf(n 輸入第%d個(gè)學(xué)生記錄n,i+1);input(i); /*調(diào)用輸入函數(shù)*/if(i!=0) save(); /*調(diào)用保存函數(shù)*/*輸入整個(gè)記錄函數(shù)*/void input(int i)no_input(i,i); /*調(diào)用學(xué)號(hào)輸入函數(shù)*/printf(姓名:);scanf(%s,stui.name); score_in

40、put(i); /*調(diào)用分?jǐn)?shù)輸入函數(shù)*/average(i); /*調(diào)用求平均值函數(shù)*/*學(xué)號(hào)輸入函數(shù)*/void no_input(int i,int n) /*i表示第i個(gè)學(xué)生的信息,n表示比較到第n個(gè)學(xué)生*/int j,k,w1;dow1=0;printf(學(xué)號(hào):);scanf(%s,stui.num);for(j=0;stui.numj!=0;j+) /*學(xué)號(hào)輸入函數(shù),作了嚴(yán)格的規(guī)定*/if(stui.numj9) /*判斷學(xué)號(hào)是否為數(shù)字*/puts(輸入錯(cuò)誤!僅可輸入(0-9),請(qǐng)重新輸入!n);w1=1;break;if(w1!=1)for(k=0;kn;k+) /*比較到第n個(gè)學(xué)

41、生*/*排除第i個(gè)學(xué)生記錄*/if(k!=i&strcmp(stuk.num,stui.num)=0)/*判斷學(xué)號(hào)是否有雷同*/puts(此記錄已存在,請(qǐng)重新輸入!n);w1=1;break;while(w1=1);/*輸入三個(gè)科目分?jǐn)?shù)函數(shù)*/*i表示第i個(gè)學(xué)生記錄*/void score_input(int i)int j;for(j=0;j3;j+)printf(分?jǐn)?shù) %d:,j+1);scanf(%d,&stui.scorej);/*循環(huán)語(yǔ)句依次輸入三個(gè)分?jǐn)?shù)*/*求平均值函數(shù)*/void average(int i)int j,sum;for(sum=0,j=0;j3;j+)sum+=s

42、tui.scorej;stui.ave=(float)(sum/3.0);/*循環(huán)語(yǔ)句求平均值,強(qiáng)制類(lèi)型轉(zhuǎn)換成浮點(diǎn)型*/*保存函數(shù)*/void save()/*存儲(chǔ)函數(shù)*/ int i;FILE *fp;if(fp=fopen(zhoulei.txt,w)=NULL) /*按只寫(xiě)方式打開(kāi)文件*/printf(文件無(wú)法打開(kāi)n);/*防止文件為空,并報(bào)錯(cuò)*/for(i=0;iN;i+)if(stui.ave!=0)/*stui.ave!=0表示此記錄已刪除*/if(fwrite(&stui,sizeof(struct student),1,fp)!=1) /*這里用二進(jìn)制進(jìn)行文件的讀寫(xiě),是文件不能

43、通過(guò)電腦直接打開(kāi)*/printf(文件寫(xiě)入錯(cuò)誤n);fclose(fp);printf(nn保存成功!nn按任意鍵繼續(xù)nn);getch();menu(); /*一般的保存模塊,用于各種變動(dòng)之后,文件的保存*/*菜單*/void menu()int n,w; printf(tt*菜單*nn); printf(t0.瀏覽);printf(t1.添加);printf(t2.查找);printf(t3.修改);printf(t4.排序); printf(t5.保存);printf(t6.退出); do printf(nnt請(qǐng)選擇(0-6); scanf(%d,&n); if(n6) /*對(duì)選擇的數(shù)字

44、作出判斷*/ printf(輸入錯(cuò)誤,請(qǐng)重新輸入); w=1;getchar(); else w=0; while(w=1); switch(n) case 0:browse();break; /*瀏覽*/ case 1:add();break; /*添加*/ case 2:search();break; /*查找*/ case 3:modify();break; /*修改*/ case 4:order();break; /*排序*/ case 5:save(); break; /*保存*/ case 6:exit(0);break; /*推出*/ /*添加模塊*/void add()int

45、i,n,m,k;FILE *fp;n=load();printf(請(qǐng)輸入添加的學(xué)生個(gè)數(shù)(0-%d)?:,N-1-n); scanf(%d,&m); /*m為添加學(xué)生的個(gè)數(shù)*/k=m+n-1;for(i=n;i=k;i+)printf(n 輸入第%d個(gè)學(xué)生記錄n,i-n+1);input(i); /*調(diào)用輸入函數(shù)*/if(fp=fopen(zhoulei.txt,ab)=NULL)printf(n文件無(wú)法打開(kāi)n);for(i=n;i=k;i+)if(fwrite(&stui,sizeof(struct student),1,fp)=0)printf(文件寫(xiě)入錯(cuò)誤n);fclose(fp);save();/*加載函數(shù)*/int load()FILE *fp;int i;if(fp=fopen(zhoulei.txt,rb)=NULL) /*以只讀方式打開(kāi)一個(gè)二進(jìn)制文件*/printf(n無(wú)法打開(kāi)文件n);return NULL;for(i=0;!feof(f

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!