




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、福建工程學(xué)院計算機(jī)與信息科學(xué)系實驗報告 2012 2013 學(xué)年第 1 學(xué)期 任課老師: 章靜 課程名稱 結(jié)構(gòu)化程序綜合設(shè)計班級計算機(jī)1001座號3100301114姓名張揚(yáng)文實驗題目學(xué)生成績管理系統(tǒng)實驗時間實驗開始日期:2012/2/24 報告提交日期:2012/3/10 實驗?zāi)康?、要?該實驗的課內(nèi)學(xué)時是4個課時。2程序完成后應(yīng)該完成如下基本功能:1)用自定義結(jié)構(gòu)體typedef struct設(shè)計該軟件的數(shù)據(jù)結(jié)構(gòu);2)用數(shù)組或指針鏈表將所有學(xué)生的數(shù)據(jù)按照學(xué)號順序鏈接起來;3)程序能夠按照學(xué)號順序輸入學(xué)生的三門成績,并計算平均成績和總成績。4)程序能夠顯示已經(jīng)輸入的指定學(xué)號的學(xué)生成績以及平均
2、成績和總成績。5)程序能夠按要求顯示指定分?jǐn)?shù)段的學(xué)生成績以及平均成績和總成績。6)能夠統(tǒng)計班級總?cè)藬?shù)、班級平均成績。7)能夠增加和刪除指定學(xué)生的成績。8)按照指定的要求以及順序(升序或降序)顯示學(xué)生成績以及平均成績和總成績。 實驗步驟與內(nèi)容 按如下順序?qū)懀?、 主要設(shè)計思想;學(xué)生成績管理系統(tǒng)包含多種功能,可以輸入學(xué)生成績,刪除,插入,排序,查找等等。輸入的信息又包含學(xué)生姓名,學(xué)號,各科成績。所以首先要定義一個結(jié)構(gòu)體:typedef struct node char id20; char name15; int scoreMAXCOURSE; int sum; double average; s
3、truct node *next;Student;根據(jù)結(jié)構(gòu)體中的內(nèi)容飆血程序。2、 主要數(shù)據(jù)結(jié)構(gòu)及其解釋在此次程序設(shè)計中用了鏈表來實現(xiàn)對數(shù)據(jù)的處理,并設(shè)計了菜單界面如圖,根據(jù)switch語句來對用戶的選擇: 3、 模塊關(guān)系圖; 主函數(shù)輸入學(xué)生信息打印成績計算平均分和總分查找學(xué)生成績插入學(xué)生成績顯示分?jǐn)?shù)段的學(xué)生按總分平均分降序排列菜單4、 所有函數(shù)的簡要說明;1) 插入函數(shù)Insert_Before();主要是要重新加入學(xué)生的信息,通過頭插法。2) 計算平均分和總分Count_Score();將輸入的數(shù)據(jù)計算出學(xué)生的平均分和總分。3) 刪除學(xué)生信息Del_Student();刪除某個學(xué)生的成績。
4、4) 按姓名查找Searchname_Student();通過輸入學(xué)生的姓名找到學(xué)生的成績。5) 計算班級總?cè)藬?shù)people=Count_People();將總的輸入學(xué)生人數(shù)打印出來。6) 顯示某分?jǐn)?shù)段學(xué)生信息Section_Score();首先選擇你要某科目的成績并輸入成績的范圍,按條件輸出學(xué)生成績。7) 按總分,平均分降序排列Descend_English();將輸入的全部學(xué)生成績按總分排序。 5、 所有源代碼; /*學(xué)生成績管理系統(tǒng) C語言*/#include <stdio.h>#include <stdlib.h>#include <string.h>
5、;#define MAXID 10#define MAXNAME 20#define 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ī)"/* 菜單 */in
6、t Menu() system("cls"); fflush(stdin); printf(" 計算機(jī)1001 張揚(yáng)文 3100301114 n"); printf("n"); printf("*學(xué)生成績管理系統(tǒng)*n"); printf("n"); printf(" 1-初始化n"); printf(" 2-輸入學(xué)生信息n"); printf(" 3-計算所有學(xué)生的總分和平均分n"); printf(" 4-打印全部學(xué)生信息n
7、"); printf(" 5-查找學(xué)號或姓名刪除學(xué)生信息n"); printf(" 6-按姓名查找學(xué)生信息n"); printf(" 7-按學(xué)號查找學(xué)生信息n"); printf(" 8-查找某一科成績段學(xué)生信息n"); printf(" 9-插入學(xué)生信息到鏈表中n"); printf(" 10-按總分或平均分降序排列學(xué)生成績n"); printf(" 0-退出n"); return 0;/*初始化*/Student *Init() int i;
8、 Student *head; head=(Student *)malloc(sizeof(Student); head->next=NULL; return head;/*檢查學(xué)號*/char Check_ID(char *s) int i; if(strlen(s)=0|strlen(s)>MAXID)return 0; for(i=0;i<strlen(s);i+) if (si > '0' && si < '9') return 1; return 0;/*檢查姓名*/char Check_Name(char
9、 *s) int i; if(strlen(s)=0|strlen(s)>MAXNAME) return 0; for(i=0; i<strlen(s); i+) if(si >= 'a' && si < 'z') | (si >= 'A' && si <= 'Z') return 1; return 0;/*檢查分?jǐn)?shù)*/int Check_Score(int s) if( s>=0 && s<=100 ) return 1; retu
10、rn 0;/*檢查學(xué)號是否相同*/char Is_SameID(char *s) Student *p= head->next; while(p!=NULL) if(strcmp(s,p->id)=0) return 1; p=p->next; return 0;/* 輸入學(xué)生信息 */void Input_Score(Student *p) /* 學(xué)號 */ printf("n請輸入學(xué)號: "); do gets(p->id); if (!Check_ID(p->id) printf("輸入不正確!請重新輸入學(xué)號: ");
11、 else if (Is_SameID(p->id) printf("存在已學(xué)號!請重新輸入學(xué)號: "); while (!(Check_ID(p->id) && !Is_SameID(p->id); /* 姓名 */ printf("請輸入姓名: "); do gets(p->name); if (!Check_Name(p->name) printf("輸入不正確!請重新輸入姓名: "); while (!Check_Name(p->name); /輸入成績 int i; for
12、(i=0; i<MAXCOURSE; i+) do printf("請輸入%s成績:",ClassNamei); scanf("%d", &p->scorei); if(!Check_Score(p->scorei) printf("輸入成績不正確!n請重新輸入%s成績:",ClassNamei); while(!Check_Score(p->scorei); p->average = -1; p->sum = -1; /* 頭插法插入節(jié)點 */void Insert_Before() St
13、udent *s =(Student*) malloc(sizeof(Student); Input_Score(s); s->next = head->next; head->next = s;/*輸出學(xué)生成績信息*/void Output_Score(Student *p) int i; printf("n姓名:%s, 學(xué)號:%s n",p->name,p->id); for(i=0; i<MAXCOURSE;i+) printf("%s成績:%d ",ClassNamei,p->scorei); print
14、f("總分:%d 平均分:%.2f n",p->sum,p->average);/*刪除節(jié)點q*/void Del_Node(Student *q) Student *p=head; while(p->next!=q) p=p->next; p->next=q->next; free(q);/*插入學(xué)生成績*/void Insert_List() int x; printf("輸入你要插入的學(xué)生數(shù):"); scanf("%d",&x); while(x!=0) getchar(); Stud
15、ent *p =(Student*) malloc(sizeof(Student); printf("n請輸入學(xué)號: "); do gets(p->id); if (!Check_ID(p->id) printf("輸入不正確!請重新輸入學(xué)號: "); else if (Is_SameID(p->id) printf("存在已學(xué)號!請重新輸入學(xué)號: "); while (!(Check_ID(p->id) && !Is_SameID(p->id); /* 姓名 */ printf(&quo
16、t;請輸入姓名: "); do gets(p->name); if (!Check_Name(p->name) printf("輸入不正確!請重新輸入姓名: "); while (!Check_Name(p->name); /輸入成績 int i; for(i=0; i<MAXCOURSE; i+) fflush(stdin); printf("請輸入%s成績:",ClassNamei); scanf("%d", &p->scorei); do if(!Check_Score(p->
17、;scorei) printf("輸入成績不正確!請重新輸入%s成績:",ClassNamei); while(!Check_Score(p->scorei); p->average = -1; p->sum = -1; p->next = head->next; head->next = p; x-; /*按學(xué)號查找*/Student *Search_ID(char *id) Student *p=head->next; while(p!=NULL) if(strcmp(p->id,id)=0)break; p=p->
18、next; return p;/*按姓名查找節(jié)點*/Student *Search_Name(char *name) Student *p=head->next; while(p!=NULL) if(strcmp(p->name,name)=0)break; p=p->next; return p;/*輸出鏈表*/void Output_List() Student *p; p=head->next; while(p!=NULL) Output_Score(p); p=p->next; /*刪除指定學(xué)生信息*/void Del_Student() Student
19、*p; fflush(stdin); char str15; char judge10; printf("請輸入要刪除的學(xué)生的 學(xué)號或姓名:"); do gets(str); if(!(Check_ID(str)|Check_Name(str) printf("輸入錯誤!請重新輸入:"); while(!(Check_ID(str)|Check_Name(str); /判斷是否為學(xué)號還是姓名 if(str0>'0'&&str0<'9') p=Search_ID(str); if(p=NULL)
20、printf("此學(xué)號不存在!n"); else Output_Score(p); printf("是否要刪除此學(xué)號!(確認(rèn)按y,任意鍵取消):"); gets(judge); if(strcmp(judge,"y")=0) Del_Node(p); printf("刪除成功!"); else p=Search_Name(str); if(p=NULL) printf("此姓名不存在!n"); else Output_Score(p); printf("是否要刪除此姓名!(確認(rèn)按y,任
21、意鍵取消):"); gets(judge); if(strcmp(judge,"y")=0) Del_Node(p); printf("刪除成功!"); fflush(stdin); /* 退出 */void Quit() Student *p; p=head->next; while(p != NULL) Quit(p->next); free(p); exit(0);/*計算個人平均分和總分*/void Count_Score() Student *p; int i; p=head->next; while(p!=NULL
22、) for(i=0;i<MAXCOURSE;i+) p->sum = p->sum + p->scorei; p->average = p->sum * 1.0 / MAXCOURSE; p=p->next; /*計算班級總?cè)藬?shù)*/int Count_People() Student *p; int people=0; p=head->next; while(p!=NULL) people=people+1; p=p->next; return people;/*計算班級平均分*/void Count_Mark() Student *p;
23、int m; float avecla=0; p=head->next; while(p!=NULL) avecla=avecla+p->sum; p=p->next; m=Count_People(); printf("班級平均分為:%.2f",avecla/m);/*根據(jù)某科成績段顯示成績*/void Section_Score() char x; int m,n,i,flag=0; Student *p; p=head->next; printf("請輸入指定分?jǐn)?shù)段的科目(A:數(shù)學(xué) B:英語 C:計算機(jī)):n"); scan
24、f("%c",&x); printf("請輸入你要顯示的分?jǐn)?shù)段(從n到m):"); scanf("%d",&n); scanf("%d",&m); switch(x) case 'A': while(p!=NULL) if(n <= p->score0 && p->score0<= m) flag=1; printf("n姓名:%s, 學(xué)號:%s n",p->name,p->id); for(i=0; i
25、<MAXCOURSE;i+) printf("%s成績:%d ",ClassNamei,p->scorei); printf("總分為:%d 平均分:%.2fn",p->sum,p->average); p = p->next; break; case 'B': while(p!=NULL) flag=1; if(n <= p->score1 && p->score1<= m) printf("n姓名:%s, 學(xué)號:%s n",p->name,
26、p->id); for(i=0; i<MAXCOURSE;i+) printf("%s成績:%d ",ClassNamei,p->scorei); printf("總分為:%d 平均分:%.2fn",p->sum,p->average); p = p->next; break; case 'C': while(p!=NULL) flag=1; if(n <= p->score2 && p->score2 <= m) printf("n姓名:%s, 學(xué)號:
27、%s n",p->name,p->id); for(i=0; i<MAXCOURSE;i+) printf("%s成績:%d ",ClassNamei,p->scorei); printf("總分為:%d 平均分:%.2fn",p->sum,p->average); p = p->next; break; default: printf("輸入無效!n"); fflush(stdin); if(flag=0) printf("在%d到%d的分?jǐn)?shù)段學(xué)生為零!");/
28、*比較成績大小*/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; /*按總分或平均分降序排列*/void Descend_Eng
29、lish() 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é)生信息庫為空!n"); else p = Newhead->next; people=Count_People(); printf("按總分和平均分排序如下:n"); while(p!=NULL) if(j
30、<=people) printf("第%d名 ",j); printf("姓名:%s 學(xué)號:%s ",p->name,p->id); for(i=0; i<=people-1;i+) printf("%s:%d ",ClassNamei,p->scorei); printf("總分:%d 平均分:%.2f ",p->sum,p->average); j+; printf("n"); p=p->next; /*按姓名查找學(xué)生成績*/void *Sea
31、rchname_Student() char name10; int i=0; Student *p=head->next; getchar(); printf("請輸入你要查找的學(xué)生姓名:"); do gets(name); if(!Check_Name(name) printf("輸入姓名不正確!重新輸入:"); while(!Check_Name(name); while(p!=NULL) if(strcmp(p->name,name)=0) Output_Score(p); i=1; p=p->next; if(i=0) pri
32、ntf("找不到此姓名!"); /*按學(xué)號查找學(xué)生成績*/void *SearchID_Student() char id10; int i=0; Student *p=head->next; getchar(); printf("請輸入你要查找的學(xué)生學(xué)號:"); do gets(id); if(!Check_ID(id) printf("輸入學(xué)號不正確!重新輸入:"); while(!Check_ID(id); while(p!=NULL) if(strcmp(p->id,id)=0) Output_Score(p);
33、i=1; p=p->next; if(i=0) printf("找不到此學(xué)號!"); /*主函數(shù)*/void main() int x,n,people; Student *q; Menu(); while(1) printf("n請輸入命令編號: "); scanf("%d", &x); switch(x) case 1: /初始化 head = Init(); printf("初始化成功!n"); break; case 2: /輸入成績 printf("輸入序號:"); scanf("%d",&n); getchar(); while(n!=-1) Insert_Before(); printf("輸入序號:"); scanf("%d",&n); getchar(); break; case 3: /計算平均分和總分 Count_Score(); printf("計算平均分和總分成功!"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年法學(xué)院研究生入學(xué)考試試題及答案
- 學(xué)生安全責(zé)任規(guī)定
- 新聞傳媒產(chǎn)業(yè)趨勢研究練習(xí)題集
- 2025年炸藥、煙火及火工產(chǎn)品項目申請報告
- 食品配送與包裝技術(shù)研發(fā)合作協(xié)議
- 2025年鉗型表項目申請報告
- 企業(yè)人才中介服務(wù)協(xié)議
- 2025年單證員職業(yè)資格考試試卷單證員職業(yè)發(fā)展前景分析
- 2025年磁粉離合器項目提案報告
- 2025年武漢市事業(yè)單位招聘考試綜合類專業(yè)能力測試試卷(財務(wù)類)
- Unit 2 Home Sweet Home 第6課時(Project Reading Plus) 2025-2026學(xué)年人教版英語八年級下冊
- 餐飲連鎖企業(yè)品牌授權(quán)與經(jīng)營管理協(xié)議
- 2025-2030年中國生物醫(yī)學(xué)材料行業(yè)市場深度分析及發(fā)展前景與投資研究報告
- 2025年小學(xué)語文一年級下冊無紙筆測試題(小學(xué)一年級游園樂考無紙化檢測)
- 2025至2030中國彈簧鋼行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢及投資規(guī)劃深度研究報告
- 2025年地理中考時政熱點復(fù)習(xí)課件
- 北京市2024年高招本科普通批錄取投檔線
- DB32-T 5088-2025 廢活性炭綜合利用污染控制技術(shù)規(guī)范
- 2024-2025學(xué)年人教版數(shù)學(xué)八年級下冊期末復(fù)習(xí)卷(含解析)
- 城市通信基站建設(shè)對周邊居民影響風(fēng)險評估報告
- 美容院洗滌協(xié)議書
評論
0/150
提交評論