不是很会写,只能写一个班级的。4个班级排序不出来。
#include<iostream>
using namespace std;
typedef struct student
{
char no[4];
char name[32];
int score[6];
int total;
}stu;
typedef struct node{
stu data;
struct node *prior,*next;
}DLink;
class list
{
private:
DLink *L;
public :
void createList();
void displayLink();
void insert();
void del();
void modify();
void order();
};
void list::createList() //创建链表
{
int i;
DLink *p,*q;
q=L;
p=(DLink *)malloc(sizeof(DLink));
if(!p)
{
cout<<"内存分配失败!\n";
exit(0);
}
cout<<"输入学生学号!\n";
cin>>"%s",p->data.no;
while(strcmp(p->data.no,"0000"))
{
cout<<"输入姓名:\n";
cin>>"%s",p->data.name;
cout<<"依次输入数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n";
for(i=0;i<6;i++)
cin>>"%d",&p->data.score[i];
p->data.total=p->data.score[0]+p->data.score[2];
q->next=p;
p->prior=q;
p->next=L;
L->prior=p;
q=p;
p=(DLink *)malloc(sizeof(DLink));
cout<<"输入学生学号:\n";
cin>>"%s",p->data.no;
}
}
void list::displayLink() //显示学生表信息
{
int i;
DLink *p;
p=L->next;
cout<<"学号 姓名 语文 数学 英语 总分\n";
while(p!=L)
{
cout<<" %s ",p->data.no;
cout<<" %s ",p->data.name;
for(i=0;i<3;i++)
cout<<"%d",p->data.score[i];
cout<<"%d\n",p->data.total;
p=p->next;
}
}
void list::insert() //在第i个位置插入学生信息
{
int i;
int j=1,k;
DLink *p,*q;
p=(DLink *)malloc(sizeof(DLink));
if(!p){
cout<<"内存分配失败!\n";
exit(0);
}
q=L;
while(j<i&&q->next!=L)
{
j++;
q=q->next;
}
if(q!=L)
{
cout<<"现在进行插入操作!输入学号:\n";
cin>>"%s",p->data.no;
cout<<"输入姓名:\n";
cin>>"%s",p->data.name;
cout<<"依次输入数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n";
for(k=0;k<3;k++)
cout<<"%d",&p->data.score[k];
p->data.total=p->data.score[0]+p->data.score[2];
p->next=q->next;
q->next->prior=p;
q->next=p;
p->prior=p;
}
}
void list::del() //删除操作
{
char a[8];
DLink *p,*q;
p=L->next;
cout<<"输入要删除的学生的姓名:";
cin>>"%s",a;
while(p!=L)
{
if(strcmp(a,p->data.name)==0)
{
p->prior->next=p->next;
p->next->prior=p->prior;
q=p;
p=p->next;
free(q);
}
else
p=p->next;
}
}
void list::modify() //修改学生成绩
{
int b[3],i;
DLink *p;
p=L->next;
char a[4];
cout<<"输入需要修改成绩的学生学号:\n";
cin>>("%s",a);
while(p!=L)
{
if(strcmp(p->data.no,a)==0){
cin>>("依次输入修改后的数电 模电 英语 C++ 毛概 体育6门课程的成绩:\n");
for(i=0;i<3;i++)
cin>>"%d",&b[i];
p->data.score[0]=b[0];
p->data.score[1]=b[1];
p->data.score[2]=b[2];
p->data.total=b[0]+b[1]+b[2];
break;
}
p=p->next;
}
if(p=L)
cout<<"!\n";
}
void list::order() //按学生总分降序排列
{
DLink *p,*q,*r;
p=L->next;
if(p!=L)
{
r=p->next;
p->next=L;
p=r;
while(p!=L)
{
r=p->next;
q=L;
while(q->next!=L&&q->next->data.total>p->data.total)
q=q->next;
p->next=q->next;
if(q->next!=L)q->next->prior=p;
q->next=p;
p->prior=q;
p=r;
}
}
}
void main()
{
list l;
int n;
cout<<"*******************************"<<endl;
cout<<"1.创建"<<endl;
cout<<"2.插入"<<endl;
cout<<"3.删除"<<endl;
cout<<"4.更改"<<endl;
cout<<"5.排序"<<endl;
cout<<"退出"<<endl;
cout<<"*******************************"<<endl;
cout<<"请输入您要选择的功能:";
cin>>n;
do{
switch(n)
{
case 1:
{
l.createList();
l.displayLink();
break;
}
case 2:
{
l.insert();
l.displayLink();
break;
}
case 3:
{
l.del();
l.displayLink();
break;
}
case 4:
{
l.modify();
l.displayLink();
break;
}
case 5:
{
l.order();
l.displayLink();
break;
}
default:
break;
}
}while(n>0&&n<6);
cout<<"退出循环"<<endl;
}