花了一周的时间搞数据结构课程设计,现在想起来也不咋样。
航班信息检索与查询系统源代码
在”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");
}