航空客运订票系统数据结构课程设计报告1

合集下载

数据结构课程(航空订票系统)设计报告

数据结构课程(航空订票系统)设计报告

航空客运订票系统1、需求分析航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。

试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

【基本要求】(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);(2)作为示意系统,全部数据可以只放在内存中;(3)系统能实现的操作和功能如下:a、查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行、最近一天航班的日期和余票额;b、承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户班里订票手续,输出作为好;若已满或者余票少于订票额,则需要重新询问客户要求。

若需要,可等级排队侯补;c、承办退票业务:根据客户提供的情况(航班),为客户办理退票手续,然后查询该航班是否有人排队侯补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队侯补的客户。

(4)开始已初始化3条航线(如下),可按操作提示选择“显示所有航线”查看,客户信息与新航线信息可根据测试需要自行添加,具体情况请见下面测试结果。

【选做内容】a、输出所有航线信息;b、管理员系统:通过密码认证后可查看所有航班的订票情况,可根据需要增加新的航线。

2、概要设计由于“航线”可只用一条单链表记录,故采用全局变量,减少参数的传递。

1、定义“航线”类型ADT Lairline{数据对象:D={ai|ai∈航线链表集,i=1,2,3……,n,n>=0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3……,n }基本操作:Lairline search_line() //按航班号查找航班Lairline search_plant() //按飞机号查找航班Lairline search_day() //按飞行日期查找航班Lairline search_addr() //按航班终点查找航班void more() //设计者信息void guide() //主菜单界面void insert_line() //插入新航班void print_customer(airline *p) //显示航班客户信息void admin() //进入管理员操作系统void book() //订票系统void waited(airline *p) //排队订票系统void refund() //退票系统void search() //航班查询系统void InitLine() //初始化航线信息void printline() //显示所有航班信息} ADT Lairline2、主程序void main(){初始化;do{接受命令;处理命令(调用相应函数);}while(“命令”!=“退出”);}3、调用关系3、详细设计1、航线,客户的存储结构typedef struct customer{ //客户信息char name[20]; //客户姓名int num; //订票量int level; //舱位等级customer *next;}customer,*Lcustomer;typedef struct airline{ //航线信息char end_addr[20]; //航线终点char line_num[5]; //航班号char plant_num[8]; //飞机号int day; //飞行日期int total; //定员int left; //剩余票数customer *booked; //已定客户信息customer *wait; //排队等候订票信息airline *next;}airline,*Lairline;2、链表的各种操作Lairline search_line() //按航班号查找航班Lairline search_plant() //按飞机号查找航班Lairline search_day() //按飞行日期查找航班Lairline search_addr() //按航班终点查找航班void more() //设计者信息void guide() //主菜单界面void insert_line() //插入新航班void print_customer(airline *p) //显示航班客户信息void admin() //进入管理员操作系统void book() //订票系统void waited(airline *p) //排队订票系统void refund() //退票系统void search() //航班查询系统void InitLine() //初始化航线信息void printline() //显示所有航班信息部分操作的算法或伪代码Lairline search_line() //按航班号查找航班{char a[5];airline *p;p=L->next;PR("请输入航班号");SC("%s",a);for(;p;p=p->next)if(!strcmp(a,p->line_num)) break;return p;}void insert_line() //插入新航班{airline *p,*q;int flag=1;for(;flag;){q=(Lairline)malloc(sizeof(airline));PR("请输入航班号:");SC("%s",q->line_num);for(p=L;p->next;p=p->next)//判断航线插入位置if(strcmp(p->next->line_num,q->line_num)>=0)break;if(p->next&&strcmp(p->next->line_num,q->line_num)==0)//航线存在的情况{PR("航班已存在,请重新输入\n");continue;}按照提示输入新航线信息;PR("增加航班成功,是否继续增加\n继续(1)\n返回(0)");SC("%d",&flag);}}void admin() //进入管理员操作系统void admin() //进入管理员操作系统{int i,flag,tag;char a[20];airline *p;设置身份验证,只有密码正确才能进入,否则返回主程序;for(tag=1;tag;){PR("请选择操作\n查询航班订票情况(1)\n增加新航班(2)\n");SC("%d",&flag);if(flag==1){航线存在则显示航线客户信息,否则显示航线不存在;}else if(flag==2)insert_line();//增加新航线elsePR("操作错误,请按提示操作\n");PR("请选择操作\n继续(1)\n退回主菜单(0)\n");SC("%d",&tag);}guide();}void book() //订票系统{int i;int flag=0;airline *p;customer *cst,*c;PR("请输入查询航班的方式:\n");选择航线查找方式查找航线;if(p){航线存在,输入订票信息(包括客户姓名,订票量,票等级);if(cst->num<=p->left){票数满足,将客户信息添加到已定票客户名单;}else{余票不足,询问客户是否进行排队等候,若是,则将客户名单添加到排队订票名单;}}elsePR("没有该航班\n");guide();}void waited(airline *p) //排队订票系统{int flag;customer *q,*q0,*h;if(!p->wait) return;q=(customer *)malloc(sizeof(customer));q->level=0;q->num=123;strcpy(q->name,"00000");q->next=p->wait;h=q;for(;p->left>0&&q->next;){if(q->next->num<p->left){PR("%s,您正在排队定%d张票,现有票,是否定\n是(1)\n否(0)\n",q->next->name,q->next->num);SC("%d",&flag);if(flag){q0=q->next;q->next=q->next->next;q0->next=p->booked;p->booked=q0;p->left=p->left-q0->num;PR("排队订票成功\n\n");}}elseq=q->next;}p->wait=h->next;}void refund() //退票系统{int flag;char a[20];airline *p;customer *c,*c1;根据客户提供信息先找到航班(search_line())查找客户信息所在结点,若没有则返回主程序,若找到则删除节点,并询问排队客户是否订票(waited(p));}void search() //航班查询系统{int i;int flag=0;airline *p;PR("请输入查询航班的方式:\n");PR("航班号---->1\n");PR("飞机号---->2\n");PR("飞行日期-->3\n");PR("航班终点-->4\n");SC("%d",&i);for(;!flag;)switch(i){case 1: p=search_line();flag=1;break;case 2: p=search_plant();flag=1;break;case 3: p=search_day();flag=1;break;case 4: p=search_addr();flag-=1;break;default:PR("操作错误,请重新输入\n");break;}if(p){PR("终点站航班号飞机号飞行周日余票量\n");PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p-> plant_num,p->day,p->left);PR("是否订票(确定请按1)");SC("%d",&i);if(i==1)book();}elsePR("没有该航班\n");}void InitLine() //初始化航线信息{初始化航线,先建立3条航线方便测试;}3、主程序void main() //主函数{int flag=1;more();guide(); //操作指引界面InitLine(); //初始化航班信息do{switch(getchar()){case '1':printline();break;//显示所有航班case '2':search();break; //查找航班case '3':book();break; //订票case '4':refund();break; //退票case '5':admin();break; //管理员系统case '6':more();break; //设计者信息case '9':system("cls");guide();break;case '0':flag=0;break;}}while(flag);}4、函数调用关系4、调试分析1、在编程过程中,起先使用的是局部变量,每次调用函数都需要进行参数的传递,很麻烦,而且还容易出现错误;后意识到航线的链表只有一条,很多函数都需要对其数据进行修改,故航线信息采用了全局变量,方便数据的修改,减少了参数的传递。

数据结构航空客运订票系统实验报告

数据结构航空客运订票系统实验报告

一.实验目的1.掌握使用VC+吐机调试队列的基本方法;2.掌握队列的基本操作:初始化,出队列,入队列等运算在顺序和链式存储结构上的实现。

3.了解队列的抽象数据类型定义4.熟练掌握链队列的定义,熟练掌握链队列表的基本算法及时间性能二.实验内容航班订票系统航空客运订票业务包括:查询航线,客票预订,办理退票等。

设计一个航空客运订票系统。

三.实验步骤(可选)typedef struct pas{CString nam;int bok;intlev;}pas;typedef struct wai{CString nam;int ned;}wai;typedef struct lpa{ pas man;struct lpa *next;}lpa,*ppa;typedef struct qnode{//非队候队列wai ren;struct qnode* next;}qnode,*ptrq;typedef struct flyinfo{CString des;CString fli;CString air;CString day;int tol;int lef;ppa chk;ptrq pwa;int flg;}flyinfo;typedef struct{ptrq front;ptrq rear;}linkq;void initq(linkq &q){q. front=q .rear=new qnode;q. front->next=NULL;}void rudui(linkq & q,wai man) {ptrq p;p=new qnode;p->ren .nam=man .nam;p->ren .ned=man .ned;p->next=NULL;q. rear->next=p;q. rear=p;}void chudui(linkq & q,wai & man) {if(q. front==q. rear)return;ptrq p;p=q. front->next;man .nam=p->ren .nam;man .ned=p->ren .ned;q. front->next=p->next;if(p==q.rear)q. front=q. rear;delete p;}/*typedef struct {flyinfo *bas;int len;}slist;void initlist(slist & I){I. bas=(flyinfo*)malloc(sizeof(flyinfo)*10);I. len=0;}*/void initchk(ppa &lis){lis=new lpa;lis->next=NULL;}void addpas(ppa & lis,pas miz){ppa pl=new lpa;ppa p=lis;while(p!=NULL)p=p->next;pl->man=miz;p=pl;pl->next=NULL;}void dele(ppa & lis,pas miz) {ppa p,q;p=q=lis;for(;q!=NULL;){if(q->man.nam==miz. nam){p->next=q->next;delete p;break;}p=q;q=q->next;}}flyinfo fly[10];linkq q[10];//paiduippa lis[10];//订票客户链表int fg=0;int fnum=0;BOOL CMyDlg::OnlnitDialog(){CDialog::OnInitDialog();//initlist(fly);initchk(lis[0]);initq(q[0]);initchk(lis[1]);initq(q[1]);fly[1] ・des=" 上海";fly[1] .air="CV902";fly[1] ・day=" 星期二";fly[1] ・fli="XXDDD";fly[1] ・tol=300;fly[1]・l ef=5;fly[0] ・des=" 南京";fly[0] .air="CV902";fly[0] ・day=" 星期三";fly[0] ・fli="XXODD";fly[0] ・tol=300;fly[0] ・lef=5;wai p1,p2;pl .nam="jack";pl. ned=10;p2・nam="rose";p2・ned=30;rudui(q[0],p1);rudui(q[0],p2);rudui(q[1],p1);rudui(q[1],p2);pas pa1,pa2;pal ・bok=2;pa1 ・l ev=1;pa1 ・nam="leke";pa2・bok=2;pa2 ・lev=1;pa2 .nam="bake";addpas(lis[0],pa1);addpas(lis[1],pa2);〃m_des=fly[0] ・des;// Add "About ・・・" menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & OxFFFO) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {CString strAboutMenu;strAboutMenu ・LoadString(IDS_ABOUTBOX);if (!strAboutMenu ・lsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING , IDM_ABOUTBOX, strAboutMenu);}}void CMyDlg::OnBUTTONdingpiao(){fg=0;//biaozhi dingpiaoCAboutDlg dlg;dlg .DoModal();void CMyDlg::OnBUTTONnext() {if(fnum<=0){fnum++;m_air=fly[fnum] .air;m_des=fly[fnum] .des;m_flight=fly[fnum] .fli;m_total=fly[fnum] ・tol;m_left=fly[fnum] ・lef;m_day=fly[fnum] .day;UpdateData(false);}elseMessageBox("last!");} void CMyDlg::OnBUTTONup() { if(fnum>0){fnum--; m_air=fly[fnum] .air; m_des=fly[fnum] .des; m_f light=fly[fnum] .fli;m_total=fly[fnum] .tol; m_left=fly[fnum] .lef; m_day=fly[fnum] .day; UpdateData(false); } elseMessageBox("first!");}void CAboutDlg::OnOK(){UpdateData();pas pa;pa.l ev=m_levl;pa. bok=m_number;pa. nam=m_name;if(fg==0){addpas(lis[fnum],pa); MessageBox(‘ 订票成功!"); }elseif(fg==1){dele(lis[fnum],pa); MessageBox(‘ 退票成功!");} else{wai pd;pd・nam=m_name;pd・ned=m_number;rudui(q[fnum],pd);MessageBox('登记成功!"); }CDialog::OnOK();} void CMyDlg::OnButtonout(){fg=1;CAboutDlg dlg;dlg .DoModal();}void CMyDlg::OnBUTTONwait(){fg=2;CAboutDlg dlg;dig ・DoModal();五.实验中出现的问题、解决方法和心得体会1.通过本次实验,基本上了解了链队列的存储结构及其算法的实现,了解了链队列的特点以及链队列抽象出的数据类型的定义,基本上掌握了链队列基本算法如何实现,包括如何实现建立,查找,插入,删除,合并,销毁,数据排序等操作。

数据结构课程设计报告格式及要求(航空购票系统)

数据结构课程设计报告格式及要求(航空购票系统)

数据结构课程设计报告题目航空客运订票系统专业班级学号姓名指导教师成绩一、设计任务航空客运订票的业务包括查询(航线和客票预订的)信息、客票预订和办理退票等。

基本要求有:(1)系统必须存储的数据信息i.航班信息:飞机抵达城市、航班号、飞机号、起降时间、航班票价、票价折扣、总位置和剩余位置、已订票的客户名单。

ii.客户信息:客户姓名、证件号、座位号。

(2)系统能实现的功能i.承办订票业务:根据客户提出的要求(飞机低达城市、起降时间、订票数量)查询该航班信息(包括票价、折扣和剩余位置),若满足要求,则为客户办理订票手续,输出座位号。

ii.承办退票业务:根据客户提供的情况(航班号、订票数量),为客户办理退票手续。

(3)查询功能i.查询航线信息:根据飞机降落地点,输出下列信息:航班号、飞机号、起降时间、航班票价、票价折扣和剩余位置。

ii.查询客户预订信息:根据客户证件号,输出下列信息:航班号、飞机号和座位号。

提供的参考程序已经基本实现以上功能,但有很多不足之处,要求进行程序改进和完善。

具体任务有:(1)分析参考程序实现了哪些功能?指出存在的缺陷。

(2)从以下几方面完善程序:i.功能上的完善ii.程序结构上的完善iii.程序控制上的完善二、设计要点1、改变了订票系统主界面格式及背景颜色;2、增加了清屏功能,避免语句过多的结果;3、实现了订票与否;4、实现了只能输入正确航班;5、实现了选择性别只能选择男女;6、订票成功余票减少三、算法实现#include<stdio.h>#include <stdlib.h>#include<malloc.h>#include<string.h>#define OK 1#define ERROR 0typedef struct airline{ /* 飞机航班的结构定义*/ char air_num[8]; //航班号char plane_num[8];//飞机号char end_place[20];//抵达城市int total; //总位置int left; //剩余位置struct airline *next;}airline;/*顾客信息的结构定义*/typedef struct customer{char name[8]; //姓名char sex[8]; //性别char id[20]; //身份证char air_num[8]; //航班号int seat_num; //座位号struct customer *next; //指向下一个旅客}customer;/*创建航班链表*/airline *start_air(){airline *a;a=(airline*) malloc(sizeof(airline));if(a==NULL) printf("空间不足");return a;}/*创建顾客链表*/customer *start_cus(){customer *c;c=(customer*)malloc(sizeof(customer));if(c==NULL) printf("空间不足");return c;}/* 修改航班的空余座位信息*/airline *modefy_airline(airline *l,char *air_num){airline *p;p=l->next;for(;p!=NULL;p=p->next){if(strcmp(air_num,p->air_num)==0){p->left++;return l;}printf("NO the airline!");return 0;}}/* 增加航班信息*/int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int total,int left) {airline *q;q=(airline*)malloc(sizeof(airline));strcpy(q->air_num,air_num);strcpy(q->plane_num,plane_num);strcpy(q->end_place,end_place);q->total=total;q->left=left;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*增加某航班的顾客信息*/int insert_cus(customer **p,char *name,char *sex,char *id,char *air_num,int seat_num) {customer *q;q=(customer*)malloc(sizeof(customer));strcpy(q->name,name);strcpy(q->sex,sex);strcpy(q->id,id);strcpy(q->air_num,air_num);q->seat_num=seat_num;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*订票操作*/int book(airline *a,char *air_num,customer *c,char *name,char *sex,char *id){airline *p=a;customer *q=c->next;p=a->next;for(;p->next!=NULL;p=p->next){if(strcmp(p->air_num,air_num)==0)break;}while(q->next!=NULL){q=q->next;}{if(p->left>0){printf("您的座位号是%d",(p->total-p->left+1));printf("\n");insert_cus(&q,name,sex,id,air_num,p->total-p->left+1);--p->left;p=p->next;return OK;}else{printf("没您的座啦!");return 0;}}}/*取消订票信息操作*/int del_cus(customer *c,airline *l,char *name){customer *p,*pr;char air_num[8];pr=c;p=pr->next;while(p!=NULL){if(strcmp(p->name,name)==0||strcmp(p->air_num,air_num)==0){strcpy(air_num,p->air_num);l=modefy_airline(l,air_num);pr->next=p->next;p=pr->next;printf("取消订票成功!\n");return OK;}pr=pr->next;p=pr->next;}printf("没有这个人儿啊\n");return ERROR;}/*查找航班信息操作*/int search_air(airline *head){airline *p=head->next;printf("air_num plane_num end_place total left\n");for(;p!=NULL;p=p->next){printf("%s %-10s %-8s %-8d%-8d\n", p->air_num, p->plane_num,p->end_place,p->total,p->left);}return OK;}/*查找顾客信息操作*/int search_cus(customer *head){struct customer *q=head->next;printf(" name sex id air_num seat_num\n");for(;q!=NULL;q=q->next){printf("%-8s%-8s%-8s%-12s%-d\n",q->name,q->sex,q->id,q->air_num,q->seat_num);}return OK;}/*预先设置航班信息*/int creat_air(airline **l){airline *p=*l;int i=0;char *air_num[3]={"007af","008af","009af"};char *plane_num[3]={"航班1","航班2","航班3"};char *end_place[3]={"美国","德国","法国"};int total[3]={100,100,100};int left[3]={52,54,76};for(i=0;i<3;i++)insert_air(&p,air_num[i], plane_num[i], end_place[i],total[i], left[i]);return OK;}/*预先设置已订票的顾客信息*/int creat_cus(customer **l){customer *p=*l;int i=0;char *name[3]={"张三","李四","王五"};char *sex[8]={"nan","nan","nan"};char *id[20]={"123456","654321","741852"};char *air_num[3]={"007af","008af","009af"};int seat_num[3]={2,5,7};for(i=0;i<3;i++)insert_cus(&p,name[i],sex[i],id[i],air_num[i],seat_num[i]);return OK;}void main(){system("color 8E");int t=1;customer *cus=start_cus();airline *air=start_air();char name[8],air_num[8],ch,m;char sex[8],id[20];creat_air(&air);creat_cus(&cus);search_air(air);while(t==1){printf("\n\n\n");printf("*********************************\n");printf(" * 欢迎来订票哦,亲!*\n");printf(" * 订票----------1 *\n");printf(" * 退票----------2 *\n");printf(" * 查询----------3 *\n");printf(" * 退出----------4 *\n");printf("*********************************\n");scanf("%s",&ch);if(ch=='1'){system("cls");printf("亲,想乘坐哪辆航班嘞:");scanf("%s",air_num);if(strcmp(air_num,"007af")==0||strcmp(air_num,"008af")==0||strcmp(air_num,"009af")==0){printf("亲叫啥嘞:");scanf("%s",name);y1: printf("您的性别(nan or nv):");scanf("%s",sex);if(strcmp(sex,"nan")==0||strcmp(sex,"nv")==0){printf("您的id:");scanf("%s",id);}else {goto y1;}printf("*确认请输入Y否则输入N:");scanf("%s",&m);if(m=='Y'||m=='y'){printf("订票成功!");book(air,air_num,cus,name,sex,id);}else if(m=='n'||m=='N')printf("取消航班成功!\n");else{printf("您的输入有误\n");}} elseprintf("对不起,没有你要找的航班:\n\n");system("pause");}elseif(ch=='2'){system("cls");printf("您不想座哪个航班号啦:");scanf("%s",air);printf("您的姓名是啥来着:");scanf("%s",name);del_cus(cus,air,name);}elseif(ch=='3'){system("cls");search_air(air);printf("\n");search_cus(cus);}elseif(ch=='4'){t=0;}}}四、运行结果分析1.订票系统主界面2、订票成功操作3、订票航班输入错误操作4、选择男女操作5、选择订票是与否操作6、订票成功余票减少五、设计总结这次课程设计使用了C语言来编写程序,使我们的基础知识和数据结构的链表等知识得到了巩固,使我们在实践中得到了锻炼。

(完整word版)数据结构课程设计 航空客运订票系统分解

(完整word版)数据结构课程设计 航空客运订票系统分解

《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期2017.04.13目录1. 问题描述 (2)2. 系统设计 (2)3. 数据结构与算法描述 (4)4. 测试结果与分析 (6)5. 总结 (10)6. 参考文献 (10)附录程序源代码 (10)课程设计题目1. 问题描述基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本功能。

2. 系统设计2.1 设计目标(1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级;(3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等级,生成客户座位号;(5)可以办理退票业务;提供航班号和客户姓名,即可退票;(6)可以查看剩余票数;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

2.2 设计思想(1)运行环境(软硬件环境):DEV-C++;(2)输入的形式和输入值的范围:由航空公司输入航线情况并以单链表的形式存储在内存里面;(3)输出的形式描述:通过客户的输入,输出相应内容;(4)功能描述:用户可通过本系统实现对航班的查询、订票和退票功能。

2.3 系统模块划分2.3.1主函数输出菜单界面。

输入指令,显示,敲击回车开始工作。

2.3.2浏览航线信息编写void list()函数实现打印全部航线信息的功能,调用void display()函数实现打印struct airline链表中存储的航线的基本信息的功能。

2.3.2浏览已订票客户信息编写void prtlink()函数实现打印订票乘员名单域的客户名单信息的功能,调用find()函数查询并以指针形式返回。

航空订票系统(数据库课程设计)

航空订票系统(数据库课程设计)

航空订票系统(数据库课程设计)《数据库系统原理》课程设计报告航空订票系统学院:班级:学号:姓名:完成时间:目录一、需求分析--------------------------------------------------------------11、引言-------------------------------------------------------------------------------------------12、项目概述-------------------------------------------------------------------------------------23、需求规定-------------------------------------------------------------------------------------24、运行环境规定-------------------------------------------------------------------------------4二、视图设计--------------------------------------------------------------41、E-R 图----------------------------------------------------------------------------------------42、关系模式-------------------------------------------------------------------------------------53、物理数据模型描述-------------------------------------------------------------------------54、数据流程图----------------------------------------------------------------------------------6三、逻辑结构设计--------------------------------------------------------71、数据表描述----------------------------------------------------------------------------------72、表间联系-------------------------------------------------------------------------------------8四、系统设计--------------------------------------------------------------81、系统功能分析-------------------------------------------------------------------------------82、系统功能模块设计-------------------------------------------------------------------------9五、项目总结--------------------------------------------------------------101、本项目设计的优点-------------------------------------------------------------------------102、项目实现流程-------------------------------------------------------------------------------103、心得体会-------------------------------------------------------------------------------------10一、需求分析1、引言1.1编写目的(1)便于用户、分析人员和软件设计人员进行理解和交流(2)希望系统的外部项(旅客、旅行社、航空公司)均支持目标软件系统的确认。

数据结构课程设计---航空订票系统

数据结构课程设计---航空订票系统

数据结构课程设计报告1.航空订票系统1.需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。

采用链式存储结构。

系统能实现的操作和功能如下:(1)航班信息管理。

(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。

(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。

若需要,可登记排队候补。

(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

2.设计2.1 设计思想(1)数据结构设计typedefstruct keHu//客¨户信息{char nameofKeHu[20];//客户名字int numofPiao;//客¨户需要票的数量int type;//仓位等级1:头等Ì舱2:公务舱3:经济舱struct keHu* next;/下个客户};typedefstruct hangBan{int numofHangBan;//航班号char typeofHB[20];//航班机型¨char startFly[20];//起飞¦机场char endFly[20];//降¦落机场char DataofHB[20];//日期格式为(20120312星期¨一)char startTime[20];//起飞¦时间char endTime[20];//到达时À间float flyTime;//飞行时长float prise;//价格int largeNum;//成员定额int leaveNum;//余票数量keHu *custemer;//乘客信息名单keHu *orderofKeHu;//替补客户};typedefstruct Node{hangBan *exam;//航班信?息¡éint numofN;//航班数量struct Node *next;};(2)算法设计总体设计:在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能然后在main,h中设计用户界面功能部分。

C语言数据结构课程设计航空订票实验报告(含源代码)

C语言数据结构课程设计航空订票实验报告(含源代码)

数据结构课程设计实验报告设计题目__________________________________________________________________ 设计者__________________________________________________________________ 指导老师__________________________________________________________________ 班级___________________________________________________________________ 学号____________________________________________________________________一、设计要求任务通过此系统可以实现如下功能:1.录入航班信息:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据定)2.查询航班:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);3.订票:(订票情况可以存在一个数据文件中,结构自己设定);4.退票:可退票,退票后修改相关数据文件;5.修改航班信息6.退出程序客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;二、设计概要主界面选择操作项目1.录入航班信息通过单链表这种数据结构,设置了剩余票数,航班号,出发地点,到达地点,起飞日期,出发时间,到达时间,票价。

2.订票输入旅客的姓名,证件号,航班号,和订票张数。

程序中自动查询输入要定的航班号,如果没有则叫其重新输入,有则执行:票数足够则订票成功,票数不充足叫其选择其它航班。

此也采用单链表的数据结构。

航空订票系统C++数据结构课程设计报告

航空订票系统C++数据结构课程设计报告

一.需求分析:通过此系统可以实现如下功能:1.航班信息录入每个航班信息包括航班号、起飞时间、降落时间、起飞地点、将落地点、票价、折扣、剩余票量。

通过剩余票量可以确定该航班是否已满。

2.航班信息查询通过航班号或者起飞地点、降落地点查询所需要的航班信息。

3.订票输入姓名和所要订的航班的航班号订票。

4.退票输入姓名和所订的航班的航班号办理退票。

5.修改航班信息输入航班号修改该航班的起飞和降落时间以修改航班的起降时间。

6.退出退出的同时将信息写入文件。

二.总体设计:结构体:struct flight //航班信息{int a1; //航班号string a2; //起飞时间string a3; //降落时间char a4[10]; //起飞城市char a5[10]; //降落城市int a6; //价格int a7; //票价折扣int a8; //余票}fl[10];struct customer //客户信息{char name[10]; //定义字符型数组姓名name[10]int seat; //定义整型变量座位号seatint num; //定义整型变量航班号numchar no[18]; //证件号noint ps; //订票数psstring qfs; //起飞时间qfsstring jls; //降落时间jlschar qfd[10]; //起飞城市qfdchar jld[10]; //降落城市jldint pj; //票价pj}cu[200];使用的函数:void luru(); //声明录入函数void chaxun(); //声明查询函数void chaxun1(); //声明查询方式1函数 void chaxun2(); //声明按查询方式2函数 void dingpiao(); //声明订票函数 void tuipiao(); //声明退票函数 void xiugai(); //声明修改函数 void menu(); //声明主菜单函数 void duqu(); //声明文件读取函数 void tuichu(); //声明退出并保存函数通过各个函数的调用以实现航班信息录入,航班信息查询,订票,退票,修改航班信息。

数据结构课程设计之飞机订票系统

数据结构课程设计之飞机订票系统

青岛理工大学数据结构课程设计报告题目:飞机订票系统院(系):学生姓名:班级:学号:起迄日期:指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。

2.基本功能1,录入航班信息。

没个航班的信息包括:航班号,起飞、抵达城市,座位总数,剩余座位数。

数据由使用者输入。

数据存储在txt文件中,采用线性表的链式结构。

2,加载航班和客户信息。

可以自动加载保存在txt文件中的航班和客户的信息。

3,查询航班。

可以通过输入航班号,查询该航班的所有信息。

可以通过输入起飞抵达的城市,查询航班的信息。

4,订票。

客户的信息包括:姓名,证件号,所订票的航班号,座号。

用户输入要订票的航班号,如果该航班未满,则订票成功,并记录客户的信息。

如果该航班已满,则订票失败,输出所有未满的航班信息,供用户选择。

5,退票。

删除退票用户的订票信息,相应的航班的剩余票数增加1。

6,修改航班信息。

用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。

7,保存操作。

把当前的航班信息,和用户信息分别保存在txt文件中。

8,输出所有客户信息。

按一定的格式输出用户的姓名,证件号码,航班号,座号。

9,输出所有航班信息。

按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。

0,退出系统。

3.输入输出在控制台下,根据提示输入要完成功能的标号,然后在提示下选择性的输入航班号、起飞抵达地、证件号码,或者姓名等。

系统会根据用户的输入输出相应的航班信息或者用户信息。

二、概要设计1.设计思路:对于航班和用户,分别定义不同的数据结构,并且采用线性表的链式结构进行存储。

然后根据要完成的功能,分模块用函数实现。

所用到的算法主要有:链表的创建,增加,遍历,插入,删除。

2.数据结构设计:采用的逻辑结构是线性结构。

存储结构是链式结构。

航空客运订票系统数据结构课程设计报告1

航空客运订票系统数据结构课程设计报告1

信息科学和工程学院课程设计报告课题:航空客运订票系统目录1.课程设计内容 (3)1.1、课程设计目的 (3)1.2、课程设计题目 (3)1.3、课程设计内容 (3)1.4、实现提示 (3)2.需求分析 (4)3.概要设计 (4)3.1、系统结构图 (5)3.2、算法设计 (5)3.3、存储结构设计 (5)4.详细设计 (6)4.1、数据类型定义 (7)4.2、函数定义 (8)4.3、函数流程图 (8)4.4、程序的设计思想 (12)5.调试分析 (12)5.1、程序测试 (12)5.2 、时间复杂度分析 (13)5.3 、算法的改进设想 (13)6.问题分析及课程设计的心得体会 (14)7.使用手册 (15)8. 源程序 (15)9 参考资料 (22)一、课程设计内容1.1 课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的使用系统。

2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握使用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的使用。

3.学会将知识使用于实际的方法,提高分析和解决问题的能力,增加综合能力。

(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。

1.2课程设计题目1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名和所需数量)。

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。

数据结构 航班客运订票程序 课程设计报告

数据结构 航班客运订票程序 课程设计报告

数据结构航班客运订票程序课程设计报告合肥学院计算机科学与技术系课程设计报告2009,2010学年第二学期课程数据结构与算法课程设计名称航班客运订票程序学生姓名学号专业班级指导教师李红沈亦军2010年6月题目:(航班客运订票系统)通过此程序要求实现如下功能:(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);(3)可以输入起飞抵达城市,查询飞机航班情况;(4)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;(5)退票:可退票,退票后修改相关数据文件;(6)客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

(7)修改航班信息:当航班信息改变可以修改航班数据文件。

一、问题分析和任务定义航班客运订票系统是航空公司最常用的系统之一。

它通常是为了解决公司相关信息的录入以及客户对有关信息的查询等问题。

因此,为了它的实用性,该程序应包括以下以下功能:录入:可以录入航班的必要信息,如:航班号、起飞城市、抵达城市、起飞抵达时间等信息;查询航班:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);查询城市:可以输入起飞抵达城市,查询飞机航班情况;订票:可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件。

在该程序中,解决问题的关键在于航班信息以及订票信息的数据结构该如何设置。

在录入过程中,需要输入的时间、城市、航班号皆是字符型,剩余票量、票价是整型;查询时,输入城市、航班号也是字符型;订票时,需要输入的航班号、姓名、身份证号以及设置的密码都是字符型,而订票量是整型;退票时,输入的航班号、姓名以及设置的密码同样都是字符型。

数据结构航空订票系统课程设计报告

数据结构航空订票系统课程设计报告

摘要之马矢奏春创作飞机在现代的生活中饰演者非常重要的角色.它能够快速的把人们送到自己想要去的处所, 既快速, 又方便.所以现在坐飞机时很普遍的.可是都到机场去买票浪费时间, 因此, 航空订票系统应运而生.有了航空订票系统, 用户可以在该系统进行飞机票的查询, 订票, 退票等把持.方便了年夜家关键词航空订票系统、查询、订票、退票目录摘要 (I)1 需求分析 (1)1.1 需求概述 (1)1.2 需求环境 (1)1.3 功能描述 (1)2 概要设计 (2)2.1 法式功能模块 (2)2.2 法式流程图 (2)2.3 课程设计的思想 (2)3 详细设计 (3)3.1 法式初始化 (3)3.1.1代码功能 (3)3.1.2 功能实现代码 (3)3.2 查询航班信息 (5)3.2.1代码功能 (5)3.2.3 功能实现代码 (6)3.3 订票模块 (7)3.3.1 代码功能 (7)3.3.2 功能实现代码 (7)4 测试与运行 (13)5结束语 (16)6 参考文献 (17)7附录 (18)1 需求分析1.1 需求概述航线管理.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量客户管理.有关订票的客房信息(包括姓名、订票量、舱位品级(1,2和3)以及等替补的客房名单(包括姓名、所需标量).系统实现主要把持把持和功能.系统实现的主要把持规程和功能如下:①查询航线.根据旅客提出的终点站名输出下列信息:航班号、飞机号、飞行日期、余标额.②承办订票业务.根据客户提出的要求(航班号、订票数额)查询该航班票额情况, 若有余票, 则为客户规画订票手续, 输出座位号;若已满或者余票少于订票额, 则需要重新询问客户要求;若需要, 可等待排队侯补③承办退票业务.根据客户提供的情况(日期、航班), 为客户输退票手续,然后查询该航班是否有人排队候补, 首先询问排在第一的客户, 若所退票额满足该客户的要求, 则为其订票手续, 否则依次询问其他排队候补的客户.1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:①硬件要求:一台计算机.②软件配置:WINDOWS7/V.1.3 功能描述本次课程设计是航空订票系统主要是由查询航班信息, 订票还有退票三年夜主要功能.除此之外, 还有系统的界面等等.2.1 法式功能模块由需求分析知, 本次课程设计是航空订票系统其主要由三年夜模块构成, 即查询模块(这部份由我负责), 订票系统模块和退票系统模块构成.2.2 法式流程图该法式开始运行后进如航空订票系统用户可以进行航班信息的查询, 订票和退票把持.2.3 课程设计的思想由需求分析知道需要实现几个功能界说了两个结构体.这两个结构体分别用来暗示顾客信息和航班信息.有结构体可以知道一些基本信息, 比如顾客的姓名, 定的机票和航班的时间等等信息.使得实验代码的可读性年夜年夜增强.3.1 法式初始化代码功能这一块还是由我负责.我初始化了五个航班的基本信息.在初始化法式中, 主要是航班的基本信息.比如航班号, 动身时间和剩下的机票数目等等基本信息.通过运用指针和链表来进行对初始化信息的书写.在初始化时将三个重点的信息分别初始化为:①广州航班号005 飞机号PZH113 机票数120②天津航班号004 飞机号PZH121 机票数120③北京航班号003 飞机号PZH133 机票数120④上海航班号002 飞机号PZH132 机票数120⑤成都航班号001 飞机号PZH122 机票数1203.1.2 功能实现代码void InitLine() //初始化航线信息{airline *p,*q; //航线L=(airline *)malloc(sizeof(airline));L->booked=NULL;L->wait=NULL;L->next=NULL;strcpy(L->end_addr,"00000000"); //终点站strcpy(L->line_num,"000"); //航班号strcpy(L->plant_num,"0000000"); //飞机号L->day=L->left=L->total=0;q=L;p=(airline *)malloc(sizeof(airline));//广州p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"广州");strcpy(p->line_num,"005");strcpy(p->plant_num,"PZH113");p->day=5;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));//天津p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"天津");strcpy(p->line_num,"004");strcpy(p->plant_num,"PZH121");p->day=4;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));//北京p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"北京");strcpy(p->line_num,"003");strcpy(p->plant_num,"PZH133");p->day=1;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));//上海p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"上海");strcpy(p->line_num,"002");strcpy(p->plant_num,"PZH132");p->day=2;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));//成都p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"成都");strcpy(p->line_num,"001");strcpy(p->plant_num,"PZH122");p->day=3;p->left=120;p->total=120;p->next=q->next;q->next=p;}3.2 查询航班信息代码功能此模块主要由我负责, 在此模块我实现了查询航班的功能.当进入查询功能时, 通过输入数字用户可以查询航班的基本信息, 比如目的地, 剩下的机票数目, 动身的时间等等基本信息.如果输入的数字在界面中没有显示则会提示用户没有这次航班.在这个模块我使用了个switch语句来实现对查询方式的选择.通过判断输入的数字进入到相对应的查询方式.如果输入的信息有误的话, 系统将会提示用户没有这次航班, 需要重新输入.在该模块用户可以进行查询功能.用户根据提示可以依照航班号、飞机号、飞行日期和航班重点来查询航班的基本信息.这些基本信息包括了飞行航班号、飞机号、剩余票量和惩罚日期等等.在该模块用户必需根据提示进行输入, 否则系统会提示输入有误, 需要重新输入.3.2.3 功能实现代码void search() //航班查询系统{int i;int flag=0;airline *p;PR("请输入查询航班的方式:\n");PR("航班号---->1\n");PR("飞机号---->2\n");PR("飞行日期-->3\n");PR("航班终点-->4\n");SC("%d",&i);for(;!flag;)switch(i) //switch语句来进行航班的查询方式{case 1: p=search_line();flag=1;break;case 2: p=search_plant();flag=1;break;case 3: p=search_day();flag=1;break;case 4: p=search_addr();flag-=1;break;default:PR("把持毛病,请重新输入\n");break;}if(p){PR("终点站航班号飞机号飞行周日余票量\n");PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left);PR("是否订票(确定请按1)");SC("%d",&i);if(i==1)book();}elsePR("没有该航班\n");}3.3 订票模块3.3.1 代码功能在此模块可以根据提示可以从航班号, 飞行日期和终点站来进行订票.如果订票时余票缺乏所需要的票的数目时就可以进行排队购票选择.3.3.2 功能实现代码void book() //订票系统{int i;int flag=0;airline *p;customer *cst,*c;PR("请输入查询航班的方式:\n");PR("航班号--->1\n");PR("终点站--->2\n");PR("飞行日期->3\n");for(;!flag;){SC("%d",&i);switch(i) //运用一个switch语句进行航班查询{case 1: p=search_line();flag=1;break;case 2: p=search_addr();flag=1;break;case 3: p=search_day();flag=1;break;default:PR("把持毛病,请重新输入\n");break;}}if(p){PR("终点站航班号飞机号飞行周日余票量\n");PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left);cst=(customer *)malloc(sizeof(customer));PR("请输入订票数量:");SC("%d",&cst->num);PR("请输入舱位品级(1/2/3)");SC("%d",&cst->level);PR("请输入您的名字");SC("%s",cst->name);if(cst->num<=p->left){cst->next=p->booked;p->booked=cst;p->left=p->left-cst->num;PR("订票胜利, 座位号为%d~%d\n",p->total-p->left-cst->num+1,p->total-p->left);}else//当需要的飘得数量年夜于剩余的票数的时候进行询问是否进行排队购票{PR("余票缺乏, 是否排队等待\n是(y)\n否(n)\n");SC("%d",&flag);if(flag){if(!p->wait){cst->next=p->wait;p->wait=cst;}else{c=p->wait;for(;c->next;c=c->next);cst->next=c->next;c->next=cst;}}}}elsePR("没有该航班\n");guide();}排队订票时的排队订票系统:void waited(airline *p) //排队订票系统{int flag;customer *q,*q0,*h;if(!p->wait) return;q=(customer *)malloc(sizeof(customer));q->level=0;q->num=123;strcpy(q->name,"00000");q->next=p->wait;h=q;for(;p->left>0&&q->next;){if(q->next->num<p->left){PR("%s, 您正在排队定%d张票, 现有票, 是否定\n是(y)\n否(n)\n",q->next->name,q->next->num);SC("%d",&flag);if(flag){q0=q->next;q->next=q->next->next;q0->next=p->booked;p->booked=q0;p->left=p->left-q0->num;PR("排队订票胜利\n\n");}elseq=q->next;}elseq=q->next;}p->wait=h->next;}在此模块, 用户可以根据系统的提示进行退票把持.当进行退票把持时需要进行信息的核对, 如果正确, 打印出信息, 再询问是否退票.void refund() //退票系统{int flag;char a[20];airline *p;customer *c,*c1;p=search_line();c=p->booked;if(!p){PR("没有该航班\n\n");guide();return;}PR("请输入您的姓名");SC("%s",a);if(!p->booked->name) //进行信息的查找判断是否有用户的信息{PR("对不起, 没有找到您的信息\n\n");guide();return ;}if(!strcmp(a,p->booked->name)) //核对完信息后输出要退票乘客的信息{PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",p->booked->name,p->end_addr,p->booked->num);PR("确认要退票\n是(y)\n否(n)\n");scanf("%d",&flag);if(flag){p->booked=p->booked->next;p->left=p->left+c->num;free(c);PR("退票胜利\n\n");waited(p);guide();}}else{for(;c->next;c=c->next)if(!strcmp(a,c->next->name))break;if(!c->next){PR("对不起, 没有找到您的信息\n\n");guide();return ;}else{PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",c->next->name,p->end_addr,c->next->num);PR("确认要退票?\n是(y)\n否(n)\n");//询问是否退票scanf("%d",&flag);if(flag){c1=c->next;c->next=c->next->next;p->left=p->left+c1->num;free(c1);PR("退票胜利\n\n");waited(p);guide();}}}}以上三个模块是改法式最主要的功能实现的代码.初度之外还有部份其他显示模块.4 测试与运行由需求分析可知该法式运行后实现功能后的结果.此处是功能界面, 用户可以依照提示进行把持进行查询功能时:进行查询模块式会显示出查询方式, 依照查询方式可以准确的获得航班的信息进行订票模块时:在此处模块, 订票可以根据提示进行购票, 可以订多张票, 输入舱位的品级和订票人名字排队订票系统:如果该航班剩余的票量小于所要购买的数量, 则会提示是否进行排队购票.退票系统:在该模块, 进行退票把持时, 系统会进行信息的核对, 如果正确, 将会显示客户的信息.然后提示是否退票.5 结束语此次数据结构课程设计为航空订票系统.在写法式的时候还是遇到了很多的问题.有些功能怎么也实现不了.经过和同学的探讨还有上网查找资料, 最后终于克服了这些问题, 胜利的运行出了法式.通过这次学习, 使我对编写法式的兴趣更年夜了.除此之外, 此次课程设计帮我们熟练地运用所学习的知识, 还让我们熟练的去融合他们, 写出一个全新的法式来.在这次课程设计中要衷心的感谢老师对我们的帮手, 使得我们对所学知识的熟练运用.总而言之, 这次的课程设计既有趣又训练了我们对知识的运用.6参考文献[1]阮宏一, 鲁静《数据结构课程设计C/C++描述》.电子工业出书社[3]袁蔚敏.《数据结构》清华年夜学出书社7 源代码源代码:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define PR printf#define SC scanftypedef struct customer //客户信息{char name[20]; //客户姓名int num; //订票量int level; //舱位品级customer *next;}customer,*Lcustomer;typedef struct airline //航线信息{char end_addr[20]; //航线终点char line_num[5]; //航班号char plant_num[8]; //飞机号int day; //飞行日期int total; //定员int left; //剩余票数customer *booked; //已定客户信息customer *wait; //排队等待订票信息airline *next;}airline,*Lairline;airline *L; //将航班信息界说为全局变量, 减少参数传递Lairline search_line() //按航班号查找航班{char a[5];airline *p;p=L->next;PR("请输入航班号");SC("%s",a);for(;p;p=p->next)if(!strcmp(a,p->line_num)) break;return p;}Lairline search_plant() //按飞机号查找航班{char a[8];airline *p;p=L->next;PR("请输入飞机号");SC("%s",a);for(;p;p=p->next)if(!strcmp(a,p->plant_num)) break;return p;}Lairline search_day() //按飞行日期查找航班{int a;airline *p;p=L->next;PR("请输入飞行日期");SC("%d",&a);for(;p;p=p->next)if(a==p->day) break;return p;}Lairline search_addr() //按航班终点查找航班{char a[20];airline *p;p=L->next;PR("请输入航班终点");SC("%s",a);for(;p;p=p->next)if(!strcmp(a,p->end_addr)) break;return p;}void guide() //主菜单界面{PR(" ------------航空订票客服系统----------\n");PR("==============================================\n");PR("\t\t显示所有航线==> 1\n");PR("\t\t查询航线信息==> 2\n");PR("\t\t订票业务 ==> 3\n");PR("\t\t退票业务 ==> 4\n");PR("\t\t退出系统 ==> 0\n");PR("==============================================\n");PR("\t\t清除屏幕信息==> 9\n\n");PR("请按上面指引把持:\t");}void print_customer(airline *p) //显示航班客户信息{customer *c;if(p->booked){c=p->booked;PR("已定票客户信息\n票数\t/\t客户姓名\n");for(;c;c=c->next)PR("%5d\t/\t%s\n",c->num,c->name);PR("\n\n");}elsePR("暂时没有客户订票\n\n");if(p->wait){c=p->wait;PR("排队订票客户信息\n票数\t/\t客户姓名\n");for(;c;c=c->next)PR("%5d\t/\t%s\n",c->num,c->name);PR("\n\n");}elsePR("暂时没有客户排队订票\n\n");}void book() //订票系统{int i;int flag=0;airline *p;customer *cst,*c;PR("请输入查询航班的方式:\n");PR("航班号--->1\n");PR("终点站--->2\n");PR("飞行日期->3\n");for(;!flag;){SC("%d",&i);switch(i){case 1: p=search_line();flag=1;break;case 2: p=search_addr();flag=1;break;case 3: p=search_day();flag=1;break;default:PR("把持毛病,请重新输入\n");break;}}if(p){PR("终点站航班号飞机号飞行周日余票量\n");PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left);cst=(customer *)malloc(sizeof(customer));PR("请输入订票数量:");SC("%d",&cst->num);PR("请输入舱位品级(1/2/3)");SC("%d",&cst->level);PR("请输入您的名字");SC("%s",cst->name);if(cst->num<=p->left){cst->next=p->booked;p->booked=cst;p->left=p->left-cst->num;PR("订票胜利, 座位号为%d~%d\n",p->total-p->left-cst->num+1,p->total-p->left);}else{PR("余票缺乏, 是否排队等待?\n是(y)\n否(n)\n");SC("%d",&flag);if(flag){if(!p->wait){cst->next=p->wait;p->wait=cst;}else{c=p->wait;for(;c->next;c=c->next);cst->next=c->next;c->next=cst;}}}}elsePR("没有该航班\n");guide();}void waited(airline *p) //排队订票系统{int flag;customer *q,*q0,*h;if(!p->wait) return;q=(customer *)malloc(sizeof(customer));q->level=0;q->num=123;strcpy(q->name,"00000");q->next=p->wait;h=q;for(;p->left>0&&q->next;){if(q->next->num<p->left){PR("%s, 您正在排队定%d张票, 现有票, 是否定\n是(y)\n否(n)\n",q->next->name,q->next->num);SC("%d",&flag);if(flag){q0=q->next;q->next=q->next->next;q0->next=p->booked;p->booked=q0;p->left=p->left-q0->num;PR("排队订票胜利\n\n");}elseq=q->next;}elseq=q->next;}p->wait=h->next;}void refund() //退票系统{int flag;char a[20];airline *p;customer *c,*c1;p=search_line();c=p->booked;if(!p){PR("没有该航班\n\n");guide();return;}PR("请输入您的姓名");SC("%s",a);if(!p->booked->name){PR("对不起, 没有找到您的信息\n\n");guide();return ;}if(!strcmp(a,p->booked->name)){PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",p->booked->name,p->end_addr,p->booked->num);PR("确认要退票?\n是(y)\n否(n)\n");scanf("%d",&flag);if(flag){p->booked=p->booked->next;p->left=p->left+c->num;free(c);PR("退票胜利\n\n");waited(p);guide();}}else{for(;c->next;c=c->next)if(!strcmp(a,c->next->name))break;if(!c->next){PR("对不起, 没有找到您的信息\n\n");guide();return ;}else{PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",c->next->name,p->end_addr,c->next->num);PR("确认要退票?\n是(y)\n否(n)\n");scanf("%d",&flag);if(flag){c1=c->next;c->next=c->next->next;p->left=p->left+c1->num;free(c1);PR("退票胜利\n\n");waited(p);guide();}}}}void search() //航班查询系统{int i;int flag=0;airline *p;PR("请输入查询航班的方式:\n");PR("航班号---->1\n");PR("飞机号---->2\n");PR("飞行日期-->3\n");PR("航班终点-->4\n");SC("%d",&i);for(;!flag;)switch(i){case 1: p=search_line();flag=1;break;case 2: p=search_plant();flag=1;break;case 3: p=search_day();flag=1;break;case 4: p=search_addr();flag-=1;break;default:PR("把持毛病,请重新输入\n");break;}if(p){PR("终点站航班号飞机号飞行周日余票量\n");PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left);PR("是否订票(确定请按1)");SC("%d",&i);if(i==1)book();}elsePR("没有该航班\n");}void InitLine() //初始化航线信息{airline *p,*q;L=(airline *)malloc(sizeof(airline));L->booked=NULL;L->wait=NULL;L->next=NULL;strcpy(L->end_addr,"00000000");strcpy(L->line_num,"000");strcpy(L->plant_num,"0000000");L->day=L->left=L->total=0;q=L;p=(airline *)malloc(sizeof(airline));p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"广州");strcpy(p->line_num,"005");strcpy(p->plant_num,"PZH113");p->day=5;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"天津");strcpy(p->line_num,"004");strcpy(p->plant_num,"PZH121");p->day=4;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"北京");strcpy(p->line_num,"003");strcpy(p->plant_num,"PZH132");p->day=1;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"上海");strcpy(p->line_num,"002");strcpy(p->plant_num,"PZH133");p->day=2;p->left=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline));p->booked=NULL;p->wait=NULL;strcpy(p->end_addr,"成都");strcpy(p->line_num,"001");strcpy(p->plant_num,"PZH122");p->day=3;p->left=120;p->total=120;p->next=q->next;q->next=p;}void printline() //显示所有航班信息{int flag;airline *p;p=L->next;PR("终点站航班号飞机号飞行周日余票量\n");for(;p;p=p->next){PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left);}PR("按1进入订票系统, 按0返回主菜单\n");SC("%d",&flag);if(flag)book();else guide();}void main() //主函数{int flag=1;guide();InitLine();do{switch(getchar()){case '1':printline();break;case '2':search();break;case '3':book();break;case '4':refund();break;case '9':system("cls");guide();break;case '0':flag=0;break;}}while(flag);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息科学和工程学院课程设计报告课题:航空客运订票系统目录1.课程设计内容 (3)1.1、课程设计目的 (3)1.2、课程设计题目 (3)1.3、课程设计内容 (3)1.4、实现提示 (3)2.需求分析 (4)3.概要设计 (4)3.1、系统结构图 (5)3.2、算法设计 (5)3.3、存储结构设计 (5)4.详细设计 (6)4.1、数据类型定义 (7)4.2、函数定义 (8)4.3、函数流程图 (8)4.4、程序的设计思想 (12)5.调试分析 (12)5.1、程序测试 (12)5.2 、时间复杂度分析 (13)5.3 、算法的改进设想 (13)6.问题分析及课程设计的心得体会 (14)7.使用手册 (15)8. 源程序 (15)9 参考资料 (22)一、课程设计内容1.1 课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的使用系统。

2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握使用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的使用。

3.学会将知识使用于实际的方法,提高分析和解决问题的能力,增加综合能力。

(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。

1.2课程设计题目1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名和所需数量)。

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

1.3 课程设计内容航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。

设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

1.4 实现提示两个客户名单分别由线性表和队列实现。

为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,以链表作为存储结构。

由于预约人数无法预计,队列也用链表作为存储结构。

整个系统需汇总各条航线的情况登录在一张线性表上,由于航线不变,可采用顺序存储结构,并按航班有序或终点站名有序。

每条航线是这张表上的一个记录,包含上述8个域,其中乘员名单域为指向成员名单链表的头指针,等候替补的客户名单域为分别指向对头和队尾的指针二、需求分析本订票系统能够实现全部航线信息的浏览功能、订票客户信息的查询功能、单条航线查询功能、订票功能和退票功能。

具体分析如下:a) 全部航线信息的浏览功能浏览全部系统预设的航线信息,每条航线包含的信息有:终点站名、航班号、飞机号、飞行周日(星期几飞行)、乘员定额和余票量。

b) 订票客户信息的查询功能根据输入的航班号查询该航线所有订票客户的信息,包括客户姓名、订票数额和舱位等级。

c) 单条航线查询功能根据客户输入的终点站名查看该航线上所涉及的信息。

d) 订票功能根据客户提出的要求(航班号、订票数量)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则询问客户是否愿意排队等候,若愿意,系统则自动登记排队候补。

e) 退票功能根据客户提供的情况(航班、姓名),询问退票张数,然后为客户办理退票手续。

接着系统自动查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

三、概要设计3.1 系统结构图(功能模块图)3.2 算法设计(每个模块的算法设计说明):(1)浏览航线模块:定义void display( struct airline *info),用info指向结构体struct airline中的每一个成员;调用list()函数输出全部航线信息。

(2)浏览订票客户信息模块:定义订票客户信息的结构体ord_ros,根据输入航班号调用find()函数寻找客户信息。

(3)查询航线模块:顺着单链表查找,如果和航班号(航线)一致,输出相关信息,否则,查询不成功。

(4)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功, 否则失败。

(5)退票模块:输入要退票的乘客姓名,查找乘客资料的链表中是否有这位乘客,有则删去此节点,并在空位上加1,无则退票失败。

如果此时余票额大于等于候补客户的订票数量,那么候补客户订票成功。

3.3 存储结构设计:(1)航班的信息:为了便于查找,航班情况的存储结构采用单链表,每个元素表示一个航班的情况,包括终点站名、航班号、飞机号、星期几、乘员定额和余票量,共六个数据项:C语言描述如下:struct airline{ char ter_name[10];/*终点站名*/char air_num[10];/*航班号*/char plane_num[10];/*飞机号*/char day[7];/*飞行周日(星期几)*/int tkt_amt;/*乘员定额*/int tkt_sur;/*余票量*/linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;struct airline *start;(2)订票乘客的资料:为了便于插入和删除,同样采用单链表存储结构,每个数据元素包括姓名、订票量和舱位等级三个数据项:C语言描述如下:typedef struct ord_ros{ char name[10];/*客户姓名*/int ord_amt;/*订票量*/int grade;/*舱位等级*/struct ord_ros *next;}linklist;四、详细设计4.1 数据类型定义(1)已订票客户的结点:typedef struct ord_ros{ char name[10];/*客户姓名*/int ord_amt;/*订票量*/int grade;/*舱位等级*/struct ord_ros *next;}linklist;(2)候补客户的结点:typedef struct wat_ros{ char name[10];/*姓名*/int req_amt;/*订票量*/struct wat_ros *next;}qnode,*qptr;typedef struct pqueue /*定义单链队列*/{ qptr front;/*等候替补客户名单域的头指针*/qptr rear;/*等候替补客户名单域的尾指针*/}linkqueue;(3)航班结点:struct airline{ char ter_name[10];/*终点站名*/char air_num[10];/*航班号*/char plane_num[10];/*飞机号*/char day[7];/*飞行周日(星期几)*/int tkt_amt;/*乘员定额*/int tkt_sur;/*余票量*/linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;struct airline *start;4.2 函数定义(1)航线输出函数函数名:void list()操作结果:输出全部航线信息(2)航线查询函数函数名:void search()操作结果:进行航班查询(3)候补结点队列函数函数名:linkqueue appendqueue(linkqueue q,char name[],int amount)操作结果:增加候补客户名单域入队出队判空(4)客户订票函数函数名:void order()操作结果:进行客户订票操作(5)客户退票函数函数名:void return_tkt()操作如果:进行客户退票操作(6)订票客户查询函数函数名:void prtlink()操作结果:进行订票客户信息查询操作(7)主菜单控制函数函数名:int menu_select()操作结果:a) 浏览航线信息b) 浏览已订票客户信息c) 查询航线d) 办理订票业务e) 办理退票业务f)退出系统4.3 函数流程图(1)浏览已订票客户信息(3)办理订票业务4.4 程序的设计思想订票客户由线性表实现,链表作为其存储结构;为了插入和删除方便,候补客户由队列实现,队列也用链表做为存储结构。

增删操作只需修改指针,这样系统运行效率有了很大提高。

五.调试分析5.1程序测试(1)主菜单(2)浏览航线信息(3)办理订票业务(4)浏览已订票客户信息(5)查询航班(6)办理退票业务(7)再次浏览航线信息5.2 时间复杂度分析浏览遍历整张航线线性表的时间复杂度:O(1);线性表的插入和删除操作的时间复杂度:O(n);查询为线性表的查找,时间复杂度:O(n);订票为线性表的查找,时间复杂度:O(n);退票是查找两张线性表,时间复杂度为:O(n*e),其中n为航班总数,e 为对应航班已订票人数。

5.3 算法的改进设想(1)在算法效率上,由于此课程设计所用的是线性表的建立、查找、插入、删除、和队列的建立、插入、删除,所涉及的是查找和排序问题,所以在建立插入时按照客户姓名进行有序,查找时采用分块查找,因此对订票客户信息的存储应采用指针数组存储。

(2)在函数重组,把处理不同问题相同算法思想(如线性表的插入、删除、查找等等)写在一个函数中,其它函数要用到这种操作时只需调用这些函数,这样会减少整个程序的代码量,方便理解、阅读和使用。

六.问题分析及课程设计的心得体会总体体会:看着简单,做着难,我自己眼高收低,心太急,不过敢想敢写感尝试,努力付出还真有蛮多收获。

(1)学和做:做了这次课程设计,我觉得课程设计这种形式真的是我们需要的,可以让我们学到很多,包括书上的、书外的。

理论永远不等于实际。

我在调试时出现了很多的问题,下面列举几个:程序中定义了一个字符串“new”,但在C-Free中“new"不是以未定义的形式存在,所以把“new”改写成“NEW”就可以了;C-Free 中“getchar”表示读取下一个字符的含义,而“getch”不表示,出现“getch”时系统会报错;在编写退票模块的代码时,设计先输入退票数然后进行退票,调试时发现舱位等级的输出出现了混乱,后来经仔细分析才知道,原来“grade=p1->grade;”放在了if()大循环的后面,而在if循环里p1已经释放,所以把“grade=p1->grade;”放在第一个“free(p1);”之前就可以了。

相关文档
最新文档