logo资料库

数据结构(C语言)实验报告_飞机订票系统.docx

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
《数据结构》课程设计报告 一、 订票系统 【需求分析】 本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以 及管理本系统的功能即能够修改航班信息。 具体分析如下: 1 、录入功能 可以录入航班信息,如录入航班号,到达城市,起飞时间,飞机票数,票价。 2 、查询功能 可以查询航班的各项信息,如可以查询起降时间,起飞抵达城市,航班票价,确定航班是否 满仓,航班号。 身份证号码, 所订航班的航班号以 3 、订票功能 可以订票并且记录下乘客的相关信息如记录下乘客姓名, 及所订的票数。 4 、退票功能 可以退票并且记录乘客的相关信息以及退票信息。 5 、修改功能 可以根据需要由管理员对航班信息进行修改更正。 【概要设计】 1、算法设计 :每个模块的算法设计说明如下: (1)录入模块: 查找单链表的链尾,在链尾插入一个“航班信息”的新结点。 (2)查询模块: 提供两种查方式:按航号和按航线查询, 1 代表按航号查询, 2 代表按航线查询。 0 则表示退 出查询。 顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。 (3)订票模块: 查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则 失败。 (4)退票模块: 输入要退票的乘客姓名以及证件号码, 查找乘客资料的链表中是否有这位乘客, 有则删去此 结点,并在空位加上 1,无则退票失败。 ( 5)修改模块: 输入密码,确认是否有权限对航班信息进行修改, 有则 在航班信息链表中查找要修改的结 点,进行修改,否则不能修改。 2. 存储结构设计: (1) 航班的信息:为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示 一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座
七个数据项: 航班号 起飞时间 达到时间 目的地 限座 空座 票价 单链表如下: h D1 D2 D3 每个结点包括数据域和指针域: 数据域 指针域 C 语言描述如下: typedef struct flightnode{ char air_num[10]; char start_time[15]; char end_time[15]; char end_place[30]; total; int int left; int price; struct flightnode *next; }flightnode; /* 航班号 */ /* 起飞时间 */ /* 到达时间 */ /* 目的地 */ /* 限座 */ /* 空座 */ /* 票价 */ /* 指向个结点 */ (2) 旅客的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素 包括姓名、证件号码、航班号和座位号四个数据项: 旅客姓名 证件号码 航班号 座位号 /* 定义乘客资料结点 */ 每个结点包括数据域和指针域: 数据域 指针域 C 语言描述如下: typedef struct passengernode{ char name[20]; char ID_num[20]; char air_num[20]; int struct passengernode*next; }passengernode; seat_num; 【详细设计】 本系统源程序如下: #include #include #define OK 1 #define ERROR 0
/* 定义航班信息结点 */ typedef struct flightnode{ char air_num[10]; char start_time[15]; char end_time[15]; char end_place[30]; int total; int left; int price; struct flightnode *next; }flightnode; typedef struct passengernode{ /* 定义乘客资料结点 */ char name[20]; char ID_num[20]; char air_num[20]; int struct passengernode*next; }passengernode; seat_num; /* 生成航班信息链表 */ /* 生成航班信息的头结点 */ InsertPassenger(passengernode**p,char *name,char flightnode *head_flight(); passengernode*head_passenger(); /* 生成乘客资料的头结点 */ int CreatFlight(flightnode **l); int CreatPassenger(passengernode**l); /* 生成乘客资料链表 */ int InsertFlight(flightnode **p,char *air_num,char *start_time,char *end_place,int price); /* 插入航班信息的结点 */ int /* 插入乘客资料的结点 */ flightnode *modefy_airline(flightnode *l,char *air_num); int BookTicket(flightnode*a,char 函数 */ int CancelTicket(passengernode *c,flightnode*l,char *name,char *ID_num); int SearchFlight(flightnode*head); int SearchPassenger(passengernode*head); /* 查询乘客信息函数 */ /* 查询航班信息函数 */ /* 退票函数 */ total,int left,int *ID_num,char *air_num,int seat_num); *air_num,passengernode *c,char *name,char *ID_num); /* 订票 /* 修改航班信息的函数 */ /*p==1 时进入主菜单, p==0 时退出系统 */ /* 主函数 */ void main() { int p=2; passengernode*cus=head_passenger(); flightnode *air=head_flight(); char name[20],air_num[20],ID_num[30],mima[20],ch; char t[20]="zhengjianze"; clrscr(); CreatFlight(&air); CreatPassenger(&cus); /* 管理员密码 */
welcome to the airline system!\n\n while(p==2) { printf("\n press the number:\n\n"); printf(" ================================================================\n\n"); printf(" printf(" printf(" printf(" printf(" ================================================================\n"); 1 -> Book Ticket 2 -> Cancel Ticket 3 -> Search Information 4 -> Exit \n\n"); \n"); pleasechoose the servesbelow and \n"); \n"); /* 进入订票功能 */ *-------------Booking Ticket-------------*\n"); switch(ch=getch()){ case'1':{printf("\n printf("Please input a airline number and press enter for OK:"); scanf("%s",air_num); printf("Please input your name and press enter for OK:"); scanf("%s",name); printf("Please input your ID number and press enter for OK:"); scanf("%s",ID_num); BookTicket(air,air_num,cus,name,ID_num);getch();} ;break; *-----------------------Canceling case'2':{printf(" printf("Please input the cancel name for booking ticket:"); scanf("%s",name);printf("Please input the ID for booking ticket:");scanf("%s",ID_num); CancelTicket(cus,air,name,ID_num); };break; Ticket--------------------*\n"); /* 进入退票功能 */ case'3':{printf("*---------------Search Information---------------------*\n"); /* 进入信息查询功能 */ printf(" printf(" printf(" printf("*------------------------------------------------------*\n"); -> flight information \n" ); -> passengerinformation\n "); \n"); 1 2 other -> exit /* 航班信息查询 */ flight information -----------------*\n"); if((ch=getch())=='1') {printf("*------------------ SearchFlight(air);} else if(ch=='2'){ printf("\n please input the key:");scanf("%s",mima); if(strcmp(mima,t)==0){printf("\n*---------------passenger SearchPassenger(cus);} else printf("sorry,the key is wrong");getch();}}break; /* 乘客资料查询 */ /* 输入管理员密码 */ information ---------------*\n\n");
/* 退出系统 */ case'4':{getch(); p=0;}break; } }} flightnode *head_flight() { flightnode *a; a=(flightnode *)malloc(sizeof(flightnode)); if(a==NULL) a->next=NULL; return a; } passengernode*head_passenger() { passengernode*c; c=(passengernode*)malloc(sizeof(passengernode)); if(c==NULL) c->next=NULL; return c; } int CreatFlight(flightnode **l) { flightnode *p=*l; int i=0; char *air_num[3]={"flight01","flight02","flight03"}; char *start_time[3]={" 08:00"," 12:00"," 16:30"}; char *end_place[3]={"Guangzhou","Shenzhen","Shantou"}; int total[3]={100,100,100}; int price[3]={300,200,250}; int left[3]={23,54,76}; for(i=0;i<3;i++) InsertFlight(&p,air_num[i],start_time[i],end_place[i],total[i],left[i],price[i]); return OK; } /* 初始化航班信息 */ /* 插入航班信息 */ int CreatPassenger(passengernode**l) {
passengernode*p=*l; int i=0; char *name[3]={"liming","Ximing","Chongliang"}; char *ID_num[3]={"3105006052","3105006054","3105006051"}; char *air_num[3]={"flight01","flight02","flight03"}; int seat_num[3]={12,5,8}; for(i=0;i<3;i++) InsertPassenger(&p,name[i],ID_num[i],air_num[i],seat_num[i]); return OK; } /* 初始化乘客资料 */ /* 插入乘客资料 */ total,int left,int **p,char *air_num,char *start_time,char *end_place,int int InsertFlight(flightnode price) {flightnode *q; q=(flightnode*)malloc(sizeof(flightnode)); strcpy(q->air_num,air_num); strcpy(q->start_time,start_time); strcpy(q->end_place,end_place);q->total=total; q->left=left; q->price=price; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; return OK; } /* 航班信息链的尾插法 */ int InsertPassenger(passengernode**p,char *name,char *ID_num,char *air_num,int seat_num) {passengernode *q; q=(passengernode*)malloc(sizeof(passengernode)); strcpy(q->name,name); strcpy(q->ID_num,ID_num); strcpy(q->air_num,air_num); q->seat_num=seat_num; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; return OK; } /* 乘客资料链表的尾插法 */ flightnode *modefy_airline(flightnode { flightnode *p; p=l->next; *l,char *air_num)
for(;p!=NULL;p=p->next) { if(strcmp(air_num,p->air_num)==0) { p->left++; return l; } printf("NO the airline!"); return 0; }} \nSuccessful for Booking ticket.\n\n Your flight: %s\n Your seat : %d ",p->air_num,(p->total-p->left+1));printf("\n check the airline number!");printf("\n *a,char *air_num,passengernode *c,char *name,char *ID_num) int BookTicket(flightnode {flightnode *p=a; passengernode*q=c->next; p=a->next; for(;q->next!=NULL;q=q->next); for(;p!=NULL;p=p->next) {if(strcmp(p->air_num,air_num)==0){ if(p->left>0) {printf(" number *----------------------------------------- InsertPassenger(&q,name,ID_num,air_num,p->total-p->left+1); p->left--; return OK;} else {printf("seat }/*if(strcmp)*/ printf("Sorry,there *----------------------------------------- the plane,please *"); is full");return 0;} } isn't *"); } int CancelTicket(passengernode *c,flightnode *l,char *name,char *ID_num) { passengernode*p,*pr; char air_num[20]; pr=c; p=pr->next; while(p!=NULL) { if(strcmp(p->name,name)==0&&strcmp(p->ID_num,ID_num)==0) { strcpy(air_num,p->air_num);
for canceling ticket."); l=modefy_airline(l,air_num); pr->next=p->next; p=pr->next; printf("successful printf("\n *-----------------------------------------------------------------*"); return OK; } pr=pr->next; p=pr->next; } printf("Sorry,there isn't the customer!"); printf("\n return ERROR; } *--------------------------------------------------------*"); Start_time int SearchFlight(flightnode *head) {flightnode *p=head->next; printf(" Flight for(;p!=NULL;p=p->next) { printf(" %s %-9s >price,p->total,p->left);printf("\n"); }printf(" return OK; } %-10s *----------------------------------------------------------*\n\n"); Arrival_place Price Total Left_seat\n\n"); %-7d%-6d %-6d\n",p->air_num,p->start_time,p->end_place,p- Seat_number\n\n"); ID Flight Name int SearchPassenger(passengernode*head) {struct passengernode*q=head->next; printf(" for(;q!=NULL;q=q->next) { printf("%-12s %-8s %-5s "); } printf("\n *----------------------------------------------------------*"); return OK;} %d\n",q->name,q->ID_num,q->air_num,q->seat_num);printf("\n
分享到:
收藏