




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书1、设计目的和要求1、 录入航线信息:每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100)。2、 订票业务:客户信息包括姓名, 航班号, 座位号(初始为0)。有新客户订票时, 先输入客户的姓名和他提出的航班号, 查询该航线的订票情况, 若有余票, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加, 并修改该航线的订票数和余票数。若无余票, 则输出客满信息。进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。3、退票业务:根据客户提出的航班号, 办理退票,删除该客户的信息, 并修改文件相应航线的订票数和余票数。4、 修改航班信息:当航班信息改变可以修改。2、设计原理1、线性链表1.1线性链表简介线性表的链式存储结构称为线性链表,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接来实现的。因此,在链式存储方式中,每个结点由两部分组成:一部分用于存放数据元素的值,称为数据域;另一部分用于存放指针,称为指针域,用于指向该结点的前一个或后一个结点(即前件或后件)1.2线性链表分类线性链表分为单链表、双向链表和循环链表三种类型。在单链表中,每一个结点只有一个指针域,由这个指针只能找到其后件结点,而不能找到其前件结点。因此,在某些应用中,对于线性链表中的每个结点设置两个指针,一个称为左指针,指向其前件结点;另一个称为右指针,指向其后件结点,这种链表称为双向链表。 1.3线性链表的基本运算(1)在线性链表中包含指定元素的结点之前插入一个新元素。在线性链表中插入元素时,不需要移动数据元素,只需要修改相关结点指针即可,也不会出现“上溢”现象。(2)在线性链表中删除包含指定元素的结点。*:在线性链表中删除元素时,也不需要移动数据元素,只需要修改相关结点指针即可。(3)将两个线性链表按要求合并成一个线性链表。(4)将一个线性链表按要求进行分解。(5)逆转线性链表。(6)复制线性链表。(7)线性链表的排序。(8)线性链表的查找。线性链表不能随机存取。14线性表顺序存储的缺点:(1)插入或删除的运算效率很低。在顺序存储的线性表中,插入或删除数据元素时需要移动大量的数据元素;(2)线性表的顺序存储结构下,线性表的存储空间不便于扩充;(3) 线性表的顺序存储结构不便于对存储空间的动态分配。2、航班的信息为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座七个数据项:降落城市航班号飞机号飞行时间余票量总座位数起飞城市hD1D2D3单链表如下:每个结点包括数据域和指针域:数据域指针域3、 旅客的资料为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项:旅客姓名航班号座位号票的张数每个结点包括数据域和指针域:数据域指针域4、 客户链表每个数据元素包括头指针和尾指针两个数据项:每个结点包括两个指针域:头指针域尾指针域3、设计内容1、总体设计总体设计的流程图如图2-1,飞机订票系统的总的界面图如图2-2。图2-1图2-22、录入航班信息模块首先是需要进行管理员密码验证,设置的密码为char password20=guanliyuan;int addflight(air &plane)调用if(strcmp(ps,password)=0)进行密码验证,密码正确后,调用createlistcorrect(plane);增加航班信息。会依次要求输入:站名-航班号-飞机号-飞行时间客机容量-总余票量。将新航班结点插入航班链表中。如图3-1图3-13、删除航班模块添加、删除航班信息的流程图如图3-5所示。首先是需要进行管理员密码验证,设置的密码为char password20=guanliyuan; int deleteflight(air &plane)会调用if(strcmp(ps,password)=0)进行密码验证,密码正确后,调用scanf(%s,banci);锁定班次,后用语句delep=plane-next; frontp=plane;将此航班删除。如图3-2。图3-2删除前的全部航班显示: 如图3-3 图3-5图3-3 删除后的全部航班显示:如图3-4图344、查询航班模块 航班的查询有三种,目的地查询、航班号查询和查询全部航班。具体流程图如图3-9图3-9调用int searchaim(air plane)查询函数,通过if(strcmp(p-terminusname,Aim)=0) 进行目的地对应查询,找到所查询的航班号,显示航班信息printf(航班号:%s 飞机号:%s 飞行时间:%s 余量:%dn,p-flightno,p-planeno,p-flytime,p-unsellno);如图3-6图3-6调用int searchnum(air plane)查询函数,通过if(strcmp(p-flightno,Aim)=0)进行航班号对应查询,找到所查询的航班号,显示航班信息printf(航班号:%s 飞机号:%s 飞行时间:%s 余量:%dn,p-flightno,p-planeno,p-flytime,p-unsellno);如图3-7图3-7可以进行全部航班的查询显示,显示结果如图3-8图3-85、客户订票、退票模块客户订票、退票的流程图如图3-10所示 5.1订票系统 图3-10通过调用int bookticket(air &plane)函数,依次输入登记:航班号-购买的票数-姓名,后系统会分配一个座位号给你,并将新客户结点插入客户链表中。如图3-11图3-115.2退票系统通过调用int tuipiao(air &plane) 函数,依次校对:航班-日期-用户名,核对后,可以退票成功。如图3-12图3-126、登记、查询模块6.1客户登记模块客户登记模块分为已经订票的客户信息,和预订票的客户信息。同是管理员可以通过密码登陆后查询全部的已经订票的客户信息和预订票的客户信息,流程图如图3-13,客户登记,如图3-14、3-15图3-13图3-14图3-156.2管理员查看客户信息模块同是管理员可以通过密码登陆后查询全部的已经订票的客户信息和预订票的客户信息附录1:#include#include#include#include#define ERROR 0#define OK 1typedef struct aldbook/已订票人结点 char albookname20; /订票人姓名 int albookno; /订票量 struct aldbook *next;aldbook,*albook;typedef struct undbook/等候订票人节点 char unbookname20;/等候订票人姓名 int unbookno;/所需票量 struct undbook *next;undbook,*unbook;typedef struct /队列 unbook front; /队头指针 unbook rear; /队尾指针linkqueueun;typedef struct airline /航线结点 char terminusname20;/终点站名 char flightno10;/航班号 char planeno10;/飞机号 char flytime10;/起飞时间 int allnumber;/乘员定额 int unsellno;/余票量 struct airline *next; albook albookP; linkqueueun QY;airline,*air;int initqueue(linkqueueun &Q)/建立以Q为头结点的链队列,成功返回OK,否则返回ERROR Q.front=Q.rear=(unbook)malloc(sizeof(undbook); /分配存储空间,使队头队尾指针指向同一结点 if(!Q.front) return ERROR; /分配空间失败 Q.front-next=NULL; return OK;/initqueue()int initlist1(air &P) /建立存储航线信息的空链表 P=(air)malloc(sizeof(airline); if(!P) return ERROR; P-next=NULL; return OK;/initlist1()int initlist2(albook &Y) /建立存储已定票人信息的空链表 Y=(albook)malloc(sizeof(aldbook); if(!Y) return ERROR; Y-next=NULL; return OK;/initlist2()int enqueue(linkqueueun &Q,char name,int num)int deletelist(albook &Y,char name)/在存放已定票人信息的链表中删除用户名为name的结点 /并返回此用户的订票数量 int i; albook p,q; p=Y-next; q=Y; while(p&strcmp(p-albookname,name) p=p-next;q=q-next; if(!p) printf(对不起!本航班无此用户信息!请确认是否输入正确!n); return ERROR; i=p-albookno; q-next=p-next; free(p); return i;/deletelist()int createlistcorrect(air &p)/建立存储航线信息的链表 air newbase,pa; pa=p; newbase=(airline *)malloc(sizeof(airline); if(!newbase) return ERROR; printf(请依此输入以下内容:n); printf(请输入终点站名:); scanf(%s,newbase-terminusname); printf(请输入航班号:); scanf(%s,newbase-flightno); printf(请输入飞机号:); scanf(%s,newbase-planeno); printf(请输入飞行时间(输入格式为:飞行周日(用数字表示)-(具体时间): ); scanf(%s,newbase-flytime); printf(请输入客机容量:); scanf(%d,&newbase-allnumber); printf(请输入客机总余票量:); scanf(%d,&newbase-unsellno); initlist2(newbase-albookP); initqueue(newbase-QY); newbase-next=pa-next; pa-next=newbase; return OK;/createlistcorrect()int createlist(air &p)/建立以P为头结点的链表 air newbase; newbase=(airline *)malloc(sizeof(airline);/分配新的存储空间 if(!newbase) return ERROR; /分配失败 strcpy(newbase-terminusname,上海);/初始化 strcpy(newbase-flightno,AZ001); strcpy(newbase-planeno,BY747); strcpy(newbase-flytime,3-09:00); newbase-allnumber=200; newbase-unsellno=200; initlist2(newbase-albookP);/建立存储以订票人信息的头指针 initqueue(newbase-QY);/建立存储预定票人信息的队列 newbase-next=p-next; p-next=newbase; return OK; /CreateList()int addflight(air &plane)/增加航班信息,对应按键6 char password20=guanliyuan; char ps20; printf(相关操作需要密码,请输入以确定您的信息n); scanf(%s,ps); if(strcmp(ps,password)=0) printf(密码正确n); createlistcorrect(plane); return OK; else printf(密码错误,系统将要退出n); return ERROR; /addflight()int deleteflight(air &plane) /删除航班信息,对应按键7 char password20=guanliyuan ; char ps20; printf(相关操作需要密码,请输入以确定您的信息n); scanf(%s,ps); if(strcmp(ps,password)=0) printf(密码正确n); char banci10; air frontp,delep; printf(请输入要删除的航班号:); scanf(%s,banci); delep=plane-next; frontp=plane; for(;delep;) if(strcmp(delep-flightno,banci)=0) frontp-next=delep-next;free(delep); printf(删除成功!n); break; else frontp=delep; delep=delep-next; if(!delep) printf(无此航班信息!请再次输入确定n); return OK; else printf(密码错误,系统将要退出n); return ERROR; /deleteflight()int searchname(albook p, char name)/检查姓名,后面调用 albook YD; YD=p-next; while(YD) if(strcmp(YD-albookname,name)=0) return OK; else YD=YD-next; return ERROR;/searchname()int searchaim(air plane)/通过目的地查询航线,对应按键1 char Aim20; air p; p=plane-next; printf(=请输入您要查找的目的地:); scanf(%s,Aim); for(;p;p=p-next) if(strcmp(p-terminusname,Aim)=0) printf(航班号:%s 飞机号:%s 飞行时间:%s 余票量:%dn, p-flightno,p-planeno,p-flytime,p-unsellno); return OK; /if /while printf(对不起!本航空公司还未开通此航线,敬请谅解n); return ERROR;/searchaim()int searchnum(air plane)/通过航班号查询航线,对应按键2 char Aim10; air p; p=plane-next; printf(请输入您要查找的航班号:); scanf(%s,Aim); for(;p;p=p-next) if(strcmp(p-flightno,Aim)=0) printf(降落城市:%s 飞机号:%s 飞行时间:%s 余票量:%dn, p-terminusname,p-planeno,p-flytime,p-unsellno); return OK; printf(对不起!本航空公司还未开通此航线,敬请谅解n); return ERROR;/searchnum()int bookticket(air &plane)/实现订票业务,对应按键3 int i,a; char f; char banhao10; air p; albook YI; YI=(albook)malloc(sizeof(aldbook); p=plane-next; int num;loop:printf(请输入您要乘坐的航班号:); scanf(%s,banhao); for(;p;p=p-next) if(strcmp(p-flightno,banhao)=0) printf(请输入您要购买的票数:); getchar(); scanf(%d,&num); if(p-unsellno=num) printf(请输入您的姓名:); getchar(); scanf(%s,YI-albookname); a=p-allnumber-p-unsellno; printf(您的座位号为: ); for(i=1;iunsellno-=num; YI-albookno=num; YI-next=p-albookP-next; p-albookP-next=YI; printf(订票成功,为保护您的合法权益,请在主页面进行登记n); return OK; else printf(=对不起,本航班剩余座位已不足,请到主页面进行登记); return ERROR; printf(对不起,本航空公司未开通此航线,请确认输入是否正确n); printf(是否重新输入(Y/N?):); getchar(); scanf(%c,&f); if(f=Y|f=y) goto loop; else return ERROR;/bookticket()int tuipiao(air &plane) char date20; char HB10; char name20; int num; air p; unbook Q; Q=(unbook)malloc(sizeof(undbook); albook Y; Y=(albook)malloc(sizeof(aldbook); printf(=请输入您要退票的航班:); getchar(); gets(HB); for(p=plane-next;p;p-next) if(strcmp(p-flightno,HB)=0) RePutDate: printf(=请输入乘坐日期:); gets(date); if(strcmp(p-flytime,date)=0) printf(=请输入用户名:); gets(name); if(searchname(p-albookP,name) num=deletelist(p-albookP,name); p-unsellno+=num; Q=p-QY.front-next; while(Q) if(Q!=NULL&Q-unbooknounsellno) Y-albookno=Q-unbookno; strcpy(Y-albookname,Q-unbookname); p-unsellno=p-unsellno-Q-unbookno; Y-next=p-albookP-next; p-albookP-next=Y; Q=Q-next; return OK; else printf(=无此顾客信息,请确认输入是否正确,系统退出n); return ERROR; else printf(=输入的日期错误,请重新输入:); goto RePutDate; else printf(=无本航班信息,请确认输入是否正确,系统退出n); return ERROR; return OK ;/tuipiao()int albookrecord(albook &p)/建立存储已订票人信息的链表,对应按键10 albook newbase,pa; pa=p; newbase=(aldbook *)malloc(sizeof(aldbook); if(!newbase) return ERROR; printf(请依此输入以下内容:n); printf(请输入姓名:); scanf(%s,newbase-albookname); printf(请输入定票量:); scanf(%d,&newbase-albookno); newbase-next=pa-next; pa-next=newbase; return OK;/albookrecord()void Printal(albook b)/实现显示全部订票人信息,对应按键8 char password20=guanliyuan; char ps20; printf(相关操作需要密码,请输入以确定您的信息n); scanf(%s,ps); if(strcmp(ps,password)=0) printf(密码正确n); albook p; p=b-next; if(!p) printf(对不起,暂无已订票人信息n); for(;p;p=p-next) printf(订票人姓名:%s 定票量:%dn, p-albookname,p-albookno); else printf(密码错误,系统将要退出n);/Printal()int enqueue(linkqueueun &Q,char name,int num)/在队列Q中插入新的队尾元素,对应按键11 unbook Y; Y=(unbook)malloc(sizeof(undbook); if(!Y) return ERROR; strcpy(Y-unbookname,name); Y-unbookno=num; Y-next=NULL; Q.rear-next=Y; Q.rear=Y; return OK; / enqueue()void Printun(linkqueueun &Q)/实现显示全部预订票人信息,对应按键9 char password20=guanliyuan; char ps20; printf(相关操作需要密码,请输入以确定您的信息n); scanf(%s,ps); if(strcmp(ps,password)=0) printf(密码正确n); unbook p; p=Q.front-next; if(!p) printf(对不起,暂无等候排队订票人信息n); for(;p;p=p-next) printf(等候人姓名:%s 所需票量:%dn, p-unbookname,p-unbookno); else printf(密码错误,系统将要退出n);/Printun()void Print(air plane)/实现显示全部航班信息,对应按键5 air p; p=plane-next; if(!p) printf(对不起,本航空公司无航线信息n); for(;p;p=p-next) printf(降落城市:%s 航班号:%s 飞机号:%s 飞行时间:%s 余票量:%dn, p-terminusname,p-flightno,p-planeno,p-flytime,p-unsellno); /Print()void main()/主函数 int a; air plane; albook alb; linkqueueun Q; initqueue(Q); initlist1(plane); initlist2(alb); createlist(plane);loop1:printf(-欢迎使用本公司航空客运订票系统-n); printf(-本系统具有如下功能,请选择您要办理的业务-n); printf(顾客= 1、通过目的地查询航线n); printf(顾客= 2、通过航班号查询航线n);printf(顾客= 3、查看全部航班信息n); printf(顾客= 4、客票订购n); printf(顾客= 5、办理退票n);printf(顾客= 6、已订票人登记n); printf(顾客= 7、等候订票人登记n); printf(= 框内为管理员操作,非相关人员勿进=n); printf(| |n); printf(管理员= 8、添加航班信息 |n); printf(管理员= 9、删除航班信息 |n); printf(管理员= 10、查看已订票人信息 |n); printf(管理员= 11、查看预订票人信息 |n); printf(| |n); printf(= 框内为管理员操作,非相关人员勿进=n); printf(顾客、管理员= 12、退出系统n); printf(-本系统具有以上功能,请选择您要办理的业务-n); printf(请输入您要办理的业务:);loop2:scanf(%d,&a); switch(a) case 1: system(pause); system(cls); printf(-欢迎使用查询航线业务-n); searchaim(plane); system(pause); system(cls); goto loop1; break; case 2: system(pause); system(cls); printf(-欢迎使用查询航线业务-n); searchnum(plane); system(pause); system(cls); goto loop1; break;case 3: system(pause); system(cls); printf(-欢迎使用全部航线查询业务-n); Print(plane); system(pause); system(cls); goto loop1; break; case 4: system(pause); system(cls); printf(-欢迎使用客票预订业务-n); bookticket(plane); system(pause); system(cls); goto loop1; break; ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广西壮族自治区贵港市医疗三严三基理论考试模拟试题及答案
- 2024年《服装缝纫工、裁剪工》岗位从业资格证理论及技术知识考试题与答案
- 汽车电气技术试题及答案
- 6万吨工业级混合油项目可行性研究报告模板-立项拿地
- 2025关于上海市的房屋租赁合同
- 2025年:探寻民间借款合同的真相
- 2025金华小学教材购买合同
- 2025设备租赁合同的签订与违约索赔
- 2025简易二手店铺转让合同范本下载
- 2025汽车维修合同简易版范本
- 农业种植技术服务合同协议
- 2024年淮南市第一人民医院西区高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 煤矿安全监测监控系统设计课程设计
- UL3703标准中文版-2020太阳能跟进器UL中文版标准
- 2024年职业技能(农产品质量安全检测员)资格知识考试题库与答案
- 采购行业五年规划
- 拉德芳斯城市规划
- 医患沟通和技巧课件
- 基孔肯雅热的临床特征
- 《实习安全教育》课件
- 第四届中国人力资源共享服务中心调研报告 -提升HRSSC 的价值
评论
0/150
提交评论