关于循环链表问题,求高手修改下
/*利用链式存储结构存储学生的成绩信息,设计一个学生成绩管理系统,具有以下功能:(1)定义学生结构体类型struct Student,每个学生包括学号、姓名、3门功课(课程名自己定义)、总分。
(2)建立单向循环链表:输入若干学生的信息(当输入学生的学号为"end"时结束,要求自动计算总分),
并按输入的顺序建立单向循环链表;
(3)输出学生成绩信息:遍历单向循环链表,输出所有学生的完整信息到屏幕;
(4)查找指定学号的学生信息。如果查找成功,输出所有学生信息,否则输出失败。
(5)插入学生信息:将新的学生成绩信息插入到指定位置;
(6)删除学生信息:给出学生姓名,删除链表所有相同姓名的学生的信息(即姓名相同的结点);
(7)修改学生信息:给出学生学号,修改该生的三门课程成绩信息;
(8)按总分排序:在原来的单向循环链基础上按总分降序进行就地排列。即不能增加额外的空间开销*/
#include<iostream>
using namespace std;
typedef struct Student{
int number;
char name[20];
double c1;
double c2;
double c3;
double total;
struct Student *next;
}student,* stt;
void input(student *l);
double to(student *l1);
void show(student *l);
void search(student *l,int n);
void insert(student *l,int nu);
void del(student *l,char na[]);
void reset(student *l);
void paixu(student *l);
void main()
{
stt l=new student;
l=l->next;
input(l);
show(l);
int n;
cout<<"输入查找学号:"<<endl;
cin>>n;
search(l,n);
int nu;
cout<<"输入插入学号:"<<endl;
cin>>nu;
insert(l,nu);
char na[20];
cout<<"输入要删除学生姓名:"<<endl;
cin>>na;
del(l,na);
reset(l);
paixu(l);
}
void input(student *l)
{
stt l2=l;
cout<<"请输入学号 姓名 课程1成绩 课程2成绩 课程3成绩 "<<endl;
do
{
stt l1;
cin>>l1->number>>l1->name>>l1->c1>>l1->c2>>l1->c3;
if(l1->number==0)
{
cout<<"input end!";
exit(1);
}
l2->next=l1;
l1->next=l;
l2=l1;
cout<<endl;
}while(1);
}
double to(student *l1)
{
double t=l1->c1+l1->c2+l1->c3;
return t;
}
void show(student *l)
{
stt l1=l;
cout<<"学号 姓名 课程1成绩 课程2成绩 课程3成绩 总成绩"<<endl;
do
{
cout<<l1->number<<" "<<l1->name<<" "<<l1->c1<<" "<<l1->c2<<" "<<l1->c3;
cout<<" "<<to(l1)<<endl;
l1=l1->next;
}while(l1->next!=l);
}
void search(student *l,int n)
{
int num;
cout<<"请输入要查找的学号: ";
cin>>num;
stt l1=l;
do
{
if(num==l1->number)
{
cout<<l1->number<<" "<<l1->name<<" "<<l1->c1<<" "<<l1->c2<<" "<<l1->c3;
cout<<" "<<to(l1)<<endl;
}
else{cout<<"查无此人!";exit(1);}
l1=l1->next;
}while(l1!=l);
}
void insert(student *l,int nu)
{
stt l1=l;
cin>>nu;
do
{
l1=l1->next;
}while(l1->number!=nu);
student * x=new student;
cout<<"学号 姓名 课程1成绩 课程2成绩 课程3成绩 "<<endl;
cin>>x->number>>x->name>>x->c1>>x->c2>>x->c3;
x->next=l1->next;
l1->next=x;
}
void del(student *l,char na[])
{
stt l1=l;
stt l2=l1;
do{l2->next=l1;l1=l1->next;}while(l1->name!=na);
l2->next=l1->next;
}
void reset(student *l)
{
int num;
cout<<"输入要修改学生的学号: ";
cin>>num;
stt l1=l;
do
{
if(l1->number==num)
{
cout<<"课程1成绩 课程2成绩 课程3成绩:";
cin>>l1->c1>>l1->c2>>l1->c3;
}
l1=l1->next;
}while(l1!=l);
}
void paixu(student *l)
{
stt l1=l->next;
stt l2=l1->next;
do
{
do
{
if(l2->total>l1->total)
{
l->total=l1->total;
l1->total=l2->total;
l2->total=l->total;
}
l2=l2->next;
}while(l2!=l);
l1=l1->next;
}while(l1->next!=l);
}
输入的时候老是有问题,就是不晓得哪里错了,请高手指点下。感激不尽。