航班信息检索与查询(基数排序)

花了一周的时间搞数据结构课程设计,现在想起来也不咋样。

                   航班信息检索与查询系统源代码
在”StdAfx.h”文件中:

#if !defined(AFX_STDAFX_H__5D4863DA_370E_4BF2_ACA1_DEF9B55C465C__INCLUDED_)
#define AFX_STDAFX_H__5D4863DA_370E_4BF2_ACA1_DEF9B55C465C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif 
#define WIN32_LEAN_AND_MEAN		

#include 
#include 
#include"stdlib.h"
#include"cctype"

#endif 

在”StdAfx.cpp”文件中:

#include "stdafx.h"

在” 航班信息检索与查询.h”文件中:
void Menu();
void Menu2();
void Save();
int Bsearch(int l,int r);
void Read_Inf();
void Search_Inf(int f);
void Add_Inf();
void Del_Inf();
void Dis_Inf(int k,int f);
bool Choice(char *s);
void Get_Tiket();
void Exit();

#define Max 100005
#define Maxn 36
#define N 20

typedef struct Plan{
	char ID[10];
	char start[N];
	char end[N];
	int money;
	int space;
	char Tdate[N];
	char Tstart[N];
	char Tend[N];
	char name[N];
}PlanNode;

typedef struct Node{
	char key[10];
	PlanNode inf;
	int next;
}SLNode;

typedef struct{
    SLNode s[Max];
	int keyCnt;
	int PCnt;
}SList;

void Radix_Sort(SList &L);

在” 航班信息检索与查询.cpp”文件中:

#include "stdafx.h"
#include"航班信息检索与查询.h"

int x[Maxn],y[Maxn];
const int form[]={8,8,7,8,9,9,7,5,4};

SList L;

int main(int argc, char* argv[])
{
	system("color 6");
	L.PCnt=0;
	L.keyCnt=6;
	Read_Inf();
	Menu();
	return 0;
}

	
void Menu()
{
	char ch[]="                         ";
	printf("%s┍┅┅┅┅┅┅┅┅┅┅┅┅┒\n",ch);
	printf("%s│   航班信息检索与查询   │\n",ch);
	printf("%s┕┅┅┅┅┅┅┅┅┅┅┅┅┘\n",ch);
	printf("%s┍┅┅┅┅┅┅┅┅┅┅┅┅┒\n",ch);
	printf("%s│    1.查询航班信息      │\n",ch);
	printf("%s│    2.显示全部航班信息  │\n",ch);
	printf("%s│    3.添加航班信息      │\n",ch);
	printf("%s│    4.订票              │\n",ch);
	printf("%s│    5.退出              │\n",ch);
	printf("%s┕┅┅┅┅┅┅┅┅┅┅┅┅┘\n",ch);
	printf("请选择相应的功能:");
	scanf("%s",ch);
	while(Choice(ch)==0){
		printf("输入不合法,请重新输入:");
		scanf("%s",ch);
	}
	switch(ch[0]){
	case'1':Menu2();break;
	case'2':Dis_Inf(0,2);break;
	case'3':Add_Inf();break;
	case'4':Get_Tiket();break;
	case'5':Exit();break;
	default:printf("没有该选项!\n");break;
	}
	system("pause");
	system("cls");
	Menu();
}

void Menu2()
{
   	char ch[]="                         ";
	printf("%s┍┅┅┅┅┅┅┅┅┅┅┅┅┒\n",ch);
	printf("%s│    1.按航班号查询      │\n",ch);
	printf("%s│    2.按起点查询        │\n",ch);
	printf("%s│    3.按终点查询        │\n",ch);
	printf("%s│    4.按起飞时间查询    │\n",ch);
	printf("%s│    5.按到达时间查询    │\n",ch);
    printf("%s│    6.退出              │\n",ch);
	printf("%s┕┅┅┅┅┅┅┅┅┅┅┅┅┘\n",ch);
	printf("请选择相应的查询要求:");
	scanf("%s",ch);
	while(Choice(ch)==0){
		printf("输入不合法,请重新输入:");
		scanf("%s",ch);
	}
	switch(ch[0]){
	case'1':Bsearch(1,L.PCnt+1);break;
	case'2':Search_Inf(2);break;
	case'3':Search_Inf(3);break;
	case'4':Search_Inf(4);break;
	case'5':Search_Inf(5);break;
	case'6':goto loop;
	default:printf("没有该选项!\n");break;
	}
	printf("是否继续(y/n):");
	scanf("%s",ch);
	if(ch[0]=='y'||ch[0]=='Y') Menu2();
    loop:return;
 }

void print(char *s,int d)
{
	int k=form[d];
	int len=strlen(s);
	printf("%s",s);
	for(int i=0;i='1'&&s[0]<'10') return 1;
	return 0;
}

void Exit()
{
	Save();
	printf("谢谢使用!\n");
	exit(0);
}

void Distr_Radix(SLNode *s,int i)
{
	int j;
	memset(x,0,sizeof(x));
	for(int k=s[0].next;k;k=s[k].next)
	{
	    if(L.s[k].key[i]>'=A'&&L.s[k].key[i]<='Z') j=L.s[k].key[i]-'A'+10;
		else j=L.s[k].key[i]-'0';
		if(!x[j]) x[j]=k;
		else s[y[j]].next=k;
		y[j]=k;
	}
}

void Coll_Radix(SLNode *s)
{
	for(int j=0;x[j]==0;j++); 
	s[0].next=x[j];
	int tmp=y[j];
	while(j=0;--i)
	{
		Distr_Radix(L.s,i);
		Coll_Radix(L.s);
	}
    Get_Sql(L);
}


void Dis_Inf(int k,int flag=2)
{
	if(flag==1) {
		printf(" ┌────────────────────────────────────┐\n");
		printf(" │航班号│  班期  │ 起点 │ 终点 │起飞时间│到达时间│ 机型 │票价│票数│\n");
            printf("   ");	
			print(L.s[k].inf.ID,0);
			print(L.s[k].inf.Tdate,1);
			print(L.s[k].inf.start,2);
			print(L.s[k].inf.end,3);
			print(L.s[k].inf.Tstart,4);
			print(L.s[k].inf.Tend,5);
			print(L.s[k].inf.name,6);
			print1(L.s[k].inf.money,7);
			print1(L.s[k].inf.space,8);
			printf("\n");
		printf(" ┕────────────────────────────────────┘\n");
	}
	else{
        printf("┌────────────────────────────────────┐\n");
		printf("│航班号│  班期  │ 起点 │ 终点 │起飞时间│到达时间│ 机型 │票价│票数│\n");
		for(int i=1;i<=L.PCnt;i++){	
		printf("  ");
			print(L.s[i].inf.ID,0);
			print(L.s[i].inf.Tdate,1);
			print(L.s[i].inf.start,2);
			print(L.s[i].inf.end,3);
			print(L.s[i].inf.Tstart,4);
			print(L.s[i].inf.Tend,5);
			print(L.s[i].inf.name,6);
			print1(L.s[i].inf.money,7);
    		print1(L.s[i].inf.space,8);	
			printf("\n");
		}
       printf("┕────────────────────────────────────┘\n");
	}
}

void Search_Inf(int f)
{
	bool flag=0;
	int k;
	char st[N];
    if(f==2){
		printf("请输入起点站:");
		scanf("%s",st);
	}
	else if(f==3){
	    printf("请输入终点站:");
		scanf("%s",st);
	}
	else if(f==4){
		printf("请输入起飞时间:");
		scanf("%s",st);
	}
	else {
		printf("请输入到达时间:");
		scanf("%s",st);
	}

	for(int i=1;i<=L.PCnt;i++)
	{
	   k=0;
       if(f==2&&strcmp(st,L.s[i].inf.start)==0) k=i;
	   else if(f==3&&strcmp(st,L.s[i].inf.end)==0) k=i;
	   else if(f==4&&strcmp(st,L.s[i].inf.Tstart)==0) k=i;
	   else if(f==5&&strcmp(st,L.s[i].inf.Tend)==0) k=i;
	   if(k){
		   Dis_Inf(i,1);
		   flag=1;
	   }
	}
	if(!flag){printf("没有该数据\n");}
}

int Bsearch(int l,int r)
{
	int i=l,j=r;
	char st[20];
	printf("请输入航班编号(字母大写):");
	scanf("%s",st);
	while(i<=j){
		int mid=(i+j)>>1;
		if(strcmp(L.s[mid].key,st)==0){
			Dis_Inf(mid,1);
			return mid;
		}
		else if(strcmp(L.s[mid].key,st)>0) j=mid-1;
		else i=mid+1;
	}
	printf("没有符合条件的航班编号\n");
	return 0;
}

void Add_Inf()
{
   int n;
   int e=++L.PCnt;
   printf("请输入添加数据的个数:");
   scanf("%d",&n);
   if(n==0) return;
   printf("航班号  班期   起点  终点   起飞时间  到达时间  机型  票价  票数\n");
   while(n--){
	   scanf("%s %s",L.s[e].inf.ID,L.s[e].inf.Tdate); 
	   scanf("%s %s",L.s[e].inf.start,L.s[e].inf.end);
	   scanf("%s %s %s",L.s[e].inf.Tstart,L.s[e].inf.Tend,L.s[e].inf.name);
	   scanf("%d %d",&L.s[e].inf.money,&L.s[e].inf.space);
	   strcpy(L.s[e].key,L.s[e].inf.ID);
	   e++;
	   L.PCnt=e;
   }
   L.PCnt--;
   Radix_Sort(L);
   Save();
}

void Get_Tiket()
{
	int t,n;
	if(L.PCnt==0){
		printf("还没有数据\n");
		return;
	}
	t=Bsearch(1,L.PCnt);
	if(t){
		printf("请输入订票的个数:");
		scanf("%d",&n);
		if(n>L.s[t].inf.space){
			  printf("票额不足:");
		}
		else{
			printf("订票成功\n");
			L.s[t].inf.space-=n;
		}
	}
	else printf("没有该编号\n");
}


你可能感兴趣的:(C,数据结构,课程设计)