600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 航空客运订票系统C语言程序设计 航空客运订票系统的程序算法?

航空客运订票系统C语言程序设计 航空客运订票系统的程序算法?

时间:2023-04-09 10:24:22

相关推荐

航空客运订票系统C语言程序设计 航空客运订票系统的程序算法?

你仔细想想,怎样让两个异地同时输入提交而不出现同号,怎样知道班机已经定满,就差不多了。下面的你就参考下吧#include

#include

#include

#include

#include

#include

#include //overflow

#define ok 1 typedef struct Yidingkehu{//单链表

char name[15];//已订票的客户姓名

int dingpiaoshu;//已订票数量

struct Yidingkehu *next1;//

}Yidingkehu,*Link;typedef struct Weidingkehu{//单链队

char name[15];//预订票的客户姓名

int yudingpiao;// 要订票数量

struct Weidingkehu *next2;//下一个链队结点指针

}Weidingkehu,*Qptr;

typedef struct {

Qptr front;//单链队头结点

Qptr rear;//单链队尾结点

}linkQueue; typedef struct Hangxian{//创建一个含有六个信息的结构体

char hangbanhao[15];//航班号-

char feijihao[15];//飞机号

int feixingriqi;//起飞时间

int chenkerenshu;//座位数

int yupiao;//余票

char zhongdianzhai[15];//降落城市

struct Hangxian *next;//指向下一个链结点的指针

struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针

struct Weidingkehu *yudingqueue;

}Hangxian,*Linklist;struct Hangxian *L=NULL;//

struct Yidingkehu *H;//为已订票客户链队来申请空间

linkQueue Q;//linkQueue类型的来申请空间Linklist InitLinklist();//01

int InsertLinklist(Linklist &head1);//02void hbhchaxun();//通过航班号查询

void mddchaxun();//通过目的地查询void lurugongneng();//初始化录入功能

void chaxungongnen();//查询功能

void dingpiaogongnen();//订票功能

void tuipiaogongnen();//退票功能void main()

{

H=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));

Q。

front=Q。rear=(Qptr)malloc(sizeof(Weidingkehu));

InitLinklist();

int n;

do{ //打印主界面

printf(" 欢迎使用航空客运订票系统

");

printf("

");

printf("==>1。

录入功能 ==

");

printf("==>2。 查询功能 ==

");

printf("==>3。 订票功能 ==

");

printf("==>4。

退票功能 ==

");

printf("==>5。 退出 ==

");

printf("

");

printf("请选择:");

scanf("%d",&n);printf("

");

switch(n)

{

case 1: lurugongneng();//录入功能

break;

case 2: chaxungongnen();//查询功能

break;

case 3: dingpiaogongnen();//订票功能

break;

case 4:tuipiaogongnen();//退票功能

break;

default :exit(0);//退出

}

}while(n==1||n==2||n==3||n==4);

}void lurugongneng()//初始化的单链表*********************************************************录入功能

{

int j=1,m;

do{

if(!InsertLinklist((Linklist) L)) //向其中加入航班信息

{

printf("内存已满

"); exit(OVERFLOW);

}//向链表中加一结点

printf("是否要输入下一个航线记录?

");

printf("是请输入1

");

printf("否请输入2

");

scanf("%d",&m); //在这里依靠人来决定是否输入下一条航线记

}while(m==1);

}Linklist InitLinklist(){//01

L=(Linklist)malloc(sizeof(Hangxian));

if(!L) exit(OVERFLOW);

L->next=NULL;//建立一个带有头结点的单链表

return (L);

}int InsertLinklist(Linklist &L)//02向航线链表添加新的结点

{

Linklist p;

//int m,n;

p=(Linklist)malloc(sizeof(Hangxian));//为一个新的结点分配空间

if(!p) exit(OVERFLOW);

printf("请依次输入下面几项内容:

");//这里的输入采用一个个单独输入,避免了乱赋值的现象

printf("航班号

");

gets(p->hangbanhao);//这里的二个gets主要是因为在回车键的输入,其中的第一个是来接收上次的回车

gets(p->hangbanhao);

printf("飞机号

");

gets(p->feijihao);

printf("终点站

");

gets(p->zhongdianzhai);

printf("飞行日期

");

scanf("%d",&p->feixingriqi);

printf("乘客总数

");

scanf("%d",&p->chenkerenshu);

printf("余票数

");

scanf("%d",&p->yupiao);

p->yiding=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));//为它申请空间

p->yudingqueue=Q。

front=Q。rear=(Qptr)malloc(sizeof(Weidingkehu));//为它申请空间

p->next=L->next;//

L->next=p;//这二句是链表中的头插法插入一个结点

return (ok);

}void chaxungongnen()//******************************************************************查询功能

{

int n;

printf(" 查 找 航 线 信 息

");

printf("

");

printf("==>1。

通过目的地查询 ==

");

printf("==>2。 通过航班号查询 ==

");

printf("

");

printf("请选择:");

scanf("%d",&n);

printf("

");//格式化

switch(n)

{

case 1:mddchaxun();

break;

case 2:hbhchaxun();

break;

default :break;

}

}void mddchaxun()//通过目的地查询

{

char c[15];

int m;

Linklist p=L;

printf("请输入要查询的目的地:");

gets(c);

gets(c);//原因同上

do{

p=p->next;

if(p)

{

m=strcmpi((*p)。

zhongdianzhai,c);//如果==的话则m=0;

if(m==0)

{

printf("航班信息:

");

printf("航班号:%s

",p->hangbanhao);

printf("飞机号:%s

",p->feijihao);

printf("飞行时间:周%d

",p->feixingriqi);

printf("余票量:%d

",p->yupiao);

}

}

else

{//如果不匹配的话就做

printf("对不起没有你要找的目的地:

"); m=0;

}

}while(m!=0);

}void hbhchaxun()//通过目的地查询

{

char c[15];

int m;

Linklist p=L;

printf("请输入要查询的航班号:");

gets(c); gets(c);printf("

");

do{

p=p->next;

if(p)

{

m=strcmpi((*p)。

hangbanhao,c);//如果==的话则m=0;这里的(*p)。与p->的作用是一样的

if(m==0)

{

printf("航班信息:

");

printf("航班号:%s

",p->hangbanhao);

printf("飞机号:%s

",p->feijihao);

printf("飞行时间:周%d

",p->feixingriqi);

printf("余票量:%d

",p->yupiao);

}

}

else

{//如果不匹配的话就做

printf("对不起没有你要找的航班号:

"); m=0;

}

}while(m!=0);

}void dingpiaogongnen()//***************************************************************订票功能

{

Linklist p=L;//Linklist类型的L来指向链表头

Yidingkehu *h=H,*h1;//Yidingkehu 定义客户的结点,方便插入与删除

linkQueue q=Q;//linkQueue类型的来 ,方便插入与删除

char c[15];

int m=1,piao,ydpiao=0,yd=0,n;//

gets(c);

printf("请输入终点站名:"); gets(c); printf("

");

p=L->next;

if(p) {

do{//查找一下,是否有这个航班

if(!p)

{

printf("对不起,没有你要找的航班:

");

goto loop1;

}

m=strcmpi(p->zhongdianzhai,c);

if(m==0)

{

printf("航班信息:

");

printf("航班号:%s

",p->hangbanhao);

printf("飞机号:%s

",p->feijihao);

printf("飞行时间:周%d

",p->feixingriqi);

printf("余票量:%d

",p->yupiao);}

else p=p->next;

}while(m!=0);

if(m==0)

{

do{

printf("

请输入你要订的票数:"); scanf("%d",&piao);

if(piaoyupiao)

{

h=p->yiding;

if(h)

{

h1=h;

h=h->next1;

h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));

printf("请输入你的名字:");

gets(h->name);gets(h->name);

h->dingpiaoshu=piao;

h->next1=h1->next1;

h1->next1=h;

p->yupiao=p->yupiao-piao;

printf("订票成功:

"); m=2;

}

}

else

{ printf("余票量:%d

",p->yupiao);

printf("对不起,余票 %d 张不足,不能完成订票

",p->yupiao);

printf(" 是否要重新订票?

");

printf("需要请输入1 否则请按2 预订请输入3 : ");

scanf("%d",&m);

printf("

");

if(m==3) goto loop3;

}

}while(m==1);

}

}

else if(!p) {

loop3: struct Weidingkehu *q3;

printf("对不起,该航班的票已售完

");

q。

front=p->yudingqueue;

if(q。front==q。rear) printf("没有人预订票,是否要预订?

");

else if(q。front!=q。rear) printf("已有人预订票,是否要预订?

");

printf("预订请输入1 否则输入2 : ");

scanf("%d",&n);

printf("

");

if(n==1)

{

q3=(Qptr)malloc(sizeof(Weidingkehu));

printf("请输入你的姓名"); gets(q3->name); gets(q3->name);//q3不能指向name???

printf("请输入订票数"); scanf("%d",&q3->yudingpiao);

q3->next2=NULL;

q。

rear->next2=q3;

q。rear=q3;

printf(" 你已经预订了 !

");

}

}

loop1:;

}void tuipiaogongnen()//***************************************************************退票功能

{

Linklist p=L;

Yidingkehu *h=H,*h1,*h2;

linkQueue q=Q;

char c[15],name1[15];

int m=1,piao,n;//

gets(c);

printf("请输入航班号:"); gets(c);

p=L;//->next;

if(p)

{

do{ //使用do while来查找是否有此航班

if(!p)

{//如果是到了表尾且没有匹配,goto至再输入航班号

printf("

对不起,没有你要找的航班:

");

goto loop1;

}

m=strcmpi(p->hangbanhao,c);//如果匹配的话,m=0

if(m==0)

{

printf("航班信息:

");

printf("航班号:%s

",p->hangbanhao);

printf("飞机号:%s

",p->feijihao);

printf("飞行时间:周%d

",p->feixingriqi);

printf("余票量:%d

",p->yupiao);}

else p=p->next;

}while(m!=0);

if(m==0)

{//如果找到了,就来给他退票

do{

h=p->yiding;

if(h)

{

printf("请输入你的姓名:");

gets(name1);//gets(name1);

printf("请输入你订的票数:");

scanf("%d",&piao);

printf("

");

h1=h;

h=h->next1;

if(strcmpi(h->name,name1)==0&&h->dingpiaoshu==piao)//如果名字和订的票数相等,则就给他取消订票

{

p->yupiao =h->dingpiaoshu;

h2=h;

h1->next1=h->next1;

free(h2);

printf("你取消订票成功:

");

struct Weidingkehu *q3;

q。

front=p->yudingqueue;

if(q。front==q。rear) {printf("没有人预订票:

"); goto loop1;}

if((p->yupiao)>=(q。

front->next2->yudingpiao))

{

h2=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));

strcpy(h2->name,q。

front->next2->name);

h2->dingpiaoshu=q。front->next2->yudingpiao;

n=p->yupiao-q。front->next2->yudingpiao;

p->yupiao=n;

q3=Q。

front->next2;//

q。front->next2=q3->next2;//这二语句来删除结点

if(q。rear==q3) q。rear=q。

front;

free(q3);//释放空间

printf("链队中删除成功

");

h2->next1=h->next1;

h->next1=h2;//为之插入进已订票客户链表中

printf("为预订的客户订票成功

");

}

else printf("余票数不够,不能为预订客户订票!

");

}

else

{ //如果没有找到,即系统中没有该人的信息,提示是否来重新查找

printf("对不起,该航班没有人订票或者是你没有订该航班的票

");

printf("是否要重新查找并取消订票?

");

printf("需要请输入1 否则请按2 ");

scanf("%d",&m);

printf("

");

}

}

}while(m==1);

}

}

loop1: ;

}。

全部

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。