//初始化
st *am(void)
{
st *p=(st *)malloc(sizeof(st));
p->prev=p;
p->next=p;
return p;
}
//头插输入学生信息
void insert(st *head,st *node)
{
int i,add;
printf("请输入你要输入的学生个数:\n");
scanf("%d",&add);
for(i=0;i<add;i++)
{
st *node=(st *)malloc(sizeof(st));
printf("请输入第%d个学生的信息:\n",i+1);
scanf("%d%s%d",&node->number,node->name,&node->score);
node->prev=head;
node->next=head->next;
head->next->prev=node;
head->next=node;
}
printf("***************************************************************\n");
printf("以下是目前全部的学生的信息\n");
printf("\n");
display(head,node);
}
//尾插输入学生信息
void tail_insert(st *head,st* node)
{
int i,add;
printf("请输入你要输入的学生个数:\n");
scanf("%d",&add);
for(i=0;i<add;i++)
{
st *node=(st *)malloc(sizeof(st));
printf("请输入第%d个学生的信息:\n",i+1);
scanf("%d%s%d",&node->number,node->name,&node->score);
node->prev=head->prev;
node->next=head;
head->prev->next=node;
head->prev=node;
}
printf("***************************************************************\n");
printf("以下是目前全部的学生的信息\n");
printf("\n");
display(head,node);
}
//删除学生信息
void deldet(st *head,st *node)
{
int i,id;
printf("请输入你要删除的学生的学号:");
scanf("%d",&id);
node=head->next;
while(node!=head)
{
if(node->number==id)
{
node->next->prev=node->prev;
node->prev->next=node->next;
break;
}
node=node->next;
}
printf("以下是目前全部的学生的信息\n");
printf("\n");
display(head,node);
//free(node);
}
//显示所有学生信息
void display(st *head,st *node)
{
node=head->next;
while(node!=head)
{
printf("%d %s %d\n",node->number,node->name,node->score);
node=node->next;
}
printf("\n");
}
//显示该学生信息
void sea(st *node)
{
printf("***************************************************************\n");
printf("以下是该学生的信息\n");
printf("\n");
printf("%d %s %d",node->number,node->name,node->score);
printf("\n");
printf("\n");
printf("***************************************************************\n");
}
//查询学生信息
void search(st *head,st *node)
{
int id;
printf("请输入你要查询的学生的学号:");
scanf("%d",&id);
printf("***************************************************************\n");
printf("以下是该学生的信息\n");
printf("\n");
node=head->next;
while(node!=head)
{
if(node->number==id)
{
printf("%d %s %d",node->number,node->name,node->score);
}
node=node->next;
}
printf("\n");
printf("\n");
}
//修改学生信息
void change(st *head,st *node,int i)
{ int id;
int sco;
int num;
char na[100];
node=head->next;
printf("请输入你要修改的学生的学号");
scanf("%d",&id);
while(node!=head)
{
if(node->number==id)
{
break;
}
node=node->next;
}
if(i==1)
{
printf("请输入学生的新的学号:");
scanf("%d",&num);
node->number=num;
}
if(i==2)
{
printf("请输入学生的新的姓名:");
scanf("%s",na);
strcpy(node->name,na);
}
if(i==3)
{
printf("请输入学生的新的分数:");
scanf("%d",&sco);
node->score=sco;
}
if(i==4)
{
printf("请输入学生的新的学号姓名和分数:");
scanf("%d %s %d",&num,na,&sco);
node->number=num;
strcpy(node->name,na);
node->score=sco;
}
printf("\n");
sea(node);
printf("\n");
}
//统计学生总人数
int student_number(st *head,st *node)
{
int i=0;
node=head->next;
while(node!=head)
{
node=node->next;
i++;
}
return i;
}
//按分数从高到低排列
void up_down(st *head,st *node)
{
int i;
int sn=student_number(head,node);
st *god=(st *)malloc(sizeof(st));
for(i=0;i<sn;i++)
{
node=head->next;
god=node->next;
while(god!=head)
{
if(node->score<god->score)
{
pl(head,node,god);
}
node=node->next;
god=node->next;
}
}
display(head,node);
}
//按分数从低到高排列
void down_up(st *head,st *node)
{
int i;
int sn=student_number(head,node);
st *god=(st *)malloc(sizeof(st));
for(i=0;i<sn;i++)
{
node=head->next;
god=node->next;
while(god!=head)
{
if(node->score>god->score)
{
pl(head,node,god);
}
node=node->next;
god=node->next;
}
}
display(head,node);
}
//按学号排列
void number(st *head,st *node)
{
int i;
int sn=student_number(head,node);
st *god=(st *)malloc(sizeof(st));
for(i=0;i<sn;i++)
{
node=head->next;
god=node->next;
while(god!=head)
{
if(node->number>god->number)
{
pl(head,node,god);
}
node=node->next;
god=node->next;
}
}
display(head,node);
}
//按姓名排列
void name(st *head,st *node)
{
int i;
int sn=student_number(head,node);
st *god=(st *)malloc(sizeof(st));
for(i=0;i<sn;i++)
{
node=head->next;
god=node->next;
while(god!=head)
{
if(strcmp(node->name,god->name)>=0)
{
pl(head,node,god);
}
node=node->next;
god=node->next;
}
}
display(head,node);
}
//选项界面
void coc(void)
{
printf("请选择你要进行的操作\n");
printf("***************************************************************\n");
printf("**********1.输入学生信息************\n");
printf("**********2.删除学生信息************\n");
printf("**********3.查询学生信息************\n");
printf("**********4.修改学生信息************\n");
printf("**********5.查看所有学生信息********\n");
printf("**********6.查看学生的总人数********\n");
printf("**********7.对学生进行排列**********\n");
printf("输入任意7个选项以外的数字退出操作界面:\n");
printf("***************************************************************\n");
printf("请输入:");
}
//修改学生信息选项界面
void coc1(st *head,st *node)
{
search(head,node);
printf("\n");
printf("请选择你要修改的信息\n");
printf("***************************************************************\n");
printf("**********1.修改学生学号**********\n");
printf("**********2.修改学生姓名**********\n");
printf("**********3.修改学生分数**********\n");
printf("**********4.修改学生所有信息**********\n");
printf("输入任意4个选项以外的数字返回上一操作界面:\n");
printf("***************************************************************\n");
printf("请输入:");
}
//排列选项
void coc2(st *head,st *node)
{
printf("请选择你要进行的操作\n");
printf("***************************************************************\n");
printf("**********1.按分数从高到低排列************\n");
printf("**********2.按分数从低到高排列************\n");
printf("**********3.按学号排列************\n");
printf("**********4.按姓名的开头字母排列************\n");
printf("输入任意4个选项以外的数字退出操作界面:\n");
printf("***************************************************************\n");
printf("请输入:");
}
//冒泡函数转换
void pl(st *head,st *node,st *god)
{
int num;
num=god->number;
god->number=node->number;
node->number=num;
char nam[100];
strcpy(nam,god->name);
strcpy(god->name,node->name);
strcpy(node->name,nam);
int sco;
sco=god->score;
god->score=node->score;
node->score=sco;
}
int main(void)
{
st *head=am();
st *node;
int n;
int i;
int j;
xixi:
coc();
scanf("%d",&n);
switch(n)
{
case 1:
insert(head,node); //输入学生信息
break;
case 2:
deldet(head,node); //删除学生信息
break;
case 3:
search(head,node); //查询学生信息
break;
case 4: //修改学生信息
ovo:
coc1(head,node);
scanf("%d",&i);
switch(i)
{
case 1:
change(head,node,i); //修改学生学号
break;
case 2:
change(head,node,i); //修改学生姓名
break;
case 3:
change(head,node,i); //修改学生分数
break;
case 4:
change(head,node,i); //修改学生所有信息
break;
default:
goto qwq;
}
goto ovo;
qwq:
printf("目前所有学生的信息为:\n");
case 5: //查看所有学生信息
printf("\n");
display(head,node);
break;
case 6: //查看学生的总人数
student_number(head,node);
break;
case 7: //对学生进行排列
wow:
coc2(head,node);
scanf("%d",&j);
switch(j)
{
case 1: //按分数从高到低排列
up_down(head,node);
break;
case 2: //按分数从低到高排列
down_up(head,node);
break;
case 3: //按学号排列
number(head,node);
break;
case 4: //按姓名的开头字母排列
name(head,node);
break;
default:
goto heihei;
}
goto wow;
heihei:
break;
default:
goto haha;
}
goto xixi;
haha:
return 0;
}