📄 cwy.cpp
字号:
score *p1,*p2;
int number;
cout<<"输入要删除的学生的学号(输入0时退出):";
cin>>number;
getchar();
while(number!=0)/*输入学号为0时退出*/
{
if(head==NULL)
{
cout<<"\n没有任何学生资料!\n";
return(head);
}
p1=head;
while(number!=p1->number&&p1->next!=NULL)
/*p1指向的不是所要找的首结点,并且后面还有结点*/
{
p2=p1;p1=p1->next;
} /*p1后移一个结点*/
if(number==p1->number)
/*找到了*/
{
if(p1==head)
head=p1->next;
/*若p1指向的是首结点,把地二个结点地址赋予head*/
else
p2->next=p1->next;
/*否则将下一个结点地址 赋给前一结点地址*/
cout<<"删除:"<<number<<endl;
n=n-1;
}
else
cout<<"%d不存在此学生!\n",number;
/*找不到该结点*/
cout<<"输入要删除的学生的学号:";
cin>>number;
getchar();
}
cout<<"现在的学生数为:"<<n<<endl;
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
void printstudent(score *head)
/*函数printstudent,功能:显示学生成绩*/
{
score *p;
if(head==NULL)
{
cout<<"\n没有任何学生资料!\n";
}
else
{
cout<<"-----------------------------------------\n";
cout<<"|学号\t|姓名\t|语文\t|英语\t|数学\t|总分\n";
cout<<"-----------------------------------------\n";/*打印表格域*/
p=head;
do
{
cout<<p->number<<"\t"<<p->name<<"\t"<<p->yuwen<<"\t"<<p->yingyu<<"\t"<<p->shuxue<<"\t"<<p->sum<<endl;
cout<<"-----------------------------------------\n";/*打印表格域*/
p=p->next;
}while (p!=NULL);/*打印完成了*/
}
}
/*==============================================================================================*/
/*==============================================================================================*/
/*==============================================================================================*/
/*==============================================================================================*/
score *sortstudent(score *head)
/*定义排序函数。此函数带回一个指向链表头的指针*/
{
score *p,*max;
int i,j,x;
float fen;
char t[10];
if(head==NULL)
{
cout<<"\n没有任何学生资料,请先建立链表!\n";
return(head);
}/*链表为空*/
max=p=head;
for(i=0;i<80;i++)
cout<<"*";
cout<<"1按学生学号排序\t2按学生姓名排序\t3按语文成绩排序\n";
cout<<"4按英语成绩排序\t5按数学成绩排序\t6按总分查询\n";
for(i=0;i<80;i++)
cout<<"*";
cout<<"请选择操作:";
cin>>x;
getchar();
switch(x)
{case 1 :
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->number>p->number)
{
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与学号相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
}
}
max=head;p=head;/*重新使max,p指向链表头*/
}
printstudent(head);break;/*打印值排序后的链表内容*/
case 2 : for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(strcmp(max->name,p->name)>0)/*strcmp=>字符串比较函数*/
{
strcpy(t,max->name);/*strcpy=>字符串复制函数*/
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使得姓名字符串的值大者移到后面的结点中*/
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号值,使之与姓名相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与姓名相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与姓名相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使之与姓名相匹配*/
}
}
p=head;
max=head;
}
printstudent(head);
break;
case 3 : for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->yuwen>p->yuwen)
{
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使得语文成绩高者移到后面的结点中*/
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号,使之与语文成绩相匹配*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与语文成绩相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与语文成绩相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使之与语文成绩相匹配*/
}
}
p=head;
max=head;
}
printstudent(head);
break;
case 4 : for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->yingyu>p->yingyu)
{
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使得英语成绩高者移到后面的结点中*/
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号,使之与英语成绩相匹配*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与英语成绩相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与英语成绩相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使之与英语成绩相匹配*/
}
}
p=head;
max=head;
}
printstudent(head);
break;
case 5 : for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->shuxue>p->shuxue)
{
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中*/
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号,使之与数学成绩相匹配*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与数学成绩相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与数学成绩相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与数学成绩相匹配*/
}
}
p=head;
max=head;
}
printstudent(head);
break;
case 6 : for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
max=p;
p=p->next;
if(max->sum>p->sum)
{
fen=max->sum;
max->sum=p->sum;
p->shuxue=fen;
/*交换前后结点中的总成绩,使得总成绩高者移到后面的结点中*/
k=max->number;
max->number=p->number;
p->number=k;
/*交换前后结点中的学号,使之与总成绩相匹配*/
strcpy(t,max->name);
strcpy(max->name,p->name);
strcpy(p->name,t);
/*交换前后结点中的姓名,使之与总成绩相匹配*/
fen=max->yuwen;
max->yuwen=p->yuwen;
p->yuwen=fen;
/*交换前后结点中的语文成绩,使之与总成绩相匹配*/
fen=max->yingyu;
max->yingyu=p->yingyu;
p->yingyu=fen;
/*交换前后结点中的英语成绩,使之与总成绩相匹配*/
fen=max->shuxue;
max->shuxue=p->shuxue;
p->shuxue=fen;
/*交换前后结点中的英语成绩,使之与总成绩相匹配*/
}
}
p=head;
max=head;
}
printstudent(head);
break;
default :cout<<"输入错误,请重试! \n";
}
return (0);
}
/*==============================================================================================*/
/*==============================================================================================*/
int menustudent(int k)/*函数menustudent,功能:菜单选择界面*/
{
cout<<"************************************************"<<endl;
cout<<"1输入学生的资料\t\t\t2查询学生的成绩\n";
cout<<"3删除学生的资料\t\t\t4删除学生的成绩\n";
cout<<"5显示学生的成绩\t(按学号排序)\t6对成绩进行排序\n";
cout<<"************************************************"<<endl;
cin>>k;/*选择操作*/
return (k);
}
/*==============================================================================================*/
/*==============================================================================================*/
void main()
{
score *head=0,*stu=0;
while(1)
{
k=menustudent(k);
switch(k)
{
case 1: head=creatstudent();break;
case 2: head=searchstudent(head);break;
case 3: head=delstudent(head); break;
case 4: head=addstudent(head,stu);break;
case 5: printstudent(head); break;
case 6: sortstudent(head);break;
case 0: exit(0);
default: cout<<"输入错误,请重试!\n";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -