#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string>
#define maxlen 100
#define NULL 0
typedef struct node
{
int num;
char name[maxlen];
float score[4];
struct node *next;
}list;
////////////////////创建学生成绩表///////////////////
list *creat()
{
list *head,*p,*r;
int i,n,j,k;
head=(list *)malloc(sizeof(list));
head->next=NULL;
r=head;
printf("请输入学生人数:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(list *)malloc(sizeof(list));
printf("请输入学生的学号:\n");
scanf("%d",&p->num);
printf("请输入学生的姓名:\n");
scanf("%s",p->name);
printf("输入学生的高数成绩\t英语成绩\t数据结构成绩\t:(百分制)\n");
for(j=0;j<3;j++)
scanf("%2f",&p->score[j]);
for(k=0;k<3;k++)
if(p->score[k]<0)
{
printf("输入学生的高数成绩\t英语成绩\t数据结构成绩\t:(百分制)\n");
for(j=0;j<3;j++)
scanf("%2f",&p->score[j]);
}
p->score[3]=(p->score[0]+p->score[1]+p->score[2])/3;
p->next=NULL;
r->next=p;
r=r->next;
}
return(head);
}
////////////////////////输出成绩/////////////////////
void output(list *h)
{
list *p;
p=h->next;
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
while(p!=NULL)
{
printf("%2d\t%2s\t%2f\t%2f\t%2f\t%2f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
p=p->next;
}
}
///////////////////////插入成绩///////////////////////////////////
list *insert(list *h)
{
list *p,*q,*r,*head;
int j,k;
head=h;
r=h;
p=h->next;
q=(list *)malloc(sizeof(list));
printf("输入待插入学生的学号:\n");
scanf("%d",&q->num);
printf("输入姓名:\n");
scanf("%s",q->name);
printf("输入高数成绩\t英语成绩\t数据结构成绩\t:(百分制)\n");
for(j=0;j<3;j++)
scanf("%2f",&q->score[j]);
for(k=0;k<3;k++)
if(q->score[k]<0)
{
printf("输入学生的高数成绩\t英语成绩\t数据结构成绩\t:(百分制)\n");
for(j=0;j<3;j++)
scanf("%2f",&q->score[j]);
}
q->score[3]=(q->score[0]+q->score[1]+q->score[2])/3;
q->next=NULL;
while(p!=NULL)
{
r=p;
p=p->next;
}
r->next=q;
r=r->next;
return(head);
}
///////////////////////查询成绩//////////////////////
void find(list *h)
{
int k;
list *p;
p=h->next;
printf("输入要查找学生的学号:\n");
scanf("%d",&k);
while(p&&p->num!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
printf("%d\t%s\t%f\t%f\t%f\t%f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
}
else
printf("没找到!\n");
}
////////////////////////删除成绩/////////////////////////////
list *del(list *h)
{
int k;
list *p,*q;
q=h;
p=h->next;
printf("请输入待删除学生的学号:\n");
scanf("%d",&k);
while(p&&p->num!=k)
{
q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
}
else
printf("没有这个学生的成绩,无法删除!\n");
return(h);
}
//////////////////////按学号排序(冒泡法)////////////////////////////
list *num_sort(list *s)
{int y;
printf("请输入学生人数:\n");
scanf("%d",&y);
list *temp,*x,*first,*k;
k=s;
int i=0;
x=first=s;
for(i=0;i<y;i++)
{
temp=first;
s=x=temp->next;
while(s->next!=NULL)
{
if(x->num>s->next->num)
{
s=s->next;
temp->next=s;
x->next=s->next;
s->next=x;
s=x;
temp=temp->next;
}
else
{
temp=temp->next;
s=x=temp->next;
}
}
}
s=k;
return(s);
}
//////////////////////按高数成绩排序/////////////////////////////
list *Mathscore_sort(list *s)
{
list *t=s->next,*r,*h,*q;
q=s;
r=t->next;
t->next=NULL;
t=r;
while(t!=NULL)
{
r=t->next;
h=s;
while(h->next!=NULL&&h->next->score[0]>t->score[0])
{
h=h->next;
}
t->next=h->next;
h->next=t;
t=r;
}
s=q;
return(s);
}
//////////////////////按英语成绩排序(直接插入法排序)////////////////
list *Englishscore_sort(list *s)
{
list *t=s->next,*r,*h,*q;
q=s;
r=t->next;
t->next=NULL;
t=r;
while(t!=NULL)
{
r=t->next;
h=s;
while(h->next!=NULL&&h->next->score[1]>t->score[1])
{
h=h->next;
}
t->next=h->next;
h->next=t;
t=r;
}
s=q;
return(s);
}
//////////////////////按数据结构成绩排序(冒泡法)////////////////////
list *Datastrscore_sort(list *s)
{int y;
printf("请输入学生人数:\n");
scanf("%d",&y);
list *temp,*x,*first,*k;
k=s;
int i=0;
x=first=s;
for(i=0;i<y;i++)
{
temp=first;
s=x=temp->next;
while(s->next!=NULL)
{
if(x->score[2]<s->next->score[2])
{
s=s->next;
temp->next=s;
x->next=s->next;
s->next=x;
s=x;
temp=temp->next;
}
else
{
temp=temp->next;
s=x=temp->next;
}
}
}
s=k;
return(s);
}
//////////////////////按平均成绩排序///////////////////////
list *Avescore_sort(list *s)
{int y;
printf("请输入学生人数:\n");
scanf("%d",&y);
list *temp,*x,*first,*k;
k=s;
int i=0;
x=first=s;
for(i=0;i<y;i++)
{
temp=first;
s=x=temp->next;
while(s->next!=NULL)
{
if(x->score[3]<s->next->score[3])
{
s=s->next;
temp->next=s;
x->next=s->next;
s->next=x;
s=x;
temp=temp->next;
}
else
{
temp=temp->next;
s=x=temp->next;
}
}
}
s=k;
return(s);
}
//////////////////////按姓名查找/////////////////////////////////
void name_find(list *h)
{
char k[100];
list *p;
p=h->next;
printf("输入要查找学生姓名:\n");
scanf("%s",gets(k));
while(p&&strcmp(p->name,k)!=0)
p=p->next;
if(p)
{
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
printf("%d\t%s\t%f\t%f\t%f\t%f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
}
else
printf("没找到!\n");
}
/////////////////////////按高数成绩查找//////////////////////////
void Math_find(list *h)
{
int k;
list *p;
p=h->next;
printf("输入要查找学生的高数成绩:\n");
scanf("%d",&k);
while(p&&p->score[0]!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
printf("%d\t%s\t%f\t%f\t%f\t%f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
}
else
printf("没找到!\n");
}
/////////////////////////按英语成绩成绩查找///////////////////
void English_find(list *h)
{
int k;
list *p;
p=h->next;
printf("输入要查找学生的英语成绩:\n");
scanf("%d",&k);
while(p&&p->score[1]!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
printf("%d\t%s\t%f\t%f\t%f\t%f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
}
else
printf("没找到!\n");
}
///////////////////////////// 按数据结构成绩查找////////////////////////////
void Datastr_find(list *h)
{
int k;
list *p;
p=h->next;
printf("输入要查找学生的数据结构成绩:\n");
scanf("%d",&k);
while(p&&p->score[2]!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t高数成绩\t英语成绩\t数据结构成绩\t平均成绩\t\n");
printf("%d\t%s\t%f\t%f\t%f\t%f\t\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
}
else
printf("没找到!\n");
}
/////////////////////////主程序//////////////////////////////////
void main()
{
list *p;
int k;
while(1)
{
printf("-------------------------\n");
printf(" 学生成绩管理系统 \n");
printf("-------------------------\n");
printf(" 1. 登记成绩 2. 查询成绩 \n");
printf(" 3. 插入成绩 4. 删除成绩\n");
printf(" 5. 按学号排序 6. 按高数成绩排序 \n");
printf(" 7. 按英语成绩排序 8. 按数据结构成绩排序 \n");
printf(" 9. 按平均成绩排序 10. 按学号查找 \n");
printf(" 11.按姓名查找 12. 按高数成绩查找 \n");
printf(" 13.按英语成绩查找 14. 按数据结构成绩查找 \n");
printf(" 15.输出所有学生成绩 0. 退出程序 \n");
printf("-------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&k);
switch(k)
{
case 1:p=creat();break;
case 2:find(p);break;
case 3:p=insert(p);break;
case 4:p=del(p);break;
case 5:{p=num_sort(p); output(p);}break;
case 6:{p=Mathscore_sort(p);output(p);}break;
case 7:{p=Englishscore_sort(p);output(p);}break;
case 8:{p=Datastrscore_sort(p);output(p);}break;
case 9:{p=Avescore_sort(p);output(p);}break;
case 10:find(p);break;
case 11:name_find(p);break;
case 12:Math_find(p);break;
case 13:English_find(p);break;
case 14:Datastr_find(p);break;
case 15:output(p);break;
case 0:exit(0);
default:printf("选择错误,重新开始!\n");
}
}
}
温馨提示:内容为网友见解,仅供参考