C语言实现_学生成绩管理系统
**自己写了一个关于C语言实现学生成绩管理系统的代码
方法很粗糙。
不过还是第一次写这么“大”的。**
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char num[12];
char name[12];
int a,b,c;
};
typedef struct stu
{
struct student data;
struct stu *next;
} stu,*pupil;
pupil L;
void creat()
{
L = NULL;
L = (pupil)malloc(sizeof(stu));
L->next = NULL;
}
int menu()
{
printf("|**********欢迎进入学生信息管理系统**********|\n");
printf("| 1.录入学生信息 |\n");
printf("| 2.显示学生信息 |\n");
printf("| 3.查询学生信息 |\n");
printf("| 4.修改学生信息 |\n");
printf("| 5.添加学生信息 |\n");
printf("| 6.删除学生信息 |\n");
printf("| 7.按总分排名次 |\n");
printf("| 0.退出 |\n");
printf("|********************************************|\n");
printf("|请输入您所选的选项(0-7):");
int number;
scanf("%d", &number);
return number;
}
void join(pupil L)
{
pupil p;
p = (pupil)malloc(sizeof(stu));
p->next = NULL;
scanf("%s",&p->data.num);
scanf("%s",&p->data.name);
scanf("%d %d %d", &p->data.a, &p->data.b, &p->data.c);
p->next = L->next;
L->next = p;
}
void show(pupil L)
{
L = L->next;
if(!L)
{
printf("|******************无学生信息****************|\n");
return ;
}
printf("|***************开始显示学生信息*************|\n");
while(L)
{
printf("%s ", L->data.num);
printf("%s ", L->data.name);
printf("%d %d %d\n", L->data.a, L->data.b, L->data.c);
L = L->next;
}
}
void inquire(pupil L)
{
char x[12];
printf("|输入你要查询的学号:");
scanf("%s",&x);
while(L = L->next)
{
if(strcmp(L->data.num,x)==0)
break;
}
printf("%s ", L->data.num);
printf("%s ", L->data.name);
printf("%d %d %d\n", L->data.a, L->data.b, L->data.c);
}
void alter(pupil L)
{
int z;
char x[12],y;
printf("输入修改学生的学号或名字:");
scanf("%s",&x);
while(L = L->next)
{
if(strcmp(x,L->data.num)==0||strcmp(x,L->data.name)==0)
break;
}
printf("修改该同学的第哪项成绩(1-3):");
getchar();
scanf("%c",&y);
printf("输入修改后的成绩:");
scanf("%d",&z);
if(y=='1')
{
L->data.a=z;
}
else if(y=='2')
{
L->data.b=z;
}
else
{
L->data.c=z;
}
printf("修改后:");
printf("%s ", L->data.num);
printf("%s ", L->data.name);
printf("%d %d %d\n", L->data.a, L->data.b, L->data.c);
}
void add(pupil L)
{
pupil p;
p = (pupil)malloc(sizeof(stu));
p->next = NULL;
printf("输入新添加同学的信息:");
scanf("%s",&p->data.num);
scanf("%s",&p->data.name);
scanf("%d %d %d", &p->data.a, &p->data.b, &p->data.c);
p->next = L->next;
L->next = p;
}
void del(pupil L)
{
char x[12];
if(!L->next)
{
printf("无学生信息,操作错误\n");
return ;
}
printf("输入需要删除的学生的学号或名字:");
scanf("%s",&x);
pupil S;
while(L->next)
{
S = L->next;
if(strcmp(x,S->data.num)==0||strcmp(x,S->data.name)==0)
{
L->next = S->next;
break;
}
L = L->next;
}
}
void rank(pupil L)
{
L = L->next;
pupil p = L->next->next,q = L->next;
for(; q!=NULL; q = q->next)
{
for(; p!=NULL; p=p->next)
{
if(q->data.a+q->data.b+q->data.c < p->data.a+p->data.b+p->data.c)
{
q->next = p->next;
p->next = q;
L->next = p;
}
}
}
}
void chooser(int number)
{
switch(number)
{
case 1:
{
int vis;
printf("|********开始录入学生信息********|\n");
printf("你要录入人数为:");
scanf("%d",&vis);
for(int i=0; i<vis; i++)
{
join(L);
}
}
break;
case 2:
show(L);
break;
case 3:
{
inquire(L);
}
break;
case 4:
{
alter(L);
}
break;
case 5:
{
add(L);
}
break;
case 6:
{
del(L);
}
break;
case 7:
rank(L);
break;
case 0:
exit(0);
break;
}
}
int main()
{
int number;
creat();
while(number = menu())
{
chooser(number);
}
return 0;
}