用 C 语言设计飞机订票系统
学生姓名:李泽华 :
摘 要 本课程设计主要用 C 语言设计了一个简单的飞机订票系统,通过此系统可以实
现录入、查询、订票、退票以及修改航班信息等功能。在课程设计中,系统开发平台为
Windows 2000,程序设计设计语言采用 Visual C,数据库采用 MS SQL 2000,程序运行
平台为 Windows 98/2000/XP。在程序设计中,采用了结构化和多分支选择等解决问题的
方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在
商业中解决实际问题。
关键词 程序设计;数据结构;C 语言;订票
1 引 言
本课程设计主要用 C 语言设计了一个简单的飞机订票系统,通过此系统可以实现
录入、查询、订票、退票以及修改航班信息等功能。
飞机订票系统是为机场工作人员和客户提供订票退票等与机票相关内容的管理系
统,方便机场工作人员对机票的管理,一提供机场工作人员对机票管理工作的效率。飞
机订票系统是飞机旅游服务信息的一个重要组成部分,既为旅客提供了优质便捷的服
务,也提高了飞机客运的售票效率。
1.1 课程设计目的
随着 Internet 的迅速发展和用户数量的急剧增加,互联网对于企业和事业单位的运
营和发展日益重要,网上交易也逐渐被人们认可,并成为未来交易的发展方向。
飞机订票系统是飞机旅游服务信息系统的一个重要组成部分。为旅客提供优质便捷
的服务,为了提高飞机客运的售票效率,丰富飞机客运的营销手段,飞机售票总站的下
属代售点可以通过公用的互联网资源,建立数据库,实现网上的售票,修改,查询及管
理工作。
1. 2 运行环境
系统开发平台为 Windows 2000,程序设计设计语言采用 Visual C,数据库采用 MS
SQL 2000,程序运行平台为 Windows 98/2000/XP
1. 3 课程设计原理
在程序设计中,可以用两种方法解决问题:一是结构化程序设计方法,二是多分支
选择的充分利用。
在结构化程序设计中关键是如何将问题域中的行为(即操作)抽取出来,作为 C 程
序中的函数。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
运用多分支选择结构,可以实现一个条件符合时程序执行若干条语句,用以提供用
户不同的操作选择。
2.1 系统实现的功能
1、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体
数据自定)
2、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达
城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城
市,查询飞机航班情况;
3、订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4、退票:可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5、修改航班信息:当航班信息改变可以修改航班数据文件。
2.2 常用函数
表 2-1 常用输入、输出流类库函数
函数说明
功能说明
scanf( )
printf( )
读入并输入数据给指定的单元
按规定的格式将值输出到标准输出设备
提供多个分支选择
将规定指向的字节输出到指定的文件中
实现指定航班数据的修改
switch( )
fwrite( )
xg_hb
2.3 流程图
开始
输
入
执 行 switch
(choice)
1
2
3
4
5
其他
执行 luru 执行 xiugai
执行 chaxun 执行 dingpiao 执行 tuipiao
输 出 “ 输 入 有
结束
图 2.1 主界面多分支选择流程图
开始
输 入 航 班 列
head_p!=null
N
N
清屏
清屏
Y
Y
调用 xg_hb 函数
图 2.2 订票流程图
3.1 算法举例说明
1.主界面菜单选择:程序使用了多分支选择结构来实现功能的选择。
void main()
{int choice;
int i=0;
do //主界面的功能选择项
{ printf("**************航空订票系统**************\n\n");
printf("
printf("
printf("
printf("
printf("
录入航班信息*********1\n\n");
修改航班信息*********2\n\n");
查询航班信息*********3\n\n");
顾客订票*************4\n\n");
顾客退票*************5\n\n");
退出*****************0\n\n");
printf("
printf("****************************************\n");
printf("
scanf("%d",&choice); //输入选项
system("cls"); //清屏
请选择");
switch(choice) //实现主界面的选择
{ case 0: exit(0);
case 1: luru(); break;
case 2: xiugai(); break;
case 3: chaxun(); break;
case 4: dingpiao(); break;
case 5: tuipiao(); break;
default: printf("您的输入有误,请重新选择:\n\n"); //输入错误
}
}
while(choice!=0);
}
2.通过指针变量实现航班信息的录入。
void luru()// 实现航班信息录入功能
{ char choice;
p_inf * p;
FILE * fp;
if((fp=fopen("d:\\plane.dat","ab"))==NULL) //文件为空
{ fp=fopen("d:\\plane.dat","wb");
}
else
;
do
{ printf("请输入要录入的航班信息,各项内容之间以空格键或 Tab 键分开\n\n");
printf("航班号,起飞时间,抵达时间,始发地,目的地,票价,折扣情况,座位总数,
剩余座位数\n");
p=(p_inf *)malloc(sizeof(p_inf));
p->discount=10.0;
p->next=NULL;
fflush(stdin);
scanf("%d%s%s%s%s%d%f%d%d",P_S);
fwrite(p,sizeof(p_inf),1,fp); //数据录入
printf("*******************************************************************
*************");
printf("继续录入请输入 Y,否则返回上一级菜单\n");
fflush(stdin);
choice=getch(); //输入赋值
system("cls"); //清屏
}
while(choice=='Y');
fclose(fp); //继续录入
}
3.通过指针变量实现航班信息的修改。
void xiugai() // 实现航班信息的修改
{ int number;
p_inf *p, *head;
head=read_p();
printf("请输入需要修改的航班号:");
scanf("%d",&number); //输入航班号
p=head;
while(p!=NULL) //数据存在则比较值是否相等
{ if(p->number==number) //如相等,该航班存在
{
printf("\n 请输入要修改后的航班信息,各项内容之间以空格键或 Tab 键分开\n\n");
printf("航班号,起飞时间,抵达时间,始发地,目的地,票价,折扣情况,座位总数,
剩余座位数\n");
scanf("%d%s%s%s%s%d%f%d%d",P_S);
break;
}
p=p->next;
}
system("cls"); //清屏
printf("*********************************************************************
***********");
if(p!=NULL)
{ write_p(head);
printf("您已成功修改%d 号航班\n",p->number);
}
else
{ printf("对不起,该航班不存在\n");
}
printf("*********************************************************************
***********");
free_p(head); //释放该链表
printf("单击任意键退出");
getch();
system("cls"); //清屏
}
4. 通过多分支选择结构 switch 语句实现功能的选择,以及通过调用 cx_hbh 和 cx_sfd 函
数通过不同的方式实现查询功能。
do // 实现航班信息查询功能
{ printf("返回主菜单********0\n\n");
printf("航班号查询********1\n\n");
printf("始发地查询********2\n\n");
printf("请输入查询方式:");
scanf("%d",&choice);
switch(choice)
{ case 1: printf("\n 请输入要查询的航班号:");
scanf("%d",&number); //输入查询的航班号
system("cls"); //清屏
cx_hbh(head,number); //实现以航班号查询
break;
case 2: printf("请输入要查询的始发地与目的地,中间以空格键或 Tab 键隔开\n");
scanf("%s%s",place_go,place_to); //输入查询的始发地与目的地
system("cls"); //清屏
cx_sfd(head, place_go, place_to); //实现以始发地及目的地查询
break;
}
}while(choice!=0);
system("cls"); //清屏
free_p(head); //释放该链表
}
5.订票过程中程序通过调用 xg_hb 函数,实现对航班信息链表的修改,完成订票过程。
do // 实现订票功能
{ system("cls"); //清屏
printf("请输入订票者信息,各项内容之间以空格键或 Tab 键分开\n\n");
printf("姓名,证件号,数量,航班号\n");
p=(c_inf *)malloc(sizeof(c_inf));
fflush(stdin);
scanf("%s%d%d%d",C_S);
p->numb_ord=length+1;
if(xg_hb(p->numb_p,p->amount_t,head_p))//调用 xg_hb 函数,实现对航班信息链表的修改
{
length++;
system("cls"); //清屏