#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include <stdlib.h>
struct Stu{
char name[20];
char num[10];
int score;
struct stu *next;
};
int n;
int main(){//主函数中的n没有在子函数中定义和调用
void scorec();//学号成绩查询
void scorep();//成绩由高到低排名
void nump();//学号由小到大排名
void grade();//学生的总成绩和平均成绩
void link();//成绩的类别以及所占比例和人数
void scan();//录入学生信息
//void print(struct stu);//输出学生的成绩
//int n;
int a;
void menu();
menu();
printf("请输入1-7的数字");
scanf("%d",&a);
switch(a){//?????
case 1: scan(NULL);break;
case 2: scorec(NULL);break;
case 3: scorep(NULL);break;
case 4: nump(NULL);break;
case 5: grade(NULL);break;
case 6: link(NULL);break;
case 7: break;
}
}
menu(){
printf("**************学生信息管理系统**************\n");
printf("**************1.录入学生信息****************\n");
printf("**************2.成绩查询********************\n");
printf("**************3.成绩排名********************\n");
printf("**************4.学号排名********************\n");
printf("**************5.学生总成绩和平均成绩********\n");
printf("**************6.成绩分析********************\n");
printf("**************7.退出************************\n");
}
scan(struct Stu stu){//输入学生的成绩
struct Stu *p;
printf("请输入要录入学生信息的人数:(<=30)");
scanf("%d",&n);
int i;
for(i=0;i<n;i++){//依次录入学生成绩
p=(struct Stu *)malloc(sizeof(struct Stu));//开辟结构体大小的空间
printf("name:");
gets(p->name);
printf("\nnum");
gets(p->num);
printf("\nscore");
scanf("%d\n",&p->score);
}
struct Stu *next=NULL;
}
//学生成绩查询
scorec(struct Stu stu){
struct Stu *k;
char x[10];
int i;
printf("请输入学生的学号:");
gets(x);
for(i=0;i<n;i++){
if(k->num==0){
printf("name:%s\nnum:%s\nscore:%d\n",k->name,k->num,k->score);
}
}
printf("没有找到该学生的相关信息!");
}
//学生成绩排名(由高到低)
scorep(struct Stu stu){//???
struct Stu *q;
int i,j,s;
for(i=0;i<n-1;i++){
for(j=0;j<n;j++){
if((q+i)->score<(q+j)->score){//??交换两个结构体
(q+i)->next=(q+j+1);
(q+j)->next=(q+i);
}
}
}
printf("成绩排名为:\n");
for(i=0;i<n;i++){
s=i+1;
printf("%s\t%s\t%d\t%d\n",(q+i)->name,(q+i)->num,s,(q+i)->score);
}
}
//学号排名????
nump(struct Stu stu){
struct Stu *q;
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n;j++){
if((q+i)->num>(q+j)->num){//??交换两个结构体
(q+i)->next=(q+j+1);
(q+j)->next=(q+i);
}
}
}
printf("学生的学号排名:");
for(i=0;i<n;i++){
printf("%s\n%s\n%d\n\n",q->name,q->num,q->score);
}
}
//学生总成绩和平均成绩
grade(struct Stu stu){
int aver,sum=0;
int i;
struct Stu *w;
for(i=0;i<n;i++){
sum=sum+((w+i)->score);
}
aver=sum/n;
printf("学生的总成绩和平均成绩分别为:");
printf("%d\t%d\t",sum,aver);
}
//学生成绩分析
link(struct Stu stu){
struct Stu *r;
int i;
int a=0,b=0,c=0,d=0,e=0;
int aa,bb,cc,dd,ee;
for(i=0;i<n;i++){
if((r+i)->score>=90 && (r+i)->score<=100){
a=a+1;
}
if((r+i)->score>=80 && (r+i)->score<=89){
b=b+1;
}
if((r+i)->score>=70 && (r+i)->score<=79){
c=c+1;
}
if((r+i)->score>=60 && (r+i)->score<=69){
d=d+1;
}
if((r+i)->score>=0 && (r+i)->score<=59){
e=e+1;
}
}
aa=a/n;
bb=b/n;
cc=c/n;
dd=d/n;
ee=e/n;
printf("优秀:%d人\n良好:%d\n中等:%d\n及格:%d\n不及格:%d\n\n",a,b,c,d,e);
printf("优秀占比:%d\n良好占比:%d\n中等占比:%d\n及格占比:%d\n不及格占比:%d\n",aa,bb,cc,dd,ee);
}