民航售票管理系统课程设计C.docx
《民航售票管理系统课程设计C.docx》由会员分享,可在线阅读,更多相关《民航售票管理系统课程设计C.docx(21页珍藏版)》请在冰豆网上搜索。
民航售票管理系统课程设计C
课程设计报告书
民航售票管理系统
1.选择题目
题目:
民航售票管理系统
2.内容摘要
摘要:
对民航的运营而言,售票是民航最关键的部分之一,也是民航的“生命线”。
而售票管理又是售票的核心技术。
实行电子化的售票管理,可以让人力资源管理人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作,更重要的是用最短的时间能非常精确地完成工作,达到公司和顾客利益的最大化。
本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能,并画出功能框图,对设计思路、研究开发的过程、实现细节、开发工作进行了比较完整的综述,最后给出了作者在小学期设计过程的体会。
3.索引关键字
关键词:
民航售票管理,功能框图,动态链表,文件保存
4.目录
1.题目要求---------------------------------4
2.设计思想---------------------------------5
3.系统完成功能及框图-----------------------6
4.界面设计---------------------------------6
5.核心代码及说明---------------------------8
6.结论-------------------------------------10
7.后记-------------------------------------15
8.参考资料----------------------------------17
9.附录-------------------------------------18
5.正文
5.1课程设计题目要求
5.1.1内容要求
本系统要求实现如下功能:
1.航班信息录入功能。
航班信息用文件保存。
2.航班信息的维护功能。
航班信息增加、删除、修改功能。
3.浏览航班信息功能。
4.航班信息查询功能。
根据航班号、终点站、飞行时间等条件查询。
5.订票功能。
对订票信息应该存储在一个数组或链表中,每次进行订票时应该先统计该天该航班的已定人数,如果超过成员定额,则不能订票。
6.统计每个航班某一天的已售(订)出座位数、剩余座位数。
7.退票功能。
输入用户名或订票编号,在订票信息链或数组中删除该条信息。
5.1.2设计要求
①建立两个二进制文件:
其中之一,用来存放航班信息;另一个用来存放客户订票信息。
②结构体采用动态链表形式,用动态链表存放数据,及实现数据的存储与读取。
③在两个动态链表间,用指针连接起来。
④设计一个漂亮的欢迎界面和友好的系统界面。
⑤要求系统能够根据系统菜单相应的功能执行相应的部分。
⑥要求能够实现录入、查询等相应的功能。
流程图:
源程序部分及其界面图:
1.主函数:
主函数主要是通过调用其他函数来实现其功能的,主函数如下:
voidmain()
{
charfilename[20],filename2[20],ch;
intt,k,n;
huanying();
printf("请输入要打开航班信息的文件名:
");
gets(filename);
head=insert(filename);
printf("请输入要打开订票信息的文件名:
");
gets(filename2);
inse(filename2);
while
(1)
{system("cls");
t=select();
switch(t)
{
case1:
scan();break;
case2:
t=search2();if(!
t)printf("没有到达该终点的航班!
!
!
");printf("\n按回车键返回…");getchar();getchar();break;
case3:
t=search1();if(!
t)printf("没有该时间出发的航班!
!
!
");printf("\n按回车键返回…");getchar();getchar();break;
case4:
t=search();if(!
t)printf("没有该航班!
!
!
!
");printf("\n按回车键返回…");getchar();getchar();break;
case5:
add();break;
case6:
t=modify();if(!
t)printf("没有该航班!
!
!
!
");printf("\n按回车键返回…");getchar();getchar();break;
case7:
t=del();if(!
t)printf("没有该航班!
!
!
!
");printf("\n按回车键返回…");getchar();getchar();break;
case8:
book();break;
case9:
printf("按姓名(X)删除,还是按订票编号(d)删除?
");getchar();scanf("%c",&ch);
if(ch=='x'||ch=='X')refund();elserefun();printf("\n按回车键返回…");getchar();getchar();break;
case10:
save(filename);break;//保存航班信息
case11:
savename(filename2);break;//保存退订票信息
case12:
scan2();printf("\n按回车键返回…");getchar();getchar();break;
case13:
printf("请输入要统计的航班号:
");scanf("%d",&n);k=tongji(n);
printf("订%d的人数共有:
%d还剩余%d个座位",n,k,shengyu-k);printf("\n按回车键返回…");getchar();getchar();break;//统计订票信息
case14:
system("cls");
printf("\n\n\n\n\n\n\t\t\t\t谢谢使用\n\t\t\t\t!
!
!
\n\n\n");exit(0);
}
}
}
2.欢迎界面函数
该函数为欢迎用户使用功能的函数:
voidhuanying()
{
printf("\n\n\n\t********************************************\n\n\n");
printf("\t欢迎使用民航订票系统\n\n\n");
printf("\t********************************************\n\n\n");
}
3.界面函数
界面函数主要是为用户提供一个友好的操作界面,如下所示:
intselect()
{
intt;
printf("\n***********************************菜*单***********************************");
printf("\t\t\t1.浏览信息\t2.按终点查找\n\t\t3.按起飞时间查找\t4.按航班号查找\n");
printf("\t\t5.增添信息\t6.修改信息\n\t\t7.删除信息\t8.订票\n");
printf("\t\t9.退票\t10.保存航班信息\n\t\t11.保存退订票信息\t12.查看订票情况\n");
printf("\t\t13.统计订票信息\t14.退出\n");
printf("***********************************菜*单***********************************\n");
printf("请选择(1--8):
");
loop:
scanf("%d",&t);
if(t<=0||t>14)
{printf("输入不合法!
!
!
请重输…");
gotoloop;
}
returnt;
}
主界面的设计
4读取函数
读取函数主要是针对需要从文件中读入数据的需求而编写的,其功能为:
可以从一个二进制文件中读入数据,其源程序如下:
/*从文件中读入OK*/
Read*insert(charfilename[])
{
Read*head,*p;
structnewst;
head=(Read*)malloc(sizeof(Read));
end=head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
returnhead;
elseif(!
feof(fp))
if(fread(&t,sizeof(structnews),1,fp)==1)
{
p=(Read*)malloc(sizeof(Read));//连入第一个节点
p->number=t.number;
strcpy(p->start,t.start);
strcpy(p->finish,t.finish);
p->fly.hour=t.fly.hour;
p->fly.minute=t.fly.minute;
p->land.hour=t.land.hour;
p->land.minute=t.land.minute;
p->man=t.man;
p->amount=t.amount;
p->infor=t.infor;
head=end=p;
p->next=NULL;
while(!
feof(fp))
{
if(fread(&t,sizeof(structnews),1,fp)==1)
{p=(Read*)malloc(sizeof(Read));//连入其他节点
p->number=t.number;
strcpy(p->start,t.start);
strcpy(p->finish,t.finish);
p->fly.hour=t.fly.hour;
p->fly.minute=t.fly.minute;
p->land.hour=t.land.hour;
p->land.minute=t.land.minute;
p->man=t.man;
p->amount=t.amount;
p->infor=t.infor;
end->next=p;
p->next=NULL;
end=p;
}
}
}
fclose(fp);
returnhead;
}
5保存信息函数
保存信息函数主要功能是将要保存的信息保存到一个二进制文件当中,其源程序如下:
voidsave(charfilename[])
{
Read*p;
In*q;
structnewst;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("不能打开%s文件!
!
!
",filename);
exit
(1);
}
else
{
p=head;
while(p!
=NULL)
{
p->amount=0;
q=p->infor;
while(q!
=NULL)
{
p->amount++;q=q->next;
}
t.number=p->number;
strcpy(t.start,p->start);
strcpy(t.finish,p->finish);
t.fly.hour=p->fly.hour;
t.fly.minute=p->fly.minute;
t.land.hour=p->land.hour;
t.land.minute=p->land.minute;
t.man=p->man;
t.amount=p->amount;
t.infor=p->infor;
fwrite(&t,sizeof(structnews),1,fp);
p=p->next;
}
}
fclose(fp);
printf("保存文件成功,按任意键返回…");
getchar();getchar();
}
航班信息的保存
6.添加航班信息的函数
添加航班信息函数的主要功能是实现航班信息的录入,是客户添加信息的主要途径。
将信息添加后,可通过保存函数将信息保存到文件当中,其源程序代码如下:
voidadd()
{
Read*t,*p=head;
t=(Read*)malloc(sizeof(Read));
printf("\n请输入航班号:
");getchar();scanf("%d",&(t->number));
printf("\n请输入起始站:
");scanf("%s",t->start);
printf("\n请输入终点站:
");scanf("%s",t->finish);
printf("\n请输入起飞时间(中间用“:
”隔开):
");scanf("%d:
%d",&(t->fly.hour),&(t->fly.minute));
printf("\n请输入降落时间(中间用“:
”隔开):
");scanf("%d:
%d",&(t->land.hour),&(t->land.minute));
printf("\n请输入载客定额:
");scanf("%d",&(t->man));
t->infor=NULL;
if(head==NULL)/*空目录时*/
{
head=t;
head->next=NULL;
}
else/*在表尾添加*/
{
while(p->next!
=NULL)p=p->next;
p->next=t;
t->next=NULL;
}
printf("输入成功!
!
!
");
printf("按回车键返回…");getchar();getchar();
}
航班信息的增添
7.删除航班信息函数
删除航班信息函数主要功能是删除没用的航班信息,是信息维护函数之一。
删除后可通过保存函数来删除文件中的信息。
其源程序代码如下:
intdel()
{
intnum;
chart;
intflag=0;
Read*p=head,*p1=head;
if(p==NULL)
printf("文件中没有信息!
!
!
");
printf("请输入要删除的航班号码:
");
scanf("%d",&num);
if(p!
=NULL)
{
while(p!
=NULL&&p->number!
=num)/*找到了*/
{p=p->next;}
if(p==NULL)gotoloop;
printf("*航班号起点终点起飞时间降落时间载客定额*\n");
printf("%-9d%-18s%-18s%d:
%-7d%d:
%-7d%d\n",p->number,p->start,p->finish,p->fly.hour,p->fly.minute,p->land.hour,p->land.minute,p->man);
printf("您确定要删除?
(Y:
是N:
否)\n");/*确认删除*/
getchar();
scanf("%c",&t);
if(t=='y'||t=='Y')
{
if(p==head)
head=head->next;
else
{
while(p1->next!
=p)
p1=p1->next;
p1->next=p->next;
}
printf("已成功删除!
");
}
elseprintf("成功取消!
!
!
");
flag=1;
}
loop:
returnflag;
}
删除航班信息
8.修改航班信息函数
修改航班信息函数的主要功能是修改已经录入或已保存在文件中的航班信息,是维护航班信息函数之一。
其源程序代码如下:
intmodify()
{
Read*p=head;
intn,flag=0;
if(p==NULL)
printf("文件错误!
!
!
");
else
{
printf("请输入需要修改的航班号:
");
scanf("%d",&n);
while(p!
=NULL)
{
if(p->number==n)
{
printf("*航班号起点终点起飞时间降落时间载客定额*\n");
printf("%-9d%-18s%-18s%d:
%-7d%d:
%-7d%d\n",p->number,p->start,p->finish,p->fly.hour,p->fly.minute,p->land.hour,p->land.minute,p->man);
scanf("%d%s%s%d:
%d%d:
%d%d",&(p->number),p->start,p->finish,&(p->fly.hour),&(p->fly.minute),&(p->land.hour),&(p->land.minute),&(p->man));
printf("修改成功!
");
flag=1;
}
p=p->next;
}
}
returnflag;
}
9.实现查找功能的函数
该类函数主要有:
按终点地址查找的函数,按起飞时间查找的函数、按航班号查找的函数。
只举一例说明:
intsearch2()
{
intflag=0;
charfinish[N];
Read*p=head;
printf("请输入终点地址:
");
scanf("%s",finish);
while(p!
=NULL)
{
if(strcmp(finish,p->finish)==0)
{printf("*航班号起点终点起飞时间降落时间载客定额*\n");
printf("%-9d%-18s%-18s%d:
%-7d%d:
%-7d%d\n",p->number,p->start,p->finish,p->fly.hour,p->fly.minute,p->land.hour,p->land.minute,p->man);
flag=1;}
p=p->next;
}
returnflag;
}
按终点站查询航班
10.订票函数
订票函数的主要功能是让客户可以搜索航班信息后,按航班号订票的函数。
其源程序代码如下:
voidbook()
{
intnum,flag=0,k,j;
Read*p=head;
In*t,*q;
t=(In*)malloc(sizeof(In));
printf("请输入你要订的航班号:
");
scanf("%d",&num);
while(p!
=NULL)//查找航班号
{
if(p->number==num)
{flag=1;q=p->infor;break;}
p=p->next;
}
if(!
flag)
printf("没有该航班!
!
!
");
else
{
k=tongji(num);
while(q!
=NULL)
{q=q->next;}
q=p->infor;
printf("请输入你要订的票数:
");
scanf("%d",&t->n);
if(k>=p->man)
printf("对不起,票已售完…");
else
{
printf("您要订的航班信息为:
\n");
printf("*航班号起点终点起飞时间降落时间载客定额*\n");
printf("%-9d%-18s%-18s%d:
%-7d%d:
%-7d%d\n",p->number,p->start,p->finish,p->fly.hour,p->fly.minute,p->land.hour,p->land.minute,p->man);
printf("请输入你的姓名:
");
scanf("%s",t->name);
if(q==NULL)
{p->infor=q=t;q->next=NULL;q->bh=1;
printf("您的订票编号为:
%d\n",q->bh);
printf("恭喜您,订票成功!
!
!
");
}
else
while
(1)
{
if(q->next==NULL)
{q->next=t;j=q->bh+1;q=q->next;q->next=NULL;
q->bh=j;
printf("您的订票编号为:
%d\n",j);
printf("恭喜,订票成功!
!
!
");
break;}
elseq=q->next;
}
}
}
printf("按回车键返回…");getchar();getchar();
}
订票界面
11.退票函数
退票函数主要功能是让已订票,但由于某种原因而退票的客户使用的功能,其源程序代码如下:
voidrefund()//退票模块
{
charch,name[20];
intnumber;
In*q,*q1;
Read*p=head;
printf("请输入要退票的航班号:
");
getchar();
scanf("%d",&number);
while(p!
=NULL)//查找所定的航班号
{
if(p->number==number)//找到了
{printf("您要退的航班信息为:
\n");
printf("*航班号起点终点起飞时间降落时间载客定额*\n");
printf("%-9d%-18s%-18s%d:
%-7d%d:
%-7d%d\n",p->number,p->start,p->finish,p->fly.hour,p->fly.minute,p->land.hour,p->land.minute,p->man);
q=p->infor;
break;
}
elsep=p->next;
}
if(q==NULL)printf("记错了吧!
!
!
没有人订此航班…");
else
{
printf("你确定要退票(Y是N否)?
\n");
getchar();scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{
pr