航空订票系统报告.docx
- 文档编号:10942111
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:25
- 大小:213.25KB
航空订票系统报告.docx
《航空订票系统报告.docx》由会员分享,可在线阅读,更多相关《航空订票系统报告.docx(25页珍藏版)》请在冰豆网上搜索。
航空订票系统报告
目录
一、案例描述(一级标题标题四号黑体,段前断后0.5行)-1-
1、总体描述(二级标题小四号宋体加粗)-1-
2、模块描述-1-
二、设计思路-2-
三、程序设计-3-
1、数据结构描述-3-
2、主函数及其流程图-4-
3、源程序-5-
四、调试与分析-14-
1开始运行程序-14-
2增加信息-14-
一、案例描述
1、总体描述
本系统可以实现航空运订票的主要业务活动。
(1)航线管理。
每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行周日(星期几)、成员定额、余票量。
(2)客户管理。
有关订票的客户信息(包括姓名、订票量、仓位等级)以及等候替补的客户名单(包括姓名、所需要票量)
(3)系统实现的主要操作和功能。
系统实现的主要操作和功能如下:
1查询航线。
根据旅客提出的要求(航班号、飞机号、飞行日期、余票量)
2承办订票业务。
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号:
若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可以等待排队候补。
3承办退票业务。
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否人排队候补,首先询问排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则一次询问其他排队候补的客户。
2、模块描述
1)登录模块:
用户输入用户名和密码,系统对其验证,根据不同角色调用相应的模块。
管理员模块:
1)添加航线模块:
系统管理员添加航线的基本信息。
2)查询航线信息:
根据航班号和终点站等信息查找航线,若找到该航线,显示出该航线的信息,若无该航线,提示输入错误并返回主菜单。
3)办理退票业务:
根据客户提供的账号和姓名在所有乘客信息表中查找该航线,若无该航线提示输入错误并返回主菜单;若查找到该航线,根据客户提出的信息开始退票。
根据客户输入的姓名在订票客户的名单域中查询,客户姓名存在则退票成功。
退票成功后,根据等待补票的队列中的客户的信息判断是否满足客户要求,若满足则将该客户的信息插入到订票客户信息的单链表中并显示该客户补票成功;如果不满足则在该队列中继续查找,直到查询全部客户信息后结束查找。
4)查看已订票客户信息:
管理员输入航班号查看根据客户提供的航班号在所有航线中查找该航线,若无该航线提示输入错误并退出;若查找到该航线,显示出在订票客户单链表中存储的客户信息并显示出来。
5)查看排队等候订票信息:
管理员可以查看在等候订票的用户信息。
6)修改密码:
管理员可以修改自己的密码。
6)退出系统
用户模块:
8)查看航线模块,用户输入航班号或者终点站查看航线信息,若航线不存在给出提示信息;反之输出航线基本信息。
9)订票业务:
用户输入航班号或者终点站查找航线,若无该航线提示输入错误并退出;若查找到该航线,根据客户提出的订票数量开始订票,若订票数量大于飞机乘员定额,询问用户是否加入排队等候订票;若订票数量小于余票量,订票成功。
10)修改密码:
用户可以修改自己的密码。
11)退出系统
二、设计思路
本程序要求模块化管理,分成菜单函数、输入函数、输出函数、查询函数、排序函数等,控制各个部分从而将程序简单化出来分析。
本程序的主要功能是:
输入数据:
输入各相关数据,例如输入各学校的名称和编号。
输出数据:
输出相关学校、运动项目的结果。
查询信息:
查询某个学校或某个运动项目的分数和排名。
退出系统:
程序编译结束后退出系统。
图1航空订票系统功能模块图
三、程序设计
1、数据结构描述
本程序首先定义了三个结构体作为航线、乘客和用户的存储媒介,一是航线结构体,定义了终点站名,航班号,飞机号,飞行周日等;二是乘客结构体,定义了姓名、订票数、舱位等级等;三是用户结构体,定义了账号、密码、用户类型等。
定义如下:
航线结构体
//---------航线结构体定义-----------------
typedefstruct
{
charDes_Name[10];/*终点站名*/
charFlight_No[7];/*航班号*/
charPlane_No[6];/*飞机号*/
intWeek_Day;/*飞行周日(星期几)*/
intCustomer_Amount;/*乘员定额*/
intFree_Amount;/*剩余票数*/
intPrice[3];/*舱位等级的价格*/
//QNode*CustName;/*该航班的已订票乘客名单*/
//LinkQueueReplName;/*该航班的候补乘客名单*/
}flight_info;
typedefstruct_flight
{
flight_infoinfo;
struct_flight*next;/*指向下一航线结点*/
}flight,*pflight;
乘客结构体
//-----------乘客信息结构体--------------------------
typedefstruct
{
charAccount[20];//用户账号名,唯一
charfno[7];//预订的航班号
charName[8];//姓名
intAmount;//订票数
charRank;//舱位等级
//structcustomer*next;
}customer;
//以下为链表队列
typedefcustomerQElemType;
//链式队列的结点类型定义
typedefstructQNode
{
QElemTypedata;//数据域
structQNode*next;//指针域
}QNode,*QueuePtr;
//链式队列
typedefstruct
{
QueuePtrfront;//队头指针
QueuePtrrear;//队尾指针
}LinkQueue;
用户结构体
//-----用户信息结构体声明-------------------
//枚举类型,表示用户类型
typedefenum
{
admin=1,//管理员
guest=0//一般客户
}user_role;
typedefstruct
{
charUser_Name[20];//用户名,唯一
charPwd[8];//密码
user_rolerole;//角色;
}user_info;
typedefstruct_user
{
user_infoinfo1;
struct_user*next;//指向下一结点
}user;
2、主函数及其流程图
说明各函数功能并画出流程图
3、源程序
//--------------主函数,系统登录界面--------------------
login.c
#include
#include
#include
#include"user.h"
#include"admin.c"//管理员,模块
#include"guest.c"//普通用户,模块
intmain()
{
user*head2=NULL;
head2=init2(head2);
intsuccess=0,ch=0;
charrelogin,c;
FILE*fp=NULL;
inti;
//userTemps;
user_infoShow;
user_infoTemps;
printf("\t+-------------------------------+\n");
printf("\t|1、登录(输入用户名和密码)|\n");
printf("\t|2、注册(创建一个新的账户)|\n");
printf("\t+-------------------------------+\n");
//清除标准输入缓冲区,否者输入非法字符,程序将死循环;
while
(1){
fputs("\n\t请键入你的选择(1~2):
",stdout);
scanf("%d",&ch);
//如果用户输入文件结束标志(或者文件已被读完);
//或者发生读写错误,则退出循环。
if(feof(stdin)||ferror(stdin)){
break;
}
//没有错误发生,清空输入流。
//通过while循环把输入流中的余留数据“吃”掉;
//使用scanf("%*[^\n]");也可以清空输入流,不过会残留‘\n’字符。
while((c=getchar())!
='\n'&&c!
=EOF);
//fflush(stdin);//移植性差,
//判断是否为数字,及输入范围
if(ch<1||ch>2){
printf("\n格式错误,请输入1-2之间的整数:
\n");
}
elsebreak;
}
if(ch==1){
gotoagain;
}
else{
system("cls");
head2=addUser(head2);
save2(head2);
printf("\n\n恭喜,注册成功!
\n");
exit(0);
}
again:
system("cls");//清屏
printf("->->->->->->->->->->->->->->->\n");
printf("请输入用户名:
");
scanf("%s",Temps.User_Name);
printf("请输入密码:
");
fflush(stdin);
for(i=0;i<7;i++)
{
Temps.Pwd[i]=getch();
Temps.Pwd[i+1]='\0';
if(Temps.Pwd[i]=='\b')/*退格符*/
{
i--;
Temps.Pwd[i]='\0';
i--;
//printf("\b");
//printf("\b");
printf("\b\b");//删除前一个字符
continue;
}
if(Temps.Pwd[i]=='\r')/*回车输入结束符*/
{
Temps.Pwd[i]='\0';/**/
break;
}
printf("*");
}
fp=fopen("usert","rb");
if(fp==NULL)
{
printf("文件打开失败!
");
return;
}
while(fread(&Show,sizeof(user_info),1,fp)!
=(int)NULL)
{
if(strcmp(Temps.User_Name,Show.User_Name)==0&&strcmp(Temps.Pwd,Show.Pwd)==0)
{
printf("登录成功!
");
success=1;
break;
}
}
fclose(fp);
if(success==1)
{
if(Show.role==admin)
{
system("cls");
intl=2;
for(;l>=0;l--){
printf("\n倒计时进入操作界面:
%d秒...",l);
_sleep(1000);
system("cls");
}
admin_func(Temps);
}
else
{
system("cls");
guest_func(Temps);
}
}
else
{
fflush(stdin);
printf("\n用户名或密码错误,要重新登录(y/n)");
relogin=getchar();
if(relogin=='Y'||relogin=='y')
{
gotoagain;
}
else
{
exit(0);
}
}
return0;
}
//---------------------普通用户功能模块-----------------
guest.c
#include
#include"file.c"//文件读写函数
#include"file2.c"
#include"file3.c"
#include"ticket_booking.c"//订票
#include"flight.h"
#include"fnd_flight.c"
#include"user.h"
#include"customer.h"
#include"add_user.c"
voidmenu2_show()
{
printf("\t+------------------------------+\n");
printf("\t|1、查询航班|\n");
printf("\t|2、预订机票|\n");
printf("\t|3、订票信息|\n");
printf("\t|4、设置口令|\n");
printf("\t|5、退出系统|\n");
printf("\t+------------------------------+\n");
}
//-------------查看订票信息------------
voidsearch(user_infocurUser){
QNode*head2=NULL;
QNode*p=init3(head2);
intcount=0;
printf("航班号\t姓名\t数量\t舱位等级\n");
while(p!
=NULL){
if(!
strcmp(p->data.Account,curUser.User_Name)){
count++;
printf("%s\t%s\t%d\t%c\n",p->data.fno,p->data.Name,p->data.Amount,p->data.Rank);
}
p=p->next;
}
if(count==0)printf("没有您的订票信息!
\n");
system("pause");
}
//初始化一个空队列
LinkQueue*init_Q(LinkQueue*q){
QNode*p=(QNode*)malloc(sizeof(QNode));
p->next=NULL;
q->front=p;
q->rear=p;
returnq;
}
voidguest_func(user_infom_user)
{
flight*head=NULL;
head=init(head);
QNode*head2=NULL;
head2=init3(head2);
user*head3=NULL;
head3=init2(head3);
LinkQueuelk;
LinkQueue*q=init_Q(&lk);
q=init1(q);
intchoice,c;
//-------清空缓冲区,防止非法输入,造成死循环。
------------------
while
(1){
choice=-1;
system("cls");//清屏
menu2_show();
while
(1){
fputs("\n\t请键入你的选择:
",stdout);
scanf("%d",&choice);
//如果用户输入文件结束标志(或者文件已被读完);
//或者发生读写错误,则退出循环。
if(feof(stdin)||ferror(stdin)){
break;
}
//没有错误发生,清空输入流。
//通过while循环把输入流中的余留数据“吃”掉;
//使用scanf("%*[^\n]");也可以清空输入流,不过会残留‘\n’字符。
while((c=getchar())!
='\n'&&c!
=EOF);
//fflush(stdin);//移植性差,
if(choice<0)printf("\n输入非法,请输入数字!
");
elsebreak;
}
switch(choice){
case1:
show_flight(head);break;//查询航线
case2:
booking_ticket(head,head2,q,m_user);break;//预订机票
case3:
search(m_user);break;//查询订票信息
case4:
mod_pwd(head3,m_user);break;//更改口令
case5:
exit(0);break;//退出系统
default:
printf("错误的操作!
");break;
}
//LinkQueuelk;
//flight*head=NULL;
//QNode*head2=NULL;
//LinkQueue*q=init_Q(&lk);
//q=init1(q);
//head=init(head);
//booking_ticket(head,head2,q);
//display(head);
}
//----------------管理员功能模块------------------
admin.c
#include
#include
#include"user.h"
#include"file.c"//文件的读写
#include"file2.c"
#include"file3.c"
#include"flight.h"
#include"customer.h"
#include"add_flight.c"//添加航线
#include"del_flight.c"//删除航线
#include"fnd_flight.c"//查询航线
#include"add_user.c"
#include"refund_ticket.c"//退票
voidmenu1_show()//菜单
{
printf("\t航空订票系统v1.0beta\n");
printf("\t+---------------------------------+\n");
printf("\t|1、输入数据|5、设置口令|\n");
printf("\t|2、显示数据|6、查询订票|\n");
printf("\t|3、删除数据|7、查询预订|\n");
printf("\t|4、查询航班|8、退票|\n");
printf("\t+---------------------------------+\n");
printf("\t|9、退出系统|\n");
printf("\t+---------------------------------+\n");
//printf("\t请键入你的选择:
");
}
//-------查询已订票客户------------------
voidshow_booked(QNode*head2){
QNode*p=head2;
intnum=0;
printf("账号\t航班号\t姓名\t数量\t舱位等级\n");
while(p!
=NULL){
num++;
printf("%s\t%s\t%s\t%d\t%c\n",p->data.Account,p->data.fno,p->data.Name,p->data.Amount,p->data.Rank);
p=p->next;
}
if(num==0)printf("\n还没有订票客户!
\n");
system("pause");
}
//------查询排队预订客户----------------
voidfunc(LinkQueue*q){
QNode*p=q->front->next;
intnum=0;
printf("账号\t姓名\t数量\n");
while(p!
=NULL){
num++;
printf("%s\t%s\t%d\n",p->data.Account,p->data.Name,p->data.Amount);
p=p->next;
}
if(num==0)printf("\n暂无排队预订客户!
\n");
system("pause");
}
voidshow(pflighthead)
{
intc1=0;
flight*p=head;
printf("终点站\t航班号\t飞机号\t时间\t数量\t剩余\n");
while(p!
=NULL)
{
c1++;
//printf("%s,%s,%s",p->info.Des_Name,p->info.Flight_No,p->info.Plane_No);
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p->info.Des_Name,p->info.Flight_No,p->info.Plane_No,p->info.Week_Day,p->info.Customer_Amount,p->info.Free_Amount);
printf("\n");
p=p->next;
}
if(!
c1){
printf("航线为空!
\n");
}
getch();
}
//初始化一个空队列
LinkQueue*init_Q2(LinkQueue*q){
QNode*p=(QNode*)malloc(sizeof(QNode));
p->next=NULL;
q->front=p;
q->rear=p;
returnq;
}
voidadmin_func(user_infom_user)
{
intchoice,c;
flight*head=NULL;
user*head2=NULL;
QNode*head3=NULL;
head=init(head);//初始化
head2=init2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 订票 系统 报告