C語言綜合設(shè)計(jì)實(shí)驗(yàn)十上機(jī)報(bào)告_第1頁
C語言綜合設(shè)計(jì)實(shí)驗(yàn)十上機(jī)報(bào)告_第2頁
C語言綜合設(shè)計(jì)實(shí)驗(yàn)十上機(jī)報(bào)告_第3頁
C語言綜合設(shè)計(jì)實(shí)驗(yàn)十上機(jī)報(bào)告_第4頁
C語言綜合設(shè)計(jì)實(shí)驗(yàn)十上機(jī)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上標(biāo)準(zhǔn)C語言程序設(shè)計(jì)上機(jī)報(bào)告實(shí)驗(yàn)十 綜合設(shè)計(jì)實(shí)驗(yàn) 專業(yè): 電子信息工程 班級(jí): 電信1301 學(xué)號(hào): U 姓名: 秦行 指導(dǎo)教師: 張繼遠(yuǎn) 完成日期:2014-7-1一、 實(shí)驗(yàn)?zāi)康?、 進(jìn)一步熟悉開發(fā)環(huán)境,掌握編譯、連接和調(diào)試的技巧;2、 綜合運(yùn)用數(shù)組、指針、函數(shù)、結(jié)構(gòu)體和文件,通過綜合設(shè)計(jì)掌握數(shù)組、結(jié)構(gòu)體、指針和函數(shù)之間的相互關(guān)系,掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系,理解傳值、傳指針的區(qū)別(允許使用傳引用)3、 熟悉具有復(fù)雜需求的程序設(shè)計(jì)過程和注意事項(xiàng);4、 使用多文件的工程設(shè)計(jì)二、 實(shí)驗(yàn)內(nèi)容及要求下面程序運(yùn)行中所有學(xué)生信息均存入文件studengdata.txt,程序每次

2、運(yùn)行時(shí)從文件中提取數(shù)據(jù)存入內(nèi)存結(jié)構(gòu)體數(shù)組中(指定文件不存在則新建)。題目:某班有最多不超過30人(具體人數(shù)由鍵盤輸入)參加期末考試,考試科目最多不超過6門(具體門數(shù)由鍵盤輸入)。編程實(shí)現(xiàn)如下菜單驅(qū)動(dòng)的學(xué)生成績(jī)管理系統(tǒng):(1) 錄入學(xué)生學(xué)號(hào)、姓名和各科考試成績(jī);(2) 計(jì)算每門課程的總分和平均分;(3) 計(jì)算每個(gè)學(xué)生的總分和平均分;(4) 按每個(gè)學(xué)生的總分由高到低排出名次表;(5) 按學(xué)號(hào)由小到大排出成績(jī)表;(6) 按姓名的字典順序排出成績(jī)表;(7) 按學(xué)號(hào)查詢學(xué)生排名及其考試成績(jī);(8) 按姓名查詢學(xué)生排名及其考試成績(jī);(9) 按優(yōu)秀(90-100)、良好(80-89)、中等(70-79)、及

3、格(60-69)、不及格(0-59)5個(gè)類別,對(duì)每門課程分別統(tǒng)計(jì)各類別人數(shù)和所占比例;(10) 輸出每個(gè)學(xué)生學(xué)號(hào)、姓名、各科考試成績(jī)和總分排名。(11) 學(xué)生記錄信息寫入文件studengdata.txt(12) 從文件中讀出學(xué)生記錄信息并顯示;(13) 退出系統(tǒng)程序要求:1. 程序運(yùn)行后先顯示菜單列出上面13項(xiàng)操作選項(xiàng),并提示用戶輸入1-13值;2. 考慮對(duì)用戶輸入的數(shù)據(jù)進(jìn)行有效性校驗(yàn),提高程序的健壯性;總體要求:1、 按模塊化設(shè)計(jì)方法,對(duì)問題進(jìn)行分解,提出模塊劃分并繪制模塊劃分框圖。給出各子函數(shù)模塊的輸入輸出接口設(shè)計(jì)(即函數(shù)原型)以及用到的主要數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu)的選擇;(注:輸入數(shù)據(jù)、折半

4、查找、統(tǒng)計(jì)個(gè)人平均分、統(tǒng)計(jì)班級(jí)總平均分、排序、打印等均采用子函數(shù)設(shè)計(jì),文件操作允許在main函數(shù)內(nèi)完成)(不得采用直接選擇法進(jìn)行排序子函數(shù)設(shè)計(jì))2、 給出程序清單,添加注釋;3、 不允許使用全局變量,避免破壞程序結(jié)構(gòu);4、 允許采用傳引用方式定義子函數(shù);5、 注意編程規(guī)范,包括書寫格式遵循縮進(jìn)規(guī)則和空行規(guī)則;6、 提交要求:提交:報(bào)告紙質(zhì)打印檔、報(bào)告電子檔、源碼(含cpp和h文件)、student data.txt文件。所有電子檔壓縮歸檔,壓縮檔命名格式為“2013級(jí)綜合設(shè)計(jì)代碼報(bào)告匯總班號(hào)學(xué)號(hào)姓名提交年月日.rar”,紙質(zhì)檔提交截至?xí)r間2014/7/1,提交唯一郵箱:zhang_ty163三

5、、 程序設(shè)計(jì)注意事項(xiàng)1、 大型程序通常采用模塊化,每個(gè)模塊通常至少有一個(gè)函數(shù)組成;大型程序是以工程project來組織的,一個(gè)project又是由幾個(gè)源程序文件(.cpp)組成的。因此,學(xué)會(huì)編寫多源文件和多函數(shù)的C+程序,不要一味地用唯一的main函數(shù)來組織程序設(shè)計(jì)。本設(shè)計(jì)要求2個(gè)以上的源文件,規(guī)定所有子函數(shù)原型說明語句、結(jié)構(gòu)體類型定義以及#define宏、typedef類型別名說明語句等放在myproject.h文件中,main函數(shù)和各子函數(shù)定義放在源文件中,源文件開頭用#include “myproject.h”包含。2、 盡量少用全局變量(外部存儲(chǔ)類型變量)。過多使用外部類型的全局變量,

6、將使函數(shù)模塊之間的耦合性加強(qiáng),從而降低函數(shù)的獨(dú)立性以及通用型。盡管采用全局變量編程相對(duì)容易,但對(duì)C+程序員,更應(yīng)注意采用符合模塊化的設(shè)計(jì)理念來完成設(shè)計(jì),正確的設(shè)計(jì)方法論是我們?cè)趯W(xué)習(xí)過程首先要掌握并以此為主要學(xué)習(xí)任務(wù),不能為了解決問題而“湊”程序。3、 采用軟件工程學(xué)的準(zhǔn)則來完成整個(gè)設(shè)計(jì)過程,一般的軟件開發(fā)過程包括了:確定需求分析過程、逐步細(xì)化的系統(tǒng)設(shè)計(jì)過程(包含總體設(shè)計(jì)、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)等)、程序生產(chǎn)過程(編寫代碼)、調(diào)試和測(cè)試以及運(yùn)行和維護(hù)過程這幾個(gè)階段。對(duì)于初學(xué)者,我們不必嚴(yán)格按照這些步驟,但簡(jiǎn)單的問題理解、通過系統(tǒng)設(shè)計(jì)給出各模塊的函數(shù)原型說明以及用到的主要數(shù)據(jù)類型或數(shù)據(jù)結(jié)構(gòu)、編程、調(diào)試

7、運(yùn)行等需要掌握。四、 設(shè)計(jì)思路分析1、 簡(jiǎn)單需求分析:編程需要1.結(jié)構(gòu)體的應(yīng)用2.幾個(gè)函數(shù)模塊的結(jié)合和利用.把握好函數(shù)的模塊即可. 設(shè)計(jì): 每一個(gè)操作作為一個(gè)函數(shù)封裝起來,然后用一個(gè)菜單函數(shù)來把每一個(gè)函數(shù)聯(lián)系起來,是操作更加簡(jiǎn)潔美觀和人性化.2、 總體設(shè)計(jì)確定功能模塊劃分:要求:根據(jù)需求分析,確定所有函數(shù)模塊,對(duì)各模塊功能作簡(jiǎn)單描述,根據(jù)函數(shù)模塊之間的調(diào)用與被調(diào)用關(guān)系,分析出彼此數(shù)據(jù)傳遞關(guān)系,然后為每個(gè)函數(shù)模塊確定輸入/輸出接口參數(shù)定義,寫出完整的函數(shù)原型說明。最終根據(jù)上面得到的函數(shù)模塊調(diào)用關(guān)系及接口參數(shù)定義畫出具體的功能模塊劃分框圖圖(方框內(nèi)為模塊名,方框之間的連線注明數(shù)據(jù)傳遞)prints

8、core(stu,n); 輸出每個(gè)學(xué)生學(xué)號(hào)、姓名、各科考試成績(jī)和總分排名statisticanalysis(stu,n);按按優(yōu)秀(90-100)、良好(80-89)、中等(70-79)、及格(6069)、不及格(0-59)5個(gè)類別,對(duì)每門課程分別統(tǒng)計(jì)各類別人數(shù)和所占比例;121110987643125000Menu函數(shù)/用戶的功能選擇Readscore(stu,n)/作為輸入函數(shù)進(jìn)行數(shù)據(jù)錄入Aversumofscore(stu,sum_stu,n);/ /計(jì)算每門和每個(gè)學(xué)生的總分和平均分Desortbyscore(stu,sum_stu,n);通過總分來排序Assortbynum(stu,n

9、);通過學(xué)號(hào)來排序并輸出成績(jī)Assortbyname(stu,n);通過姓名字典順序來排序searchbynum(stu,n);按學(xué)號(hào)進(jìn)行查詢成績(jī)searchbyname(stu,n);按姓名進(jìn)行查詢成績(jī)save(stu,n);學(xué)生記錄信息寫入文件studengdata.txt read(stu,n); /從文件中讀出學(xué)生記錄信息并顯示exit(0)/退出程序Main:輸入學(xué)生人數(shù),進(jìn)行while無限循環(huán),用一個(gè)菜單函數(shù)和switch語句來讓用戶進(jìn)行功能選擇,選擇各種函數(shù).3、 模塊內(nèi)部流程圖或偽代碼要求:除輸入輸出子函數(shù)外都要給出函數(shù)內(nèi)部流程圖或偽代碼(關(guān)于偽代碼參考wikipedia,內(nèi)部

10、搜索詞:Pseudocode或直接谷歌)Menu(void)Readscore(stu,n)/作為輸入函數(shù)進(jìn)行數(shù)據(jù)錄入Aversumofscore(stu,sum_stu,n);/ /計(jì)算每門和每個(gè)學(xué)生的總分和平均分Desortbyscore(stu,sum_stu,n);通過總分來排序Assortbynum(stu,n);通過學(xué)號(hào)來排序并輸出成績(jī)Assortbyname(stu,n);通過姓名字典順序來排序searchbynum(stu,n);按學(xué)號(hào)進(jìn)行查詢成績(jī)searchbyname(stu,n);按姓名進(jìn)行查詢成績(jī))statisticanalysis(stu,n);按按優(yōu)秀(90-100

11、)、良好(80-89)、中等(70-79)、及格(6069)、不及格(0-59)5個(gè)類別,對(duì)每門課程分別統(tǒng)計(jì)各類別人數(shù)和所占比例;)printscore(stu,n); 輸出每個(gè)學(xué)生學(xué)號(hào)、姓名、各科考試成績(jī)和總分排名)vsave(stu,n);學(xué)生記錄信息寫入文件studengdata.txt)read(stu,n); /從文件中讀出學(xué)生記錄信息并顯示)exit(0)/退出程序五、 源代碼(每個(gè)子函數(shù)需附注釋描述功能及關(guān)鍵方法)#include <stdio.h>#include <stdlib.h>#include <string.h>#include”m

12、y project.h”#define STU_M 30 /*最多的學(xué)生人數(shù)*/#define SCORE_M 6struct studentint num;char name20;float scoreSCORE_M;int mingci;int Menu(void);void Readscore (student *,int n);void Aversumofscore(student *,float *,int n);void Desortbyscore(student *,float *,int n);void Assortbynum(student *,int n);void Ass

13、ortbyname(student *,int n);void searchbynum(student *,int n);void searchbyname(student *,int n);void statisticanalysis(student *,int n);void printscore(student *,int n);void save(student *,int n);void read(student *,int n);int main() char itemselected; int n; struct student stuSTU_M; float sum_stuST

14、U_M; printf("輸入學(xué)生人數(shù)(n<%d)",STU_M); scanf("%d",&n); while (1) itemselected=Menu(); /*顯示菜單,并讀取用戶輸入*/ switch (itemselected) case 1: Readscore (stu,n); break; case 2: Aversumofscore(stu,sum_stu,n); break; case 3: Desortbyscore(stu,sum_stu,n); printf("n sort in descending

15、order by score:n"); break; case 4: Assortbynum(stu,n); printf("n sort in ascending order by score:n"); break; case 5: Assortbyname(stu,n); printf("n sort in ascending order by name:n"); break; case 6: searchbynum(stu,n); break; case 7: searchbyname(stu,n); break; case 8: sta

16、tisticanalysis(stu,n); break; case 9: printscore(stu,n); break; case 10: save(stu,n); case 11: read(stu,n); case 0: exit(0); /*printf("end of program!"); break;*/ default :printf("input error !"); break; return 0;/*函數(shù)功能:顯示菜單項(xiàng)并獲得用戶鍵盤輸入的選項(xiàng)*/int Menu(void)int itemselected;printf(&qu

17、ot;n 學(xué)生成績(jī)管理系統(tǒng):管理學(xué)生成績(jī)n");printf("n 1. 錄入每個(gè)學(xué)生學(xué)號(hào)和考試成績(jī)n");printf("n 2. 計(jì)算每門課程和每個(gè)學(xué)生總分和平均分n");/每門課的總分,平均分和每個(gè)學(xué)生的總分,平均分用一個(gè)函數(shù)計(jì)算/printf("n 3. 按總分由低到高排出名次表n");printf("n 4. 按學(xué)號(hào)由大到小排出成績(jī)表n");printf("n 5. 按姓名的字典順序排序并輸出成績(jī)表n");printf("n 6. 按學(xué)號(hào)查詢學(xué)生排名和考試成績(jī)n&q

18、uot;);printf("n 7. 按姓名查詢學(xué)生排名和考試成績(jī)n");printf("n 8. 按優(yōu)秀(90-100分)、良好(80-89分)、中等(70-79分)、及格(60-69分)、不及格(0-59分)5個(gè)類別n統(tǒng)計(jì)每個(gè)類別的人數(shù)n");printf("n 9. 輸出學(xué)生學(xué)號(hào)、姓名、各科考試成績(jī)和總分排名:n");printf("n 10.學(xué)生記錄信息寫入文件studengdata.txt");printf("n 11.從文件中讀出學(xué)生記錄信息并顯示");printf("n

19、0. 程序結(jié)束n");printf("n輸入你的選擇n");scanf ("%d",&itemselected);return itemselected;/*函數(shù)功能:輸入n個(gè)學(xué)生的信息*/void Readscore (struct student *p,int n) int i,j; float s; for(i=0;i<n;i+) printf("請(qǐng)輸入姓名:n"); scanf("%s",(p+i)->name); printf("請(qǐng)輸入學(xué)號(hào):n"); sc

20、anf("%d%f",&(p+i)->num); for(j=0;j<SCORE_M;j+) printf("輸入第%d門課成績(jī)"); scanf("%f",&s); (p+i)->scorej=s; /*函數(shù)功能:計(jì)算每門課程和每個(gè)學(xué)生總分和平均分*/(第2第3整合到了一起)void Aversumofscore(struct student *p,float *ap,int n)int i,j;float sum1,ave1,ave2;for(j=0;j<SCORE_M;j+)sum1=0;

21、ave1=0;for(i=0;i<n;i+)sum1=sum1+(p+i)->scorej;ave1=sum1/n;printf("第%d門課程的總分為%fn第%d門課程的平均分為%f",j,sum1,j,ave1);/輸出每門課程情況for(i=0;i<n;i+)ave2=0;for(j=0;j<SCORE_M;j+)*(ap+i)=*(ap+i)+(p+i)->scorej;ave2=*(ap+i)/SCORE_M;printf("學(xué)生%s的總成績(jī)?yōu)?d,平均成績(jī)?yōu)?d",(p+i)->name,*ap,ave2)

22、;/輸出每個(gè)學(xué)生情況/*函數(shù)功能:將學(xué)生按總分從高到低排序*/void Desortbyscore(struct student *p,float *ap,int n)int i,j,max;struct student temp;for(i=0;i<n;i+)max=i;for(j=i+1;j<n;j+);if(apj>apmax)max=j;if(max!=i)temp=pi;pi=pmax;pmax=temp;for(i=0;i<n;i+)(p+i)->mingci=i;printf("按總分排序結(jié)果為第%5d名為%st總分為%dn",i

23、,(p+i)->name,*(ap+i);/*函數(shù)功能:將按學(xué)號(hào)從小到大排學(xué)生順序*/void Assortbynum(struct student *p,int n)int i,j,min;struct student temp;for(i=0;i<n;i+)min=i;for(j=i+1;j<n;j+)if(p+j)->num<(p+min)->num)min=j;if(min!=i)temp=pi;pi=pmin;pmin=temp;for(i=0;i<n;i+)printf("按學(xué)號(hào)輸出成績(jī)n,學(xué)號(hào)%dt姓名%st成績(jī)",(

24、p+i)->num,(p+i)->name);for(j=0;j<SCORE_M;j+)printf("第%d門成績(jī)?yōu)?dt",j,(p+i)->scorej);/*函數(shù)功能按姓名字典順序排序并輸出成績(jī)表*/void Assortbyname(struct student *p,int n);int i,j,min;struct student temp;for(i=0;i<n;i+)min=i;for(j=i+1;j<n;j+)if(strcmp(p+j)->name,(p+min)->name)<0)min=j;if

25、(min!=i)temp=pi;pi=pmin;pmin=temp;for(i=0;i<n;i+)printf("按姓名順序輸出成績(jī)n,姓名%st",(p+i)->name);for(j=0;j<SCORE_M;j+)printf("第%d門成績(jī)?yōu)?dt",j,(p+i)->scorej);/*函數(shù)功能:按學(xué)號(hào)查找學(xué)生成績(jī)并顯示查找結(jié)果*/void searchbynum(struct student *p,int n) int i,j,search;printf("請(qǐng)輸入學(xué)號(hào):n"); scanf("

26、;%d",&search);for(i=0;i<n;i+)if(search!=(p+i)->num) continue; else for(j=0;j<SCORE_M;j+)printf("第%d科目 %dt",j,(p+i)->scorej);break/*函數(shù)功能:按學(xué)號(hào)查找學(xué)生成績(jī)并顯示查找結(jié)果*/void searchbyname(struct student *p,int n) int i,j;char search20;printf("請(qǐng)輸入姓名n"); scanf("%s",s

27、earch);for(i=0;i<n;i+)if(strcmp(search<(p+i)->name)!=0)continue; else for(j=0;j<SCORE_M;j+)printf("%s同性第%d科目 %dt",search,j,(p+i)->scorej);break/*函數(shù)功能:統(tǒng)計(jì)各分?jǐn)?shù)段的學(xué)生人數(shù)*/void statisticanalysis(struct student *p,int n)int i,aSCORE_M,bSCORE_M,cSCORE_M,dSCORE_M,eSCORE_M;float ;a=0;b=0

28、;c=0;d=0;e=0;f=0;for(i=0;i<n;i+)for(j=0;j<SCORE_M;j+)f=(p+i)->scorej;switch(f/10)case 9:aj+;continue;case 8:bj+;continue;case 7:cj+;continue;case 6:dj+;continue;default:ej+;continue;for(j=0;j<SCORE_M;j+)printf("優(yōu)秀人數(shù):%dn,良好人數(shù):%dn,中等人數(shù):%dn,及格人數(shù):%dn",aj,bj,cj,dj,ej);/*函數(shù)功能:輸出學(xué)生學(xué)號(hào)、姓名、各科考試成績(jī)和總分排名*/void printscore(struc

溫馨提示

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

評(píng)論

0/150

提交評(píng)論