航空客运订票c语言课设.docx

上传人:b****4 文档编号:24488048 上传时间:2023-05-28 格式:DOCX 页数:22 大小:195.61KB
下载 相关 举报
航空客运订票c语言课设.docx_第1页
第1页 / 共22页
航空客运订票c语言课设.docx_第2页
第2页 / 共22页
航空客运订票c语言课设.docx_第3页
第3页 / 共22页
航空客运订票c语言课设.docx_第4页
第4页 / 共22页
航空客运订票c语言课设.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

航空客运订票c语言课设.docx

《航空客运订票c语言课设.docx》由会员分享,可在线阅读,更多相关《航空客运订票c语言课设.docx(22页珍藏版)》请在冰豆网上搜索。

航空客运订票c语言课设.docx

航空客运订票c语言课设

成绩评定表

学生姓名

张本喆

班级学号

1203030226

专业

电子信息工程

课程设计题目

航空客运订票

 

 

组长签字:

成绩

 

日期

 

2013年1月5日

课程设计任务书

学院

信息科学与工程学院

专业

电子信息工程

学生姓名

张本喆

班级学号

1203030226

课程设计题目

航空客运订票

实践教学要求与任务:

航空客运订票的业务活动包括:

查询航线、客票预定和办理退票等。

(1)将每条航线的有关信息存入计算机,如:

终点站名、航班号、飞机号、飞行周日(星期几)、时间、乘员定额、余票量、票价,已定票客户名单和等候替补客户名单(包括姓名,所需票数);

(2)查询航线:

根据旅客提出的终点站名输出下列信息:

航班号、飞机号、星期几飞、最近一天航班的日期和余票量。

(3)订票:

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续;若已满员或余票额少于订票额,则需重新询问客户要求。

若需要,可登记排队候补;

(4)退票:

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他候补客户

工作计划与进度安排:

本课程设计时间为19教学周。

其中包含设计、代码调试、课程设计论文撰写几个阶段。

第19周

星期一:

设计任务分析和总体设计

星期五:

软件算法和流程设计、软件编码实现

星期六:

软件总体调试、软件运行分析、答辩、验收程序、书写课程设计报告,提交

指导教师:

201年月日

专业负责人:

201年月日

学院教学副院长:

201年月日

目录

1需求分析……………………………………………………..5

2概要设计………………………………………………….…5

2.1题目概述……………………………………….………5

2.2算法流程图……………………………….…………6

3详细设计……………………………………………….…….7

3.1算法分析………………………………….……7

3.2核心代码…………………………….………13

4调试分析………………………………………………..…….17

5课程总结………………………………………………………20

6参考文献………………………………………………..……..20

 

1、需求分析

任务:

通过此系统可以实现如下功能:

录入:

可以录入航班情况(数据可以存储在一个数据文件中)

浏览:

航班信息浏览功能需要提供显示操作;

查询:

可提供按照航班号、起点站、终点站、飞行时间、查询,可以查询某个航线的情况(如,输入航班号,起飞抵达城市,确定航班是否满仓);另外要提供键盘式选择菜单以实现功能选择。

要求:

根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

可以建立航班结构体,结构体成员包括航班号、起点站、终点站、飞行时间、预售票总数、已售票数。

2、概要设计

2.1题目概述;

假定民航机场共有n个航班:

航班号、起始站、终点站、飞机号、飞机时间、乘员定额、余票量。

试设计一民航订票系统,使之能提供下列服务:

航班信息录入功能(文件保存)

完成航班信息浏览功能;

查询航线(至少一种查询方式)。

 

2.2算法流程图

图2.1航班信息录入流程图

图2.2航班信息浏览流程图

 

图2.3查询模块流程图

3、详细设计

3.1算法分析;

包括——各功能模块的流程图;重要模块中关键部分的代码分析;关键函数的算法设计和分析;等等;

3.1.1主函数

(1)分析:

主函数的功能比较简单,形式比较简洁,主要功能为:

在系统中没有程序所要的文件时,为程序建立一个所需的文件;调用菜单函数。

程序中的各模块都要用到同一个文件,如果该文件不存在,则该程序就无法正常运行,增加第一个功能就是保证文件的可用切可打开!

本来只要在主函数里调用各功能模块就行了,但是为了让程序能够方便的回到主函数里,所以就建立了一个菜单函数。

菜单函数的功能是替主函数调用个功能模块函数,因而设计的基本思路很简单,即:

用一个输入来接受用户的选择,加以个循环来让输入错误的用户继续输入,直到输入正确为止;用一个switch语句来选择用户所要用到的函数。

(2)程序:

voidmenu()

{

intn,w;

do

{

puts("\t\t***********************MENU***************************\n\n");

puts("\t\t\t\t1.enternewdata");

puts("\t\t\t\t2.Browseall");

puts("\t\t\t\t3.Search");

puts("\t\t\t\t4.exit");

puts("\n\n\t\t***************************************************\n");

printf("Choiceyournumber(1-4):

[]\b\b");

scanf("%d",&n);

if(n<1||n>4)

{

w=1;

getchar();

}

elsew=0;

}

while(w==1);

switch(n)

{

case1:

enter();break;

case2:

Browse();break;

case3:

Search();break;

case4:

exit(0);

}

}

/**********************主函数*********************/

main()

{menu();

}

 

3.1.2公共函数

(1)分析:

各功能模块中的分程序中的交错的较多,因而,本程序的公共函有5个,这使得各功能模块函数显得简洁,这是程序的一个特点。

此处的公共函数的功能较为简单,但他很实用。

(2)程序:

1、把航班信息输入到文件中的函数。

voidinput(i)

{

structflightt;

printf("\nflight_nostartstationendstationflytimeplan_ticketsell_ticket\n");

scanf("%d%s%s%s%d%d",&t.flight_no,t.startstation,t.endstation,t.flytime,&t.plan_ticket,&t.sell_ticket);

fp=fopen("flydata.txt","ab");

if(!

fp){printf("cannotopenthisfile\n");exit(0);}

elsefwrite(&t,sizeof(structflight),1,fp);

fclose(fp);

}

 

2、输出一个航班信息函数

voidprintf_oneflight(inti)

{

printf("\n%5d%20s%20s%10s%4d%4d\n",fly[i].flight_no,fly[i].startstation,fly[i].endstation,fly[i].flytime,fly[i].plan_ticket,fly[i].sell_ticket);

}

3、输出文件内容结构函数

voidprintf_face()

{

printf("\n\tNO.startstationendstationflytimeplan_ticketsell_ticket\n");

}

4、载入函数实现文件内容载入程序,并返回飞机航班数值。

intload()

{

FILE*fp;

inti;

if((fp=fopen("flydata.txt","rb"))==NULL)

{

printf("\nCannotopenfile\n");

exit(0);

}

for(i=0;!

feof(fp);i++)

fread(&fly[i],sizeof(structflight),1,fp);

fclose(fp);

return(i-1);

}

5、返回退出函数实现程序退出、返回。

voidprintf_back()

{

intw;

printf("\n\n\tSuccessful.^_^\n\n");

printf("Whatdoyouwanttodo?

\n\n\t1).Browseallnow\t2).back:

[]\b\b");

scanf("%d",&w);

if(w==1)Browse();

elsemenu();

}

 

3.1.3航班基本信息输入模块

航班信息录入函数:

如图2.2.1

(1)分析:

航班的基本信息,对它们输入后,要存进原文件,采用fwrite函数就可以实现。

但是,用该函数存进文件的数据都是以二进制的形式存在的,不是通常所采用的形式,可以改用fprintf函数来实现该功能。

不过本程序采用的是fwrite函数。

再用户输入完成后,程序会询问是否继续输入,这个功能更具人性化,可以省去返回到主函数在进入这个函数的麻烦!

 

(2)程序:

voidenter()

{

inti,n;

printf("Howmanyflightsdoyouwantinput?

:

[]\b\b");

scanf("%d",&n);

printf("\nEnterdatanow\n\n");

for(i=0;i

{

printf("\nInput%dthfloatrecord.\n",i+1);

input(i);

}

printf_back();

}

 

航班信息浏览函数:

如图2.2.2

显示航班信息:

voidBrowse()

{

inti,n;

n=load();

printf_face();

for(i=0;i

{

if(i%10==0)

{

printf("\nPressanykeytocontiune...");

getchar();

puts("\n\n");

}

puts("\n\n");

printf_oneflight(i);

}

printf("\tThereare%drecord.\n",n);

printf("\nPressanykeytoback...\n");

getchar();

menu();

}

 

查询模块:

如图2.2.3

分析:

基本信息的查询按查询可供选择的方式比较丰富,可按航班号查询。

在查询小模块中采用了直接查找的方法。

本模块可以通过多种查询方式进行完善。

这是本程序没有做的地方。

 

程序:

voidSearch()

{

intm,i,flight_no,flag=0;

printf("Pleaseinputflight_no:

\n");

scanf("%d",&flight_no);

m=load();

for(i=0;i

{

if(flight_no==fly[i].flight_no)

{

flag=1;

printf("\nTheflightmessageis:

\n");

printf_oneflight(i);

}

}

if(flag==1)

printf("Found!

");

else

printf("NotFound!

");

printf_back();

}

 

3.2核心代码;

#include/*头文件包含命令*/

#include

#defineN50

structflight/*结构体存放航班信息的结构*/

{

intflight_no;

charstartstation[20];

charendstation[20];

charflytime[10];

intplan_ticket;

intsell_ticket;

}fly[N];/*定义结构体变量*/

FILE*fp;

voidBrowse();

voidprintf_oneflight(inti);

voidmenu();

voidinput()/*把航班信息输入到文件*/

{

structflightt;

printf("\nflight_nostartstationendstationflytimeplan_ticketsell_ticket\n");

scanf("%d%s%s%s%d%d",&t.flight_no,t.startstation,t.endstation,t.flytime,&t.plan_ticket,&t.sell_ticket);

fp=fopen("flydata.txt","ab");

if(!

fp){printf("cannotopenthisfile\n");exit(0);}

elsefwrite(&t,sizeof(structflight),1,fp);

fclose(fp);

}

 

voidprintf_oneflight(inti)/*输出一个航班信息*/

{

printf("\n%5d%20s%20s%10s%4d%4d\n",fly[i].flight_no,fly[i].startstation,fly[i].endstation,fly[i].flytime,fly[i].plan_ticket,fly[i].sell_ticket);

}

 

voidprintf_face()/*输出文件内容结构*/

{

printf("\n\tNO.startstationendstationflytimeplan_ticketsell_ticket\n");

}

 

intload()/*载入函数实现文件内容载入程序,并返回飞机航班数值*/

{

FILE*fp;

inti;

if((fp=fopen("flydata.txt","rb"))==NULL)

{

printf("\nCannotopenfile\n");

exit(0);

}

for(i=0;!

feof(fp);i++)

fread(&fly[i],sizeof(structflight),1,fp);

fclose(fp);

return(i-1);

}

 

voidprintf_back()/*返回退出函数实现程序退出、返回*/

{

intw;

printf("\n\n\tSuccessful.^_^\n\n");

printf("Whatdoyouwanttodo?

\n\n\t1).Browseallnow\t2).back:

[]\b\b");

scanf("%d",&w);

if(w==1)Browse();

elsemenu();

}

 

voidenter()/*航班信息录入*/

{

inti,n;

printf("Howmanyflightsdoyouwantinput?

:

[]\b\b");

scanf("%d",&n);

printf("\nEnterdatanow\n\n");

for(i=0;i

{

printf("\nInput%dthfloatrecord.\n",i+1);

input();

}

printf_back();

}

voidBrowse()

{

inti,n;

n=load();

printf_face();

for(i=0;i

{

if(i%10==0)

{

printf("\nPressanykeytocontiune...");

getchar();

puts("\n\n");

}

puts("\n\n");

printf_oneflight(i);

}

printf("\tThereare%drecord.\n",n);

printf("\nPressanykeytoback...\n");

getchar();/*没有返回植*/

menu();

}

voidSearch()/*查询*/

{

intm,i,flight_no,flag=0;

printf("Pleaseinputflight_no:

\n");

scanf("%d",&flight_no);

m=load();

for(i=0;i

{

if(flight_no==fly[i].flight_no)

{

flag=1;

printf("\nTheflightmessageis:

\n");

printf_oneflight(i);

}

}

if(flag==1)

printf("Found!

");

else

printf("NotFound!

");

printf_back();

}

 

voidmenu()

{

intn,w;

do

{

puts("\t\t***********************MENU***************************\n\n");

puts("\t\t\t\t1.enternewdata");

puts("\t\t\t\t2.Browseall");

puts("\t\t\t\t3.Search");

puts("\t\t\t\t4.exit");

puts("\n\n\t\t*******************************************************\n");

printf("Choiceyournumber(1-4):

[]\b\b");

scanf("%d",&n);

if(n<1||n>4)

{

w=1;

getchar();

}

elsew=0;

}

while(w==1);

switch(n)

{

case1:

enter();break;

case2:

Browse();break;

case3:

Search();break;

case4:

exit(0);

}

}

/*********************************主函数***********************************/

main()

{

menu();/*菜单函数的功能是替主函数调用个功能模块函数*/

}

 

4、调试分析:

在第一步编程过程中很顺利的编写好了各模块,最后整合成了一个完整的程序,但在调试过程中遇到了许多问题。

如一些由于粗心导致分号,括号,字母输错的例子很多。

但都很快改正。

还有函数调用错误fp=fopen("flydata.txt","ab");我在写时丢了fopen结果一直错误,并且发现不了,后来请老师才解决问题。

还有写程序中我经常忘记头文件包含命令,以及函数声明,导致调试中出现警告。

这让我体会到只有耐心的一行一行的改错误才能把程序调试好。

运行中遇到问题:

例如,对数据的写文件操作中,我把存在fly[N]中的数据以fwrite(&fly[N,sizeof(structflight),1,fp)写入文件,结果发现文件中总是不能出现数据。

以至程序不能运行后面部分。

后来才发现取得地址错了应改成fwrite(&t,sizeof(structflight),1,fp)。

在机票显示阶段就是这问题让程序出现错误。

不能正确读出输入的飞机航班信息。

第一次输入,菜单显示如图4.1

图4.1首次录入图

 

 

第一次输入过程显示如图4.2

图4.2首次录入过程图

第一次输入结束如图4.3

图4.3首次输入结束图

第二次输入,菜单显示如图4.4

图4.4第二次录入图

5、课设总结

程序整体上运行与题目要求很吻合,算法大多比较通用,各个函数模块的正确性、完备性、对输入的容错能力以及算法的进一步改进在设计中都有表述,这道题使我熟悉了文件的输入输出操作,真切的感受到了fprintf和fwrite函数的区别!

回顾起此次课程设计,至今我仍感慨颇多,从理论到实践,在整整半个月的日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的内容。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。

在设计的过程遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识。

 

6、参考文献

[1]谭浩强编著.C++程序设计.北京:

清华大学出版社,2005

[2]谭浩强编著.C++程序设计解题与上机指导.北京:

清华大学出版社,2005

[3]谭浩强编著.C程序设计(第二版).北京:

清华大学出版社,1999

[4]谭浩强编著.C程序设计设计解题与上机指导(第二版).北京:

清华大学出版社,1999

[5]孙淑霞等C/C++程序设计实验指导与测试(第2版),电子工业出版社,2007.1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1