1、C语言课程设计 学生成绩管理系统#include #include #include #include typedef struct student /*定义一个单链表*/ char sno10; char name10; int Chinese; int Math; int English; int sum; float avg; struct student *next;student1,*grade;grade get_info(grade L) /输入学生信息 student1 *s,*p=NULL,*q; int flag,n,i; char choice=Y; while(choi
2、ce!=N&choice!=n) printf(n请输入要录入的学生个数:); scanf(%d,&n); for(i=1;isno); printf(n请输入学生的姓名:n); scanf(%s,&s-name); printf(n请输入学生的语文成绩:n); scanf(%d,&s-Chinese); printf(n请输入学生的数学成绩:n); scanf(%d,&s-Math); printf(n请输入学生的英语成绩:n); scanf(%d,&s-English); s-sum=s-Chinese+s-Math+s-English; s-avg=(float)s-sum/3; if(
3、L!=NULL) q=L; p=L; while(q) flag=strcmp(q-sno,s-sno); if(flag=0) printf(该学生已存在!n); break; q=q-next; if(flag!=0) while(p-next) p=p-next; p-next=s; p=s; s-next=NULL; /*尾结点的指针置空,下同!*/ else L=s; s-next=NULL; printf(n是否继续?(Y/N或y/n):); scanf(%s,&choice); system(cls); return L;sno_select(grade L) /*按学生学号查找
4、*/ student1 *p=L; char num10,choice=Y; int i=1,flag; while(choice!=N&choice!=n) printf(n请输入该学生的学号:); scanf(%s,&num); while(p) flag=strcmp(p-sno,num); if(flag=0) printf(n*n); printf(t学号t姓名t语文t数学t英语t总分t平均分n); printf(t%st%st%dt%dt%dt%dt%.2fn,p-sno,p-name,p-Chinese,p-Math,p-English,p-sum,p-avg); printf(
5、*n); break; else p=p-next; if(flag) printf(n不存在该学号的学生!nn); printf(继续查找?(Y/N或y/n):); scanf(%s,&choice); system(cls); return 0;grade_select(grade L) /*按分数段查询*/ int n,m,j,k=0,x=0,y=0; char choice=Y; student1 *p=L; while(choice!=N&choice!=n) printf(n可查找的科目的菜单如下:n); printf(t 1.语文 2.数学 3.英语n); printf(请选择(
6、输入序号即可):); scanf(%d,&j); printf(n请输入一个分数段,即输入n,m的值(nChinese=n&p-Chinesesno,p-name,p-Chinese,p-Math,p-English,p-sum,p-avg); k=1; if(j=2) k=1; y=1; if(p-Math=n&p-Mathsno,p-name,p-Chinese,p-Math,p-English,p-sum,p-avg); x=1; if(j=3) k=1; x=1; if(p-English=n&p-Englishsno,p-name,p-Chinese,p-Math,p-English
7、,p-sum,p-avg); p=p-next; printf(n*n); if(L=NULL) printf(该系统还没有存放数据!nn); else if(k=0) printf(没有学生的语文成绩在这个分数段上nn); if(x=0) printf(没有学生的数学成绩在这个分数段上nn); if(y=0) printf(没有学生的英语成绩在这个分数段上nn); k=0; x=0; y=0; printf(继续查找?(Y/N或y/n):); scanf(%s,&choice); system(cls); statistics(grade L) /*统计函数*/ student1 *p=L;
8、 int i=0; char choice=N; float all_avg=0; while(choice!=Y&choice!=y) while(p) all_avg=all_avg+p-avg; p=p-next; i+; printf(n=n); printf(该班级总人数为:%dn,i); if(L=NULL) printf(该班级的平均分为:0n); else printf(该班级的平均分为:%5.2fn,all_avg/i); printf(=n); printf(n退出?(Y或y):); scanf(%s,&choice); system(cls);grade delete_g
9、rade(grade L) /*删除指定学生成绩函数*/ student1 *p=L,*q=L; int i=1,flag; char choice=Y,num10; while(choice!=N&choice!=n) printf(n=n); if(L=NULL) printf(该系统中不存在任何数据nn); else printf(n请输入想要删除的学生学号:); scanf(%s,&num); while(p) flag=strcmp(p-sno,num); if(flag=0) if(q=p) L=q-next; free(q); else while(q-next!=p) q=q-
10、next; q-next=p-next; free(p); break; p=p-next; if(flag) printf(n不存在该学生); else printf(n删除成功!); printf(n=n); p=L; q=L; printf(继续删除?(Y/N或y/n):); scanf(%s,&choice); system(cls); return L;asc_order_grade(grade L) /*升序排序函数*/ int k,x=1,n=0,m,y; float z; student1 *p,*q,*s=L; char t10,choice; while(s) /*计算链表
11、数据个数n*/ s=s-next; n+; while(x) choice=N; printf(*n); printf( 成绩升序排序菜单如下:n); printf( -n); printf( 1.按语文成绩升序排序n); printf( 2.按数学成绩升序排序n); printf( 3.按英语成绩升序排序n); printf( 4.按总成绩升序排序n); printf( 5.按平均成绩升序排序n); printf( 6.返回主菜单n); printf(*n); printf(请选择(输入菜单序号即可):); scanf(%d,&k); system(cls); if(k=1) /*按语文成绩
12、升序排序*/ while(choice!=Y&choice!=y) for(m=0;mnext) q=p-next; if(p-Chinese=q-Chinese) strcpy(t,p-sno); /*学号交换*/ strcpy(p-sno,q-sno); strcpy(q-sno,t); strcpy(t,p-name); /*学号交换*/ strcpy(p-name,q-name); strcpy(q-name,t); y=p-Chinese; /*语文成绩交换*/ p-Chinese=q-Chinese; q-Chinese=y; y=p-Math; /*数学成绩交换*/ p-Math
13、=q-Math; q-Math=y; y=p-English; /*英语成绩交换*/ p-English=q-English; q-English=y; y=p-sum; /*总成绩交换*/ p-sum=q-sum; q-sum=y; z=p-avg; /*平均成绩交换*/ p-avg=q-avg; q-avg=z; p=p-next; p=L; printf(n按语文成绩升序排序的最终结果为:n); printf(n*n); printf(t学号t姓名t语文t数学t英语t总分t平均分n); while(p) printf(t%st%st%dt%dt%dt%dt%.2fn,p-sno,p-na
14、me,p-Chinese,p-Math,p-English,p-sum,p-avg); p=p-next; printf(n*n); printf(nn); printf(退出?(Y或y); scanf(%s,&choice); system(cls); else if(k=2) /*按数学成绩升序排序*/ while(choice!=Y&choice!=y) for(m=0;mnext) q=p-next; if(p-Math=q-Math) strcpy(t,p-sno); /*学号交换*/ strcpy(p-sno,q-sno); strcpy(q-sno,t); strcpy(t,p-
15、name); /*学号交换*/ strcpy(p-name,q-name); strcpy(q-name,t); y=p-Chinese; /*语文成绩交换*/ p-Chinese=q-Chinese; q-Chinese=y; y=p-Math; /*数学成绩交换*/ p-Math=q-Math; q-Math=y; y=p-English; /*英语成绩交换*/ p-English=q-English; q-English=y; y=p-sum; /*总成绩交换*/ p-sum=q-sum; q-sum=y; z=p-avg; /*平均成绩交换*/ p-avg=q-avg; q-avg=z
16、; p=p-next; p=L; printf(n按数学成绩升序排序的最终结果为:n); printf(n*n); printf(t学号t姓名t语文t数学t英语t总分t平均分n); while(p) printf(t%st%st%dt%dt%dt%dt%.2fn,p-sno,p-name,p-Chinese,p-Math,p-English,p-sum,p-avg); p=p-next; printf(n*n); printf(nn); printf(退出?(Y或y); scanf(%s,&choice); system(cls); else if(k=3) /*按英语成绩升序排序*/ whi
17、le(choice!=Y&choice!=y) for(m=0;mnext) q=p-next; if(p-English=q-English) strcpy(t,p-sno); /*学号交换*/ strcpy(p-sno,q-sno); strcpy(q-sno,t); strcpy(t,p-name); /*学号交换*/ strcpy(p-name,q-name); strcpy(q-name,t); y=p-Chinese; /*语文成绩交换*/ p-Chinese=q-Chinese; q-Chinese=y; y=p-Math; /*数学成绩交换*/ p-Math=q-Math; q
18、-Math=y; y=p-English; /*英语成绩交换*/ p-English=q-English; q-English=y; y=p-sum; /*总成绩交换*/ p-sum=q-sum; q-sum=y; z=p-avg; /*平均成绩交换*/ p-avg=q-avg; q-avg=z; p=p-next; p=L; printf(n按英语成绩升序排序的最终结果为:n); printf(n*n); printf(t学号t姓名t语文t数学t英语t总分t平均分n); while(p) printf(t%st%st%dt%dt%dt%dt%.2fn,p-sno,p-name,p-Chine
19、se,p-Math,p-English,p-sum,p-avg); p=p-next; printf(n*n); printf(nn); printf(退出?(Y或y); scanf(%s,&choice); system(cls); else if(k=4) /*按总成绩升序排序*/ while(choice!=Y&choice!=y) for(m=0;mnext) q=p-next; if(p-sum=q-sum) strcpy(t,p-sno); /*学号交换*/ strcpy(p-sno,q-sno); strcpy(q-sno,t); strcpy(t,p-name); /*学号交换
20、*/ strcpy(p-name,q-name); strcpy(q-name,t); y=p-Chinese; /*语文成绩交换*/ p-Chinese=q-Chinese; q-Chinese=y; y=p-Math; /*数学成绩交换*/ p-Math=q-Math; q-Math=y; y=p-English; /*英语成绩交换*/ p-English=q-English; q-English=y; y=p-sum; /*总成绩交换*/ p-sum=q-sum; q-sum=y; z=p-avg; /*平均成绩交换*/ p-avg=q-avg; q-avg=z; p=p-next; p
21、=L; printf(n按总成绩升序排序的最终结果为:n); printf(n*n); printf(t学号t姓名t语文t数学t英语t总分t平均分n); while(p) printf(t%st%st%dt%dt%dt%dt%.2fn,p-sno,p-name,p-Chinese,p-Math,p-English,p-sum,p-avg); p=p-next; printf(n*n); printf(nn); printf(退出?(Y或y); scanf(%s,&choice); system(cls); else if(k=5) /*按平均绩升序排序*/ while(choice!=Y&choice!=y) for(m=0;mnext) q=p-next; if(p-avg=q-avg) strcpy(t,p-sno); /*学号交换*/ strcpy(p-sno,q-sno); strcpy(q-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1