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

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

C語言程序設計實習報告 行編輯器 學生管理系統(tǒng)

  • 資源ID:137975528       資源大?。?span id="24d9guoke414" class="font-tahoma">884KB        全文頁數(shù):47頁
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

C語言程序設計實習報告 行編輯器 學生管理系統(tǒng)

C程序設計實習報告題目:簡單的行編輯器(修改版) 學 院: 專 業(yè): 姓 名:班級學號:指導教師: 2009年 7 月 3 日前言由于我們班選題是題號和學號一一對應,所以我抽到了16題,簡單的行編輯器。剛開始時不知道什么叫行編輯器,以為這個題目有多么的神秘,第二次實習時老師說選這個題目最好換個題,與老師交流,老師建議在原有的題目上加些功能。只是還是不知道什么叫行編輯器,上網(wǎng),問同學,沒有一點思路。再一次問老師,老師說不用管它什么是行編輯器,編輯的目的是為了后面對文件進行處理,于是這一次總算有了新的思路。等到這個題快要做完時,也明白了為什么老師說它太簡單了,做完后自己感覺都有串改題目之嫌疑,原題的要求實在太簡單了,自己加的功能占了程序的大部分。8天下來感覺自己對C語言以及程序編輯的認識加深了許多。以前覺得很難的結構體,數(shù)組,文件全部用到了,雖然并不能完全掌握,那也有一些成就感。在這里要感謝老師以及我的同學,在整個編程中給了我很大的幫助。目錄前言II目錄III1題目要求- 1 -2需求分析- 1 -3概要設計- 1 -3.1設計思想- 1 -3.2軟件運行與開發(fā)平臺- 2 -3.3數(shù)據(jù)結構- 2 -3.4系統(tǒng)結構圖- 2 -4詳細設計- 3 -4.1主函數(shù)- 3 -4.2各功能模塊設計- 4 -(1)輸入模塊- 4 -(2)瀏覽模塊- 5 -(3)添加模塊- 6 -(4)查找模塊- 8 -(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ù)結構項目- 22 -(8)顯示一個記錄的函數(shù)- 22 -5測試、結果進行分析- 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 -5.7瀏覽添加后的數(shù)據(jù)- 26 -5.8查找按姓名查找- 27 -5.9查找按學號查找- 27 -5.10修改對分數(shù)2進行修改- 28 -5.11排序按平均分進行排序- 28 -6總結- 30 -7參考文獻- 30 -8附錄- 31 -主要程序模塊清單- 31 - 43 -1題目要求原題:簡單的行編輯器【要求】(1) 設置一個簡單的行編輯器,每行以回車結束。(2) 數(shù)據(jù)以文件形式儲存。(3) 編輯器具有查找、替換、修改數(shù)據(jù)的功能。修改后:修改思路是將由行編輯器生成的文件換成有關結構體的內(nèi)容,建立一個結構體輸入關信息,生成文件,再實現(xiàn)查找、替換、修改數(shù)據(jù)等的功能。這里具體是參考書上學生成績管理系統(tǒng),實現(xiàn)成績的錄入,顯示,查找,添加,保存等功能模塊。2需求分析根據(jù)題目要求,由于學生信息是存放在文件中,所以應提供文件的輸入、輸出等操作;在程序中需要瀏覽學生的信息,應提供顯示、查找、排序等操作;另外還應提供鍵盤式選擇菜單實現(xiàn)功能選擇。3概要設計3.1設計思想由于原題的特點,對題目進行了一定的拓展。本著提高自己編程能力,加深對C語言重點、難點內(nèi)容的理解,添加了關于結構體、數(shù)組以及文件的運用。將程序模塊化,使程序條理清楚,制作簡單,容易讀懂,并能體會到程序開發(fā)的思想與方法,加深對C語言編程的認識。3.2軟件運行與開發(fā)平臺C語言,Windows平臺,VC6.0,3.3數(shù)據(jù)結構此處選用了結構體的形式來存放每一個學生的信息,對與若干個學生采用了結構體數(shù)組。3.4系統(tǒng)結構圖學生成績管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)顯示數(shù)據(jù)添加數(shù)據(jù)查找數(shù)據(jù)修改排序數(shù)據(jù)保存按姓名查找按學號查找按分數(shù)1排序按分數(shù)2排序按分數(shù)3排序按平均分排序4詳細設計4.1主函數(shù)主函數(shù)比較簡單,只提供了輸入和菜單函數(shù)的調用。各個功能的模塊用菜單方式選擇。圖4.11NY開始顯示一系列功能選項輸入n,判斷m是否是12根據(jù)n的值調用各功能模塊函數(shù)結束【程序】void main()int q,w1;printf("tt*行編輯器(修改拓展版)*nn");printf("ttttt072092t周磊t20091002238nn");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();4.2各功能模塊設計(1)輸入模塊考慮到自己在C學習時遇到的問題,以及在考計算機二級時薄弱的地方,以及聯(lián)系這個題目的要求,此處選用了結構體的形式來存放每一個學生的信息,對與若干個學生采用了結構體數(shù)組。具體到各個數(shù)據(jù)的信息,學號和姓名采用了字符型數(shù)組,分數(shù)為整型,而平均分采用了實型。/*定義結構體變量*/struct studentchar num20;/*學號*/char name100;/*姓名*/int score3;/*分數(shù)*/float ave;/*平均分*/stuN; /*stuN中每個元素對應一個學生*/N采用了宏定義的方式,可以隨時在源程序中修改?!境绦颉?*輸入模塊*/void enter()YN圖4.21開始輸入用戶要輸入學生記錄的個數(shù)n從0n-1調用輸入函數(shù)input(i)i!=0嗎?調用保存函數(shù)save()返回主菜單結束int i,n;printf("請輸入學生數(shù)量(0-%d)?:",N-1);scanf("%d",&n);printf("n請輸入數(shù)據(jù)nn");for(i=0;i<n;i+)printf("n 輸入第%d個學生記錄n",i+1);input(i); /*調用輸入函數(shù)*/if(i!=0) save(); /*調用保存函數(shù)*/(2)瀏覽模塊該模塊的功能是顯示所有學生的記錄信息,流程如圖。顯示學生記錄(10人一屏)按任意鍵顯示下一屏按任意鍵返回主菜單圖4.22【程序】/*瀏覽函數(shù)*/void browse()/*瀏覽模塊,前面多次用到*/int i,n;n=load();printf_face();for(i=0;i<n;i+)if(i!=0)&&(i%10=0) /*目的是分屏顯示*/printf("任意鍵繼續(xù)n");getch();puts("nn");printf_one(i); printf("nt共有%d條記錄.n",n);printf("n任意鍵返回nn");getch();menu();(3)添加模塊該模塊的功能是用戶需要增加新的學生記錄,注意新添加的內(nèi)容不能覆蓋原來的記錄。追加模塊流程圖:圖4.23開始調用加載函數(shù),并計算可以記錄的個數(shù)K=m+ni從n到k調用輸入函數(shù)input(i)保存追加的記錄結束輸入用戶要追加學生記錄個數(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 輸入第%d個學生記錄n",i-n+1);input(i); /*調用輸入函數(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開始顯示查找方式讓用戶選擇調用按姓名查找函數(shù)search_name()調用按學號查找函數(shù)search_no()結束【程序】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(); /*調用按姓名查找程序*/elsesearch_no(); /*調用按學號查找程序*/b) 按姓名查找模塊這個是根據(jù)姓名查找到對應的學生記錄,但在此處程序有一定的缺陷,就是如果有相同的姓名,只能查到最上面的一個,而其他的則不能找到。后來嘗試修改時發(fā)現(xiàn),還需要改動其他相應的函數(shù),故沒有進行下去。NYYN開始輸入學生姓名是否找到此學生記錄顯示找到的記錄提示沒有找到詢問用戶是否繼續(xù)查找讓用戶做出選擇結束圖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",s.name); /*輸入要修改的數(shù)據(jù)的姓名*/printf_face(); /*調用顯示數(shù)據(jù)結構項目的函數(shù)*/for(i=0;i<n;i+)if(strcmp(s.name,stui.name)=0) /*匹配姓名*/k=i; /*找到要修改的記錄*/ printf_one(k);break; /*調用顯示一個記錄的函數(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).修改 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ù)是在按姓名查找模塊的基礎上做了相應的改動,由于學號具有唯一性,故不存在查不到相同學號的情況。NYYN開始輸入學生學號是否找到此學生記錄顯示找到的記錄提示沒有找到詢問用戶是否繼續(xù)查找讓用戶做出選擇結束圖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;i<n;i+)if(strcmp(s.num,stui.num)=0)k=i; printf_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請選擇下一步: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請選擇下一步:nt1).查找其他 2).返回 bb");scanf("%d",&w2);while(w2=1);menu();/*瀏覽函數(shù)*/void browse()/*瀏覽模塊,前面多次用到*/int i,n;n=load();printf_face();for(i=0;i<n;i+)if(i!=0)&&(i%10=0) /*目的是分屏顯示*/printf("任意鍵繼續(xù)n");getch();puts("nn");printf_one(i); printf("nt共有%d條記錄.n",n);printf("n任意鍵返回nn");getch();menu();(5)修改模塊該模塊首先要顯示所有學生的信息,并采用分屏顯示。顯示完所有記錄后,用戶輸入要修改的學生的學號,根據(jù)學號查找學生記錄,并提示用戶修改該記錄的哪部分信息。NYYN開始顯示所有記錄,讓用戶看哪條信息需要修改輸入要修改的學號i!=0嗎?顯示找到的記錄,調用修改函數(shù)提示沒有找到詢問用戶是否繼續(xù)修改返回主菜單結束圖4.27【程序】/*修改函數(shù)*/void modify()struct student s;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;printf_face(); /*調用顯示數(shù)據(jù)結構項目函數(shù)*/for(i=0;i<n;i+)if(i!=0)&&(i%10=0) /*目的是分屏顯示*/ printf("nn記住你要修改的學號.任意鍵繼續(xù) ."); getch(); puts("nn");printf_one(i); /*調用顯示一個記錄的函數(shù)*/doprintf("nn請輸入你想要修改的學號:");scanf("%s",s.num); /*輸入要修改的數(shù)據(jù)的學號*/for(i=0;i<n;i+)if(strcmp(s.num,stui.num)=0)k=i; /*找到要修改的記錄*/s=stui; /*備份當次要修改的學生記錄stui*/if(k=-1) printf("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);printf("nn你所修改的內(nèi)容不存在");menu();(6)排序模塊該模塊在原有的排序模塊上做了一定的修改,可以按照分數(shù)1,、分數(shù)2、分數(shù)3以及平均數(shù)進行由大到小的排序。這里選擇了冒泡法排序。由于改動方便,這里的4種排序方法在程序上其實是大同小異,因此程序還需進行一定的優(yōu)化。還有一個問題就是排序結束后不能直接瀏覽,需要手動調用瀏覽模塊。其原因是在排序后調用了保存函數(shù),而保存函數(shù)保存完畢要直接返回主菜單。如果先進行瀏覽的話,所顯示內(nèi)容不是排序后的。非1414開始顯示要進行的排序方式用戶做出選擇調用相應的函數(shù)結束圖4.28【程序】a) 排序模塊 /*排序模塊*/void order() int 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開始用冒泡法排序保存返回主菜單結束/*按平均分排序*/void order_ave() int i,j,n; struct student s;n=load();for(i=0;i<n-1;i+) /*冒泡法排序*/for(j=i+1;j<n;j+)if (stui.ave<stuj.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;i<n-1;i+) /*冒泡法排序*/for(j=i+1;j<n;j+)if (stui.score0<stuj.score0 )s=stui;stui =stuj;stuj =s;save();puts("nn");menu();/*按分數(shù)2排序*/void order_score2() int i,j,n; struct student s;n=load();for(i=0;i<n-1;i+) /*冒泡法排序*/for(j=i+1;j<n;j+)if (stui.score1<stuj.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;i<n-1;i+) /*冒泡法排序*/for(j=i+1;j<n;j+)if (stui.score2<stuj.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");/*防止文件為空,并報錯*/for(i=0;i<N;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=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=0;stui.numj!='0'j+) /*學號輸入函數(shù),作了嚴格的規(guī)定*/if(stui.numj<'0'|stui.numj>'9') /*判斷學號是否為數(shù)字*/puts("輸入錯誤!僅可輸入(0-9),請重新輸入!n");w1=1;break;if(w1!=1)for(k=0;k<n;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 j;for(j=0;j<3;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;j<3;j+)sum+=stui.scorej;stui.ave=(float)(sum/3.0);/*循環(huán)語句求平均值,強制類型轉換成浮點型*/(5)輸入整個記錄函數(shù)/*輸入整個記錄函數(shù)*/void input(int i)no_input(i,i); /*調用學號輸入函數(shù)*/printf("姓名:");scanf("%s",stui.name); score_input(i); /*調用分數(shù)輸入函數(shù)*/average(i); /*調用求平均值函數(shù)*/(6)修改整條記錄函數(shù)/*修改整條記錄函數(shù)*/int modify_data(int i,int n) /*修改第i個記錄*/int c,w1;do puts("n請選擇修改方式nn 1).學號 2).姓名 3).分數(shù)1 4).分數(shù)2 5).分數(shù)3 6).所有分數(shù) 7).所有數(shù)據(jù) 8).取消并返回"); printf("請選擇: bb"); scanf("%d",&c); if(c>8|c<1) puts("n選擇錯誤,請重新輸入!"); getchar(); /*當輸入是字符時可以防止是死循環(huán)*/ while(!(c<=8&&c>=1);doswitch(c) /*選擇要修改的項目*/case 1:no_input(i,n);break;case 2:printf("姓名:");scanf("%s",stui.name);break;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(c>2&&c<7)average(i);puts("n新數(shù)據(jù):n");printf_face(); /*顯示數(shù)據(jù)結構項目*/printf_one(i); /*修改后的數(shù)據(jù)讓用戶確認*/printf("n是否確定?nnt1).是 2).否,重新修改 3).直接返回 bb");scanf("%d",&w1);while(w1=2);return(w1); /*返回控制值*/(7)顯示數(shù)據(jù)結構項目/*顯示數(shù)據(jù)結構項目函數(shù)*/void printf_face() /*顯示數(shù)據(jù)結構項目函數(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,stui.name );for(j=0;j<3;j+)printf("%9d",stui.scorej);printf("t%9.2fn",stui.ave); /*保留兩位小數(shù)*/5測試、結果進行分析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排序按平均分進行排序這里的一個問題是排序完了程序沒有自動進行瀏覽,需要手動調用瀏覽函數(shù)圖5115.12退出圖5126總結8天的實習是短暫的,頭兩天主要是對C語言的快速復習以及對題目的分析,第三天才開始進行程序的編寫。而最后一天主要是進行了界面的優(yōu)化。從剛開始為了完成這項任務而實習,變成了為了鍛煉自己,提高C語言編程能力而實習。8天下來感覺自己對C語言以及程序編輯的認識加深了許多。以前覺得很難的結構體,數(shù)組,文件全部用到了,雖然并不能完全掌握,那也有一些成就感。先說中間遇到的小問題,幾乎每一個模塊的錄入,都會因為忘了加分號,忘了加括號,忘了加引號而出錯,雖然好解決,但浪費了很大的時間,去修改語法上的錯誤。然后就是邏輯錯誤的修改,現(xiàn)在意識到,如果自己實在找不到錯誤的話,就主動找別人看一下,打破了自己思維定勢,也許別人會很快的找到。程序的注釋也是同樣重要,編完一段程序再反過來看的時候,沒有注釋有時會出現(xiàn)看不懂自己編的程序的情況。還有一個收獲就是當自己遇到什么不懂時,要積極的和同學們一起討論,這樣從中學到的就不只是你不懂的問題。編程讓人最感到快樂的就是一個個的改掉上百的錯誤,然后運行出想要的結果,那種心情是無法用言語來描述的。雖然最后完成了自己的題目,但總感覺我們C語言編程的能力還是僅僅在皮毛上,程序很大一部分參考了書上,尤其是算法的設計,自己做的就是搭建一個框架。路漫漫其修遠兮,今后還有很多的東西等著我們?nèi)W習,希望通過這次的實習,我們能更容易的學習其他程序的編寫,爭取做到學以致用。最后再一次感謝整個過程中幫助我的老師和同學們。7參考文獻1 張冬梅 劉遠興 陳晶 王媛妮 編著,C語言課程設計與程序指導,中國鐵道出版社,2008年7月第一版。2 作者:譚浩強 C程序設計(第三版),清華大學出版社,2005年7月第三版8附錄 主要程序模塊清單#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#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 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("tt*行編輯器(修改拓展版)*nn");printf("ttttt072092t周磊t20091002238nn");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();/*定義結構體變量*/struct studentchar num20;/*學號*/char name100;/*姓名*/int score3;/*分數(shù)*/float ave;/*平均分*/stuN; /*stuN中每個元素對應一個學生*/*輸入模塊*/void enter()int i,n;printf("請輸入學生數(shù)量(0-%d)?:",N-1);scanf("%d",&n);printf("n請輸入數(shù)據(jù)nn");for(i=0;i<n;i+)printf("n 輸入第%d個學生記錄n",i+1);input(i); /*調用輸入函數(shù)*/if(i!=0) save(); /*調用保存函數(shù)*/*輸入整個記錄函數(shù)*/void input(int i)no_input(i,i); /*調用學號輸入函數(shù)*/printf("姓名:");scanf("%s",stui.name); score_input(i); /*調用分數(shù)輸入函數(shù)*/average(i); /*調用求平均值函數(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.numj<'0'|stui.numj>'9') /*判斷學號是否為數(shù)字*/puts("輸入錯誤!僅可輸入(0-9),請重新輸入!n");w1=1;break;if(w1!=1)for(k=0;k<n;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;j<3;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;j<3;j+)sum+=stui.scorej;stui.ave=(float)(sum/3.0);/*循環(huán)語句求平均值,強制類型轉換成浮點型*/*保存函數(shù)*/void save()/*存儲函數(shù)*/ int i;FILE *fp;if(fp=fopen("zhoulei.txt","w")=NULL) /*按只寫方式打開文件*/printf("文件無法打開n");/*防止文件為空,并報錯*/for(i=0;i<N;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(); /*一般的保存模塊,用于各種變動之后,文件的保存*/*菜單*/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請選擇(0-6)"); scanf("%d",&n); if(n<0|n>6) /*對選擇的數(shù)字作出判斷*/ printf("輸入錯誤,請重新輸入"); 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 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 輸入第%d個學生記錄n",i-n+1);input(i); /*調用輸入函數(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();/*加載函數(shù)*/int load()FILE *fp;int i;if(fp=fopen("zhoulei.txt","rb")=NULL) /*以只讀方式打開一個二進制文件*/printf("n無法打開文件n");return NULL;for(i=0;!feof(f

注意事項

本文(C語言程序設計實習報告 行編輯器 學生管理系統(tǒng))為本站會員(無***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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