#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct Stu
{
char id[10];
char name[20];
char bj[10];
int sx,yy,jsj;
struct Stu * st;
}Stu;
Stu * head = NULL;
Stu * tail = NULL;
void help()
{
printf("---------------主菜单-------------\n");
printf("1.录入学生信息 2.查询学生信息\n");
printf("3.学生成绩排名 4.修改学生信息\n");
printf("5.删除学生信息 6.打印学生信息\n");
printf("-----------0. 退出系统------------\n");
return;
}
void input()
{
int i,n;
printf("请输入录入学生的人数:\n");
while (scanf("%d", &n) != 1)
{
printf("输入有误!请重新输入:\n");
fflush(stdin);
}
Stu * temp = (Stu *)malloc(sizeof(Stu));
for(i=0;i<n;++i)
{
printf("输入第%d个学生学号:",i+1);
scanf("%s",temp->id);
printf("输入第%d个学生姓名:",i+1);
scanf("%s",temp->name);
printf("输入第%d个学生班级:",i+1);
scanf("%s",temp->bj);
printf("输入该学生三门课成绩:\n");
printf("数学:");
scanf("%d",&temp->sx);
printf("英语:");
scanf("%d",&temp->yy);
printf("计算机:");
scanf("%d",&temp->jsj);
temp->st = NULL;
if (head == NULL)
{
head = temp;
tail = temp;
}
else
{
tail->st = temp;
tail = temp;
}
}
return;
}
Stu * chaxun()
{
char str[20];
printf("输入要查找的学生学号或姓名\n按“#”退出\n");
scanf("%s",str);
if(str[20]=='#') return NULL;
Stu * temp = head;
if(head==NULL||temp==NULL)
{
printf("未查找到相关信息!\n");
return NULL;
}
else
{
while (temp)
{
if (!strcmp(temp->id, str) || !strcmp(temp->name, str))
break;
temp = temp->st;
}
printf("查找学生信息如下:\n");
printf("学号:%s,姓名:%s,班级:%s\n",temp->id,temp->name,temp->bj);
printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",temp->sx,temp->yy,temp->jsj);
}
return temp;
}
void paiming(Stu **s)
{
Stu *p,*q,*t,*r;
q=(*s)->st;
p=q->st;
while(p!=NULL)
{
if(p->jsj>=q->jsj)
{
p=p->st;
q=q->st;
}
else
{
t=(*s)->st;
r=*s;
while((p->jsj)>(t->jsj))
{
r=t;
t=t->st;
}
q->st=p->st;
p->st=t;
r->st=p;
p=q->st;
}
}
return;
}
void xiugai()
{
char n;
Stu * temp = chaxun();
if(temp==NULL)
printf("无可修改内容\n");
else
{
int num;
Repeat:
printf("输入需要修改的内容\n");
printf("1.学号--2.姓名--3班级\n");
printf("4.数学成绩--5英语成绩--6计算机成绩\n");
while
(scanf("%d", &num) != 1 || num < 0 || num > 6 )
{
printf("您的输入不正确,请重新输入:\n");
fflush(stdin);
}
switch (num)
{
case 1:
printf("请输入修改的学号\n");
scanf("%s",temp->id);
break;
case 2:
printf("请输入修改的姓名\n");
scanf("%s,",temp->name);
break;
case 3:
printf("请输入修改的班级\n");
scanf("%s",temp->bj);
break;
case 4:
printf("请输入修改的数学成绩\n");
scanf("%d",&temp->sx);
break;
case 5:
printf("请输入修改的英语成绩\n");
scanf("%d",&temp->yy);
break;
case 6:
printf("请输入修改的计算机成绩\n");
scanf("%d",&temp->jsj);
break;
}
printf("信息更改后如下:\n");
printf("学号:%s,姓名:%s,班级:%d\n",temp->id,temp->name,temp->bj);
printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",temp->sx,temp->yy,temp->jsj);
printf("是否确认无误?(1or0)\n");
scanf("%c", &n);
if (n != '1')
goto Repeat;
printf("您已确认,更改完成!\n");
}
return;
}
void shanchu()
{
Stu * temp=chaxun();
if(head==NULL||temp==NULL)
{
printf("无可删除内容\n");
}
else if (head == tail)
{
free(head);
head = NULL;
tail = NULL;
printf("删除成功!\n");
}
else if (temp == head)
{
head = head->st;
free(temp);
printf("删除成功!\n ");
}
else if(temp==tail)
{
Stu * pt=head;
while (pt->st->st)
pt=pt->st;
free(tail);
tail = pt;
tail -> st = NULL;
printf("删除成功!\n ");
}
return;
}
void print()
{
Stu * phead=head;
if(phead==NULL)
printf("暂无学生信息!\n");
while (phead)
{
printf("学号:%s,姓名:%s,班级:%d\n", phead->id, phead->name, phead->bj);
printf("数学成绩:%d,英语成绩:%d,计算机成绩:%d\n",phead->sx,phead->yy,phead->jsj);
phead = phead -> st;
}
return;
}
int main(void)
{
int num; char ch;
do
{
help();
printf("请选择一个操作:\n");
while
(scanf("%d", &num) != 1 || num < 0 || num > 6 )
{
printf("您的输入不正确,请重新输入:\n");
}
switch (num)
{
case 0:
printf("谢谢使用,再见!\n");
return 0;
case 1:
input(); break;
case 2:
chaxun(); break;
case 3:
paiming(); break;
case 4:
xiugai(); break;
case 5:
shanchu(); break;
case 6:
print(); break;
}
printf("本次任务结束,回主菜单或退出程序:(1or0)\n");
scanf(" %c", &ch);
}
while (ch == '1');
printf("谢谢使用!再见\n");
return 0;
}