高级语言程序设计课程设计航班管理报告.docx
- 文档编号:17000254
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:27
- 大小:100.17KB
高级语言程序设计课程设计航班管理报告.docx
《高级语言程序设计课程设计航班管理报告.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计课程设计航班管理报告.docx(27页珍藏版)》请在冰点文库上搜索。
高级语言程序设计课程设计航班管理报告
目录
1问题描述1
1.1系统概要:
1
1.2基本功能要求1
2总体设计1
2.1功能分析1
2.2系统主要使用的函数2
2.3系统使用的主要数据结构2
3详细设计4
3.1程序总体结构图4
3.2程序流程图4
4功能测试6
4.1航班售票系统6
5程序设计调试情况(程序设计及调试过程中碰到的问题及解决的方法)8
6课程设计小结9
参考文献10
附录系统源程序10
1问题描述
1.1系统概要:
对于航班售票这个系统我们需要建立的是具有能对数据录入,追加,浏览,检索和修改功能的软件。
由于乘客的数量较大且不固定,因此选择用动态数组来保存乘客的基本信息:
航班号,终点站名,起飞时间,经济票价,余票量等。
所以我们建立一个可以动态增长的数组,在必要的时候将数组的内容保存到文件中。
系统主要实现的操作和功能是:
录入航班信息,浏览航班信息,查询航线,订票功能,退票功能。
要实现这些功能首先要使程序实现查找功能,在查找打牌有效信息的前提下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
1.2基本功能要求
1.2.1航班售票系统实现以下功能:
(1)系统以菜单方式工作
(2)假设该民航有若干航班,要求实现增加航班和取消某个航班的功能。
(3)查询:
根据用户提出的终到站查询航班号、售票情况等航班信息;也可根据航班号,列出该航班已订票的乘客名单。
(4)订票:
根据航班号为客户订票,如该航班有余票,则为客户订票;如该航班已满员,则显示相应信息。
(5)退票:
按乘客要求退出已预定的机票。
2总体设计
2.1功能分析
2.1.1航班售票系统
(1)订票功能:
此功能是Reserve函数来实现的,里面嵌套调用了3个函数DeleteReturn,Addcustomer,
WriteCustomer,
(2)退票功能:
用的是ReturnTicket函数来实现的,里面嵌套调用了3个函数AddReturn,DeleteCustomer,WriteCustomer,
(3)修改航线功能:
在实现这个功能的时候,必须有航线的增加,取消,和修改三个不同的功能,所以编写了3个不同的函数,AddAirFlight,DeleteAirFlight,ChangeAirFlight,
(4)查询航班及乘客信息功能
WriteCustomer的作用在本部分当中体现,它用来输出客户的信息,在Init函数中,事先置入了3个默认的乘客,分别是我们小组的3个人,OutInfo函数则输出了所有航班的信息等。
2.2系统主要使用的函数
intReserve(charname[],intairNum,inti)/*订票系统函数*/
voidReturnTicket(inti,intairNum,intseat) /*退票系统函数*/
intDeleteReturn(AirFlight*p) /*删除退票函数*/
voidAddReturn(AirFlight*p,intseat) /*添加退票信息函数*/
voidChangeAirFlight() /*修改航线函数*/
voidDeleteAirFlight() /*删除航线函数*/
voidDestroyCustomer(CNode*p) /*删除客户信息函数*/
voidAddCustomer(AirFlight*p,char*name,intairNum,intseat) /*添加客户信息函数*/
voidDeleteCustomer(AirFlight*p,intseat)/*删除客户信息函数*/
voidAddAirFlight() /*添加航线信息函数*/
voidWriteAirInfo(FILE*fp) /*输出输出航线函数*/
voidOutInfo() /*输出所有信息*/
voidWriteCustomer(FILE*fp)/*输出客户文件函数*/
2.3系统使用的主要数据结构
typedefstructReturn/*定义退票系统的结构体*/
{
intseat;
structReturn*next;
}Return;
typedefstruct/*定义客户信息的结构体*/
{
charname[20];
intairNum;
intseat;
}Customer;
typedefstructCNode/*定义客户单链表的结构体*/
{
Customercust;
structCNode*next;
}CNode;
typedefstructAirFlight/*定义航班信息的结构体*/
{
intflight;
intplane;
intreservation;
intavailnum;
CNode*cHead;
Return*rHead;
structAirFlight*next;
}AirFlight;
typedefstructAirline/*定义航线信息的结构体*/
{
chardest[20];
AirFlight*head;
}Airline;
AirlineairInfo[3];/*定义三条航线为全局变量*/
3详细设计
3.1程序总体结构图
图3-1航班售票系统结构图
3.2程序流程图
图3-2-1航班售票系统中的AddCustomer()
图3-2-2航班售票系统中的ChangeAirFlight()
图3-2-3航班售票系统中的operation3()
4功能测试
4.1航班售票订票系统
图4-1-1航班售票系统主菜单
图4-1-2订票提示语
图4-1-3操作有误
图4-1-4订票成功
5程序设计调试情况(程序设计及调试过程中碰到的问题及解决的方法)
在程序设计中,我遇到的最大的问题就是结构体变量的定义和链表的运用,因为一开始在学习链表的时候我就感觉到很吃力,所以在编航空售票系统的大程序时,我上网查找了很多资料,有不懂的也去XX,或者在同学之间讨论,至今还有一些不能熟练运用,但和之前相比已经有了很大的进步,我会在今后的学习中进一步巩固。
在调试过程中,也有不少的问题。
一开始程序的健壮性不够,导致一旦输入有误,程序将终止,无法回到原来界面,操作失败。
并且在一些循环语句中未释放原有内存,导致重复出现提示语。
文件的名字和文件名不一致而出错,这是连接时候出现的问题。
if语句中的内容未用大括号括起来,导致程序错误,无法运行。
6课程设计小结
这次基本完成了设计的要求,编写好的程序整体上运行的结果与题目要求相吻合,算法大多比较通用,各个函数模块的正确性、完备性、对输入的容错能力以及算法的进一步改进在设计中都有表述,通过这次课程设计,是我熟悉了文件的输入输出操作,也深刻认识到了链表在实际的操作中有多么的难,对链表进行深层次的理解。
本次程序编写我从简单入手,在进行复杂的编写过程。
首先我搜集资料,掌握航空售票系统方面的种种相关知识,其次我们对这个系统应该如何编译作了一个简单的思考和讨论,确定要运用到的知识和相关难点,并对这些难点进行解决,最终到发杂的程序上,课程设计培养了我们综合运用所学理论知识解决复杂问题的实践能力,研究性的学习能力和团队精神。
总结我这一周的实训,我学到了很多的知识。
不论是理论知识的掌握亦或是实践经验的积累,我都有了进一步的提升。
面对科学实践过程中所遇到的难题,要永不退缩,严谨,认真,无所畏惧地面对它。
正如本次的课程设计,编写的过程很艰难,一个小小的错误都会导致最终程序无法正常运行,并且找起错误来很费时间,也很难找。
因此,只有我们每个人认真严谨的完成自己的任务,尽量不犯一丝一毫的错误,不粗心大意,这样才能高效的完成任务。
本以为掌握课本上所教授的理论知识对于我们当代大学生而言就足够了。
然而,在为期一周的实训过后才发现这样的理解是十分错误的。
理论知识若没有经过实践的考验,那它便是经不起推敲的。
只有把实践和理论结合起来,用理论知识支持实践,用实践来肯定理论知识,才能提高自己的学习能力和动手能力。
在设计的过程中我们遇到了各种各样的问题,也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计,把以前所学过的知识重新温故,巩固了所学的知识,也能够了解到自己相对薄弱的环节。
总而言之,本次实训我真的受益匪浅。
小组成员分工:
组长:
郭鑫负责订票模块
组员:
曾启宏负责修改航线信息模块
罗承舟负责查询航班信息模块
冯媚负责退票模块
参考文献
[1].吉顺如,陶恂等.C程序设计教程与实验.北京:
清华大学出版社,2011.6
[2].吉顺如,计春雷等.C语言程序设计习题集与课程设计指导.北京:
电子工业版社,2012.9
附录系统源程序
#include
#include
#include
#include
typedefstructReturn
{
intseat;
structReturn*next;
}Return;
typedefstruct
{
charname[20];
intairNum;
intseat;
}Customer;
typedefstructCNode
{
Customercust;
structCNode*next;
}CNode;
typedefstructAirFlight
{
intflight;
intplane;
intreservation;
intavailnum;
CNode*cHead;
Return*rHead;
structAirFlight*next;
}AirFlight;
typedefstructAirline
{
chardest[20];
AirFlight*head;
}Airline;
AirlineairInfo[3];
intReserve(charname[],intairNum,inti)/*订票系统函数*/
{
intDeleteReturn(AirFlight*p);
voidAddCustomer(AirFlight*p,char*name,intairNum,intseat);
voidWriteCustomer(FILE*fp);
FILE*fp;
AirFlight*p;
intseat;
for(p=airInfo[i].head;p&&p->flight!
=airNum;p=p->next);
if(p==NULL)return-2;
if(p->availnum==0)return-1;
else
if(p->rHead!
=NULL)
seat=DeleteReturn(p);
else
seat=p->reservation;
p->availnum--;
p->reservation++;
AddCustomer(p,name,airNum,seat);
if(!
(fp=fopen("customer.txt","w")))
{
puts("对不起,操作有误,无法打开文件\"customer.txt\"!
");
return-2;
}
WriteCustomer(fp);
returnseat;
}
voidReturnTicket(inti,intairNum,intseat)/*退票系统函数*/
{
voidAddReturn(AirFlight*p,intseat);
voidDeleteCustomer(AirFlight*p,intseat);
voidWriteCustomer(FILE*fp);
FILE*fp;
AirFlight*p;
for(p=airInfo[i].head;p&&p->flight!
=airNum;p=p->next);
if(p==NULL)
puts("对不起,操作有误,没有找到退票信息!
\n");
else
{
AddReturn(p,seat);
p->availnum++;
p->reservation--;
DeleteCustomer(p,seat);
if(!
(fp=fopen("customer.txt","w")))
{
puts("对不起,操作有误,无法打开文件\"customer.txt\"!
");
return;
}
WriteCustomer(fp);
}
return;
}
intDeleteReturn(AirFlight*p)/*删除退票函数*/
{
Return*temp;
intseat;
temp=p->rHead;
p->rHead=temp->next;
seat=temp->seat;
free(temp);
returnseat;
}
voidAddReturn(AirFlight*p,intseat)/*添加退票信息函数*/
{
Return*temp;
temp=(Return*)malloc(sizeof(Return));
if(temp==NULL)
{
puts("对不起,操作有误,分配空间失败!
");
return;
}
temp->seat=seat;
temp->next=p->rHead;
p->rHead=temp;
}
voidChangeAirFlight()/*修改航线函数*/
{
intairFlight,k,changeFlight;
AirFlight*p;
CNode*pC;
puts("请输入您所要修改的航线:
\n");
scanf("%d",&airFlight);
if(0 elseif(300 elseif(600 elseputs("对不起,操作有误,输入无效! "); for(p=airInfo[k].head;p&&p->flight! =airFlight;p=p->next); if(p! =NULL) { puts("请输入您的新航线: \n"); scanf("%d",&changeFlight); p->flight=changeFlight; for(pC=p->cHead;pC;pC=pC->next) pC->cust.airNum=changeFlight; printf("恭喜! 航线%d已成功修改成%d.\n",airFlight,p->flight); } elseprintf("对不起,不存在该航线%d! \n",airFlight); } voidDeleteAirFlight()/*删除航线函数*/ { voidDestroyCustomer(CNode*p); voidDestroyReturn(Return*p); voidOutInfo(); intairFlight,k; AirFlight*p,*pre=NULL; puts("请输入您要取消的航线! \n"); scanf("%d",&airFlight); if(0 elseif(300 elseif(600 elseputs("对不起,操作有误,输入无效! "); for(p=airInfo[k].head;p&&p->flight! =airFlight;p=p->next)pre=p; if(p==NULL) { printf("对不起,不存在该航线%d! \n",airFlight); return; } if(pre==NULL)airInfo[k].head=p->next; elsepre->next=p->next; DestroyCustomer(p->cHead); DestroyReturn(p->rHead); free(p); printf("恭喜! 已成功取消该航线%d\n",airFlight); OutInfo(); } voidDestroyCustomer(CNode*p)/*删除客户信息函数*/ { CNode*pNext; while(p! =NULL) { pNext=p->next; free(p); p=pNext; } } voidDestroyReturn(Return*p) { Return*pNext; while(p! =NULL) { pNext=p->next; free(p); p=pNext; } } voidAddCustomer(AirFlight*p,char*name,intairNum,intseat)/*添加客户信息函数*/ { CNode*temp; if(! (temp=(CNode*)malloc(sizeof(CNode)))) { puts("对不起,操作有误,开辟空间失败! \n"); return; } temp->cust.airNum=airNum; temp->cust.seat=seat; strcpy(temp->cust.name,name); temp->next=p->cHead; p->cHead=temp; } voidDeleteCustomer(AirFlight*p,intseat)/*删除客户信息函数*/ { CNode*temp,*pre=NULL; for(temp=p->cHead;temp&&temp->cust.seat! =seat;temp=temp->next) pre=temp; if(temp==NULL) { puts("对不起,没有找到相应的客户,请您核对后继续! "); return; } else {printf("操作成功,您的订票已成功退订! \n"); printf("期待与您的下次合作,我们将竭诚为您服务! \n"); } if(pre==NULL)p->cHead=temp->next; elsepre->next=temp->next; free(temp); } voidWriteCustomer(FILE*fp)/*输出客户文件函数*/ { inti; AirFlight*p; CNode*q; fputs(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n",fp); fputs("以下为本航空公司提供的乘客信息: \n",fp); for(i=0;i<3;i++) { fputs("\n\n",fp); fprintf(fp,"降落地点: %s\n",airInfo[i].dest); for(p=airInfo[i].head;p;p=p->next) { fputs("\n\n",fp); fputs("航班\t座位号\t乘客姓名\n",fp); for(q=p->cHead;q;q=q->next) fprintf(fp,"%d\t%d\t%s\n",q->cust.airNum,q->cust.seat,q->cust.name); } } } voidWriteAirInfo(FILE*fp)/*输出航线函数*/ { inti; AirFlight*p,*q; fputs(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n",fp); fputs("以下为本航空公司提供的航班信息: \n",fp); for(i=0;i<3;i++) { fputs("\n\n",fp); fprintf(fp,"降落地点: %s\n",airInfo[i].dest); for(p=airInfo[i].head;p;p=p->next) { fputs("\n\n",fp); for(q=p;q;q=q->next) fprintf(fp,"\t航班号: %d\n\t飞机号: %d\n\t订票数: " "%d\n\t余票数: %d\n",q->flight,q->plane,q->reservation,q->availnum); } } } voidOutInfo()/*输出所有信息*/ { FILE*fp,*fp2; if(! (fp=fopen("airinfo.txt","w"))) { puts("对不起,操作有误,无法打开文件\"airinfo.txt\"! \n"); return; } WriteAirInfo(fp); fclose(fp); if(! (fp2=fopen("customer.txt","w"))) { puts("对不起,操作有误,无法打开文件\"airinfo.txt\"! \n"); return; } WriteCustomer(fp2); fclose(fp2); } voidAddAirFlight()/*添加航线信息函数*/ { intk,airflight; AirFlight*temp; puts("请选择本次航程的着陆点: [0/1/2]\n"); puts("☆0.北京\n☆1.上海\n☆2.广州\n"); scanf("%d",&k); if(k<0||k>2) { puts("对不起,操作有误,输入无效! "); return; } printf("请输入航班号: "); switch(k) { case0: puts("[1~300]: ");break; case1: puts("[301~600]: ");break; case2: puts("[601~900]: ")
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 课程设计 航班 管理 报告