C語(yǔ)言成績(jī)管理系統(tǒng)源代碼_第1頁(yè)
C語(yǔ)言成績(jī)管理系統(tǒng)源代碼_第2頁(yè)
C語(yǔ)言成績(jī)管理系統(tǒng)源代碼_第3頁(yè)
C語(yǔ)言成績(jī)管理系統(tǒng)源代碼_第4頁(yè)
C語(yǔ)言成績(jī)管理系統(tǒng)源代碼_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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; /*指向下一個(gè)結(jié)構(gòu)體數(shù)據(jù)類型*/;ty

2、pedef struct student score; /*用score來(lái)代替類型struct student*/int n,k; /*n.k為全局變量,n表示結(jié)點(diǎn)個(gè)數(shù),k表示人數(shù)*/score *r=null; /*定義一個(gè)全局變量指針*/score *stu;/*菜單*/int caidan(k) int i; printf(nnntttt考試成績(jī)管理系統(tǒng)n); printf(ttt作者:薛文波、魏文清、姚志浩n); for(i=1;i79;i+) printf(*); printf(n); printf(1.輸入學(xué)生資料tt2.輸出學(xué)生資料tt3.統(tǒng)計(jì)學(xué)生資料n); printf(4.刪

3、除學(xué)生資料tt5.查詢學(xué)生資料tt6.排序?qū)W生資料n); printf(7.插入學(xué)生資料tt8.更新學(xué)生資料tt9.保存學(xué)生資料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; /*定義一個(gè)頭指針和兩個(gè)工作點(diǎn)*/ int i; head=null; n=0; p1=(struct student *)malloc(len); /*用p1開(kāi)辟一個(gè)新單元*/ printf(1.請(qǐng)輸入學(xué)生資料(輸0退出):n); printf(a.請(qǐng)輸入學(xué)生學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):); scanf(%d,&p1-num)

5、; while(p1-numnum); while(p1-num!=0) printf(b.請(qǐng)輸入學(xué)生的姓名:); scanf(%s,p1-name); printf(請(qǐng)輸入學(xué)生的性別(m&f):); scanf( %c,&p1-sex); while(p1-sex!=m&p1-sex!=f) /*判斷輸入性別時(shí)的字母是否為m或f*/ printf(輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生的性別:); scanf( %c,&p1-sex); printf(c.請(qǐng)輸入學(xué)生的生日(年.月.日):); scanf( %d.%d.%d,&p1-birthday.year,&p1-birthday.month,&p1-

6、birthday.day); printf(d.請(qǐng)輸入學(xué)生的成績(jī)!n); printf(1.請(qǐng)輸入 c 成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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.請(qǐng)輸入高數(shù)成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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é)點(diǎn)個(gè)數(shù)加一*/ if(n=1) head=p2=p1; /*若為首結(jié)點(diǎn),則頭指針指向本結(jié)點(diǎn)*/ else p2-next=p1; p2=p1; /*若不是首結(jié)點(diǎn) 則把本結(jié)點(diǎn)鏈接到尾部*/ p1=(struct student *)malloc(len); printf(*n); printf(1.請(qǐng)輸入學(xué)生資料(輸0退出):n); printf(a.請(qǐng)輸入學(xué)生的學(xué)號(hào)(學(xué)號(hào)應(yīng)大于0):); scanf(%d,&p1-num); while(p1-nu

8、mnum); p2-next=null; /* 最后結(jié)點(diǎn)不指向任何地址*/ free(p1); /*釋放結(jié)點(diǎn)占用空間*/ return(head); /*輸出模塊*/ void print(score *head) score *q=head; printf(n輸出%d個(gè)學(xué)生的資料:n,n); printf(*n); printf(|學(xué)號(hào)|姓名|性別|生 日 |); printf(c(平時(shí).實(shí)驗(yàn).考試.綜合)|); printf(高數(shù)(平時(shí).實(shí)驗(yàn).考試.綜合)n); printf(*n); if(head=null) printf(n沒(méi)有這個(gè)學(xué)生的資料!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)計(jì)模塊*/score *tongji(score *head) score *q=head,*max,*min; int i,k12=0,0,k22=0,0,k32=0,0; /*將人數(shù)統(tǒng)計(jì)值的初始值賦為0*/ float czong=0,gzong=0,caver,gaver; q=head; /*工作點(diǎn)首先指向頭指針*/ max=q; min=q; while(q!=null) czong+=q-xk0.zchji; /*p1指向?qū)W生總成績(jī)*/ 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)計(jì)*/ else if(q-xki.zchji=60) k2i+; else k3i+; /*分段成績(jī)的人數(shù)統(tǒng)計(jì)*/ q=q-next; caver=czong/n; /*計(jì)算c的平均成績(jī)*/ gaver=gzong/n; /*計(jì)算math平均成績(jī)*/ printf(c 語(yǔ)言成績(jī)的總分為:%.2f c 語(yǔ)言成績(jī)的平均分為:%.2fn,czong,caver); printf(c 語(yǔ)言成績(jī)的最高分為:%.2f c 語(yǔ)言成績(jī)的最低分為:%.2

12、fn,max-xk0.zchji,min-xk0.zchji); printf(c 語(yǔ)言成績(jī)優(yōu)秀的人數(shù)為:%dn,k10); printf(c 語(yǔ)言成績(jī)良好的成績(jī)?yōu)?%dn,k20); printf(c 語(yǔ)言成績(jī)及格的人數(shù)為:%dn,k10+k20); printf(c 語(yǔ)言成績(jī)不及格的人數(shù)為:%dn,k30);printf(高數(shù)成績(jī)的總分為:%.2f 高數(shù)成績(jī)的平均分為:%.2fn,gzong,gaver); printf(高數(shù)成績(jī)的最高分為:%.2f 高數(shù)成績(jī)的最低分為:%.2fn,max-xk1.zchji,min-xk1.zchji); printf(高數(shù)成績(jī)優(yōu)秀的人數(shù)為:%dn,k1

13、1); printf(高數(shù)成績(jī)良好的人數(shù)為:%dn,k21); printf(高數(shù)成績(jī)及格的人數(shù)為:%dn,k11+k21); printf(高數(shù)成績(jī)不及格的人數(shù)為:%dn,k31); return(head); /*按學(xué)號(hào)查詢模塊*/ void chaxun2(score *head) score *q=head; int sss=0; char name10;printf(請(qǐng)輸入要查詢的學(xué)生姓名:);scanf(%s,name);while(q!=null) if(strcmp(name,q-name)=0) /*通過(guò)字符串的比較按姓名查找*/ printf(*n); printf(|學(xué)號(hào)

14、|姓名|性別|生 日 |); printf(c(平時(shí).實(shí)驗(yàn).考試.綜合)|); printf(高數(shù)(平時(shí).實(shí)驗(yàn).考試.綜合)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(沒(méi)有這個(gè)學(xué)生的資料!nn); /*按學(xué)號(hào)查詢*/ void chaxun1(score *head) score *q=head;int num,sss=0;printf(請(qǐng)輸入要查詢的學(xué)生學(xué)號(hào):);scanf(%d,&num);while(q!=null) if(num=q-num) printf(*n); printf(|學(xué)號(hào)|姓名|性別|生 日 |); printf(c(平時(shí).實(shí)驗(yàn)

16、.考試.綜合)|); printf(高數(shù)(平時(shí).實(shí)驗(yàn).考試.綜合)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(沒(méi)有這個(gè)學(xué)生的資料!nn); /*查詢二級(jí)菜單*/ chaxun_cd()int m=0,i;while(m=0)printf(查詢學(xué)生的資料n);printf(1.按學(xué)號(hào)查詢n);printf(2.按姓名查詢n);printf(請(qǐng)選擇你所要操作的選項(xiàng)(按0退出):);scanf(%d,&i);switch(i)case 1:chaxun1(r);break; /*break表示跳出循環(huán)結(jié)構(gòu)結(jié)束循環(huán)退出包含break語(yǔ)句的那層循環(huán)體*/case 2:chaxun2(r);break;c

18、ase 0:m=1;break;default:printf(錯(cuò)誤,重新選擇:);break;/*按學(xué)號(hào)刪除*/ score *del1(score *head) score *p1,*p2; int num; printf(請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):); scanf(%d,&num); if(head=null) printf(沒(méi)有這個(gè)學(xué)生的資料!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 學(xué)生的資料已刪除完畢!nn,num); else printf(沒(méi)有這個(gè)學(xué)生的資料!nn); return(head); /*/score *del2(score *head) score *p1,*p2; char name10; printf(請(qǐng)輸入要?jiǎng)h除學(xué)生的姓名:); scanf(%s,name); if(head=null) printf(沒(méi)有這個(gè)學(xué)生的資料!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的學(xué)生的資料已被刪除!nn,name); else printf(沒(méi)有這個(gè)學(xué)生的資料!nn); return(head);/*/del_cd()int m=0,i;while(m=0) printf(刪除學(xué)生的資料n);printf(1.按學(xué)號(hào)刪除n);printf(2.按姓名刪除n);printf(3.查看刪除結(jié)果n);

21、printf(請(qǐng)選擇你所要操作的選項(xiàng)(按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(錯(cuò)誤,重新選擇:);break;/*按學(xué)號(hào)排序*/score *paixu2(score *head) score *p1,*p2,*k,h; int i; if(head=null) printf(沒(méi)有任何學(xué)生的資料!); 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(沒(méi)有任何學(xué)生的資料!); 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(對(duì)學(xué)生的資料進(jìn)行排序n);printf(1.按c語(yǔ)言成績(jī)排序n);printf(2.按學(xué)號(hào)排序n);printf(請(qǐng)選擇你所要操作的選

24、項(xiàng)(按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(錯(cuò)誤,重新選擇:);break;/*按c成績(jī)插入*/score *charu1(score *head,score *stu) score *p1,*p2; int i; p1=head; r=paixu1(r); stu=(score*)malloc(len); /*開(kāi)辟一個(gè)新單元,用于保存要插入的信息*/ printf(請(qǐng)輸入要增加的學(xué)生資料:n); printf(

25、請(qǐng)輸入要增加的學(xué)生學(xué)號(hào):); scanf(%d,&stu-num); while(stu-numnum); printf(b.請(qǐng)輸入要增加的學(xué)生姓名:); scanf(%s,stu-name); printf(請(qǐng)輸入要增加的學(xué)生性別(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(輸入錯(cuò)誤,輸入錯(cuò)誤請(qǐng)重新輸入性別:); scanf( %c,&stu-sex); printf(c.請(qǐng)輸入要增加的學(xué)生生日(年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthd

26、ay.month,&stu-birthday.day); printf(d.請(qǐng)輸入要增加的學(xué)生成績(jī)!n); printf(1.請(qǐng)輸入要增加的學(xué)生c語(yǔ)言成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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.請(qǐng)輸入要增加的學(xué)生高數(shù)成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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成績(jī)確定要插入的位置*/ 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(增加學(xué)生資料成功!n); return(head);/*按學(xué)號(hào)插入*/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、); /*開(kāi)辟一個(gè)新單元,用于保存要插入的信息*/ printf(請(qǐng)輸入要增加的學(xué)生資料:n); printf(請(qǐng)輸入要增加的學(xué)生學(xué)號(hào):); scanf(%d,&stu-num); while(stu-numnum); printf(b.請(qǐng)輸入要增加的學(xué)生姓名:); scanf(%s,stu-name); printf(請(qǐng)輸入要增加的學(xué)生性別(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(輸入錯(cuò)誤,輸入錯(cuò)誤請(qǐng)重新輸入性別:); scanf( %c,&stu-sex); printf(c.請(qǐng)輸入要增加的學(xué)生生日(

30、年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthday.month,&stu-birthday.day); printf(d.請(qǐng)輸入要增加的學(xué)生的成績(jī)!n); printf(1.請(qǐng)輸入要增加的學(xué)生c語(yǔ)言成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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.請(qǐng)輸入

31、要增加的學(xué)生高數(shù)的成績(jī)(平時(shí),實(shí)驗(yàn),考試):); 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ù)學(xué)號(hào)確定要插入的位置*/ 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(增加學(xué)生資料成功!n); printf(n); return(head); /*返回頭指針*/*插入的二級(jí)菜單*/charu_cd()int m=0,i;while(m=0)printf(增加學(xué)生的人數(shù)n);printf(n1.按c語(yǔ)言成績(jī)?cè)黾觧);printf(2.按學(xué)號(hào)增加n);printf(請(qǐng)選擇你所要操作的選

33、項(xiàng)(按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(錯(cuò)誤,重新選擇:);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(請(qǐng)輸入要更新學(xué)生的學(xué)號(hào):);scanf(%d,&num);while(q!=null) if(num=q-num) printf(請(qǐng)輸入新的學(xué)號(hào):); scanf(%d,&num); q-num=num; printf(請(qǐng)輸入新的姓名:); scanf(%s,name); strcpy(q-name,name); printf(請(qǐng)輸入新學(xué)生的性別:); scanf( %c,&sex); while(se

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論