版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include#include #definenull 0#define len sizeof(struct student) struct date int year; int month;int day; ; struct xueke int pingshi; int shiyan; int kaoshi; float zchji; ;struct student int num; char name10; char sex; struct date birthday; struct xueke xk2; struct student *next; /*指向下一個結(jié)構(gòu)體數(shù)據(jù)類型*/;ty
2、pedef struct student score; /*用score來代替類型struct student*/int n,k; /*n.k為全局變量,n表示結(jié)點個數(shù),k表示人數(shù)*/score *r=null; /*定義一個全局變量指針*/score *stu;/*菜單*/int caidan(k) int i; printf(nnntttt考試成績管理系統(tǒng)n); printf(ttt作者:薛文波、魏文清、姚志浩n); for(i=1;i79;i+) printf(*); printf(n); printf(1.輸入學生資料tt2.輸出學生資料tt3.統(tǒng)計學生資料n); printf(4.刪
3、除學生資料tt5.查詢學生資料tt6.排序?qū)W生資料n); printf(7.插入學生資料tt8.更新學生資料tt9.保存學生資料n); printf(0.退出!n); for(i=1;inum,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); fprintf(fp,%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); fprintf(fp,%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-xk1.shiyan,q
4、-xk1.kaoshi,q-xk1.zchji); q=q-next; fclose(fp); /*關(guān)閉文件指針fp指向的文件*/printf(文件已保存n);return(0);/*輸入模塊*/score *creat(void) score *head,*p1,*p2; /*定義一個頭指針和兩個工作點*/ int i; head=null; n=0; p1=(struct student *)malloc(len); /*用p1開辟一個新單元*/ printf(1.請輸入學生資料(輸0退出):n); printf(a.請輸入學生學號(學號應大于0):); scanf(%d,&p1-num)
5、; while(p1-numnum); while(p1-num!=0) printf(b.請輸入學生的姓名:); scanf(%s,p1-name); printf(請輸入學生的性別(m&f):); scanf( %c,&p1-sex); while(p1-sex!=m&p1-sex!=f) /*判斷輸入性別時的字母是否為m或f*/ printf(輸入錯誤,請重新輸入學生的性別:); scanf( %c,&p1-sex); printf(c.請輸入學生的生日(年.月.日):); scanf( %d.%d.%d,&p1-birthday.year,&p1-birthday.month,&p1-
6、birthday.day); printf(d.請輸入學生的成績!n); printf(1.請輸入 c 成績(平時,實驗,考試):); scanf( %d,%d,%d,&p1-xk0.pingshi,&p1-xk0.shiyan,&p1-xk0.kaoshi); p1-xk0.zchji=p1-xk0.pingshi*0.1+p1-xk0.shiyan*0.2+p1-xk0.kaoshi*0.7; printf(2.請輸入高數(shù)成績(平時,實驗,考試):); scanf( %d,%d,%d,&p1-xk1.pingshi,&p1-xk1.shiyan,&p1-xk1.kaoshi); p1-xk
7、1.zchji=p1-xk1.pingshi*0.1+p1-xk1.shiyan*0.2+p1-xk1.kaoshi*0.7; n=n+1; /*結(jié)點個數(shù)加一*/ if(n=1) head=p2=p1; /*若為首結(jié)點,則頭指針指向本結(jié)點*/ else p2-next=p1; p2=p1; /*若不是首結(jié)點 則把本結(jié)點鏈接到尾部*/ p1=(struct student *)malloc(len); printf(*n); printf(1.請輸入學生資料(輸0退出):n); printf(a.請輸入學生的學號(學號應大于0):); scanf(%d,&p1-num); while(p1-nu
8、mnum); p2-next=null; /* 最后結(jié)點不指向任何地址*/ free(p1); /*釋放結(jié)點占用空間*/ return(head); /*輸出模塊*/ void print(score *head) score *q=head; printf(n輸出%d個學生的資料:n,n); printf(*n); printf(|學號|姓名|性別|生 日 |); printf(c(平時.實驗.考試.綜合)|); printf(高數(shù)(平時.實驗.考試.綜合)n); printf(*n); if(head=null) printf(n沒有這個學生的資料!n); return; while(q!
9、=null) printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1f n,q-xk1.pingshi,q-xk1.shiyan,q-xk1.kaoshi,q-xk1.zchji); q=q-next; /*q指針依次向下掃描*/ printf(n
10、*n); /*統(tǒng)計模塊*/score *tongji(score *head) score *q=head,*max,*min; int i,k12=0,0,k22=0,0,k32=0,0; /*將人數(shù)統(tǒng)計值的初始值賦為0*/ float czong=0,gzong=0,caver,gaver; q=head; /*工作點首先指向頭指針*/ max=q; min=q; while(q!=null) czong+=q-xk0.zchji; /*p1指向?qū)W生總成績*/ gzong+=q-xk1.zchji; for(i=0;ixki.zchjimax-xki.zchji) max=q; /*將最大
11、值的地址賦給p1*/ if(q-xki.zchjixki.zchji) min=q; if(q-xki.zchji=80) k1i+; /*k1i+為人數(shù)的統(tǒng)計*/ else if(q-xki.zchji=60) k2i+; else k3i+; /*分段成績的人數(shù)統(tǒng)計*/ q=q-next; caver=czong/n; /*計算c的平均成績*/ gaver=gzong/n; /*計算math平均成績*/ printf(c 語言成績的總分為:%.2f c 語言成績的平均分為:%.2fn,czong,caver); printf(c 語言成績的最高分為:%.2f c 語言成績的最低分為:%.2
12、fn,max-xk0.zchji,min-xk0.zchji); printf(c 語言成績優(yōu)秀的人數(shù)為:%dn,k10); printf(c 語言成績良好的成績?yōu)?%dn,k20); printf(c 語言成績及格的人數(shù)為:%dn,k10+k20); printf(c 語言成績不及格的人數(shù)為:%dn,k30);printf(高數(shù)成績的總分為:%.2f 高數(shù)成績的平均分為:%.2fn,gzong,gaver); printf(高數(shù)成績的最高分為:%.2f 高數(shù)成績的最低分為:%.2fn,max-xk1.zchji,min-xk1.zchji); printf(高數(shù)成績優(yōu)秀的人數(shù)為:%dn,k1
13、1); printf(高數(shù)成績良好的人數(shù)為:%dn,k21); printf(高數(shù)成績及格的人數(shù)為:%dn,k11+k21); printf(高數(shù)成績不及格的人數(shù)為:%dn,k31); return(head); /*按學號查詢模塊*/ void chaxun2(score *head) score *q=head; int sss=0; char name10;printf(請輸入要查詢的學生姓名:);scanf(%s,name);while(q!=null) if(strcmp(name,q-name)=0) /*通過字符串的比較按姓名查找*/ printf(*n); printf(|學號
14、|姓名|性別|生 日 |); printf(c(平時.實驗.考試.綜合)|); printf(高數(shù)(平時.實驗.考試.綜合)n); printf(*n); printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-
15、xk1.shiyan,q-xk1.kaoshi,q-xk1.zchji); printf(*n); sss=3; /*定義變量不等于初始值則退出循環(huán)體*/ q=q-next; if(sss=0) printf(沒有這個學生的資料!nn); /*按學號查詢*/ void chaxun1(score *head) score *q=head;int num,sss=0;printf(請輸入要查詢的學生學號:);scanf(%d,&num);while(q!=null) if(num=q-num) printf(*n); printf(|學號|姓名|性別|生 日 |); printf(c(平時.實驗
16、.考試.綜合)|); printf(高數(shù)(平時.實驗.考試.綜合)n); printf(*n); printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-xk1.shiyan,q-xk1.kaoshi,q-xk1
17、.zchji); printf(*n); sss=3; q=q-next; if(sss=0) printf(沒有這個學生的資料!nn); /*查詢二級菜單*/ chaxun_cd()int m=0,i;while(m=0)printf(查詢學生的資料n);printf(1.按學號查詢n);printf(2.按姓名查詢n);printf(請選擇你所要操作的選項(按0退出):);scanf(%d,&i);switch(i)case 1:chaxun1(r);break; /*break表示跳出循環(huán)結(jié)構(gòu)結(jié)束循環(huán)退出包含break語句的那層循環(huán)體*/case 2:chaxun2(r);break;c
18、ase 0:m=1;break;default:printf(錯誤,重新選擇:);break;/*按學號刪除*/ score *del1(score *head) score *p1,*p2; int num; printf(請輸入要刪除學生的學號:); scanf(%d,&num); if(head=null) printf(沒有這個學生的資料!nn); return(head); p2=p1=head; while(num!=p1-num&p1-next!=null) p2=p1; p1=p1-next; if(num=p1-num) if(head=p1) head=head-next;
19、 else p2-next=p1-next; free(p1); p1=p2; printf(第%d 學生的資料已刪除完畢!nn,num); else printf(沒有這個學生的資料!nn); return(head); /*/score *del2(score *head) score *p1,*p2; char name10; printf(請輸入要刪除學生的姓名:); scanf(%s,name); if(head=null) printf(沒有這個學生的資料!nn); return(head); p2=p1=head; while(strcmp(name,p1-name)!=0&p1
20、-next!=null) p2=p1; p1=p1-next; if(strcmp(name,p1-name)=0) if(head=p1) head=head-next; else p2-next=p1-next; free(p1); p1=p2; printf(名字叫%s的學生的資料已被刪除!nn,name); else printf(沒有這個學生的資料!nn); return(head);/*/del_cd()int m=0,i;while(m=0) printf(刪除學生的資料n);printf(1.按學號刪除n);printf(2.按姓名刪除n);printf(3.查看刪除結(jié)果n);
21、printf(請選擇你所要操作的選項(按0退出):);scanf(%d,&i);switch(i)case 1:r=del1(r);break;case 2:r=del2(r);break;case 3:print(r);break;case 0:m=1;break;default:printf(錯誤,重新選擇:);break;/*按學號排序*/score *paixu2(score *head) score *p1,*p2,*k,h; int i; if(head=null) printf(沒有任何學生的資料!); return(head); p1=head; p2=head-next; k
22、=p1; for(i=0;inump2-num) k=p2; p2=p2-next; if(k!=p1) h=*k;*k=*p1;*p1=h;h.next=k-next;k-next=p1-next;p1-next=h.next; p1=p1-next; p2=p1-next; k=p1; printf(排序成功!nn); return(head);/*/score *paixu1(score *head) score *p1,*p2,*k,h; int i; if(head=null) printf(沒有任何學生的資料!); return(head); p1=head; p2=head-ne
23、xt; k=p1; for(i=0;ixk0.zchjip2-xk0.zchji)k=p2;p2=p2-next; if(k!=p1) h=*k;*k=*p1;*p1=h;h.next=k-next;k-next=p1-next;p1-next=h.next; p1=p1-next; p2=p1-next; k=p1; printf(排序成功!nn); return(head); /*/paixu_cd()int m=0,i;while(m=0) printf(對學生的資料進行排序n);printf(1.按c語言成績排序n);printf(2.按學號排序n);printf(請選擇你所要操作的選
24、項(按0退出):);scanf(%d,&i);switch(i)case 1:r=paixu1(r);break;case 2:r=paixu2(r);break;case 0:m=1;break;default:printf(錯誤,重新選擇:);break;/*按c成績插入*/score *charu1(score *head,score *stu) score *p1,*p2; int i; p1=head; r=paixu1(r); stu=(score*)malloc(len); /*開辟一個新單元,用于保存要插入的信息*/ printf(請輸入要增加的學生資料:n); printf(
25、請輸入要增加的學生學號:); scanf(%d,&stu-num); while(stu-numnum); printf(b.請輸入要增加的學生姓名:); scanf(%s,stu-name); printf(請輸入要增加的學生性別(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(輸入錯誤,輸入錯誤請重新輸入性別:); scanf( %c,&stu-sex); printf(c.請輸入要增加的學生生日(年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthd
26、ay.month,&stu-birthday.day); printf(d.請輸入要增加的學生成績!n); printf(1.請輸入要增加的學生c語言成績(平時,實驗,考試):); scanf( %d,%d,%d,&stu-xk0.pingshi,&stu-xk0.shiyan,&stu-xk0.kaoshi); stu-xk0.zchji=stu-xk0.pingshi*0.1+stu-xk0.shiyan*0.2+stu-xk0.kaoshi*0.7; printf(2.請輸入要增加的學生高數(shù)成績(平時,實驗,考試):); scanf( %d,%d,%d,&stu-xk1.pingshi,
27、&stu-xk1.shiyan,&stu-xk1.kaoshi); stu-xk1.zchji=stu-xk1.pingshi*0.1+stu-xk1.shiyan*0.2+stu-xk1.kaoshi*0.7; if(head=null) /*判斷頭指針是否為空*/ head=stu; stu-next=null; /*如果為空,直接插入頭上*/ n+; /*人數(shù)加一*/ return(head); while(p1-xk0.zchjixk0.zchji&p1-next!=null) /*根據(jù)c成績確定要插入的位置*/ p2=p1; p1=p1-next; if(stu-xk0.zchjix
28、k0.zchji) if(p1=head) /*如果p1指向頭指針 */ head=stu; stu-next=p1; n+; else stu-next=p2-next; p2-next=stu; n+; else p1-next=stu; stu-next=null; n+; printf(增加學生資料成功!n); return(head);/*按學號插入*/score *charu2(score *head,score *stu) score *p1,*p2; int i=0; p1=head; r=paixu2(r); /*調(diào)用排序函數(shù)*/ stu=(score*)malloc(len
29、); /*開辟一個新單元,用于保存要插入的信息*/ printf(請輸入要增加的學生資料:n); printf(請輸入要增加的學生學號:); scanf(%d,&stu-num); while(stu-numnum); printf(b.請輸入要增加的學生姓名:); scanf(%s,stu-name); printf(請輸入要增加的學生性別(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(輸入錯誤,輸入錯誤請重新輸入性別:); scanf( %c,&stu-sex); printf(c.請輸入要增加的學生生日(
30、年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthday.month,&stu-birthday.day); printf(d.請輸入要增加的學生的成績!n); printf(1.請輸入要增加的學生c語言成績(平時,實驗,考試):); scanf( %d,%d,%d,&stu-xk0.pingshi,&stu-xk0.shiyan,&stu-xk0.kaoshi); stu-xk0.zchji=stu-xk0.pingshi*0.1+stu-xk0.shiyan*0.2+stu-xk0.kaoshi*0.7; printf(2.請輸入
31、要增加的學生高數(shù)的成績(平時,實驗,考試):); scanf( %d,%d,%d,&stu-xk1.pingshi,&stu-xk1.shiyan,&stu-xk1.kaoshi); stu-xk1.zchji=stu-xk1.pingshi*0.1+stu-xk1.shiyan*0.2+stu-xk1.kaoshi*0.7; if(head=null) /*判斷頭指針是否為空*/ head=stu; stu-next=null; n+; return(head); while(p1-numnum&p1-next!=null) /*根據(jù)學號確定要插入的位置*/ p2=p1; p1=p1-nex
32、t; if(stu-numnum) if(p1=head) head=stu; stu-next=p1; n+; else stu-next=p2-next; p2-next=stu; n+; else p1-next=stu; stu-next=null; n+; printf(增加學生資料成功!n); printf(n); return(head); /*返回頭指針*/*插入的二級菜單*/charu_cd()int m=0,i;while(m=0)printf(增加學生的人數(shù)n);printf(n1.按c語言成績增加n);printf(2.按學號增加n);printf(請選擇你所要操作的選
33、項(按0退出):);scanf(%d,&i);switch(i)case 1:r=charu1(r,stu);break;case 2:r=charu2(r,stu);break;case 0:m=1;break;default:printf(錯誤,重新選擇:);break;/*更新模塊*/score *gengxin(score *head) score *q=head;int i,sss=0;int num,year,month,day,pingshi1,shiyan1,kaoshi1,pingshi2,shiyan2,kaoshi2; char name10; char sex;printf(請輸入要更新學生的學號:);scanf(%d,&num);while(q!=null) if(num=q-num) printf(請輸入新的學號:); scanf(%d,&num); q-num=num; printf(請輸入新的姓名:); scanf(%s,name); strcpy(q-name,name); printf(請輸入新學生的性別:); scanf( %c,&sex); while(se
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年綠檀手鐲項目可行性研究報告
- 2025屆高考地理一輪復習第一部分專題熱點強化演練專題四大氣環(huán)流與氣候含解析
- 2025屆新教材高考地理一輪復習課時規(guī)范練3地球的宇宙環(huán)境形成與演化及圈層結(jié)構(gòu)含解析魯教版
- 2024年高一新班主任工作計劃(2篇)
- 2024年建筑施工項目增補協(xié)議細則版
- 2024年專業(yè)海外勞務派遣協(xié)議版
- 2024版藥品公開招標協(xié)議樣式版
- 2024-2030年診斷車輪定位機行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2030年袋泡茶市場發(fā)展現(xiàn)狀調(diào)查及供需格局分析預測報告
- 2024-2030年蔬果汁產(chǎn)業(yè)發(fā)展分析及規(guī)劃專項研究報告
- 《復活(節(jié)選)》課件+2024-2025學年統(tǒng)編版高中語文選擇性必修上冊
- 成人有創(chuàng)機械通氣氣道內(nèi)吸引技術(shù)操作標準解讀
- 地基土淺層平板載荷試驗方案
- 煙花爆竹事故分析
- 2024-2025學年初中信息技術(shù)(信息科技)七年級上冊贛科版教學設計合集
- 2022部編版五年級上冊道德與法治期中測試卷滿分必刷
- 第四單元檢測卷(單元測試)-2024-2025學年三年級上冊語文統(tǒng)編版
- 2024年公司股權(quán)轉(zhuǎn)讓中介的協(xié)議范本
- 第七單元測試卷-2024-2025學年語文四年級上冊(統(tǒng)編版)
- 2024年不穩(wěn)定因素排查工作制度范例(二篇)
- 三年級下冊口算天天100題(A4打印版)
評論
0/150
提交評論