数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)(5)

2025-06-25

参考文献

[1]谭浩强 C程序设计(第四版) 北京:清华大学出版社,2006 [2]李春葆 数据结构教程 (第二版) 北京:清华大学出版社,2007

附录:程序源代码

#include #include #include #include

typedef struct flightnode{ char flight_num[10]; //航班号 char start_time[10]; //起飞时间 char end_time[10]; //抵达时间 char start_place[20];//起飞城市 char end_place[20]; //抵达城市 int left; //空座数 float price; //票价 float price_discount;//票价折扣 int isFull; //航班是否满仓 struct flightnode *next;//指向下一个结点 }flightnode;//航班结点

typedef struct passengernode{ char name[20]; //姓名 char ID_num[20]; //证件号 char flight_num[10];//航班号 int order_num; //订单号 int ticket_num; //订票数量 struct passengernode *next;//指向下一个结点 }passengernode;//客户结点 typedef struct passengerList { passengernode *head; passengernode *rear; }passengerList;

void init_flight(flightnode *&h)//目的是要建立一个以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表 { h=(flightnode *)malloc(sizeof(flightnode));//申请头结点的空间 if(h==NULL) exit(0); h->next=NULL;//将头结点h的指针域置为空 }

void init_passengerList(passengerList *&pList) { pList=(passengerList *)malloc(sizeof(passengerList));

21

pList->head=(passengernode *)malloc(sizeof(passengernode));//创建头结点 pList->rear=pList->head; pList->rear->order_num=0;//订单号从0开始计数 pList->head->next=NULL; }

void save_passenger(passengerList *PList) { FILE* fp = fopen(\ if(fp==NULL) return; passengernode *temp=PList->head->next; while(temp!=NULL) { fwrite(temp,sizeof(passengernode),1,fp); temp = temp->next; }; fclose(fp); }

void load_passenger(passengerList *PList) { FILE* fp = fopen(\ if(fp==NULL) return; passengernode *q; int n; while(!feof(fp)) { q=(passengernode *)malloc(sizeof(passengernode)); n =fread(q,sizeof(passengernode),1,fp); if(n!=1) break; PList->rear->next=q; PList->rear=q; } PList->rear->next=NULL; fclose(fp); }

void save_flight(flightnode *h) { FILE* fp = fopen(\ if(fp==NULL) return; flightnode *temp=h->next; while(temp!=NULL) { fwrite(temp,sizeof(flightnode),1,fp); temp = temp->next; }; fclose(fp); }

void load_flight(flightnode *&h)

22

{ flightnode *pt=h; FILE* fp = fopen(\ if(fp==NULL) return; flightnode *q; int n; while(!feof(fp)) { q=(flightnode *)malloc(sizeof(flightnode)); n=fread(q,sizeof(flightnode),1,fp); if(n!=1) break; pt->next=q; pt=q; } pt->next=NULL; fclose(fp); }

int find_same_flight(flightnode *h,char *flight_num) { flightnode *t=h->next,*p=h->next; int mark=0; printf(\航班号\起飞城市\抵达城市\起飞时间\抵达时间\价格\折扣\是否满仓\空座数\ while(t!=NULL && strcmp(t->flight_num,flight_num)!=0) t=t->next; while(p!=NULL){ if((strcmp(t->start_place,p->start_place)==0)&&(strcmp(t->end_place,p->end_place)== 0)&&(strcmp(t->flight_num,p->flight_num)!=0)) { printf(\p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_discount,p->isFull,p->left); mark=1; } p=p->next; } if(mark==0) { printf(\抱歉,没有可选的航班!\\n\ return 0; } return 1; }

void insert_flight(flightnode *&h,char* flight_num,char* start_place,char* end_place,char* start_time,char* end_time,int left,float price,float price_discount,int isFull) //在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中 { flightnode *q;//定义q为新增加的航班结点的指针的形参

23

flightnode *p=h; q=(flightnode *)malloc(sizeof(flightnode));//为q结点申请空间 strcpy(q->flight_num,flight_num); strcpy(q->start_place,start_place); strcpy(q->end_place,end_place); strcpy(q->start_time,start_time); strcpy(q->end_time,end_time); q->left=left; q->price=price; q->price_discount=price_discount; q->isFull=isFull; //以上是用strcpy函数将新增加航班的各种信息复制到q结点中 q->next=p->next;//将q结点的指针域置为空 p->next=q; p=p->next;//将指针后移 }

void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)

//客户订票后,将客户结点插入客户链表中,并修改相应的航班信息。 { flightnode *p=h->next; for(;p!=NULL;p=p->next) if(strcmp(p->flight_num,flight_num)==0) { p->left=p->left-ticket_num; if(p->left==0) p->isFull=1; } passengernode *q=(passengernode *)malloc(sizeof(passengernode));//新建结点,存放新的客户订单信息 strcpy(q->name,name); strcpy(q->ID_num,ID_num); strcpy(q->flight_num,flight_num); q->ticket_num=ticket_num; q->next=NULL; //将新订单连接到链表中 PList->rear->next=q; q->order_num=PList->rear->order_num+1;//生成订单号 PList->rear=q; }

void delete_flight(flightnode *&h,passengerList *&PList) //目的要按照某个航班号删除航班结点 { flightnode *p,*pr; passengernode *q,*qr; char flight_num[10]; int mark=1; qr=PList->head;//pr为顾客链表的头结点 q=qr->next;//用p作为中间指针对顾客链表中要删除的顾客结点进行查找

24

pr=h;//pr为航线链表的头结点 p=pr->next;//用p作为指针对航线链表中要删除的航班结点进行查找 printf(\请输入你要删除的航班号:\ scanf(\ while(p!=NULL)//要删除的航班存在,下面进行删除操作 { if(strcmp(flight_num,p->flight_num)==0) { pr->next=p->next;//移动指针找着要删除的航班结点 free(p);//删除操作 printf(\删除%s航班成功!\\n\ mark=0; p=NULL; } if(pr->next!=NULL) { pr=pr->next; p=pr->next; } } if(mark==1) printf(\无此航班,无法删除!\\n\ else { while(q!=NULL)//要删除的顾客存在,下面进行删除操作 { if(strcmp(flight_num,q->flight_num)==0) { qr->next=q->next;//移动指针找着要删除的顾客结点 free(q); q=NULL; } if(qr->next!=NULL) { qr=qr->next; q=qr->next; } } } }

int delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num) //目的是按照要退票的顾客的姓名查找该顾客结点,进行删除操作 { passengernode *p,*pr=PList->head;//pr指向顾客链表的头结点 p=pr->next; while(p!=NULL) { if(strcmp(name,p->name)==0&&strcmp(ID_num,p->ID_num)==0) { for(flightnode *f=h->next;f!=NULL;f=f->next)

25


数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:公开课2.0李时珍夜宿古寺

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219