定票系统.docx
《定票系统.docx》由会员分享,可在线阅读,更多相关《定票系统.docx(23页珍藏版)》请在冰豆网上搜索。
定票系统
学号
10210412135
武汉理工大学华夏学院
课程设计报告书
课程名称:
数据结构
题目:
飞机订票系统的C语言实现
系名:
信息工程系
专业班级:
计算机1121班
姓名:
罗伟奇
指导教师:
黄启荃
2013年6月28日
课程设计任务书
设计题目:
飞机订票系统的C语言实现
设计目的
1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法;
2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现飞机定票系统的功能;
3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养;设计任务(在规定的时间内完成下列任务)
〔问题描述〕:
通过此系统可以实现如下功能:
录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,票价折扣,确定航班是否满仓;可以输入起飞抵达城市,查询飞机航班情况;)
订票:
如果该航班已经无票,可以提供相关可选择航班;
退票:
可退票,退票后修改相关数据文件,并将退票返回到待售票中等待出售;
〔算法提示〕采用链表或其他存储结构均可实现
具体要完成的任务是:
A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。
B.写出规范的课程设计报告书;
时间安排:
6月24日---28日
第一天
布置题目,确定任务、查找相关资料
第二天~第四天
功能分析,编写程序,调试程序、运行系统;
第五天
程序验收、答辩;撰写设计报告。
具体要求
1.课程设计报告按统一通用格式书写,具体内容如下:
①设计任务与要求
②总体方案与说明
③软件主要模块的流程图
④源程序清单与注释
⑤问题分析与解决方案(包括调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);
⑥小结与体会
附录:
①源程序(必须有简单注释)②使用说明③参考资料
2.每位学生应独立完成各自的任务且每天至少在设计室工作半天;
指导教师签名:
2013年6月22日
教研室主任(或责任教师)签名:
2013年6月24日
目录
1设计题目3
2开发环境3
3开发工具3
4完成时间3
5设计思想3
6系统设计、3
7系统测试与运行7
8总结10
9心得体会10
参考文献11
附录源代码11
《数据结构》课程设计报告
1设计题目
飞机订票系统的C语言实现
2开发环境
2.1硬件环境
微机系列,内存在1G以上
2.2软件环境
MicrosoftWindowsXP
3开发工具
MicrosoftVisualC++
WIN-TC
4完成时间
2013年6月24日-----2013年6月28日
5设计思想
根据任务要求构思流程图,然后编写每一个子函数,最后写出主函数,然后结合起来,测试运行,实现任务所需要求
6系统设计、
6.1概要设计
第一步:
画出流程图
根据C语言编写的程序,画出流程图,然后运算流程图,看最后结果是否与C语言程序运行结果相同,不同,则修改。
直到相同为止!
第二步:
C语言程序编写
首先根据题目要求编写子函数,然后调试运行,运行不正确,修改每个函数,直到每个函数运行结果与预期结果相同,然后结合每一个子函数,编写出一个完整的“学生成绩管理系统”,然后调试,不正确,则修改,直到运行结果与预期结果相同,即可!
7系统测试与运行
7.1浏览航线信息
运行程序,出现系统主界面,选择1,键入查询,如图7-1所示
图7-1查询界面截图
7.2办理订票业务
选择4,键入输出,如图7-2所示
图7-2查询界面截图
7.3查询已经订票信息
选择2,键入输出,如图7-3所示
图7-3查询界面截图
7.4办理退票
选择5,键入输出,如图7-4所示
图7-4查询界面截图
7.5查询是否已经退票
选择2,键入输出,如图7-5所示
图7-5查询界面截图
7.6查看剩余票数并排序
选择6,键入输出,如图7-6所示
图7-6查询界面截图
8总结
忙碌了一个星期,终于顺利完成了对此程序的编译及试运行。
还记得当初为了调试程序,整整调试一天,都还在那纠结着,急得自己要疯了,不过最后终于在自己查阅资料及同学的帮助下,将程序编译成功。
而当运行成功后,自己都要高兴死了,有种舒了口气的感觉:
终于运行成功了!
在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
数据结构的实质就是以一定的语法规范为准,通过对数据量的复杂结构运算,完成一定功能的程序,是一门计算机基础语言,我们通过上一学期的学习,对于其特点和算法有了一定程度的了解。
这一周的课程设计正是让我们巩固以前的知识并在此基础上能够有所突破。
另外平时学习数据结构的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。
9心得体会
虽然其中遇到了很多困难,也弄得自己上火,甚至通宵去弄程序,编译、调试程序,但很感谢这次的课程设计,因为它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。
当然集体的力量也会很大,这会使你在学习过程中倍感轻松,所以在此次课程设计过程中,通过同学的帮助,自己的查阅资料等终于完成了这个学生成绩综合管理系统的设计。
通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
深刻体会到“没有做到的,只有想不到的”,“实践是检验真理的标准”,“不耻下问”……的寓意。
计时在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力,提高实际操作水平。
以前的培训都是应付考试的,实用性不强,而且那时学的东西,在工作中用的不多,时间长了不用也就忘记了。
而这次培训的内容最显著的特点,就是实用性和工具性很强,都是平时工作中经常用到的。
几天的实训时间,让我学到了很多东西,不仅使我在理论上对计算机领域有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用。
学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。
即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:
C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。
C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认识。
参考文献
1.徐孝凯,魏荣《数据结构》,机械工业出版社,1996年
2.徐孝凯《数据结构简明教程》,清华大学出版社,1995年
3.陈文博,朱青《数据结构与算法》,机械工业出版社,1996年
4.许卓群,张乃孝,杨冬青,唐世渭《数据结构》,高等教育出版社,1988年
5.李廉治,姜文清,郭福顺《数据结构》,大连理工大学出版社,1989年
6.晋良颍《数据结构》,人民邮电出版社,2002年
附录源代码
#include
#include
#include
//#include
#definemaxsize3
typedefstructwat_ros
{
charname[10];
intreq_amt;
structwat_ros*next;
}qnode,*qptr;
typedefstructpqueue
{
qptrfront;
qptrrear;
}linkqueue;
typedefstructord_ros
{
charname[10];
intord_amt;
intgrade;
structord_ros*next;
}linklist;
structairline
{
charter_name[10];/*站点名*/
charair_num[10];/*航班号*/
charplane_num[10];/*飞机号*/
chardate[7];/*飞行日期*/
inttkt_amt;/*乘员定额*/
inttkt_sur;/*余票量*/
linklist*order;
linkqueuewait;
}lineinfo;
structairline*start;
structairlineair[maxsize]={
{"北京","1","f1001","星期五",300,72},
{"上海","2","f1002","星期三",300,53},
{"武汉","3","f1003","星期一",300,37}
};;
voiddisplay(structairline*info)
{
printf("%8s\t%3s\t%s\t%4s\t\%d\t\%d\t\n",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur);
}
/*浏览航线信息函数*/
voidlist()
{
structairline*info;
inti=0;
info=start;
printf("终点站名\t航班号\t飞机号\t飞行日期""乘员定额""余票量\n");
while(idisplay(info);
info++;
i++;
}
printf("\n\n");
}
voidsearch()
{
structairline*info,*find();
charname[10];
inti=0;
info=start;
printf("请输入终点站名:
");
scanf("%s",name);
while(i{
if(!
strcmp(name,info->ter_name))break;
info++;
i++;
}
if(i>=maxsize)
printf("对不起,该航线未找到!
\n");
else
{
printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
display(info);
}
}
structairline*find()
{
structairline*info;
charnumber[10];
inti=0;
info=start;
printf("请输入航班号:
");
scanf("%s",number);
while(i{
if(!
strcmp(number,info->air_num))returninfo;
info++;
i++;
}
printf("对不起,该航线末找到!
\n");
returnNULL;
}
/*浏览已订票客户信息*/
voidprtlink()
{
linklist*p;
structairline*info;
info=find();
p=info->order;
if(p!
=NULL){
printf("客户姓名订票数额舱位等级\n");
while(p){
printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);
p=p->next;
}
}
else
printf("该航线没有客户信息!
!
\n");
}
linklist*insertlink(linklist*head,intamount,charname[],intgrade)
{linklist*p1,*new1;
p1=head;
new1=(linklist*)malloc(sizeof(linklist));
if(!
new1){printf("\nOutofmemory!
!
\n");returnNULL;}
strcpy(new1->name,name);
new1->ord_amt=amount;
new1->grade=grade;
new1->next=NULL;
if(head==NULL)
{head=new1;new1->next=NULL;}
else
head=new1;
new1->next=p1;
returnhead;
}
linkqueueappendqueue(linkqueueq,charname[],intamount)
{qptrnew1;
new1=(qptr)malloc(sizeof(qnode));
strcpy(new1->name,name);
new1->req_amt=amount;
new1->next=NULL;
if(q.front==NULL)
q.front=new1;
else
q.rear->next=new1;
q.rear=new1;
returnq;
}
voidorder()
{structairline*info;
intamount,grade;
charname[10];
info=start;
if(!
(info=find()))return;
printf("请输入你订票所需要的数量:
");
scanf("%d",&amount);
if(amount>info->tkt_amt)
{printf("\n对不起,您输入的票的数量已经超过乘员定额!
");
return;
}
if(amount<=info->tkt_sur)
{
inti;
printf("请输入您的姓名(订票客户):
");
scanf("%s",name);
printf("请输入%s票的舱位等级:
",name);
scanf("%d",&grade);
info->order=insertlink(info->order,amount,name,grade);
for(i=0;iprintf("%s的座位号是:
%d\n",name,info->tkt_amt-info->tkt_sur+i+1);
info->tkt_sur-=amount;
printf("\n祝您乘坐愉快!
\n");
}
else
{charr;
printf("\n已经没有更多的票,您需要排队等候吗?
(Y/N)");
//r=getch();
//printf("%c",r);
scanf("回车继续等待%c",&r);
if(r=='Y'||r=='y')
{printf("\n请输入您的姓名(排队订票客户):
");
scanf("%s",name);
info->wait=appendqueue(info->wait,name,amount);
printf("\n注册成功!
\n");
}
elseprintf("\n欢迎您下次再次订购!
\n");
}
}
voidreturn_tkt()
{structairline*info;
qnode*t,*back,*f,*r;
intgrade;
linklist*p1,*p2,*head;
charcusname[10];
if(!
(info=find()))return;
head=info->order;
p1=head;
printf("请输入你的姓名(退票客户):
");
scanf("%s",cusname);
while(p1!
=NULL){
if(!
strcmp(cusname,p1->name))break;
p2=p1;p1=p1->next;
}
if(p1==NULL){printf("对不起,你没有订过票!
\n");return;}
else
{
if(p1==head)head=p1->next;
elsep2->next=p1->next;
info->tkt_sur+=p1->ord_amt;
grade=p1->grade;
printf("%s成功退票!
\n",p1->name);
free(p1);
}
info->order=head;
f=(info->wait).front;
r=(info->wait).rear;
t=f;
while(t)
{
if((info->tkt_sur=info->wait.front->req_amt))
{
inti;
info->wait.front=t->next;
printf("%s订票成功!
\n",t->name);
for(i=0;ireq_amt;i++)
printf("%s的座位号是:
%d\n",t->name,(info->tkt_sur)-i);
info->tkt_sur-=t->req_amt;
info->order=insertlink(info->order,t->req_amt,t->name,grade);
free(t);
break;
}
back=t;t=t->next;
if((info->tkt_sur)>=(t->req_amt)&&t!
=NULL)
{inti;
back->next=t->next;
printf("%s订票成功!
\n",t->name);
for(i=0;ireq_amt;i++)
printf("<%s>'sseatnumberis:
%d\n",t->name,(info->tkt_sur)-i);
info->tkt_sur-=t->req_amt;
info->order=insertlink(info->order,t->req_amt,t->name,grade);
free(t);break;
}
if(f==r)break;
}
}
voidsort_tkt()
{
intj;
structairlinet,*info,*p,*q;
p=info=air;
for(p=info;(p+1)->tkt_sur;p++)
for(q=p+1;q->tkt_sur;q++)
{
if(p->tkt_surtkt_sur)
{
t=*p;
*p=*q;
*q=t;
}
}
printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
for(j=0;j{
display(info);
info++;
}
}
intmenu_select()
{
intc;
chars[20];
printf("\n\t\t航空客运订票系统(by罗伟奇)\n");
printf("-------------------------------------\n");
printf("--------1.浏览航线信息-------------\n");
printf("--------2.浏览已订票客户信息-------\n");
printf("--------3.查询航线-----------------\n");
printf("--------4.办理订票业务-------------\n");
printf("--------5.办理退票业务-------------\n");
printf("--------6.查看剩余票数并排序-------\n");
printf("--------0.退出系统-----------------\n");
printf("-------------------------------------\n");
do
{
printf("请选择:
");
scanf("%s",s);
c=atoi(s);/*atoi将字符串转换为整型*/
}while(c<0||c>7);
returnc;
}
intmain()
{
start=air;
for(;;)
{
switch(menu_select())
{
case1:
list();break;
case2:
prtlink();break;
case3:
search();break;
case4:
order();break;
case5:
return_tkt();break;
case6:
sort_tkt();break;
case0:
printf("\n欢迎使用本系统,再见!
\n");exit(0);
}
printf("\nPressanykeytocontinue!
\n");
getchar();
}
return0;
}
设计过程中质疑(或答辩)记载:
1.问:
运用数据结构的那些知识?
答:
运用了队列,结构体,链表,模块化结构等。
2.问:
运用什么初始化航班信息?
答:
利用结构体初始化航班信息。
3.问:
使用了什么排序方法?
答:
冒泡排序法。
指导教师评语:
签名:
2013年7月1日