版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選文檔福建工程學(xué)院計(jì)算機(jī)與信息科學(xué)系實(shí)驗(yàn)報(bào)告 2012 2013 學(xué)年第 1 學(xué)期 任課老師: 章靜 課程名稱 結(jié)構(gòu)化程序綜合設(shè)計(jì)班級(jí)計(jì)算機(jī)1001座號(hào)3100301114姓名張揚(yáng)文實(shí)驗(yàn)題目學(xué)生成績(jī)管理系統(tǒng)實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)開始日期:2012/2/24 報(bào)告提交日期:2012/3/10 實(shí)驗(yàn)?zāi)康?、要?該實(shí)驗(yàn)的課內(nèi)學(xué)時(shí)是4個(gè)課時(shí)。2程序完成后應(yīng)該完成如下基本功能:1)用自定義結(jié)構(gòu)體typedef struct設(shè)計(jì)該軟件的數(shù)據(jù)結(jié)構(gòu);2)用數(shù)組或指針鏈表將所有學(xué)生的數(shù)據(jù)按照學(xué)號(hào)順序鏈接起來;3)程序能夠按照學(xué)號(hào)順序輸入學(xué)生的三門成績(jī),并計(jì)算平均成績(jī)和總成績(jī)。4)程序能夠顯示已經(jīng)輸入的指定學(xué)號(hào)的學(xué)生成績(jī)
2、以及平均成績(jī)和總成績(jī)。5)程序能夠按要求顯示指定分?jǐn)?shù)段的學(xué)生成績(jī)以及平均成績(jī)和總成績(jī)。6)能夠統(tǒng)計(jì)班級(jí)總?cè)藬?shù)、班級(jí)平均成績(jī)。7)能夠增加和刪除指定學(xué)生的成績(jī)。8)按照指定的要求以及順序(升序或降序)顯示學(xué)生成績(jī)以及平均成績(jī)和總成績(jī)。 實(shí)驗(yàn)步驟與內(nèi)容 按如下順序?qū)懀?、 主要設(shè)計(jì)思想;學(xué)生成績(jī)管理系統(tǒng)包含多種功能,可以輸入學(xué)生成績(jī),刪除,插入,排序,查找等等。輸入的信息又包含學(xué)生姓名,學(xué)號(hào),各科成績(jī)。所以首先要定義一個(gè)結(jié)構(gòu)體:typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double averag
3、e; struct node *next;Student;根據(jù)結(jié)構(gòu)體中的內(nèi)容飆血程序。2、 主要數(shù)據(jù)結(jié)構(gòu)及其解釋在此次程序設(shè)計(jì)中用了鏈表來實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,并設(shè)計(jì)了菜單界面如圖,根據(jù)switch語句來對(duì)用戶的選擇: 3、 模塊關(guān)系圖; 主函數(shù)輸入學(xué)生信息打印成績(jī)計(jì)算平均分和總分查找學(xué)生成績(jī)插入學(xué)生成績(jī)顯示分?jǐn)?shù)段的學(xué)生按總分平均分降序排列菜單4、 所有函數(shù)的簡(jiǎn)要說明;1) 插入函數(shù)Insert_Before();主要是要重新加入學(xué)生的信息,通過頭插法。2) 計(jì)算平均分和總分Count_Score();將輸入的數(shù)據(jù)計(jì)算出學(xué)生的平均分和總分。3) 刪除學(xué)生信息Del_Student();刪除某個(gè)學(xué)生
4、的成績(jī)。4) 按姓名查找Searchname_Student();通過輸入學(xué)生的姓名找到學(xué)生的成績(jī)。5) 計(jì)算班級(jí)總?cè)藬?shù)people=Count_People();將總的輸入學(xué)生人數(shù)打印出來。6) 顯示某分?jǐn)?shù)段學(xué)生信息Section_Score();首先選擇你要某科目的成績(jī)并輸入成績(jī)的范圍,按條件輸出學(xué)生成績(jī)。7) 按總分,平均分降序排列Descend_English();將輸入的全部學(xué)生成績(jī)按總分排序。 5、 所有源代碼; /*學(xué)生成績(jī)管理系統(tǒng) C語言*/#include #include #include #define MAXID 10#define MAXNAME 20#define
5、MAXCOURSE 3/* 學(xué)生數(shù)據(jù)結(jié)構(gòu) */typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; struct node *next;Student;/* 頭指針 */Student *head = NULL;/*課程名稱*/char ClassNameMAXCOURSE20=數(shù)學(xué),英語,計(jì)算機(jī);/* 菜單 */int Menu() system(cls); fflush(stdin); printf( 計(jì)算機(jī)1001 張揚(yáng)文 3100301114 n); printf
6、(n); printf(*學(xué)生成績(jī)管理系統(tǒng)*n); printf(n); printf( 1-初始化n); printf( 2-輸入學(xué)生信息n); printf( 3-計(jì)算所有學(xué)生的總分和平均分n); printf( 4-打印全部學(xué)生信息n); printf( 5-查找學(xué)號(hào)或姓名刪除學(xué)生信息n); printf( 6-按姓名查找學(xué)生信息n); printf( 7-按學(xué)號(hào)查找學(xué)生信息n); printf( 8-查找某一科成績(jī)段學(xué)生信息n); printf( 9-插入學(xué)生信息到鏈表中n); printf( 10-按總分或平均分降序排列學(xué)生成績(jī)n); printf( 0-退出n); return 0
7、;/*初始化*/Student *Init() int i; Student *head; head=(Student *)malloc(sizeof(Student); head-next=NULL; return head;/*檢查學(xué)號(hào)*/char Check_ID(char *s) int i; if(strlen(s)=0|strlen(s)MAXID)return 0; for(i=0;i 0 & si MAXNAME) return 0; for(i=0; i= a & si = A & si =0 & snext; while(p!=NULL) if(strcmp(s,p-id)
8、=0) return 1; p=p-next; return 0;/* 輸入學(xué)生信息 */void Input_Score(Student *p) /* 學(xué)號(hào) */ printf(n請(qǐng)輸入學(xué)號(hào): ); do gets(p-id); if (!Check_ID(p-id) printf(輸入不正確!請(qǐng)重新輸入學(xué)號(hào): ); else if (Is_SameID(p-id) printf(存在已學(xué)號(hào)!請(qǐng)重新輸入學(xué)號(hào): ); while (!(Check_ID(p-id) & !Is_SameID(p-id); /* 姓名 */ printf(請(qǐng)輸入姓名: ); do gets(p-name); if
9、 (!Check_Name(p-name) printf(輸入不正確!請(qǐng)重新輸入姓名: ); while (!Check_Name(p-name); /輸入成績(jī) int i; for(i=0; iscorei); if(!Check_Score(p-scorei) printf(輸入成績(jī)不正確!n請(qǐng)重新輸入%s成績(jī):,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1; /* 頭插法插入節(jié)點(diǎn) */void Insert_Before() Student *s =(Student*) malloc(sizeo
10、f(Student); Input_Score(s); s-next = head-next; head-next = s;/*輸出學(xué)生成績(jī)信息*/void Output_Score(Student *p) int i; printf(n姓名:%s, 學(xué)號(hào):%s n,p-name,p-id); for(i=0; iscorei); printf(總分:%d 平均分:%.2f n,p-sum,p-average);/*刪除節(jié)點(diǎn)q*/void Del_Node(Student *q) Student *p=head; while(p-next!=q) p=p-next; p-next=q-next
11、; free(q);/*插入學(xué)生成績(jī)*/void Insert_List() int x; printf(輸入你要插入的學(xué)生數(shù):); scanf(%d,&x); while(x!=0) getchar(); Student *p =(Student*) malloc(sizeof(Student); printf(n請(qǐng)輸入學(xué)號(hào): ); do gets(p-id); if (!Check_ID(p-id) printf(輸入不正確!請(qǐng)重新輸入學(xué)號(hào): ); else if (Is_SameID(p-id) printf(存在已學(xué)號(hào)!請(qǐng)重新輸入學(xué)號(hào): ); while (!(Check_ID(p-i
12、d) & !Is_SameID(p-id); /* 姓名 */ printf(請(qǐng)輸入姓名: ); do gets(p-name); if (!Check_Name(p-name) printf(輸入不正確!請(qǐng)重新輸入姓名: ); while (!Check_Name(p-name); /輸入成績(jī) int i; for(i=0; iscorei); do if(!Check_Score(p-scorei) printf(輸入成績(jī)不正確!請(qǐng)重新輸入%s成績(jī):,ClassNamei); while(!Check_Score(p-scorei); p-average = -1; p-sum = -1;
13、 p-next = head-next; head-next = p; x-; /*按學(xué)號(hào)查找*/Student *Search_ID(char *id) Student *p=head-next; while(p!=NULL) if(strcmp(p-id,id)=0)break; p=p-next; return p;/*按姓名查找節(jié)點(diǎn)*/Student *Search_Name(char *name) Student *p=head-next; while(p!=NULL) if(strcmp(p-name,name)=0)break; p=p-next; return p;/*輸出鏈表
14、*/void Output_List() Student *p; p=head-next; while(p!=NULL) Output_Score(p); p=p-next; /*刪除指定學(xué)生信息*/void Del_Student() Student *p; fflush(stdin); char str15; char judge10; printf(請(qǐng)輸入要?jiǎng)h除的學(xué)生的 學(xué)號(hào)或姓名:); do gets(str); if(!(Check_ID(str)|Check_Name(str) printf(輸入錯(cuò)誤!請(qǐng)重新輸入:); while(!(Check_ID(str)|Check_Nam
15、e(str); /判斷是否為學(xué)號(hào)還是姓名 if(str00&str0next; while(p != NULL) Quit(p-next); free(p); exit(0);/*計(jì)算個(gè)人平均分和總分*/void Count_Score() Student *p; int i; p=head-next; while(p!=NULL) for(i=0;isum = p-sum + p-scorei; p-average = p-sum * 1.0 / MAXCOURSE; p=p-next; /*計(jì)算班級(jí)總?cè)藬?shù)*/int Count_People() Student *p; int people
16、=0; p=head-next; while(p!=NULL) people=people+1; p=p-next; return people;/*計(jì)算班級(jí)平均分*/void Count_Mark() Student *p; int m; float avecla=0; p=head-next; while(p!=NULL) avecla=avecla+p-sum; p=p-next; m=Count_People(); printf(班級(jí)平均分為:%.2f,avecla/m);/*根據(jù)某科成績(jī)段顯示成績(jī)*/void Section_Score() char x; int m,n,i,fla
17、g=0; Student *p; p=head-next; printf(請(qǐng)輸入指定分?jǐn)?shù)段的科目(A:數(shù)學(xué) B:英語 C:計(jì)算機(jī)):n); scanf(%c,&x); printf(請(qǐng)輸入你要顯示的分?jǐn)?shù)段(從n到m):); scanf(%d,&n); scanf(%d,&m); switch(x) case A: while(p!=NULL) if(n score0 & p-score0name,p-id); for(i=0; iscorei); printf(總分為:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case B: while
18、(p!=NULL) flag=1; if(n score1 & p-score1name,p-id); for(i=0; iscorei); printf(總分為:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; case C: while(p!=NULL) flag=1; if(n score2 & p-score2 name,p-id); for(i=0; iscorei); printf(總分為:%d 平均分:%.2fn,p-sum,p-average); p = p-next; break; default: printf(輸入無效!n
19、); fflush(stdin); if(flag=0) printf(在%d到%d的分?jǐn)?shù)段學(xué)生為零!);/*比較成績(jī)大小*/Student *Descby_English(Student *Newhead,Student *sort) Student *p,*q; p=Newhead; while(p!=NULL) if(sort-sum p-sum) break; q=p; p=p-next; if(p=Newhead) sort-next = p; return sort; else q-next = sort; sort-next = p; return Newhead; /*按總分或
20、平均分降序排列*/void Descend_English() Student *p,*q,*Newhead; int i,j=1,people; Newhead = NULL; p = head; while(p != NULL) q = p-next; Newhead = Descby_English(Newhead,p); p = q; if(p = head) printf(學(xué)生信息庫(kù)為空!n); else p = Newhead-next; people=Count_People(); printf(按總分和平均分排序如下:n); while(p!=NULL) if(jname,p-
21、id); for(i=0; iscorei); printf(總分:%d 平均分:%.2f ,p-sum,p-average); j+; printf(n); p=p-next; /*按姓名查找學(xué)生成績(jī)*/void *Searchname_Student() char name10; int i=0; Student *p=head-next; getchar(); printf(請(qǐng)輸入你要查找的學(xué)生姓名:); do gets(name); if(!Check_Name(name) printf(輸入姓名不正確!重新輸入:); while(!Check_Name(name); while(p!
22、=NULL) if(strcmp(p-name,name)=0) Output_Score(p); i=1; p=p-next; if(i=0) printf(找不到此姓名!); /*按學(xué)號(hào)查找學(xué)生成績(jī)*/void *SearchID_Student() char id10; int i=0; Student *p=head-next; getchar(); printf(請(qǐng)輸入你要查找的學(xué)生學(xué)號(hào):); do gets(id); if(!Check_ID(id) printf(輸入學(xué)號(hào)不正確!重新輸入:); while(!Check_ID(id); while(p!=NULL) if(strc
23、mp(p-id,id)=0) Output_Score(p); i=1; p=p-next; if(i=0) printf(找不到此學(xué)號(hào)!); /*主函數(shù)*/void main() int x,n,people; Student *q; Menu(); while(1) printf(n請(qǐng)輸入命令編號(hào): ); scanf(%d, &x); switch(x) case 1: /初始化 head = Init(); printf(初始化成功!n); break; case 2: /輸入成績(jī) printf(輸入序號(hào):); scanf(%d,&n); getchar(); while(n!=-1)
24、Insert_Before(); printf(輸入序號(hào):); scanf(%d,&n); getchar(); break; case 3: /計(jì)算平均分和總分 Count_Score(); printf(計(jì)算平均分和總分成功!); break; case 4: /打印出所有成績(jī) Output_List(); break; case 5: Del_Student(); break; case 6: /按姓名查找學(xué)生成績(jī) Searchname_Student(); break; case 7: /按學(xué)號(hào)查找學(xué)生成績(jī) SearchID_Student(); break; case 8: /計(jì)算班級(jí)人數(shù) people=Count_People(); printf(班級(jí)總?cè)藬?shù)為:%d n,people); break; case 9: /*插入學(xué)生成績(jī)*/ Insert_List(); break;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年伊通滿族自治縣事業(yè)單位引進(jìn)人才備考題庫(kù)及答案詳解1套
- 2026年國(guó)藥集團(tuán)廣東環(huán)球制藥有限公司招聘?jìng)淇碱}庫(kù)及完整答案詳解1套
- 2026年仰恩大學(xué)公開招聘人事處工作人員備考題庫(kù)有答案詳解
- 2026年麗江市古城區(qū)疾病預(yù)防控制中心臨聘人員招聘?jìng)淇碱}庫(kù)含答案詳解
- 2026年中國(guó)建筑第五工程局有限公司山東分公司招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 2026年廣東工商職業(yè)技術(shù)大學(xué)招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 2026年宜賓五糧液有機(jī)農(nóng)業(yè)發(fā)展有限公司招聘?jìng)淇碱}庫(kù)有答案詳解
- 政策法規(guī)處內(nèi)控制度
- 鎮(zhèn)政府內(nèi)控制度
- 企業(yè)如何執(zhí)行內(nèi)控制度
- DBJ-T 15-30-2022 鋁合金門窗工程技術(shù)規(guī)范
- 2024屆廣東省高三三校12月聯(lián)考英語試題及答案
- 城市設(shè)計(jì)編制標(biāo)準(zhǔn) DG-TJ08-2402-2022
- 粉煤灰在高速公路基層中的應(yīng)用
- 教學(xué)設(shè)計(jì)中的學(xué)科整合與跨學(xué)科學(xué)習(xí)
- 2024年廣東省粵科金融集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 消防設(shè)施維保投標(biāo)方案(技術(shù)方案)
- 設(shè)備綜合效率OEE統(tǒng)計(jì)表(使用)
- WATERS公司的UPLCTQD培訓(xùn)資料MS7校正課件
- 【超星爾雅學(xué)習(xí)通】航空與航天網(wǎng)課章節(jié)答案
- 2022年福州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)《操作系統(tǒng)》科目期末試卷B(有答案)
評(píng)論
0/150
提交評(píng)論