数据结构大作业航空公司订票系统
航空公司订票系统数据库结构
登录用户修改密码功能流程
1、判断确认密码是否正确 2、不正确重新输入 3、正确的话读取后台数据库该用户记录 4、修改数据库密码字段的值为文本框的值 5、调用Update方法更新到数据源 6、当前窗台隐藏
添加用户功能模块流程
1、判断用户名是否为空 2、不为空的话,读取后台数据库, 检测用户名是否已经存在 3、继续判断确认密码是否正确 4、以上皆成功的话,调用 RecordSet.AddNew方法,用户名、 密码、权限从相应控件值读取 5、 RecordSet.Update更新到数据 源 6、当前窗体隐藏
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset 'executes SQL and returns Recordset Dim cnn As ADODB.Connection: Dim rst As ADODB.Recordset: Dim sTokens() As String On Error GoTo ExecuteSQL_Error
添加工具条(图像列表、文本对齐、按钮索引关键字、样式5种、 响应事件buttonclick集中处理所有按钮敲击事件)
添加侧边栏(侧边栏由picturbox包容label、button、treeview 构成、显示位臵大小打开关闭由picturebox的事件过程控制、 picturebox 放臵时设臵Align属性、 picturebox _Resize事件过程) TreeView操作(选择样式是否带图片链接线展开符号等、图像 列表、 TreeView.Nodes.Add方法、 TreeView _NodeClick事件 过程)
(完整word版)航空公司订票系统
数据结构与算法设计课程设计【设计题目】航空公司订票系统【问题描述】编写一个咸阳航空公司订票大厅的一个订票系统,可以在系统中录入并修改各个航班的具体情况,帮助乘客准确的查询各航班的最新信息(包括航班号、航班的起始时间和地点、票价)和各项业务的及时办理(包括订票、退票等)。
该系统用可以用C++的类编写。
【软件功能】1.输入航班信息并保存到磁盘2.浏览航班信息3.修改航班信息并保存到磁盘4.查找航班5.删除航班信息6.订票7.退票【算法思想】1先定义一个乘客基本信息的类包含乘客的姓名、证件号、订票数量及所乘的航班号(注:每个航班有固定的人数限制,若满额则提示其他可供选择的航班。
2建立一个功能类,包括对航班信息和乘客订票信息的录入及修改的函数,其中订票信息采用单链表的顺序存储方式存储。
另外还包括对信息的查询和修改的功能函数,乘客退票的函数。
并将最终的改动结果通过i/O流写入磁盘文件保存。
3编写主函数,对编写的航班系统进行全面测试,对用户界面采用人性化的菜单方式。
【类的设计】定义一个航班的类class plane{friend class customer;//友元类public:void input(); //插入航班信息void print(); //打印航班信息void save(); //保存航班信息void read(); //读取航班信息void search(); //查找航班信息void Delete(); //删除航班信息void book(); //订票void back(); //退票void xiugai(); //修改航班信息private:int num;//航班号char start_place[20];//起点站char arrive_place[20];//终点站char time[10];//起降时间int count;//机票数量}];定义一个顾客信息的类class customer{friend class plane;//友元类protected:I nt id;//身份证号char name[10];//姓名int customer_num;//订票数量public:void read1();//读取数据void save1();//保存数据};【存储结构设计】采用顺序存储结构,利用动态申请空间实现信息的存储。
实验3 数据结构C++写 航空订票系统
#include <stdlib.h>#include <string.h>#include <conio.h> /*通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作*/#include <iomanip.h>#include <iostream.h>#define MAXSIZE 5 /*定义航线数量,可修改*/typedef struct wat_ros /*单链队列存储等候替补的客户信息*/{char name[10]; /*姓名*/int req_amt; /*订票量*/struct wat_ros *next;}qnode,*qptr;typedef struct pqueue /*等候替补的客户名单*/{qptr front; /*等候替补客户名单域的队头指针*/qptr rear; /*等候替补客户名单域的队尾指针*/}linkqueue;typedef struct ord_ros /*乘员名单*/{char name[10]; /*客户姓名*/int ord_amt; /*订票量*/int grade; /*舱位等级*/struct ord_ros *next;}linklist;struct airline{char ter_name[10]; /*抵达城市*/char air_num[10]; /*航班号*/char time[10]; /*飞机时间*/char pri[7]; /*票价*/int tkt_amt; /*乘员定额*/int tkt_sur; /*余票量*/linklist *order; /*乘员名单域,指向乘员名单链表的头指针*/linkqueue wait; /*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;struct airline *start;void display(struct airline *info) /*打印每条航线的基本信息*/{cout<<info->ter_name<<setw(5)<<info->air_num<<"\t"<<setw(5)<<info->time<<"\t"<<s etw(5)<<info->pri<<"\t"<<setw(5)<<info->tkt_amt<<"\t"<<setw(5)<<info->tkt_sur<<e ndl;}void list() /*打印全部航线信息*/{struct airline *info;int i=0;info=start;cout<<"终点站名"<<" "<<"航班号"<<" "<<"飞行时间"<<" "<<"票价"<<" "<<"乘员定额"<<" "<<"余票量"<<endl;while(i<MAXSIZE){display(info); /*调用display函数来输出*/info++;i++;}cout<<endl;}void search() /*根据客户提出的终点站名输出航线信息*/{struct airline *info,*find();char name[10]; /*要抵达的城市名称*/int i=0;info=start;cout<<"请输入要抵达城市的名称:";cin>>name;while(i<MAXSIZE){if(!strcmp(name,info->ter_name)) //有该站名strcmp则返回,if(!0)即break,字符串比较函数搜索{break;}info++;i++;}if(i>=MAXSIZE) /*没有匹配的航线*/{cout<<"对不起,没有这条航线!"<<endl;}{cout<<"终点站名"<<" "<<"航班号"<<" "<<"飞行时间"<<" "<<"票价"<<" "<<"乘员定额"<<" "<<"余票量"<<endl;display(info); /*调用display函数输出航线信息*/}}struct airline *find() /*根据系统提出的航班号查询并以指针形式返回*/{struct airline *info;char number[10]; /*查询的航班号*/int i=0;info=start;cout<<"请输入航班号:";cin>>number;while(i<MAXSIZE){if(!strcmp(number,info->air_num)) /*有匹配航班*/{return info;}info++;i++;} /*无匹配航班*/cout<<"对不起,没有这条航线!"<<endl;return NULL;}void prtlink() /*打印订票乘员名单域的客户名单信息*/{linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL) /*按顺序输出客户信息链表*/{cout<<"客户姓名订票数额舱位等级"<<endl;while(p){cout<<p->name<<"\t"<<setw(7)<<p->ord_amt<<"\t"<<setw(8)<<p->grade<<endl;p=p->next;}else /*没有人订这个航班*/cout<<"该航线没有客户信息!"<<endl;}linklist *insertlink(linklist *head,int amount,char name[],int grade) /*增加订票乘员名单域的客户信息*/{linklist *p1,*new1;p1=head;new1=new linklist();if(!new1) /*存储空间不足*/{cout<<"\nOut of memory!!"<<endl;return NULL;}strcpy(new1->name,name);new1->ord_amt=amount;new1->grade=grade;new1->next=NULL;if(head==NULL) /*若原订票客户信息为空*/{head=new1;new1->next=NULL;}else{head=new1;}new1->next=p1;return head;}linkqueue appendqueue(linkqueue q,char name[],int amount) /*增加排队等候的客户名单域*/{qptr new1;new1=new qnode();strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front==NULL) /*若原排队等候客户名单域为空*/{q.front=new1;}else{q.rear->next=new1;}q.rear=new1;return q;}void order() /*办理订票业务*/{struct airline *info;int amount,grade; /*订票数量,舱位等级*/char name[10]; /*要订的航班号*/info=start;if(!(info=find())) /*根据客户提供的航班号进行查询,如为空,退出该模块*/ {return;}cout<<"请输入您需要的票数:";cin>>amount;if(amount>info->tkt_amt) /*若客户订票额超过乘员定票总额,退出*/ {cout<<"对不起,您输入票数已经超过乘员定额!"<<endl;return;}if(amount<=info->tkt_sur) /*若客户订票额末超过余票量,订票成功并等记信息*/{int i;cout<<"请输入您的姓名:";cin>>name;cout<<"请输入您需要的舱位等级(1,2或):";cin>>grade;info->order=insertlink(info->order,amount,name,grade); /*在订票乘员名单域中添加客户信息*/for(i=0;i<amount;i++) /*依次输出该订票客户的座位号*/{//printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1); cout<<name<<"的座位号是:"<<info->tkt_amt-info->tkt_sur+i+1<<endl;}info->tkt_sur-=amount; /*该航线的余票量应减掉该客户的订票量*/ cout<<"祝您乘坐愉快!";}else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/{char r;cout<<"没有这么多票了,您需要排队等候吗?(Y/N)"<<endl;r=getch();cout<<r;if(r=='Y'||r=='y'){cout<<"\n请输入您的姓名:"<<endl;cin>>name;info->wait=appendqueue(info->wait,name,amount); /*在排队等候乘员名单域中添加客户信息*/cout<<"\n注册排队成功!"<<endl;}else{cout<<"\n欢迎您再次订购!"<<endl;}}}void return_tkt() //退票模块{struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname[10];if(!(info=find())) //调用查询函数,根据客户提供的航线进行搜索{return;}head=info->order;p1=head;cout<<"请输入你的姓名:"<<endl;cin>>cusname;while(p1!=NULL) //根据客户提供的姓名到订票客户名单域进行查询{if(!strcmp(cusname,p1->name)){break;p2=p1;p1=p1->next;}if(p1==NULL) //若未找到,退出本模块{cout<<"对不起,您没有订过票!"<<endl;return;}else //若信息查询成功,删除订票客户名单域中的信息{if(p1==head){head=p1->next;}else{p2->next=p1->next;}info->tkt_sur+=p1->ord_amt;grade=p1->grade;cout<<"退票成功!"<<p1->name<<endl;delete p1;}info->order=head; //重新将航线名单域指向订票单链表的头指针f=(info->wait).front; //f指向排队等候名单队列的头结点r=(info->wait).rear; //r指向排队等候名单队列的尾结点t=f; //t为当前满点条件的排队候补名单域while(t){if(info->tkt_sur>=info->wait.front->req_amt) //若满足条件者为头结点{int i;info->wait.front=t->next;cout<<"订票成功!"<<t->name<<endl;for(i=0;i<t->req_amt;i++) //输出座位号{cout<<"的座位号是:"<<t->name<<info->tkt_sur-i<<endl;}info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);//插入到订票客户名单链表中delete t;break;back=t;t=t->next;if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)//若满足条件者不为头结点{int i;back->next=t->next;cout<<"订票成功!"<<t->name<<endl;for(i=0;i<t->req_amt;i++) // 输出座位号{//printf("<%s>'s seat number is:%d\n",t->name,(info->tkt_sur)-i); cout<<"seat number is:"<<t->name<<info->tkt_sur-i<<endl;}info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);//插入到订票客户名单链表中delete t;break;}if(f==r){break;}}}int menu_select() /*菜单界面*/{int c;char s[20];cout<<"订票系统"<<endl;cout<<"******************************"<<endl;cout<<"1.查看航线信息"<<endl;cout<<"2.查看已订票客户信息"<<endl;cout<<"3.查询航线"<<endl;cout<<"4.办理订票业务"<<endl;cout<<"5.办理退票业务"<<endl;cout<<"6.退出系统"<<endl;cout<<"******************************"<<endl;do{cout<<"请选择(1-6):"<<endl;cin>>s;c=atoi(s); // 将字符串转换成一个整数并返回结果,需要导入头文件#include <stdlib.h>}while(c<1||c>6);return c;}void main(){struct airline air[MAXSIZE]= /*初始化航线信息*/{{"Beijing","1","1200","860",30,30},{"Shanghai","2","1000","770",20,20},{"Nanjing","3","1330","960",10,10},{"London","4","1700","760",50,50},{"dalian","5","1400","550",40,40}};start=air;for(;;) /*无限循环(除非用户选择.退出)*/ {//system("cls"); /*清空屏幕*/switch(menu_select()){case 1:list(); /*打印全部航线信息*/break;case 2:prtlink(); /*浏览已订票客户信息*/break;case 3:search(); /*查询航线*/break;case 4:order(); /*订票*/break;case 5:return_tkt(); /*退票*/break;case 6:cout<<"感谢您的使用,再见!"<<endl; /*退出系统*/exit(0); /*正常退出程序*/}cout<<"任意键继续..."<<endl;getch(); /*任意键继续*/}}。
航空订票系统 数据结构
一、设计课题:我们设计的程序有三个,分别是:航空订票系统、24点游戏、旅游交通查询系统,为了用户的方便和更能体现C语言的模块化理念,我们把三个程序放到一个系统中去实现了。
二、设计内容1、需求分析:在完成课程设计的过程中,我们组合作为主,欧阳锦林主要负责程序设计与调试,王峰和段静缘主要负责资料收集与文档输入。
设计完成后交流了各人收获与体会。
(1)、航空订票系统:通过此系统可以实现如下功能:1) 录入航线信息每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。
假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100) , 将这3条航线信息存入文件“airline.dat”中。
2) 订票业务客户信息包括姓名, 航班号, 座位号(初始为0), 假设已有3个客户信息存入文件“customer.dat”中。
有新客户订票时, 先输入客户的姓名和他提出的航班号, 查询该航线的订票情况, 若有余票, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加到文件“customer.dat”中, 并修改文件“airline.dat”中该航线的订票数和余票数。
若无余票, 则输出客满信息。
进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。
3) 退票业务根据客户提出的航班号, 办理退票, 从文件“customer.dat”中删除该客户的信息, 并修改文件“airline.dat”中相应航线的订票数和余票数。
4) 修改航班信息:当航班信息改变可以修改航班数据文件。
5) 输出全部航线信息和全部客户信息。
6) 退出系统。
(2)、24点游戏:基本要求及步骤:1)随机产生四个1-13的数,分别代表13张牌。
2)提示玩家输入算式。
3)判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字,非法则回到1)。
4)如果玩家认为这四张牌算不出24点(如:1,1,1,1),可只输入?,程序将判断这四张牌是否能得出24点,如果能,则程序将给出算式,如果不能,说明不能,并回到1)。
数据结构:航空客运订票系统
课程设计报告课程名称:数据结构设计题目:航空客运订票系统院系:班级:设计者:学号:指导教师:课程设计报告一、题目分析主要功能包括:1、录入:可以录入航班情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数)。
2、查询:可以查询某个航线的情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数);可以输入降落城市及航班号,查询飞机航班情况。
3、订票:根据客户要求(航班号、订票数量)查询该航班的余票数情况,若有余票,则可以订票;若余票数不足,则需要重新询问客户要求,否则不能完成订票。
4、退票:可退票,根据客户的姓名,订票数量查询是否为真实信息,为客户办理退票。
5、退出系统。
二、总体设计拿到课程设计题目后,经过仔细的研究,还是决定做航空客运订票系统,它可以使自己很好的巩固在数据结构当中所学到的知识以及各算法,做到学以致用,并在运用的基础上,进一步去创新。
1、主程序流程图及其说明主程序的流程图如下图所示:利用switch语句,用户只需根据自己的需要,输入相应的命令即可达到效果。
例如,若需要查询航班信息时,则输入2;需要为客户预定机票时,则输入4;若需要退出系统,则输入5即可。
2、子程序流程图及其说明⑴、录入航班信息的流程图及其说明:主要功能是将新的航班信息写入新建链表中,然后把新链表与储存航班的链表合并,得到新的航班信息,实现对新航班的增加。
录入航班信息的流程图如下图所示:⑵、查询航班信息流程图及其说明:先输入所要查找的航班,可通过降落城市查询或根据航班号查询。
然后判断该航班是否存在,若存在,则输出相关的航班信息;若不存在,则提示该航班不存在。
查询航班信息的流程图如下图所示:⑶、订票、退票流程图及其说明:订票说明:先输入降落城市,找到该航班并显示该航班信息,若找不到则提示不存在该航班。
再通过需要订票的数量来判断余票量是否足够。
若足够则录入客户姓名,完成订票;若余票不足,则提示是否要取消并重新订票。
数据结构课程设计《订票系统(航空)》报告+源代码
数据结构课程设计——《订票系统》目录一、设计任务与要求 (2)1。
1 总体目标与任务要求 (2)1。
2 题目选择与目的意义 (2)1.3 所选题目的主要工作 (2)二、需求分析 (3)2.1 用户需求分析 (3)2.2 功能需求分析 (3)2。
3 系统需求分析 (3)三、概要设计 (4)3.1 各模块的算法设计说明 (4)3.2 存储结构设计说明 (9)四、详细设计 (11)五、源代码 (12)六、运行结果分析 (23)七、收获与体会 (30)八、主要参考资料 (30)一、设计任务与要求1。
1 总体目标与任务要求制作一个订票系统,通过此系统可以实现如下功能:1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定).2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况。
3)订票:可以订票,如果该航班已经无票,可以提供相关可选择航班(订票情况可以存在一个数据文件中,结构自己设定)。
4)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:当航班信息改变可以修改航班数据文件。
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
1.2 题目选择与目的意义选择这个题目的原因是,订票系统在现实生活中应用很广泛,通过这个系统可以使订票、退票等变得简便。
与传统的人工用纸、笔来记录办理订票、退票等相比,使用这个系统也会增加工作效率。
这个题目做出来的系统还是比较实用的,所以我选择了订票系统这个题目.完成此系统,需要综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
数据结构课程设计航空订票系统
航空客运订票系统的设计与实现一、设计目的:设计一个航班订票系统,提高对信息管理、信息查找和排序算法的应用能力。
二、问题的描述:航空客运订票的业务包括查询航线和客票预定的信、客票预定和办理退票等,设计一个程序以使上述任务借助计算机完成。
三、数据结构的设计://航线结构struct airline{char cityname[15]; //终点站char airnum[15]; //航班号char planenum[15]; //飞机号char qjtime[15]; //起降时间int price; //价格int disc; //折扣int num; //总座位数int rempla; //剩余位置(票数)linklist *order;linkqueue wait;}line;//定义链表队列typedef struct wait{char name[6];int ordnum;struct wait *next;} qnode,*qptr;//无票时其余等候买票队列typedef struct listqueue{qptr front; //对头qptr rear; //队尾}linkqueue;typedef struct order{char name[15]; //客户姓名char crenum[15]; //证件号char airnum[15]; //航班号char planenum[15]; //飞机号int ordnum; //订票数量int rempla; //剩余位置int num; //总座位数char qjtime[15]; //起降时间struct order *next;}linklist;建立了航班的终点站,航班号,飞机号,起降时间,价格,折扣,总座位数,剩余位置,指向客户信息truct order指针,等候买票的队列的结构体信息。
建立了客户的客户姓名,证件号,航班号,飞机号,订票数量,剩余位置,总座位数,起降时间,链接下一位的指针的结构体信息。
数据结构课程设计---航空订票系统
数据结构课程设计报告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中设计用户界面功能部分。
数据结构.航空客运订票系统
《数据结构》课程设计报告书题目:航空客运订票系统专业:班级:学号:姓名:完成时间:一、需求分析1.1问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。
1.2 基本要求每条航线所涉及的信息有:终点站名、航班号、飞机号、星期几飞行、乘员定额、余票量、订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
已订票客户和预订票客户名单可分别由线性表linklist和队列linkqueue 来实现。
为了插入和删除方便,两者皆采用链表作为存储结构。
系统需实现的操作和功能如下。
(1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票量。
(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若退票能满足他人要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
二、概要设计1.1 链表的抽象数据类型定义ADT ListData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}Operation:airline *find_fin()//根据客户提出的终点站名输出航线信息airline *find_air()//根据客户提出的航班号查询航班信息airline *find_plane()//根据客户提出的飞机号查询航班信息airline *find_date()//根据客户提出的飞行日期查询航班信息void search()//根据客户提出的要求输出航线信息void list()//全部航线的信息void booklist()//订票客户名单linklist *addlink(linklist*,int,char,int)//增加订票的客户信息 void sort_ticket()//按剩余票数排序endADT1.2 队列的抽象数据类型定义ADT QueueData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}Operation:linkqueue plusqueue(linkqueue,char,int)//增加排队等候的客户名单endADT2、本程序包含三个模块(1)主程序模块:void main(){初始化;Do{输入指令;处理指令;}while (指令!=”退出”);}(2)已买票的乘客的链表模块——实行对买票乘客信息的管理(3)排队买票乘客的队列模快——实行对排队买票乘客信息的管理3、各模块之间的调用关系三、详细设计1、为简化问题,本系统假设只有五条航线#define MAX 5//定义航线量的最大值2、客户的存储信息:结点中保存的信息包括姓名,订票量,舱位等级typedef struct book{char name[10];//客户姓名int amount;//订票量int level;//舱位等级book *next;}linklist;3、航班的存储信息:结点中保存的信息包括终点站名,航班号,飞机号,飞行日期,乘员定额,余票量。
飞机订票系统(数据结构)
假设某机场共有M次航班,第i次航班有ni个座位,且每次航班到达一个目的机场。
设计一个满足该机场需要的用户订票、退票程序#include <stdio.h>#include <string.h>#include <conio.h>#include <fstream>struct air //定义结构体数组{int num;int seat;int count;air *next;};struct air s[3];void init(int); //初始化航班信息void read(); //读取航班信息void save(); //保存航班信息void print(); //输出航班信息void dingpiao(); //订票信息void tuipiao(); //退票信息void main(){init(3);save();int j;printf(" ★---您好,欢迎进入飞机订票系统!---★\n");printf("================================================================ ================\n");do{printf(" -------- ☆ 1.浏览航班信息☆-------- \n\n"" -------- ☆ 2.订票信息☆-------- \n\n"" -------- ☆ 3.退票信息☆-------- \n\n"" -------- ☆0.退出☆-------- \n\n");printf("================================================================ ================\n");printf("机场共有M=3次航班,第i次航班有(n=2)*i个座位,每次航班到达一个目的机场!!!\n");printf("================================================================ ================\n");printf("请在0-3中选择以回车键结束:\n\n");scanf("%d",&j);switch(j){case 1:print(); //读取航班信息break;case 2: dingpiao(); //订票信息break;case 3:tuipiao(); //退票信息break;case 0:;break;}}while(j!=0); //判断结束printf("谢谢使用,再见!\n");}//主函数结束void init(int se) { //初始化模块int i;air *q=&s[0]; //指向头指针for(i=0;i<se;i++){q->num=i+1; //航线编号q->seat=2*(i+1); //第i次航班有ni个座位q->count=q->seat; //剩余座位q->next=&s[i+1]; //指向下一结点q=q->next; //头指针+1}q->next=NULL; //最后一个节点指针设为空}void save()//保存模块程序{int i;int m;FILE *fp,*fp1;//定义文件指针if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}for(i=0;i<3;i++)if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错printf("向文件输入数据失败!\n\n");fprintf(fp1,"%d",&m);fclose(fp);//关闭文件fclose(fp1);//关闭文件}void read()//从文件读取信息模块{int m;int i;FILE *fp,*fp1;//定义文件指针if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错{printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示getchar();if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}fscanf(fp1,"%d",&m);fclose(fp1);//关闭文件for(i=0;i<m;i++){fread(&s[i],sizeof(air),1,fp);//从文件中读取信息}fclose(fp);//关闭文件}void print()//输出航班模块{int se;char w[10];read();//调用读取文件函数printf("航班号座位数剩余票\n");air *q=&s[0];for(se=1;se<4;se++){printf(" %d ",q->num);printf(" %d ",q->seat);printf(" %d ",q->count);printf("\n");q=q->next;}printf("请按任意键回车键结束返回上层菜单以:\n");scanf("%s",w);}void dingpiao()//订票模块int i;int n;char a[10];read();do{printf("请输入您要订的机票的航线编号(1、2、3):\n");scanf("%d",&i);if((i-1)<0||(i-1)>3){printf("请输入有效飞机编号!\n");//判断机票数是否出错}else{air *q=&s[i-1];printf("请输入您要订的机票数以回车键结束:\n");scanf("%d",&n);//读取所订机票数if(n<0){printf("请输入有效的机票数!\n");//判断机票数是否出错break;}if((q->count)!=0&&(q->count)>=n)//判断是否出错{q->count=q->count-n;save();//调用保存函数printf("订票成功!\n\n");break;}if(q->count<n)//判断是否出错{printf("票数不足:\n");break;}printf("是否继续?请输入yes或no以回车键结束:\n");//判断是否继续订票scanf("%s",a);}}while(!strcmp(a,"yes"));//判断结束}void tuipiao()//退票模块{int n;char a[10];int i;do{printf("请输入您要订的机票的航线编号(1、2、3):\n");scanf("%d",&i);if((i-1)<0||(i-1)>3){printf("请输入有效飞机编号!\n");break;}else{air *q=&s[i-1];printf("请输入您要退的机票数目:\n");scanf("%d",&n);//输入所退票数read();int k;k=2*i-(q->count);if(n<0||n>k) //判断票数是否有效{printf("请输入有效的机票数!\n");break;}else{q->count=q->count+n;save(); //调用保存模块printf("退票成功!\n\n");printf("是否继续?请键入yes或no以回车键结束:\n\n");//判断是否继续退票scanf("%s",a);}}}while(!strcmp(a,"yes"));//判断并跳出循环getchar();。
数据结构大作业-航空公司订票系统
数据结构大作业-航空公司订票系统一、需求分析航空公司订票系统是一个需要进行高效管理和数据存储的系统。
在这个系统中,我们需要实现以下功能:1.用户登录和注册:用户可以注册并登录到系统中进行机票订购和查询。
2.机票查询:用户可以查询所有的航班信息,包括机票的价格、日期、起点和终点等信息。
3.机票购买:用户可以根据自己的需求,在航班信息中选择合适的机票,并进行购买。
4.支付功能:用户可以在系统中完成支付,并获得机票的二维码。
为了实现上述的功能,我们将采取以下的数据结构来设计和实现航空公司订票系统。
二、数据结构设计1. 航班信息表我们需要在系统中存储所有航班的信息,包括航班编号、起飞时间、起点、终点、票价等属性,因此我们可以使用以下数据结构来进行存储和管理航班信息。
typedef struct {char id[MAX_ID_LENGTH]; // 航班编号char departure[MAX_LOCATION_LENGTH]; // 起点char destination[MAX_LOCATION_LENGTH]; // 终点char date[MAX_DATE_LENGTH]; // 起飞日期char time[MAX_TIME_LENGTH]; // 起飞时间int price; // 票价} Flight;使用以上数据类型存储航班信息,我们可以建立一个包含所有航班的线性表来存储和管理所有的航班信息。
2. 用户信息表我们需要在系统中存储所有用户的信息,包括用户的账号、密码、姓名、身份证号码等属性,因此我们可以使用以下数据结构来进行存储和管理用户信息。
typedef struct {char username[MAX_USERNAME_LENGTH]; // 用户名char password[MAX_PASSWORD_LENGTH]; // 密码char name[MAX_NAME_LENGTH]; // 姓名char id[MAX_ID_LENGTH]; // 身份证号码} User;使用以上数据类型存储用户信息,我们可以建立一个包含所有用户的线性表来存储和管理所有的用户信息。
数据结构课程设计之飞机订票系统
青岛理工大学数据结构课程设计报告题目:飞机订票系统院(系):学生姓名:班级:学号:起迄日期:指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。
2.基本功能1,录入航班信息。
没个航班的信息包括:航班号,起飞、抵达城市,座位总数,剩余座位数。
数据由使用者输入。
数据存储在txt文件中,采用线性表的链式结构。
2,加载航班和客户信息。
可以自动加载保存在txt文件中的航班和客户的信息。
3,查询航班。
可以通过输入航班号,查询该航班的所有信息。
可以通过输入起飞抵达的城市,查询航班的信息。
4,订票。
客户的信息包括:姓名,证件号,所订票的航班号,座号。
用户输入要订票的航班号,如果该航班未满,则订票成功,并记录客户的信息。
如果该航班已满,则订票失败,输出所有未满的航班信息,供用户选择。
5,退票。
删除退票用户的订票信息,相应的航班的剩余票数增加1。
6,修改航班信息。
用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。
7,保存操作。
把当前的航班信息,和用户信息分别保存在txt文件中。
8,输出所有客户信息。
按一定的格式输出用户的姓名,证件号码,航班号,座号。
9,输出所有航班信息。
按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。
0,退出系统。
3.输入输出在控制台下,根据提示输入要完成功能的标号,然后在提示下选择性的输入航班号、起飞抵达地、证件号码,或者姓名等。
系统会根据用户的输入输出相应的航班信息或者用户信息。
二、概要设计1.设计思路:对于航班和用户,分别定义不同的数据结构,并且采用线性表的链式结构进行存储。
然后根据要完成的功能,分模块用函数实现。
所用到的算法主要有:链表的创建,增加,遍历,插入,删除。
2.数据结构设计:采用的逻辑结构是线性结构。
存储结构是链式结构。
飞机订票系统(数据结构作业)
return false;
}
bool Passenger::operator<(const Passenger & operhand)const{//重载 <
if(strcmp(this->name, )<0)
return true;
return true;
return false;
}
bool Flight::HasName(const char * Name) const{//检查航班是否存在
if(!strcmp(this->name,Name))
return true;
return false;
}
if(FindNode(pdata->name)!=NULL)
return false;//若在现有乘客中已有名叫pdata->name的成员,则不必加入
Node<T> * node=new Node<T>(pdata);
if(head==NULL){//原链表中无元素,不需比较
head=node;
if(strcmp(this->name, )<0)
return true;
return false;
}
bool Flight::operator>(const Flight & operhand)const{//重载 >
if(strcmp(this->name, )>0)
class lnkList{
private:
Node<T> * head;
数据结构大作业 航空公司订票系统
航空公司订票系统一、我的认识和设计思路1.我充分利用数据结构课程设计,利用几种典型数据结构(链表,队列,线性表等结构),结合上学期学习的程序设计语言(C/C++语言),链表是实现存储空间动态管理的链式存储结方式,而队是一种操作受限的线性表。
使用大量指针,来实现一个比较完整的应用系统的设计与开发。
2.我通过课程设计一些程序的调试(比如背包问题,病人看病模拟程序,停车场管理程序),通过比较系统的分析、编程和不断调试,进一步理解和掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
基本上达到了复习的要求。
3.我将知识应用于实际的方法,联想到售票系统的使用,也可以提高综合能力。
所以我选择了航空订票系统,也可以应用于其他售票系统。
航空空订票系统所涉及的知识:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序。
4. 通过上网查询和结合实际可知,航空客运订票的业务活动包括:查询航线、客票预订和办理退票等等。
设计了一个航空公司订票系统,以使上述业务可以借助计算机来完成。
下面是一些程序功能设想:1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);2.全部数据可以只放在内存中;3.系统能实现的操作和功能如下:a) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b) 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补;c) 退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
数据结构毕业课程设计(C语言版)飞机订票系统
(此文档为word格式,下载后您可任意编辑修改!)———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。
其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。
(2):工作人员管理函数enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。
enter()函数的构造就是为了解决这个问题。
而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。
(3):列出航班信息的函数list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。
(4)乘客具体查询函数search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。
数据结构实验报告_飞机订票系统
一、订票系统【需求分析】本订票系统要能够实现航班情况的录入功能、航班的查询功能、订票功能、退票功能以及管理本系统的功能即能够修改航班信息。
具体分析如下:1、录入功能可以录入航班信息,如录入航班号,到达城市,起飞时间,飞机票数,票价。
2、查询功能可以查询航班的各项信息,如可以查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓,航班号。
3、订票功能可以订票并且记录下乘客的相关信息如记录下乘客姓名,身份证号码,所订航班的航班号以及所订的票数。
4、退票功能可以退票并且记录乘客的相关信息以及退票信息。
5、修改功能可以根据需要由管理员对航班信息进行修改更正。
【概要设计】1、算法设计:每个模块的算法设计说明如下:(1)录入模块:查找单链表的链尾,在链尾插入一个“航班信息”的新结点。
(2)查询模块:提供两种查方式:按航号和按航线查询,1代表按航号查询,2代表按航线查询。
0则表示退出查询。
顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。
(3)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。
(4)退票模块:输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并在空位加上1,无则退票失败。
(5)修改模块:输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。
2.存储结构设计:(1)航班的信息:为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座每个结点包括数据域和指针域:C语言描述如下: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;(2)旅客的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素C语言描述如下:typedef struct passengernode{ /*定义乘客资料结点*/char name[20];char ID_num[20];char air_num[20];int seat_num;struct passengernode *next;}passengernode;【详细设计】本系统源程序如下:#include<>#include<>#define OK 1#define ERROR 0typedef 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 seat_num;struct passengernode *next;}passengernode;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 total,int left,int price); /*插入航班信息的结点*/int InsertPassenger(passengernode **p,char *name,char *ID_num,char *air_num,int seat_num); /*插入乘客资料的结点*/flightnode *modefy_airline(flightnode *l,char *air_num); /*修改航班信息的函数*/ int BookTicket(flightnode*a,char *air_num,passengernode *c,char *name,char *ID_num); /*订票函数*/int CancelTicket(passengernode *c,flightnode*l,char *name,char *ID_num); /*退票函数*/int SearchFlight(flightnode*head); /*查询航班信息函数*/int SearchPassenger(passengernode *head); /*查询乘客信息函数*/void main() /*主函数*/{int p=2; /*p==1时进入主菜单,p==0时退出系统*/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);while(p==2){printf("\n welcome to the airline system!\n\n please choose the serves below and press the number:\n\n");printf("================================================================\n\n");printf(" 1 -> Book Ticket \n");printf(" 2 -> Cancel Ticket \n");printf(" 3 -> Search Information \n");printf(" 4 -> Exit \n\n");printf(" ================================================================\n");switch(ch=getch()){case '1':{printf("\n *-------------Booking Ticket-------------*\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;case '2':{printf(" *-----------------------Canceling Ticket--------------------*\n"); /*进入退票功能*/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;case '3':{printf("*---------------Search Information---------------------*\n"); /*进入信息查询功能*/printf(" 1 -> flight information \n" );printf(" 2 -> passenger information\n ");printf(" other -> exit \n");printf("*------------------------------------------------------*\n"); if((ch=getch())=='1') /*航班信息查询*/{printf("*------------------ flight information -----------------*\n"); SearchFlight(air);}else if(ch=='2'){ /*乘客资料查询*/printf("\n please input the key:");scanf("%s",mima); /*输入管理员密码*/if(strcmp(mima,t)==0){printf("\n*---------------passenger information ---------------*\n\n");SearchPassenger(cus);}else printf("sorry,the key is wrong");getch();}}break;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]={"52","54","51"}; /*初始化乘客资料*/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;}int InsertFlight(flightnode **p,char *air_num,char *start_time,char *end_place,int total,int left,int 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 *l,char *air_num){flightnode *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 BookTicket(flightnode *a,char *air_num,passengernode *c,char *name,char*ID_num){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(" \nSuccessful for Booking ticket.\n\n Your flight: %s\n Your seat number : %d ",p->air_num,(p->total-p->left+1));printf("\n *-----------------------------------------*");InsertPassenger(&q,name,ID_num,air_num,p->total-p->left+1);p->left--; return OK;}else{printf("seat is full");return 0;}}/*if(strcmp)*/ }printf("Sorry,there isn't the plane,please check the airline number!");printf("\n *-----------------------------------------*");}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);l=modefy_airline(l,air_num);pr->next=p->next;p=pr->next;printf("successful for canceling ticket.");printf("\n*-----------------------------------------------------------------*");return OK;}pr=pr->next;p=pr->next;}printf("Sorry,there isn't the customer!");printf("\n *--------------------------------------------------------*"); return ERROR;}int SearchFlight(flightnode *head){flightnode *p=head->next;printf(" Flight Start_time Arrival_place Price Total Left_seat\n\n"); for(;p!=NULL;p=p->next){printf(" %s %-10s %-9s %-7d%-6d %-6d\n",p->air_num,p->start_time,p->end_ place,p->price,p->total,p->left);printf("\n");}printf(" *----------------------------------------------------------*\n\n"); return OK;}int SearchPassenger(passengernode *head){struct passengernode *q=head->next;printf(" Name ID Flight Seat_number\n\n");for(;q!=NULL;q=q->next){printf("%-12s %-8s %-5s %d\n",q->name,q->ID_num,q->air_num,q->seat_num);pr intf("\n");}printf("\n *----------------------------------------------------------*"); return OK;}【调试分析】1、调试结果:(1)系统主菜单界面:(2)进入订票的界面:(3)查询信息的界面:选择1,查询航班信息的界面:选择2,输入密码,查询乘客的信息的界面:新增乘客,查询乘客信息:密码错误时:(4)进入退票的界面:名字或者证件错误时:2、时间复杂度分析:本程序运行所耗费的时间主要在于循环语句,for和while语句,其时间复杂度应该为O(n)。
数据结构课程设计 航空客运订票系统
《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期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()函数查询并以指针形式返回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
航空公司订票系统
一、我的认识和设计思路
1.我充分利用数据结构课程设计,利用几种典型数据结构(链表,队列,线性表等结构),结合上学期学习的程序设计语言(C/C++语言),链表是实现存储空间动态管理的链式存储结方式,而队是一种操作受限的线性表。
使用大量指针,来实现一个比较完整的应用系统的设计与开发。
2.我通过课程设计一些程序的调试(比如背包问题,病人看病模拟程序,停车场管理程序),通过比较系统的分析、编程和不断调试,进一步理解和掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
基本上达到了复习的要求。
3.我将知识应用于实际的方法,联想到售票系统的使用,也可以提高综合能力。
所以我选择了航空订票系统,也可以应用于其他售票系统。
航空空订票系统所涉及的知识:
(1)熟练掌握链表存储结构及其建立过程和常用操作;
(2)熟练掌握队列的建立过程和常用操作;
(3)学会自己调试程序。
4. 通过上网查询和结合实际可知,航空客运订票的业务活动包括:查询航线、客票预订和办理退票等等。
设计了一个航空公司订票系统,以使上述业务可以借助计算机来完成。
下面是一些程序功能设想:
1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);
2.全部数据可以只放在内存中;
3.系统能实现的操作和功能如下:
a) 查询航线:
根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
b) 承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,
输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补;
c) 退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
功能系统图:
实现的功能模块说明
(1)显示全部航线的信息;
(2)查询订票客户的信息;
(3)根据客户提供的终点站,调用find()函数进行查找,调用list()函数输出航线信息;
(4)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。
(5)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。
退票成功后,重新将航线名单域指向订票单链表的头指针。
根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。
(6)退出本系统
二、我进行了以下改进:
(1)主函数的表达方式。
菜单界面的的改进:
三、详细设计及运行结果(1)显示已初始化的全部航线信息
(2)浏览已订票客户信息
(4)办理订票业务
(5)办理退票业务
四、改进后的运行结果:(窗口反而变得简单,明了)
1、浏览航线信息:
2、查询航线:
3、办理退票手续:
4办理订票和查询客户信息:
五、总结和体会
总体的思路和过程
我在编译和调试的时候,选择Visual C++6.0,因为实验室的工具有些欠缺,通过上网和同学交流,进行了改进,在自己的计算机上更改了入径之后,该工具比较稳定,在使用调试这个强大工具时才发现上学期的遗留问题,还不是很熟悉。
这需要今后进一步的练习。
验证了一句话:代码是敲出来的,不是看出来的。
在一周半的时间里,我不断地对程序各模块进行修改、编译、调试、运行,其间遇到很多问题:在编写的时候我只会使用相对较为简单的基础语言,凭借C语言的基础,代替了相对较为复杂的语言,降低了运行效率。
其中在程序的主函数switch语句的使用中得到验证。
不同的表示会有不同的效果。
源程序会经常出现溢出错误,而且不只一处。
比如队空队满的判断,函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了一些不必要的错误。
而我又认识了几种函数应用,比如:(1)getch()和getchar()在使用是功能相同的,但getch()并非标准C中的函数,不存在C语言中,它所在头文件是conio.h。
所以在使用的时候要注意程序的可移植性。
也只有国内C语言新手常常使用getch();来暂停程序且不知道此函数来源,建议使用getchar();在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n).用getch();会等待你按下任意键,再继续执行下面的语句;(2)也知道了exit(0)://正常结束程序运行【exit(非0):非正常结束程序运行】(3)函数strcpy(lnew->name,name); 是把name指向的字符串复制给lnew->name中去;strcmp(name,info->ter_name)// 比较字符串name和
info->ter_name的大小(4)
测试用例具有一定的广泛性。
运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。
说明程序具有一定的可靠性和稳定性,可以应用于其他一些系统中。
加深了自己对c语言的规范使用。
例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。
并且在调试的过程中,我也发现使用结构体数组来存储存编译的字符,编译代码时通过结构体数组来实现要优于使用链表。
学习体会
这次的大作业,是我更加认识了数据结构,对调试掌握的也更加熟练了一些,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,理解了调试的目的和意义,意识到了程序语言的规范性以及我们在编程时要耐心,要严谨,同时在写程序时多多加些注释,既增加了程序的可读性,也可以使自己在读程序时更容易,更清楚。
可以说在这次实践中我对c语言又进行了一次重温,对认识了一些函数
库,利用互联网,我找出了他们的真正妙处,当然结构是让人很兴奋的。
我也觉得原来大作业的意义是让我们真正认识了程序,对程序有了新的感觉。
虽然课结束了,可知识永无止境的,相信自己的认识也得到了提高。