机票票务管理系统文档格式.docx
《机票票务管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《机票票务管理系统文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![机票票务管理系统文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/5/3b1c374c-5a3c-49df-b2db-82947f389af6/3b1c374c-5a3c-49df-b2db-82947f389af61.gif)
}lineinfo;
structairline*start;
voidPassword();
voidMenu();
voidmain()/*主函数*/
printf("
请输入用户名和密码后进入程序:
\n"
);
Menu();
Password();
//调用密码函数
}
#defineID12030318
#definePW12030318
externvoidMenu();
voidPassword()//密码函数
intid,pw;
/*定义用户输入的用户名和密码,应该是数字*/
intx=1;
/*输入次数*/
inty=3;
/*可输入次数*/
请输入用户名:
"
/*提示*/
scanf("
%d"
&
id);
/*用户输入用户名*/
while(x<
=3)/*利用循环多次输入*/
请输入密码:
pw);
/*用户输入密码*/
x++;
/*计数*/
if(x>
4)
密码输入错误!
按任意键退出\n"
return;
}/*如果输入三次错误循环停止*/
if(id==ID&
&
pw==PW)/*比较密码*/
输入正确!
/*提示*/
/*引用主菜单*/
/*如果用户名和密码相匹配,那么进入主菜单*/
else
y=y-1;
错误!
请重新输入!
\n还可重新输入%d次!
y);
voidInput();
/*录入信息函数*/
voidSearch();
/*查询信息函数*/
voidBook();
/*订票管理函数*/
voidReturn();
/*退票管理函数
voidMenu()/*菜单函数*/
intSEL;
intx;
charm;
while
(1)
system("
cls"
/*清屏*/
**********欢迎进入机票票务管理系统**********\n"
*
请输入您所需要的功能:
*\n"
录入航班信息
请按1
查询航班信息
请按2
订票
管理
请按3
退票
请按4
退
出
请按5
*******本程序部分功能尚不完善,请谅解*******\n"
请选择:
"
SEL);
switch(SEL)
case1:
********************************************\n"
◆◆◆录入航班信息◆◆◆\n"
Input();
是否继续进行(yorn):
%s"
m);
if(m=='
y'
||m=='
Y'
)
返回主菜单,请按0\n"
x);
if(x==0)
break;
case2:
◆◆◆查询航班信息◆◆◆\n"
Search();
case3:
◆◆◆订票
管理◆◆◆\n"
Book();
case4:
◆◆◆退票
Return();
case5:
\n谢谢使用,再见!
按任意键退出程序……\n"
exit(0);
default:
输入错误!
请重新输入:
printf("
voidSave(intm)
/*保存函数*/
inti;
FILE*fp;
if((fp=fopen("
airline_list"
"
wb"
))==NULL)
/*创建文件并判断是否能打开*/
printf("
无法打开文件!
for(i=0;
i<
m;
i++)/*将内存中职工的信息输出到磁盘文件中去*/
if(fwrite(&
lineinfo,sizeof(structairline),1,fp)!
=1)
文件写入错误!
fclose(fp);
intLoad()/*导入函数*/
inti=0;
airliner_list"
rb"
))==NULL)
do
fread(&
lineinfo,sizeof(structairline),1,fp);
i++;
while(feof(fp)==0);
return(i-1);
voidSave();
voidDisplay();
voidInput()
/*录入函数*/
/*终点站名*/
inti,m;
\n请输入录入航班信息数:
for(i=0;
i++)
\n请输入职工信息:
第%d航线的终点站名:
i+1);
ter_name);
strcpy(lineinfo.ter_name,ter_name);
第%d航线的航班号:
air_num);
strcpy(lineinfo.air_num,air_num);
第%d航线的飞机号:
plane_num);
strcpy(lineinfo.plane_num,plane_num);
第%d航线的飞行周日:
day);
strcpy(lineinfo.day,day);
第%d航线的乘员定额:
tkt_amt);
lineinfo.tkt_amt=tkt_amt;
第%d航线的余票量:
tkt_sur);
lineinfo.tkt_sur=tkt_sur;
Save(m);
/*调用录入函数*/
list();
voidSearch_num();
voidSearch_name();
voidSearch()/*查询函数*/
intt,flag;
\n按航班号查询请按1;
按终点站名查询请按2;
返回主菜单请按3\n"
t);
if(t>
=1&
t<
=3)
flag=1;
您输入有误,请重新选择!
while(flag==0);
while(flag==1)
switch(t)
按航班号查询\n"
Search_num();
按终点站名查询\n"
Search_name();
voidSearch_num()
/*根据客户提出的航班号输出航线信息*/
structairline*info,*find();
charnum[10];
intm=Load();
info=start;
请输入终点站名:
num);
while(i<
m)
if(!
strcmp(num,info->
air_num))
info++;
if(i>
=m)
对不起,该航线未找到!
终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n"
Display(info);
voidSearch_name()
/*根据客户提出的终点站名输出航线信息*/
name);
strcmp(name,info->
ter_name))
structairline*find()
/*根据系统提出的航班号查询并以指针形式返回*/
structairline*info;
charnumber[10];
请输入航班号:
number);
MAXSIZE){
strcmp(number,info->
air_num))returninfo;
对不起,该航线末找到!
returnNULL;
voidprtlink()
/*打印订票乘员名单域的客户名单信息*/
linklist*p;
info=find();
p=info->
order;
if(p!
=NULL)
客户姓名
订票数额
舱位等级\n"
while(p)
%s\t\t%d\t%d\n"
p->
name,p->
ord_amt,p->
grade);
p=p->
next;
该航线没有客户信息!
!
linklist*insertlink(linklist*head,intamount,charname[],intgrade)
/*增加订票乘员名单域的客户信息*/
linklist*p1,*new;
p1=head;
new=(linklist*)malloc(sizeof(linklist));
new)
\nOutofmemory!
strcpy(new->
name,name);
new->
ord_amt=amount;
grade=grade;
next=NULL;
if(head==NULL)/*若原无订票客户信息*/
head=new;
next=p1;
returnhead;
linkqueueappendqueue(linkqueueq,charname[],intamount)
/*增加排队等候的客户名单域*/
qptrnew;
new=(qptr)malloc(sizeof(qnode));
req_amt=amount;
if(q.front==NULL)/*若原排队等候客户名单域为空*/
q.front=new;
q.rear->
next=new;
q.rear=new;
returnq;
voidBook()
/*办理订票业务*/
intamount,grade;
(info=find()))
/*根据客户提供的航班号进行查询,如为空,退出该模块*/
请输入你订票所需要的数量:
amount);
if(amount>
info->
tkt_amt)/*若客户订票额超过乘员定票总额,退出*/
\n对不起,您输入的票的数量已经超过乘员定额!
if(amount<
=info->
tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/
请输入您的姓名(订票客户):
请输入%s票的舱位等级:
order=insertlink(info->
order,amount,name,grade);
/*在订票乘员名单域中添加客户信息*/
amount;
i++)/*依次输出该订票客户的座位号*/
%s的座位号是:
%d\n"
name,info->
tkt_amt-info->
tkt_sur+i+1);
tkt_sur-=amount;
/*该航线的余票量应减掉该客户的订票量*/
\n祝您旅途愉快!
else
/*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/
charr;
\n已经没有更多的票,您需要排队等候吗?
(Y/N)"
r=getchar();
%c"
r);
if(r=='
||r=='
\n请输入您的姓名(排队订票客户):
info->
wait=appendqueue(info->
wait,name,amount);
/*在排队等候乘员名单域中添加客户信息*/
\n注册成功!
elseprintf("
\n欢迎您下次再次订购!
}
voidReturn()
/*退票模块*/
qnode*t,*back,*f,*r;
linklist*p1,*p2,*head;
charcusname[10];
/*调用查询函数,根据客户提供的航线进行搜索*/
head=info->
请输入你的姓名(退票客户):
cusname);
while(p1!
{/*根据客户提供的姓名到订票客户名单域进行查询*/
strcmp(cusname,p1->
name))
p2=p1;
p1=p1->
if(p1==NULL)
对不起,你没有订过票!
}/*若未找到,退出本模块*/
{/*若信息查询成功,删除订票客户名单域中的信息*/
if(p1==head)
head=p1->
p2->
next=p1->
tkt_sur+=p1->
ord_amt;
grade=p1->
grade;
%s成功退票!
p1->
name);
free(p1);
order=head;
/*重新将航线名单域指向订票单链表的头指针*/
f=(info->
wait).front;
/*f指向排队等候名单队列的头结点*/
r=(info->
wait).rear;
/*r指向排队等候名单队列的尾结点*/
t=f;
/*t为当前满点条件的排队候补名单域*/
while(t)
if(info->
tkt_sur>
wait.front->
req_amt){/*若满足条件者为头结点*/
wait.front=t->
%s订票成功!
t->
t->
req_amt;
i++)/*输出座位号*/
name,(info->
tkt_sur)-i);
tkt_sur-=t->
order,t->
req_amt,t->
name,grade);
/*插入到订票客户名单链表中*/
free(t);
back=t;
t=t->
if((info->
tkt_sur)>
=(t->
req_amt)&
t!
=NULL)/*若满足条件者不为头结点*/
back->
next=t->
<
%s>
'
sseatnumberis:
if(f==r)