航空售票系统代码.docx

上传人:b****3 文档编号:4086605 上传时间:2023-05-06 格式:DOCX 页数:18 大小:31.30KB
下载 相关 举报
航空售票系统代码.docx_第1页
第1页 / 共18页
航空售票系统代码.docx_第2页
第2页 / 共18页
航空售票系统代码.docx_第3页
第3页 / 共18页
航空售票系统代码.docx_第4页
第4页 / 共18页
航空售票系统代码.docx_第5页
第5页 / 共18页
航空售票系统代码.docx_第6页
第6页 / 共18页
航空售票系统代码.docx_第7页
第7页 / 共18页
航空售票系统代码.docx_第8页
第8页 / 共18页
航空售票系统代码.docx_第9页
第9页 / 共18页
航空售票系统代码.docx_第10页
第10页 / 共18页
航空售票系统代码.docx_第11页
第11页 / 共18页
航空售票系统代码.docx_第12页
第12页 / 共18页
航空售票系统代码.docx_第13页
第13页 / 共18页
航空售票系统代码.docx_第14页
第14页 / 共18页
航空售票系统代码.docx_第15页
第15页 / 共18页
航空售票系统代码.docx_第16页
第16页 / 共18页
航空售票系统代码.docx_第17页
第17页 / 共18页
航空售票系统代码.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

航空售票系统代码.docx

《航空售票系统代码.docx》由会员分享,可在线阅读,更多相关《航空售票系统代码.docx(18页珍藏版)》请在冰点文库上搜索。

航空售票系统代码.docx

航空售票系统代码

 

本科生毕业论文(设计)

 

题目:

专业代码:

作者姓名:

学号:

单位:

指导教师:

2008年5月1日

 

目录

摘要3

ABSTRACT4

第一章绪论5

1.1研究背景与意义5

1.2主要工作5

第二章售票系统代码实现6

第三章结论16

参考文献17

附录18

 

摘要

 

Abstract

 

售票管理系统

作者:

丁宇专业:

信息与计算科学指导教师:

周书峰

第一章绪论

1.1研究背景与意义

 

1.2主要工作

 

第二章售票系统代码实现

售票系统代码

#include"stdio.h"

#include"stdlib.h"

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

#defineMAXSIZE2

#defineMAXCHAR20

typedefintStatus;

typedefstructClientNode{//已订票客户结点

charname[20];

charID[20];//客户的身份证号

intbooknum;

intgrade;

ClientNode*next;

}ClientNode;

typedefstruct{//已订票客户单链表(按ID有序)

ClientNode*client;

intlength;

}ClientLink;

typedefstructWClientNode{//侍订票客户结点

charname[20];

charID[20];

charphoneno[15];

intneednum;

WClientNode*next;

}WClientNode;

typedefstruct{//侍订票客户链队列

WClientNode*front;

WClientNode*rear;

}WClientQueue;

typedefstructflightnode{//航班结点

char*airline;

intnumber;

char*flight_no;

intweekday;

inttotal;

intremain;

flightnode*next;

ClientLinkclient;

WClientQueuenclient;

}flightnode;

typedefstruct{//航班顺序线性表

flightnode*flight;

intlength;

}SqFlight;

StatusInitList_Sq(SqFlight&LF){

//构造一个空的线性表LF

LF.flight=(flightnode*)malloc(sizeof(flightnode));

if(!

LF.flight)exit(ERROR);

LF.length=0;

LF.flight->next=NULL;

return(OK);

}//InitList_Sq

StatusInitList_CL(ClientLink&CL){//为客户链表建一个空链表

CL.client=(ClientNode*)malloc(sizeof(ClientNode));

if(!

CL.client)exit(ERROR);

CL.length=0;

CL.client->next=NULL;

return(OK);

}//InitList_CL

StatusInitList_WCQ(WClientQueue&WCQ){//为待票客户建一个空的队列

WCQ.front=WCQ.rear=(WClientNode*)malloc(sizeof(WClientNode));

if(!

WCQ.front)exit(ERROR);

WCQ.front->next=NULL;

return(OK);

}//InitList_WCQ

StatusInitFlightNode(SqFlight&LF){//对航线结点赋值并接到航班顺序表

flightnode*p,*q;

ClientLinkCL1;

InitList_CL(CL1);

WClientQueueWCQ1;

InitList_WCQ(WCQ1);

if(!

LF.flight){printf("无法找到指向航线结点的指针\n");exit(ERROR);}

LF.flight->airline="fuzhou--beijing";//头结点赋值

LF.flight->client=CL1;

LF.flight->flight_no="FU127";

LF.flight->nclient=WCQ1;

LF.flight->number=8427;

LF.flight->remain=200;

LF.flight->total=200;

LF.flight->weekday=1;

p=(flightnode*)malloc(sizeof(flightnode));

if(!

p){printf("申请不到航线结点\n");exit(ERROR);}

LF.flight->next=p;

ClientLinkCL2;

InitList_CL(CL2);

WClientQueueWCQ2;

InitList_WCQ(WCQ2);

p->airline="fuzhou--beijing";//结点1赋值

p->client=CL2;

p->flight_no="BU127";

p->nclient=WCQ2;

p->number=8757;

p->remain=180;

p->total=180;

p->weekday=5;

q=p;

p=NULL;

p=(flightnode*)malloc(sizeof(flightnode));

if(!

p){printf("申请不到航线结点\n");exit(ERROR);}

q->next=p;

ClientLinkCL3;

InitList_CL(CL3);

WClientQueueWCQ3;

InitList_WCQ(WCQ3);

p->airline="fuzhou--shanghai";//结点2赋值

p->client=CL3;

p->flight_no="FU786";

p->nclient=WCQ3;

p->number=3216;

p->remain=200;

p->total=200;

p->weekday=2;

q=p;

p=NULL;

p=(flightnode*)malloc(sizeof(flightnode));

if(!

p){printf("申请不到航线结点\n");exit(ERROR);}

q->next=p;

ClientLinkCL4;

InitList_CL(CL4);

WClientQueueWCQ4;

InitList_WCQ(WCQ4);

p->airline="fuzhou--shanghai";//结点3赋值,有四个航班,共4个结点

p->client=CL4;

p->flight_no="FU236";

p->nclient=WCQ4;

p->number=5712;

p->remain=230;

p->total=230;

p->weekday=6;

p->next=NULL;

return(OK);

}

Statuslookup(char*airline,SqFlightLF){//查询系统

//形参指针airline指向查询时输入的航线的首地址

//引用航班顺序线性表LF

flightnode*p=LF.flight;

char*h,*q=airline;

inti=0;

while(p){

h=p->airline;

while(*airline==*h){//查询航线是否与在LF的航班航线里有

if(*airline=='\0'||*h=='\0')

break;

airline++,h++;

}

if(*airline=='\0'&&*h=='\0')//若有该航线输出航线信息

{

i++;

printf("%s%s%d%d%d%d\n",

p->airline,p->flight_no,p->number,p->remain,p->total,p->weekday);

}

airline=q;

p=p->next;//航班结点指针后移

}

printf("有此航班%d条\n",i);

return(OK);

}

flightnode*search(intnumber,SqFlightLF){

//形参number查看时输入的航班号

//引用航班顺序线性表LF

flightnode*p=LF.flight;

while(p){

if(number==p->number)break;//查看的航班号是否在LF的航班号里有

p=p->next;

}

return(p);//返回指向该航班结点的指针

}

ClientNode*searchID(flightnode*p,char*ID){

//p是指向某个航班结点的指针

//ID是要查询的ID

ClientNode*h=p->client.client->next;

ClientNode*prior_h=NULL;//指向这个ID客户的前驱的指针

prior_h=p->client.client;

inti=0;

char*p_ID=ID;

char*h_ID=NULL;

while(h){

ID=p_ID;h_ID=h->ID;

while(*ID==*h_ID){//查询的ID在已订客户链表中是否有

if(*ID=='\0'||*h_ID=='\0')break;

ID++,h_ID++;

}

if(*ID=='\0'&&*h_ID=='\0')break;//若有结束循环

prior_h=prior_h->next;

h=h->next;

}

if(!

h)prior_h=NULL;

return(prior_h);//返回前驱指针

}

Statuswbook(SqFlightLF,flightnode*p){//待票客户队列

//引用航班顺序线性表LF

//p是指向某个航班结点的指针

WClientNode*h=NULL;

loop:

h=(WClientNode*)malloc(sizeof(WClientNode));

if(!

h)

gotoloop;

printf("请输入客户的名字:

\n");

scanf("%s",h->name);

printf("请输入客户的ID:

\n");

scanf("%s",h->ID);

printf("请输入客户的电话号码:

\n");

scanf("%s",h->phoneno);

printf("请输入客户需要的票数:

\n");

scanf("%d",&h->neednum);

h->next=NULL;

p->nclient.rear->next=h;

p->nclient.rear=h;

return(OK);

}

Statusbook(intnumber,SqFlightLF){

//形参number查看时输入的航班号

//引用航班顺序线性表LF

flightnode*p=NULL;

ClientNode*h=NULL;

p=search(number,LF);//调用search(),返回指向这个航班号的航班结点的指针

if(!

p){printf("无此航班号\n");return(ERROR);}

if(p->remain>=0){//余票量大于0

loop:

h=(ClientNode*)malloc(sizeof(ClientNode));

if(!

h)

gotoloop;

printf("请输入客户的定票数:

\n");

scanf("%d",&h->booknum);

if((h->booknum)<=(p->remain))

p->remain=p->remain-h->booknum;//余票量减去客户的订票量

else{//若余票量不足,询问客户是否要候补

inti=0;

printf("余票数:

%d\n",p->remain);

printf("\n");

printf("已无足够的票,您是否要候补?

\n");

printf("\n");

printf("1.要2.不要3.按余票定票\n");

scanf("%d",&i);

switch(i)

{

case1:

wbook(LF,p);//调用候补函数,实现候补

free(h);h=NULL;

break;

case2:

free(h);h=NULL;

break;

case3:

if(p->remain!

=0)

{

h->booknum=p->remain;

p->remain=0;

}

else{

printf("无法按余票购票,余票已为零\n");

return(ERROR);

}

break;

default:

printf("选择有误\n");

}

if(i==1){printf("候票成功\n");return(OK);}

elseif(i==2){printf("祝您下次购票成功\n");return(OK);}

}

printf("请输客户的姓名:

\n");

scanf("%s",h->name);

printf("请输入客户的ID:

\n");

scanf("%s",h->ID);

loop1:

{

printf("请输入客户的舱位等级1或2或3:

\n");

scanf("%d",&h->grade);

}

if(h->grade!

=3&&h->grade!

=2&&h->grade!

=1)

{

printf("无此等级舱位\n");

gotoloop1;

}

printf("购票成功\n");

h->next=p->client.client->next;

p->client.client->next=h;

}

return(OK);

}

Statusask_clien(flightnode*p,SqFlightLF){

//p是指向某个航班结点的指针

////引用航班顺序线性表LF

inti,j;

WClientNode*h=p->nclient.front->next;

WClientNode*prior_h=p->nclient.front;

if(!

h)printf("无人候票\n");

while(h){

i=0;j=0;

printf("余票数:

%d\n",p->remain);

printf("\n");

if(p->remain>=h->neednum)

printf("%s要不要购票?

\n",h->name);

else

printf("余票数不够%s的需要,您要不要购票?

\n",h->name);

loop:

{i=2;

printf("\n");

printf("1.要2.不要\n");

scanf("%d",&i);

}

switch(i)

{

case1:

printf("客户的名字:

%s\n",h->name);

printf("客户的ID:

%s\n",h->ID);

printf("客户需要的票数:

%d\n",h->neednum);

printf("\n");

book(p->number,LF);

if(!

prior_h->next->next)p->nclient.rear=prior_h;

prior_h->next=prior_h->next->next;

j=1;//j=1,表示prior_h将跳过一个队列结点

break;

case2:

printf("谢谢您对本航班的关注\n");

break;

default:

printf("选择有误\n");

gotoloop;

}

if(j==0)prior_h=prior_h->next;

h=h->next;

if(p->remain<=0)

printf("余票已被购尽!

!

\n");

}

return(OK);

}

Statusback_ticket(intnumber,SqFlightLF){

charID[20];

ClientNode*prior_h=NULL;

flightnode*p=NULL;

ClientNode*h=NULL;

p=search(number,LF);

if(!

p){printf("无此航班号\n");return(ERROR);}

printf("请输入退票客户的ID:

\n");

scanf("%s",ID);

prior_h=searchID(p,ID);

if(!

prior_h){printf("无此客户的ID~~~~\n");return(ERROR);}

else{

p->remain=p->remain+prior_h->next->booknum;

prior_h->next=prior_h->next->next;

}

printf("退票成功\n");

printf("\n");

printf("询问待票客户:

\n");

ask_clien(p,LF);

return(OK);

}

voidmenu()

{

printf(" 选择菜单\n");

printf("\n");

printf("1.查询航线2.客票预定3.办理退票4.查看客户资料5.退出\n");

}

StatusGetElem(SqFlightLF,intnumber)

{

//用e返回L中第i个数据的值,1<=i<=Listlength(L).

flightnode*p=NULL;

p=search(number,LF);

ClientNode*h=p->client.client->next;

if(!

h)printf("尚未有客户\n");

while(h){

printf("客户的名字:

%s\n",h->name);

printf("客户的ID:

%s\n",h->ID);

printf("客户票数:

%d\n",h->booknum);

h=h->next;

}

returnOK;

}//GetList;

voidmain(){

charairline[20];

intnumber=0;

intdrop_out=0;

inti;

SqFlightLF;

InitList_Sq(LF);

InitFlightNode(LF);

printf("航线有两条,输入格式:

\n");

printf("fuzhou--beijing\n");

printf("fuzhou--shanghai\n");

printf("航班号可以通过查看航线得知;\n");

printf("\n");

while(drop_out!

=-1)

{

menu();

printf("请选择菜单:

\n");

i=5;

scanf("%d",&i);

switch(i)

{

case1:

printf("请输入要查询的航线:

\n");

scanf("%s",airline);

printf("航线\n");

printf("起点--终点飞机号航班号总票数余票数飞行周日\n");

lookup(airline,LF);

break;

case2:

printf("请输入要预定的航班号:

\n");

scanf("%d",&number);

book(number,LF);

break;

case3:

printf("请输入要退票的航班号:

\n");

scanf("%d",&number);

back_ticket(number,LF);

break;

case4:

printf("查看客户资料,输入客户的航班号\n");

scanf("%d",&number);

GetElem(LF,number);

break;

case5:

drop_out=-1;

break;

default:

printf("选择有误\n");

}}}

第三章结论

 

参考文献

 

附录

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2