{ int p,q,i; slnode temp; p=l.sl[0].next; for(i=1;i<l.length;i++) { while(p<i) p=l.sl[p].next; q=l.sl[p].next; if(p!=i) { temp=l.sl[p]; l.sl[p]=l.sl[i]; l.sl[i]=temp; l.sl[i].next=p; } p=q; } } int binsearch(sllist l,keytype key[]) { int low,high,mid; low=1; high=l.length; while(low<=high) { mid=(low+high)/2; if(strcmp(key,l.sl[mid].keys)==0) return mid; else if(strcmp(key,l.sl[mid].keys)<0) high=mid-1; else low=mid+1; } return 0; } void seqsearch(sllist l,keytype key[],int i) { int j,k,m=0; printf("*************************************************************\n"); printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n"); for(j=1;j<=l.length;j++) { switch(i) { case 2:k=strcmp(key,l.sl[j].others.start);break; case 3:k=strcmp(key,l.sl[j].others.end);break; case 4:k=strcmp(key,l.sl[j].others.time1);break; case 5:k=strcmp(key,l.sl[j].others.time2);break; } if(k==0) { m=1; printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price); } } if(m==0) printf("* 无此航班信息,可能是输入错误! *\n"); printf("*************************************************************\n"); } void searchcon(sllist l) { keytype key[keylen]; int i=1,k; while(i>=1&&i<=5) { printf("\n ********************\n"); printf(" * 航班信息查询系统 *\n"); printf(" ********************\n"); printf(" * 1.航 班 号 *\n"); printf(" * 2.起 点 站 *\n"); printf(" * 3.终 点 站 *\n"); printf(" * 4.起飞时间 *\n"); printf(" * 5.到达时间 *\n"); printf(" * 0.退出系统 *\n"); printf(" ********************\n"); printf(" 请选择(0-5):"); scanf("%d",&i); printf("\n"); switch(i) { case 1:printf("输入要查询的航班号(字母要大写):"); scanf("%s",key); k=binsearch(l,key); printf("*************************************************************\n"); if(k==0) printf("* 无此航班信息,可能是输入错误! *\n"); else { printf("* 航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价 *\n"); printf("* %-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d *\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price); } printf("*************************************************************\n"); break; case 2:printf("输入要查询的航班起点站名:"); scanf("%s",key); seqsearch(l,key,i); break; case 3:printf("输入要查询的航班终点站名:"); scanf("%s",key); seqsearch(l,key,i); break; case 4:printf("输入要查询的航班起飞时间:"); scanf("%s",key); seqsearch(l,key,i); break; case 5:printf("输入要查询的航班到达时间:"); scanf("%s",key); seqsearch(l,key,i); break; case 0:printf("\n\n\n 再 见\n\n\n"); } } } void inputdata(sllist &l) { int i=++l.length; char yn='y'; while(yn=='y'||yn=='Y') { printf("航班号 起点站 终点站 航班期 起飞时间 到达时间 机型 票价\n"); scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price); ++i; getchar(); radixsort(l); arrange(l); printf("继续输入吗?y/n:"); scanf("%c",&yn); } l.length=i-1; } void main() { sllist l; l.keynum=6; l.length=0; inputdata(l); searchcon(l); } |