编译OK但是控制台无法正确输出
是在dev里面运行的
#include<iostream>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#define MAX_NUM_OF_KEY 5
#define RADIX 101
#define MAX_SPACE 1000
using namespace std;
struct SLCell{
int keys[MAX_NUM_OF_KEY];
char name[20];
int number;
int next;
};
struct SLList{
SLCell r[MAX_SPACE];
int keynum;
int recnum;
};
SLList*Creat()
{
SLList*l;
int i=1,flag=1;
l=new SLList;
l->keynum=5;
l->recnum=0;
while(flag)
{
cout<<"请输入考生考号,姓名,语文,数学,英语,综合"<<endl;
cin>>l->r[i].number;
cin>>l->r[i].name;
cin>>l->r[i].keys[1];
cin>>l->r[i].keys[2];
cin>>l->r[i].keys[3];
cin>>l->r[i].keys[4];
l->r[i].keys[0]=(l->r[i].keys[1]+l->r[i].keys[2]+l->r[i].keys[3]+l->r[i].keys[4]);
(l->recnum)++;
cout<<"继续输入考生成绩则输入1,否则输入0"<<endl;
cin>>flag;
i++;
}
}
void search(SLList*l)
{
char name[20];
int number;
int i;
int j;
cout<<"按考号查找输入0,按姓名查找输入1"<<endl;
cin>>j;
switch(j)
{
case 0:
cout<<"请输入考号"<<endl;
cin>>number;
for(i=1;i<=10;i++)
{
if(l->r[i].number==number)
{
cout<<"考号 名字 语文 数学 英语 综合"<<endl;
cout<<setw(2)<<l->r[i].number<<endl;
cout<<setw(10)<<l->r[i].name<<endl;
cout<<setw(10)<<l->r[i].keys[1]<<endl;
cout<<setw(10)<<l->r[i].keys[2]<<endl;
cout<<setw(10)<<l->r[i].keys[3]<<endl;
cout<<setw(10)<<l->r[i].keys[4]<<endl;
}
}
break;
case 1:
cout<<"请输入姓名"<<endl;
cin>>name;
for(i=1;i<=10;i++)
{
if(strcmp(l->r[i].name,name)==0)
{
cout<<"考号 姓名 语文 数学 英语 综合"<<endl;
cout<<setw(2)<<l->r[i].number<<endl;
cout<<setw(10)<<l->r[i].name<<endl;
cout<<setw(10)<<l->r[i].keys[1]<<endl;
cout<<setw(10)<<l->r[i].keys[2]<<endl;
cout<<setw(10)<<l->r[i].keys[3]<<endl;
cout<<setw(10)<<l->r[i].keys[4]<<endl;
}
}
break;
}
}
void Distribute(SLCell*r,int i,int*f,int*e)
{
int j,p;
for(j=RADIX-1;j>=0;--j)
f[j]=0;
for(p=r[0].next;p;p=r[p].next)
{
j=r[p].keys[i];
if(!f[j])
f[j]=p;
else
r[e[j]].next=p;
e[j]=p;
}
}
void Collect(SLCell*r,int i,int*f,int*e)
{
int j,t;
for(j=RADIX-1;!f[j];j--);
r[0].next=f[j];
t=e[j];
while(j>=0)
{
for(j--;j>0&&f[j];j--);
if(f[j]&&j>=0)
{
r[t].next=f[j];
t=e[j];
}
}
r[t].next=0;
}
void RadixSortChinese(SLList*l)
{
int f[101],e[101];
int i;
for(i=0;i<l->recnum;i++)
l->r[i].next=i+1;
l->r[l->recnum].next=0;
for(i=3;i>0;--i)
{
Distribute(l->r,i,f,e);
Collect(l->r,i,f,e);
}
}
void RadixSortMaths(SLList*l)
{
int f[101],e[101];
int i;
for(i=0;i<l->recnum;i++)
l->r[i].next=i+1;
l->r[l->recnum].next=i+1;
for(i=1;i<3;++i)
{
Distribute(l->r,i,f,e);
Collect(l->r,i,f,e);
}
}
void RadixsortEnglish(SLList*l)
{
int f[101],e[101];
int i;
for(i=0;i<l->recnum;i++)
l->r[i].next=i+1;
l->r[l->recnum].next=i+1;
for(i=1;i<4;++i)
{
Distribute(l->r,i,f,e);
Collect(l->r,i,f,e);
}
}
void Radixsortzonghe(SLList*l)
{
int f[101],e[101];
int i;
for(i=0;i<l->recnum;i++)
l->r[i].next=i+1;
l->r[l->recnum].next=i+1;
for(i=1;i<5;++i)
{
Distribute(l->r,i,f,e);
Collect(l->r,i,f,e);
}
}
void RadixSortTotal(SLList*l)
{
SLCell*r;
r=l->r;
int f[401],e[401];
int j,p,t;
for(j=400;j>=0;--j)
f[j]=0;
for(p=r[0].next;p;p=r[p].next)
{
j=r[p].keys[0];
if(!f[j])
f[j]=p;
else
r[e[j]].next=p;
e[j]=p;
}
for(j=400;!f[j];j--);
r[0].next=f[j];
t=e[j];
while(j>=0)
{
for(j--;j>0&&!f[j];j--);
if(f[j]&&j>=0)
{
r[t].next=f[j];
t=e[j];
}
}
r[t].next=0;
}
void ShowRank(SLList*l)
{
int rank=1,i;
cout<<"名次 考号 名字 总分 语文 数学 英语 综合"<<endl;
for(i=l->r[0].next;rank<=l->recnum;rank++)
{
cout<<setw(2)<<rank<<endl;
cout<<setw(10)<<l->r[i].number<<endl;
cout<<setw(10)<<l->r[i].name<<endl;
cout<<setw(10)<<l->r[i].keys[0]<<endl;
cout<<setw(10)<<l->r[i].keys[1]<<endl;
cout<<setw(10)<<l->r[i].keys[2]<<endl;
cout<<setw(10)<<l->r[i].keys[3]<<endl;
cout<<setw(10)<<l->r[i].keys[4]<<endl;
i=l->r[i].next;
}
}
void RadixSort(SLList*l)
{
int x,k=1;
while(k!='0')
{
cout<<"********************************"<<endl;
cout<<"***你可以选择一下几种操作: ***"<<endl;
cout<<"***1.总分相同时按语文成绩排序***"<<endl;
cout<<"***2.总分相同时按英语成绩排序***"<<endl;
cout<<"***3.总分相同时按数学成绩排序***"<<endl;
cout<<"***4.总分相同时按综合成绩排序***"<<endl;
cout<<"***5.退出 ***"<<endl;
cout<<"********************************"<<endl;
cout<<"请输入你选择的操作:"<<endl;
cin>>x;
switch(x)
{
case 1:
RadixSortChinese(l);
RadixSortTotal(l);
cout<<"考生成绩已按您的选择排序成功"<<endl;
ShowRank(l);
break;
case 2:
RadixSortMaths(l);
RadixSortTotal(l);
cout<<"考生成绩已按您的选择排序成功"<<endl;
ShowRank(l);
break;
case 3:
RadixsortEnglish(l);
RadixSortTotal(l);
cout<<"考生成绩已按您的选择排序成功"<<endl;
ShowRank(l);
break;
case 4:
Radixsortzonghe(l);
RadixSortTotal(l);
cout<<"考生成绩已按您的选择排序成功"<<endl;
ShowRank(l);
break;
case 5:
return ;
break;
}
system("pause");
system("cls");
}
}
int main()
{int x,falg=1;
SLList*L;
while(falg!=0){
cout<<"******欢迎使用多关键字排序系统*****\n"<<endl;
cout<<"***手动输入考生成绩进行排序请选***1\n"<<endl;
cout<<"********查询考生信息请选择********2\n"<<endl;
cout<<"********排序考生信息请选择********3\n"<<endl;
cout<<"*****显示排序后考生信息请选择*****4\n"<<endl;
cout<<"************退出请选择************5\n"<<endl;
cin>>x;
switch(x)
{case 1:
L=Creat();
break;
case 2:
search(L);
break;
case 3:
RadixSort(L);
break;
case 4:
ShowRank(L);
break;
case 5:
return 0;
break;
}
system("pause");
system("cls");
}
cout<<"按任意键继续操作"<<endl;
system("cls");
return 0;
}