软件飞机订票系统课设.docx
- 文档编号:4356459
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:34
- 大小:138.34KB
软件飞机订票系统课设.docx
《软件飞机订票系统课设.docx》由会员分享,可在线阅读,更多相关《软件飞机订票系统课设.docx(34页珍藏版)》请在冰豆网上搜索。
软件飞机订票系统课设
目录
1、课程设计的内容和要求:
1
2、设计的作用与目的2
1性能要求:
2
2输出要求:
数据完整、详实、简洁、快速、时实。
2
3所用软件2
4系统总体设计2
3、模块设计3
(一)订票BOOK:
3
(二)退票BOUNCED:
4
(三)查询SEARCH:
4
(四)管理MANAGE6
(五)退出EXIT_FILE8
4、相关函数分析8
1链表概述8
2strcmp函数9
5、源程序设计9
6、实验调用结果21
7、实验中的问题及方案及设计心得:
27
8、参考文献:
27
1、课程设计的内容和要求:
实践环节具体任务:
设计、开发一种飞机订票系统。
通过此系统可以实现如下功能:
航班信息录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
航班信息查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;A
航班机票订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
航班机票退票:
可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
2、设计的作用与目的
为机场工作人员提供订票退票等与机票相关内容的管理系统,方便机场工作人员对机票的管理,以提高机场工作人员对机票管理工作的效率。
1性能要求:
准确性:
录入的信息(包括飞机航班的信息,飞机票的预定情况等)都必须准确无误的记录在系统中。
实时性:
能及时反映在机票管理系统平台上,并可以进行及时的刷备份和恢复。
安全性:
数据的录入采用尽可能的校验方法严格校验,数据的维护和管理由系统管理员专门负责,系统具有较强的可扩充性。
2输出要求:
数据完整、详实、简洁、快速、时实。
实现目标
系统实现后,可以大大提高飞机票管理的效率,降低飞机票管理中的出错率,减少信息交流的繁琐过程以及带来的不必要的开销。
可行性研究
技术可行,现有技术可完全承担开发任务。
操作可行,软件能被原有工作人员快速接受。
3所用软件
本次课程设计主要用到的是VisualC++6.0.
4系统总体设计
机场工作人员通过飞机票预定系统将票售与乘客,而乘客可以通过该系统实行退票行为。
细化整个机票管理系统,将此分为订票、退票、查找、管理四大部分。
按照自定向下逐步细化得到下图:
机票管理系统的具体功能为:
录入机场近期航班情况,并进行严格校验,保证原始数据的绝对准确。
由录入数据进而建立订票系统、退票系统、查询系统、管理系统。
订票系统中,具有严格的乘客身份录入,并同时对当次航班票数做出统计。
机票分受完与未受完两种,要根据不同情况采取不同措施。
退票系统中,严格校验退票人身份,并明确相应的返还金额。
查询系统中,分为不同的查询方式,有按航班号查找、按照乘客姓名查询、按照日期查询、按照起飞港到达港查询。
管理系统中,细化模块,整体把握机票售出情况和近期及某天飞机飞行情况,并具有新增航班和取消航班的功能。
3、模块设计
机票管理软件主要包括以下五个主要模块:
(一)订票BOOK:
在进入订票系统后,进行订票,将会出现需所定航班的机票已经售完的情况,软件对于此情况将能够给予响应。
针对这一情况,订票系统中,需要有循环计数器功能,用来完成统计机票出售情况。
综合各项情况,得出下示粗略算法:
If(tickethadsoud)
{
If(需要订票)其他航班
Elsereturntomainmenu
}
Else{
printf(“thesuplusnumberofthisflight:
);
askBOOK?
if(NO)
printf(“pleaseENTERreturn:
”);
if(YES)
{
printf(thesuplusnumberofplane:
);
ADD1/*调用订票函数*/
n=n-m;
ticket=n;
printf(“BOOKisOK!
pleaseENTERreturnmainmenu.”);
}
}
(二)退票BOUNCED:
m=t;
if(m==0){printf(无此航班!
按回车键回到主菜单..);
printf(请输入身份证号:
);/*严格确认乘客的身份*/
p1=men;
while(strcmp(ID,p1->ID)!
=0&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if{strcmp(ID,p1->ID)==0}
{if(p1==plane[m].men)plane[m].men=p1->next;
elsep2->next=p1->next;/*删除*/
compare(m);/*调用函数*/
}
else{printf(“无此乘客!
按回车键回主菜单…”);}
(三)查询SEARCH:
从查询者的角度出发,着眼于方便查询的角度,该软件提供了四种查询模式:
按航班号查询
while(bl==0&&i<=pla.last)
{if(plane[i].number==planenuml)/*如果找到该航班,则输出其相关资料*/
{printf(“您输入的航班号已经找到,资料如下”);
printf(“起飞港:
到达港:
起飞时间:
到达时间:
乘客定额:
飞行固定时间:
票价:
”)
bool=1;
return(i);
}
i++;
}
if(bl==0){printf(“您输入的航班号不存在!
”);return(0);}
按乘客ID查询
bl=0;
for(i=1;i<=last;i++)
{p=plane[i].men;
while(p!
=NULL)
{if(strcmp(p->ID)==0)
{printf(“乘客资料为:
”);
j=j+1;
bl=1;
}
p=p->next;
}
/*如果没查到*/
}
if(bl==0)printf(“所有航班均无此乘客!
”);
printf(“按回车键回到主菜单…”);
按日期查询
inti,j=1;
for(i=0;i<=last;i++)
if(strcmp(plane[i].starttime,date1)==0)
{printf(“航班资料”)
j++;
}
/*如果没查到*/
if(j==1)printf(“没有起飞时间为的航班”);
}
按起飞港,到达港查询
case1:
/*按起飞港查询*/
i=0;
for(i=0;i<=last;i++)
if(strcmp(plane[i].startpoint,startpoint1)==0)
{printf(航班资料)
j++;
}
/*如果没查到*/
if(j==1)printf(“没有起飞港为的航班”);
case2:
/*按到达港查询*/
i=0;
for(i=0;i<=pla.last;i++)
if(strcmp(pla.plane[i].endpoint,endpoint1)==0)
{print(“航班资料”)
j++;
}
/*如果没查到*/
if(j==1){printf(“没有到达港为的航班”)
printf(“按回车键回到主菜单…”);}
default:
print(“错误!
请重新选择...”);
}
(四)管理MANAGE
设计中以此模块为核心,将各个模块通过主界面统领在一块。
该模块的主要功能有:
飞机基本情况查询、航班某天和近期情况管理、新增航班和取消航班五大功能。
其细化流图如下:
对于五种不同情况,程序设计时采用CASE语句,分情况讨论。
case1:
search();
case2:
f1();
case2:
f2();
case2:
add();
case2:
dele()
其中search模块,是与search部分连接在一起的,通过程序之间的函数调用,实现此功能。
在f1模块中,当输入您要查询的日期时,如存在此乘客,则显示出该乘客的序号、姓名、身份证号码、订票日期、航班号及座位号。
注意到不可能只有一位乘客时此段程序将采用循环实现;又注意到会有多种情况出现时,将采用if语句进行条件判别。
for(i=1;i<=pla.last;i++)
{p=plane[i].men;
while(p!
=NULL)
{if(strcmp(a,p->time)==0)
printf(相关资料);
j=j+1;
bl=1;
}
p=p->next;
}
/*如果没有查到*/
}
if(bl==0)printf(“没有在这天订票的乘客”);
elseprintf(“本天总订票人数为,j-1”);
printf(“按回车键回到主菜单…”);
在f2模块中,则显示出航空公司的总体情况。
在Add和Dele模块中,机场工作人员可对航空公司内航班情况进行及时的修复,在中增加新开的航班信息,而在删除取消的航班资料。
删除模块
{
j=0;bl=0;
while(bl==0&&j<=pla.last)
{if(pla.plane[j].number==planenum1)
(如果找到该航班,则输出其相关资料)
bool=1;
j++;
}
if(bl==0){(“您输入的航班号不存在”);
if(确实要删除此次航班)
for(i=j-1;i {plane[i].number=plane[+1].number; strcpyplane[i].startpoint,plane[i+1].startpoint); strcpy(plane[i].endpoint,plane[i+1].endpoint); strcpy(plane[i].startime,plane[i+1].starttime); strcpy(plane[i].endtime,plane[i+1].endtime); plane[i].ticket=plane[i+1].ticket; plane[i].way=plane[i+1].peoolenum; plane[i].way=plane[i+1].way; strcpy(plane[i].time,plane[i+1p.tilme]; plane[i].men=plane[i+1].men; plane[i].money=plane[i+1].money; } last=last-1; /*数据删除已成功! */ else返回主菜单 } 增加模块 {if(增加航班)last=pla.last+1; plane[pla.last].ticket=plane[pla.last].peoplenum; plane[pla.last].men=NULL; plane[pla.last].end=NULL; elsemainmenu(); } 这一模块的设计,大大提高了公司对航班管理的效率。 (五)退出EXIT_FILE 简单的C语句即可完成该项功能。 4、相关函数分析 1链表概述 链表是一种常见的重要的数据结构。 它是动态地进行存储分配的一种结构,可以根据 需要开辟内存单元,避免了内存的浪费。 链表有一个“头指针”变量head,他存放一个地址,该地址指向一个元素。 链表中每个元素称为结点,每个节点包括两个部分: 用户需要的实际数据和下一个节点的地址 链表常用来表示复杂的数据结构,是实现动态存储分配的数据结构,其特点是: ①每个数据元素在内存中单独分配存储空间,构成一个结点; ②各数据元素之间通过指针相连,构成一个链表; ③链表都有一个“头指针”用于指示链表的开始; ④链表中每个结点的存储位置是不连续的。 要找某一元素,必须先找到上一个元素,根据它提供的下一个元素地址才能找到下一个元素。 这种链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量, 用它存放下一个结点的地址。 用结构体变量作链表中的结点是最合适的。 我们用一个指针类型成员来存放下一个结点的地址,用其他成员来存放结点中的有用数据。 链表的结点结构。 : 开始时使head指向a结点,a.next指向b结点,b.next指向c结点,这就构成链表关系。 本例中所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为静态链表.怎样动态开辟和释放存储单元呢? C语言中处理动态链表所需的函数: (1)malloc函数 void*malloc(unsigned) int(size);//在内存的动态存储区中分配一个长度为size的连续空间。 返回值为一个指向分配域起始地址的指针(void类型)若未成功,则返回空指针(NULL) (2)calloc函数 void*calloc(unsigned n,unsigned(size);//在内存的动态存储区中分配n个长度为size的连续空间。 返回值为一个指向分配域起始地址的指针(void类型)。 若未成功,则返回空指针(NULL). 用calloc函数可以为一维数组开辟内存空间,维数组元素个数,每个元素长度为size。 (3)free 函数 voidfree(void*p);//释放由p指向的内存区,使这个内存区能被其他变量使用。 C++中处理动态链表所需的函数: New、delete 2strcmp函数 所在头文件: string.h 功能: 比较字符串s1和s2。 一般形式: strcmp(字符串1,字符串2) 说明: 当s1 当s1==s2时,返回值=0 当s1>s2时,返回值>0 即: 两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。 如: "A"<"B""a">"A""computer">"compare" 特别注意: strcmp(constchar*s1,constchar*s2)这里面只能比较字符串,不能比较数字等其他形式的参数。 5、源程序设计 #include"string.h" #include"stdio.h" #include"stdlib.h" #defineSIZE20 voidmainmenu(); voidbook(); voidbounced(); voidsearch(); voidmanage(); voidexit_file(); voidsave(); voidload(); voiddele(); voidadd(); voidf1(); voidf2(); voidplanesearch(); intplasearch(inta); voidIDsearch(); voiddatesearch(); voidaddresssearch(); voidadd1(intx,inty); structaddress {charaddname[20]; structaddress*next; }; structpassenger {charname[20]; charID[20]; chartime[20]; charcompany[20]; intplanenum; charseatnum[5]; structpassenger*next; }; structplanetype {intnumber; charstartpoint[20]; charendpoint[20]; charstarttime[20]; charendtime[20]; intticket; intpeoplenum; structaddress*way; chartime[10]; structpassenger*men; structpassenger*end; intmoney; }; structplanelist {structplanetypeplane[SIZE]; intlast; }; structplanelistpla; main() { pla.last=0; load(); mainmenu(); return(0);} voidmainmenu() {intc; printf("\n\t\t欢迎使用航空客运系统\n"); printf("1: 飞机订票服务\n"); printf("2: 飞机退票服务\n"); printf("3: 飞机查询服务\n"); printf("4: 飞机管理服务\n"); printf("5: 退出管理系统\n"); printf("请选择一种功能: \n"); scanf("%d",&c); switch(c) {case1: book();break; case2: bounced();break; case3: search();break; case4: manage();break; case5: exit_file();break; default: printf("错误! 请重新选择功能: "); mainmenu(); } } voidbook() {intm,n,k,c; intpnum; charch[20]; printf("\t\t\t欢迎进入飞机订票系统"); printf("\n\t请输入预订机票的航班号: "); scanf("%d",&pnum); k=plasearch(pnum); if(k==0){printf("\n按回车键回到主菜单...");getchar();mainmenu();} n=pla.plane[k].ticket; if(n==0){ printf("\n\n机票已售完.\n\n\n是否需要继续? \n"); printf("\n1.是"); printf("\n2.否"); printf("\n请选择: "); scanf("%d",&c); if(c==2){ printf("请按回车返回: "); getchar(); mainmenu(); } if(c==1){ printf("\n请输入需要的机票数: "); scanf("%d",&m); printf("\n\n\t剩余机票数为: %d",n); add1(k,m); n=n-m; pla.plane[k].ticket=n; } } else{ printf("\n\t请输入需要的机票数: "); scanf("%d",&m); if(n>=m){ printf("\n\n\t票价为: %d",pla.plane[k].money); printf("\n\n\t剩余机票数为: %d",n); add1(k,m); n=n-m; pla.plane[k].ticket=n; printf("\n订票已成功,请按回车返回主菜单: "); getchar(); mainmenu(); } else{ printf("\n本次航班剩余票数为: %d",n); printf("\n\n请问是否继续? \n"); printf("\n1.是\n"); printf("\n2.否\n"); printf("\n请选择: "); scanf("%d",&c); if(c==2){ printf("请按回车返回主菜单: "); getchar(); mainmenu(); } if(c==1){ printf("\n\n\t剩余机票数为: %d",n); add1(k,m); n=n-m; pla.plane[k].ticket=n; printf("订票已成功,请按回车返回主菜单."); getchar(); mainmenu(); } } } getchar(); } voidadd1(intk,intm) {inti; structpassenger*p; p=(structpassenger*)malloc(sizeof(structpassenger)); for(i=1;i<=m;i++) { printf("\n\n\t请输入您的姓名: "); scanf("%s",p->name); printf("\n\n\t请输入您的ID号: "); scanf("%s",p->ID); printf("\n\n\t请输入您的坐位号: "); scanf("%s",p->seatnum); printf("\n\n\t请输入您的订票时间: "); scanf("%s",p->time); p->planenum=k; if(pla.plane[k].men==NULL) {pla.plane[k].men=p;pla.plane[k].end=p;p->next=NULL; } else{ pla.plane[k].end->next=p; pla.plane[k].end=p; p->next=NULL; } } } voidsearch() { intb; printf("\t1: 按航班号查询\n\n"); printf("\t2: 按ID查询\n\n"); printf("\t3: 按日期查询\n\n"); printf("\t4: 按起飞港,到达港查询\n\n"); printf("\n\n\t请选择一种功能: "); scanf("%d",&b); switch(b) {case1: planesearch();break; case2: IDsearch();break; case3: datesearch();break; case4: addresssearch();break; default: printf("\t错误! 请重新选择一种功能: ");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 飞机 订票 系统