C語言程序設(shè)計實習報告 行編輯器 學生管理系統(tǒng)_第1頁
C語言程序設(shè)計實習報告 行編輯器 學生管理系統(tǒng)_第2頁
C語言程序設(shè)計實習報告 行編輯器 學生管理系統(tǒng)_第3頁
C語言程序設(shè)計實習報告 行編輯器 學生管理系統(tǒng)_第4頁
C語言程序設(shè)計實習報告 行編輯器 學生管理系統(tǒng)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、);input(i); /*調(diào)用輸入函數(shù)*/if(i!=0) save(); /*調(diào)用保存函數(shù)*/(2)瀏覽模塊該模塊的功能是顯示所有學生的記錄信息,流程如圖。顯示學生記錄(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); printf(nt共有%d條記錄.n,n);p

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

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

12、顯示查找方式讓用戶選擇調(diào)用按姓名查找函數(shù)search_name()調(diào)用按學號查找函數(shù)search_no()結(jié)束【程序】a)查找模塊 /*查找函數(shù)*/void search()int z,w1;doprintf(請輸入查找方式:1).按姓名查找 2).按學號查找 bb);scanf(%d,&z);if(z!=1&z!=2) /*對選擇數(shù)字作出判斷*/w1=1;getchar();else w1=0;while(w1=1);if(z=1)search_name(); /*調(diào)用按姓名查找程序*/elsesearch_no(); /*調(diào)用按學號查找程序*/b) 按姓名查找模塊這個是根據(jù)姓名查找到對應(yīng)的

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

14、; /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目的函數(shù)*/for(i=0;in;i+)if(strcmp(,)=0) /*匹配姓名*/k=i; /*找到要修改的記錄*/ printf_one(k);break; /*調(diào)用顯示一個記錄的函數(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請選擇下一步:nt1).查找其他 2).修改

15、 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請選擇下一步:nt1).查找其他 2).返回 bb);scanf(%d,&w2);while(w2=1);menu();c) 按學號查找模塊這個函數(shù)是在按姓名查找模塊的基礎(chǔ)上做了相應(yīng)的改動,

16、由于學號具有唯一性,故不存在查不到相同學號的情況。NYYN開始輸入學生學號是否找到此學生記錄顯示找到的記錄提示沒有找到詢問用戶是否繼續(xù)查找讓用戶做出選擇結(jié)束圖4.26【程序】/*按學號查找程序*/void search_no()int i,n,k,w1=1,w2,w3,w4;struct student s;n=load();dodok=-1;printf(/n/n請輸入要查找的學號! 學號:);scanf(%s,s.num);printf_face();for(i=0;in;i+)if(strcmp(s.num,stui.num)=0)k=i; printf_one(k);break;if(

17、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請選擇下一步: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,&

18、w4); if(w4=1) stuk.ave=0; break;if(w3=1|w4=1)save();printf(nn操作成功_);printf(nn請選擇下一步: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);printf_one(i); printf

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

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

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

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

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

24、 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();/*按分數(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;stui =stuj;stuj =s;save

25、();puts(nn);menu();/*按分數(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();/*按分數(shù)3排序*/void order_score3() int i,j,n; struct student s;n=load();for(i=0;in-1;i+) /*冒泡法排序*/fo

26、r(j=i+1;jn;j+)if (stui.score2stuj.score2 )s=stui;stui =stuj;stuj =s;save();puts(nn);menu();(7)保存模塊這個模塊單獨放在菜單里其實有點綴余,因為每個對文件進行寫入或修改的操作都單獨進行了保存。這里文件的讀寫全用的是二進制,所以保存的文件直接以文本打開后會出現(xiàn)亂碼?!境绦颉?*保存函數(shù)*/void save()/*存儲函數(shù)*/ int i;FILE *fp;if(fp=fopen(zhoulei.txt,w)=NULL) /*按只寫方式打開文件*/printf(文件無法打開n);/*防止文件為空,并報錯*

27、/for(i=0;iN;i+)if(stui.ave!=0)/*stui.ave!=0表示此記錄已刪除*/if(fwrite(&stui,sizeof(struct student),1,fp)!=1) /*這里用二進制進行文件的讀寫,是文件不能通過電腦直接打開*/printf(文件寫入錯誤n);fclose(fp);printf(nn保存成功!nn按任意鍵繼續(xù)nn);getch();menu(); /*一般的保存模塊,用于各種變動之后,文件的保存*/4.3公共函數(shù)這里都是些在每個模塊都可能用到的公共函數(shù)(1)加載函數(shù)/*加載函數(shù)*/int load()FILE *fp;int i;if(fp

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

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

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

31、eak;case 3:printf(分數(shù)1:);scanf(%d,&stui.score0);break;case 4:printf(分數(shù)2:);scanf(%d,&stui.score1);break;case 5:printf(分數(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)項目*/printf_one(i); /*修改后的數(shù)據(jù)讓用戶確認*/printf(n是

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

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

34、總結(jié)8天的實習是短暫的,頭兩天主要是對C語言的快速復習以及對題目的分析,第三天才開始進行程序的編寫。而最后一天主要是進行了界面的優(yōu)化。從剛開始為了完成這項任務(wù)而實習,變成了為了鍛煉自己,提高C語言編程能力而實習。8天下來感覺自己對C語言以及程序編輯的認識加深了許多。以前覺得很難的結(jié)構(gòu)體,數(shù)組,文件全部用到了,雖然并不能完全掌握,那也有一些成就感。先說中間遇到的小問題,幾乎每一個模塊的錄入,都會因為忘了加分號,忘了加括號,忘了加引號而出錯,雖然好解決,但浪費了很大的時間,去修改語法上的錯誤。然后就是邏輯錯誤的修改,現(xiàn)在意識到,如果自己實在找不到錯誤的話,就主動找別人看一下,打破了自己思維定勢,也

35、許別人會很快的找到。程序的注釋也是同樣重要,編完一段程序再反過來看的時候,沒有注釋有時會出現(xiàn)看不懂自己編的程序的情況。還有一個收獲就是當自己遇到什么不懂時,要積極的和同學們一起討論,這樣從中學到的就不只是你不懂的問題。編程讓人最感到快樂的就是一個個的改掉上百的錯誤,然后運行出想要的結(jié)果,那種心情是無法用言語來描述的。雖然最后完成了自己的題目,但總感覺我們C語言編程的能力還是僅僅在皮毛上,程序很大一部分參考了書上,尤其是算法的設(shè)計,自己做的就是搭建一個框架。路漫漫其修遠兮,今后還有很多的東西等著我們?nèi)W習,希望通過這次的實習,我們能更容易的學習其他程序的編寫,爭取做到學以致用。最后再一次感謝整個

36、過程中幫助我的老師和同學們。7參考文獻1 張冬梅 劉遠興 陳晶 王媛妮 編著,C語言課程設(shè)計與程序指導,中國鐵道出版社,2008年7月第一版。2 作者:譚浩強 C程序設(shè)計(第三版),清華大學出版社,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);void menu();void brow

37、se();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(tt*行編輯器(修改拓展版)*nn);pr

38、intf(tttttt周磊tnn);doprintf(tt重新錄入數(shù)據(jù)請按1tt進入菜單請按2: bb);scanf(%d,&q);if(q!=1&q!=2) /*對選擇數(shù)字作出判斷*/w1=1;getchar();else w1=0;while(w1=1);if(q=1) /*if語句選擇要進行的操作*/enter();elsemenu();/*定義結(jié)構(gòu)體變量*/struct studentchar num20;/*學號*/char name100;/*姓名*/int score3;/*分數(shù)*/float ave;/*平均分*/stuN; /*stuN中每個元素對應(yīng)一個學生*/*輸入模塊*/

39、void enter()int i,n;printf(請輸入學生數(shù)量(0-%d)?:,N-1);scanf(%d,&n);printf(n請輸入數(shù)據(jù)nn);for(i=0;in;i+)printf(n 輸入第%d個學生記錄n,i+1);input(i); /*調(diào)用輸入函數(shù)*/if(i!=0) save(); /*調(diào)用保存函數(shù)*/*輸入整個記錄函數(shù)*/void input(int i)no_input(i,i); /*調(diào)用學號輸入函數(shù)*/printf(姓名:);scanf(%s,); score_input(i); /*調(diào)用分數(shù)輸入函數(shù)*/average(i); /*調(diào)用求平均

40、值函數(shù)*/*學號輸入函數(shù)*/void no_input(int i,int n) /*i表示第i個學生的信息,n表示比較到第n個學生*/int j,k,w1;dow1=0;printf(學號:);scanf(%s,stui.num);for(j=0;stui.numj!=0;j+) /*學號輸入函數(shù),作了嚴格的規(guī)定*/if(stui.numj9) /*判斷學號是否為數(shù)字*/puts(輸入錯誤!僅可輸入(0-9),請重新輸入!n);w1=1;break;if(w1!=1)for(k=0;kn;k+) /*比較到第n個學生*/*排除第i個學生記錄*/if(k!=i&strcmp(stuk.num,stui.num)=0)/*判斷學號是否有雷同*/puts(此記錄已存在,請重新輸入!n);w1=1;break;while(w1=1);/*輸入三個科目分數(shù)函數(shù)*/*i表示第i個學生記錄*/void score_input(int i)int j;for(j=0;j3;j+)printf(分數(shù) %d:,j+1);scanf(%d,&stui.scorej);/*循環(huán)語句依次輸入三個分數(shù)*/*求平均值函數(shù)*/void average(int i)int j,sum;for(sum=0,j=0;j3;j+)sum+=stui.sc

溫馨提示

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

最新文檔

評論

0/150

提交評論