目录
1实习目的 (1)
(7)C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,上机实习可以帮助我们更好地理解这种结构式的中级语言以及其各式各样的数据类型和高效率的运算程序,为我们进一步学习打下坚实的基础。 (1)
3.1 程序功能模块 (2)
3.2 程序流程图 (2)
4.1 程序初始化 (3)
4.1.1代码功能 (3)
初始化了五个航班的基本信息。在初始化程序中,主要是航班的基本信息。比如航班号,出发时间和剩下的机票数目等等基本信息。通过运用指针和链表来进行对初始化信息的书写。在初始化时将三个重点的信息分别初始化为: (3)
4.1.2 功能实现代码 (3)
4.2 查询航班信息 (5)
4.2.1代码功能 (5)
4.2.3 功能实现代码 (6)
4.3 订票模块 (7)
4.3.1 代码功能 (7)
在此模块可以根据提示可以从航班号,飞行日期和终点站来进行订票。如果订票时余票不足所需要的票的数目时就可以进行排队购票选择。 (7)
4.3.2 功能实现代码 (7)
航班预订系统的设计与实现
1实习目的
(1)学会怎样用C语言数据结构的思想及方法做一个完整的系统。
(2)掌握数据结构的编辑,链接,运行等环节。
(3)掌握C语言数据结构中线性表的建立,插入,删除,保存节点。熟练掌握队列、树和二叉树等的使用。
(4)通过数据结构的课程设计,掌握并熟悉一个项目的开发过程,本项目利用数据结构中最基础和最重要的部分:线性表。
(5)在整个开发设计过程中掌握数据结构的思想,以及各种操作和实际应用。并可以将其运用于具体问题的解决之中。加深对数据结构课程中理论和实践相结合的认识。
(6)掌握并熟练线性表的创建、插入、删除、查找等各种常用算法。最终设计完成《航班预定系统》,将各种算法综合运用于具体的设计任务中。
(7)C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,上机实习可以帮助我们更好地理解这种结构式的中级语言以及其各式各样的数据类型和高效率的运算程序,为我们进一步学习打下坚实的基础。
2问题描述
航线管理。每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量。
客户管理。有关订票的客房信息(包括姓名、订票量、舱位等级(1,2和3)以及等替补的客房名单(包括姓名、所需标量)。
系统实现主要操作操作和功能。系统实现的主要操作规程和功能如下:
(1)查询航线。根据旅客提出的终点站名输出下列信息:航班号、飞机号、飞行日期、余标额。
(2)承办订票业务。根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队侯补
(3)承办退票业务。根据客户提供的情况(日期、航班),为客户输退票手续,然
后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额满足该客户的要求,则为其订票手续,否则依次询问其他排队候补的客户。
3 概要设计
3.1 程序功能模块
由需求分析知,本次课程设计是航空订票系统其主要由三大模块构成,即查询模块(这部分由我负责),订票系统模块和退票系统模块构成。
3.2 程序流程图
该程序开始运行后
进如航空订票系统
用户可以进行航班
信息的查询,订票
图1 系统总的流程图
该程序开始运行后进入航空订票系统用户可以进行航班信息的查询、订票和退票操作。
3.3 课程设计的思想
由需求分析知道需要实现几个功能定义了两个结构体。这两个结构体分别用来表示顾客信息和航班信息。有结构体可以知道一些基本信息,比如顾客的姓名,定的机票和航班的时间等等信息。使得实验代码的可读性大大增强。
4 详细设计
4.1 程序初始化
4.1.1代码功能
初始化了五个航班的基本信息。在初始化程序中,主要是航班的基本信息。比如航班号,出发时间和剩下的机票数目等等基本信息。通过运用指针和链表来进行对初始化信息的书写。在初始化时将三个重点的信息分别初始化为:
①广州航班号005 飞机号PZH113 机票数120
②天津航班号004 飞机号PZH121 机票数120
③北京航班号003 飞机号PZH133 机票数120
④上海航班号002 飞机号PZH132 机票数120
⑤成都航班号001 飞机号PZH122 机票数120
4.1.2 功能实现代码
void InitLine() //初始化航线信息
{
airline *p,*q; //航线
L=(airline *)malloc(sizeof(airline));
L->booked=NULL;
L->wait=NULL;
L->next=NULL;
strcpy(L->end_addr,"00000000"); //终点站
strcpy(L->line_num,"000"); //航班号
strcpy(L->plant_num,"0000000"); //飞机号
L->day=L->left=L->total=0;
q=L;
p=(airline *)malloc(sizeof(airline));//广州
p->booked=NULL;
p->wait=NULL;
strcpy(p->end_addr,"广州");
strcpy(p->line_num,"005");
strcpy(p->plant_num,"PZH113");
p->day=5;
p->left=120;
p->total=120;
p->next=q->next;
q->next=p;
p=(airline *)malloc(sizeof(airline));//天津p->booked=NULL;
p->wait=NULL;
strcpy(p->end_addr,"天津");
strcpy(p->line_num,"004");
strcpy(p->plant_num,"PZH121");
p->day=4;
p->left=120;
p->total=120;
p->next=q->next;
q->next=p;
p=(airline *)malloc(sizeof(airline));//北京p->booked=NULL;
p->wait=NULL;
strcpy(p->end_addr,"北京");
strcpy(p->line_num,"003");
strcpy(p->plant_num,"PZH133");
p->day=1;
p->left=120;
p->total=120;
p->next=q->next;
q->next=p;
p=(airline *)malloc(sizeof(airline));//上海
p->booked=NULL;
p->wait=NULL;
strcpy(p->end_addr,"上海");
strcpy(p->line_num,"002");
strcpy(p->plant_num,"PZH132");
p->day=2;
p->left=120;
p->total=120;
p->next=q->next;
q->next=p;
p=(airline *)malloc(sizeof(airline));//成都
p->booked=NULL;
p->wait=NULL;
strcpy(p->end_addr,"成都");
strcpy(p->line_num,"001");
strcpy(p->plant_num,"PZH122");
p->day=3;
p->left=120;
p->total=120;
p->next=q->next;
q->next=p;
}
4.2 查询航班信息
4.2.1代码功能
在此模块实现了查询航班的功能。当进入查询功能时,通过输入数字用户可以查询航班的基本信息,比如目的地,剩下的机票数目,出发的时间等等基本信息。如果输入的数字在界面中没有显示则会提示用户没有这次航班。在这个模块使用了个switch语
句来实现对查询方式的选择。通过判断输入的数字进入到相对应的查询方式。如果输入的信息有误的话,系统将会提示用户没有这次航班,需要重新输入。
4.2.2查询模块流程图
图2 查询模块的流程图
在该模块用户可以进行查询功能。用户根据提示可以按照航班号、飞机号、飞行日期和航班重点来查询航班的基本信息。这些基本信息包括了飞行航班号、飞机号、剩余票量和处罚日期等等。在该模块用户必须根据提示进行输入,否则系统会提示输入有误,需要重新输入。
4.2.3 功能实现代码
void search() //航班查询系统
{
int i;
int flag=0;
airline *p;
PR("请输入查询航班的方式:\n");
PR("航班号---->1\n");
PR("飞机号---->2\n");
PR("飞行日期-->3\n");
PR("航班终点-->4\n");
SC("%d",&i);
for(;!flag;)
switch(i) //switch语句来进行航班的查询方式
{
case 1: p=search_line();flag=1;break;
case 2: p=search_plant();flag=1;break;
case 3: p=search_day();flag=1;break;
case 4: p=search_addr();flag-=1;break;
default:PR("操作错误,请重新输入\n");break;
}
if(p)
{
PR("终点站航班号飞机号飞行周日余票量\n");
PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->left); PR("是否订票(确定请按1)");
SC("%d",&i);
if(i==1)
book();
}
else
PR("没有该航班\n");}
4.3 订票模块
4.3.1 代码功能
在此模块可以根据提示可以从航班号,飞行日期和终点站来进行订票。如果订票时余票不足所需要的票的数目时就可以进行排队购票选择。
4.3.2 功能实现代码
void book() //订票系统
{
int i;
int flag=0;
airline *p;
customer *cst,*c;
PR("请输入查询航班的方式:\n");
PR("航班号--->1\n");
PR("终点站--->2\n");
PR("飞行日期->3\n");
for(;!flag;)
{
SC("%d",&i);
switch(i) //运用一个switch语句进行航班查询
{
case 1: p=search_line();flag=1;break;
case 2: p=search_addr();flag=1;break;
case 3: p=search_day();flag=1;break;
default:PR("操作错误,请重新输入\n");break;
}
}
if(p)
{
PR("终点站航班号飞机号飞行周日余票量\n");
PR("%-20s%10s%10s%8d%8d\n",p->end_addr,p->line_num,p->plant_num,p->day,p->l eft);
cst=(customer *)malloc(sizeof(customer));
PR("请输入订票数量:");
SC("%d",&cst->num);
PR("请输入舱位等级(1/2/3)");
SC("%d",&cst->level);
PR("请输入您的名字");
SC("%s",cst->name);
if(cst->num<=p->left)
{
cst->next=p->booked;
p->booked=cst;
p->left=p->left-cst->num;
PR("订票成功,座位号为%d~%d\n",p->total-p->left-cst->num+1,p->total-p->left);
}
else
//当需要的飘得数量大于剩余的票数的时候进行询问是否进行排队购票
{
PR("余票不足,是否排队等候\n是(y)\n否(n)\n");
SC("%d",&flag);
if(flag)
{
if(!p->wait)
{
cst->next=p->wait;
p->wait=cst;
}
else
{
c=p->wait;
for(;c->next;c=c->next);
cst->next=c->next;
c->next=cst;
}
}
}
}
else
PR("没有该航班\n");
guide();
}
排队订票时的排队订票系统:
void waited(airline *p) //排队订票系统
{
int flag;
customer *q,*q0,*h;
if(!p->wait) return;
q=(customer *)malloc(sizeof(customer));
q->level=0;
q->num=123;
strcpy(q->name,"00000");
q->next=p->wait;
h=q;
for(;p->left>0&&q->next;)
{
if(q->next->num
{
PR("%s,您正在排队定%d张票,现有票,是否定\n是(y)\n否(n)\n",q->next->name,q->next->num);
SC("%d",&flag);
if(flag)
{
q0=q->next;
q->next=q->next->next;
q0->next=p->booked;
p->booked=q0;
p->left=p->left-q0->num;
PR("排队订票成功\n\n");
}
else
q=q->next;
}
else
q=q->next;
}
p->wait=h->next;
}
4.4退票系统模块
4.4.1代码功能
在此模块,用户可以根据系统的提示进行退票操作。当进行退票操作时需要进行信息的核对,如果正确,打印出信息,再询问是否退票。
4.4.2功能实现代码
void refund() //退票系统
{
int flag;
char a[20];
airline *p;
customer *c,*c1;
p=search_line();
c=p->booked;
if(!p)
{
PR("没有该航班\n\n");
guide();
return;
}
PR("请输入您的姓名");
SC("%s",a);
if(!p->booked->name) //进行信息的查找判断是否有用户的信息
{
PR("对不起,没有找到您的信息\n\n");
guide();
return ;
}
if(!strcmp(a,p->booked->name)) //核对完信息后输出要退票乘客的信息
{
PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",p->booked->name,p->end_addr,p->booked->num);
PR("确认要退票\n是(y)\n否(n)\n");
scanf("%d",&flag);
if(flag)
{
p->booked=p->booked->next;
p->left=p->left+c->num;
free(c);
PR("退票成功\n\n");
waited(p);
guide();
}
}
else
{
for(;c->next;c=c->next)
if(!strcmp(a,c->next->name))
break;
if(!c->next)
{
PR("对不起,没有找到您的信息\n\n");
guide();
return ;
}
else
{
PR("退票信息\n姓名/终点站/票数\n%s/%s/%d\n",c->next->name,p->end_addr,c->next->num);
PR("确认要退票?\n是(y)\n否(n)\n");//询问是否退票
scanf("%d",&flag);
if(flag)
{
c1=c->next;
c->next=c->next->next;
p->left=p->left+c1->num;
free(c1);
PR("退票成功\n\n");
waited(p);
guide();
}
}
}
}
以上三个模块是改程序最主要的功能实现的代码。初次之外还有部分其他显示模块。5测试分析
由需求分析可知该程序运行后实现功能后的结果。
5.1系统主页面
此处是功能界面,用户可以按照提示进行操作。
图3 系统界面
5.2查询操作
进行查询功能时,进行查询模块式会显示出查询方式,按照查询方式可以准确的得到航班的信息
图4 查询操作
5.3订票操作
进行订票模块时,在此处模块,订票可以根据提示进行购票,可以订多张票,输入舱位的等级和订票人名字。
图5 订票操作
5.4排队订票
排队订票系统,如果该航班剩余的票量小于所要购买的数量,则会提示是否进行排队购票。
图6 排队订票
5.5退票系统
退票系统,在该模块,进行退票操作时,系统会进行信息核对,如果正确将会显示客户信息,然后提示是否退票。
图7 退票系统
6使用说明
7总结
此次数据结构课程设计为航空订票系统。在写程序的时候还是遇到了很多的问题。有些功能怎么也实现不了。经过和同学的探讨还有上网查找资料,最后终于克服了这些问题,成功的运行出了程序。
通过这次学习,使我对编写程序的兴趣更大了。除此之外,此次课程设计帮我们熟练地运用所学习的知识,还让我们熟练的去融合他们,写出一个全新的程序来。
在这次课程设计中要衷心的感谢老师对我们的帮助,使得我们对所学知识的熟练运用。总而言之,这次的课程设计既有趣又训练了我们对知识的运用。
8参考文献
[1]阮宏一,鲁静《数据结构课程设计C/C++描述》.电子工业出版社
[2]马巧梅,庞晓琼等.《数据结构课程设计案例教程》第三版.人民邮电出版社
[3]袁蔚敏.《数据结构》清华大学出版社
9附录
源代码:
#include
#include
#include
#include
#define PR printf
#define SC scanf
typedef struct customer //客户信息
{
char name[20]; //客户姓名
int num; //订票量
int level; //舱位等级
customer *next;
}customer,*Lcustomer;
typedef struct airline //航线信息
{
char end_addr[20]; //航线终点
char line_num[5]; //航班号
char plant_num[8]; //飞机号
int day; //飞行日期
int total; //定员
int left; //剩余票数
customer *booked; //已定客户信息
customer *wait; //排队等候订票信息
airline *next;
}airline,*Lairline;
airline *L; //将航班信息定义为全局变量,减少参数传递
Lairline search_line() //按航班号查找航班{
char a[5];
airline *p;
p=L->next;
PR("请输入航班号");
SC("%s",a);
for(;p;p=p->next)
if(!strcmp(a,p->line_num)) break;
return p;
}
Lairline search_plant() //按飞机号查找航班{
char a[8];
airline *p;
p=L->next;
PR("请输入飞机号");
SC("%s",a);
for(;p;p=p->next)
if(!strcmp(a,p->plant_num)) break;
return p;
}
Lairline search_day() //按飞行日期查找航班{
int a;
airline *p;
p=L->next;