数据结构课程设计论文1059Word下载.docx
《数据结构课程设计论文1059Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计论文1059Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计论文1059Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/8/d71bcb38-6e3f-498a-8e00-ee0d7f7e4685/d71bcb38-6e3f-498a-8e00-ee0d7f7e46851.gif)
假设某小型航空公司开设了5条直达航线,每条航线的信息分为可变的和不可变的,其中定量有终点站站名、航班号、飞机号、飞行周日和乘员定额(分别为一等舱、二等舱、三等舱),变量则有余票量(分别为一等舱、二等舱、三等舱)、已订票的乘客名单(名字、订票量、等级)和候补乘客
当用户输入终点站时,系统进行查找,成功则输入相关信息,不成功则请再输入一次
当用户进行订票或退票时,定量不变,系统对变量进行修改,操作成功后退出系统,否则,请用户再输入一次
4数据流程图
五模块的划分
由于订票系统涉及到三个基本操作,再加上数据的输入,可以将整个系统划分为四个模块,分别为数据的输入和保存,查询航线,订票以及退票
在数据的输入和保存这个模块中
,数据需要保存在一个文件里面,在查询、订票和退票模块中,对文件里的数据进行调用和
处理,但文件里的数据保持不变
在退票模块中,要考虑是否有候补乘客,如果有并且退票
满足他的要求,则要调用订票模块,进行订票操作
数据的输入和保存
输入终点站,飞机号,航班号
时间,票额
查询
订票
退票
七算法
1)定义
#defineMAX5
#defineN10
#defineM10
#defineOK1
#defineERROR0
#include<
stdio.h>
malloc.h>
typedefintstatus;
structseat{
intfrist;
intsecond;
intthird;
};
//票的定义,分为一等、二等、三等
structElemType{
charname;
seatticket;
//ElemType
typedefstructLNode{
structLNode*next;
}LNode,*passenger;
typedefstructWQueue{
passengerfront;
passengerrear;
//WQueue,候补队列;
typedefstructAL{
charEPlace;
//终点站
intFNo;
//航班号
intPNo;
//飞机号
intTime;
//时间
seatTicket;
//总票量,用结构体seat
passengerBPassenger;
//已经订票的乘客,next存放已经订票的乘客链表的表地址
seatRTicket;
//剩余的票额
passengerwait;
//候补队列,next存放队头地址
}AL,Airline[MAX];
2)链表和队列的基本操作
statusInitlink(passenger&
Pa){
Pa=(passenger)malloc(sizeof(LNode));
if(!
Pa)returnERROR;
Pa->
name=0;
ticket.frist=0;
ticket.second=0;
ticket.third=0;
next=NULL;
returnOK;
}//Initlink,建立乘客链表
statusInitQueue(WQueueQ){
Q.front=Q.rear=(passenger)malloc(sizeof(LNode));
Q.front)
returnERROR;
Q.front->
}//InitQueue,建立候补队列
statusEnQueue(WQueue&
Q,ElemTypepa)
{
passengerp;
p=(passenger)malloc(sizeof(LNode));
p)returnERROR;
p->
name=pa.name;
ticket.frist=pa.ticket.frist;
ticket.second=pa.ticket.second;
ticket.third=pa.ticket.third;
Q.rear->
next=p;
Q.rear=p;
}//EnQueue,队头出队
statusInsertList(passenger&
L,ElemTypepa){
passengerp,q;
p=L;
while(p->
next&
&
p)
p=p->
next;
q=(passenger)malloc(sizeof(LNode));
q->
next=q;
}//乘客链表的插入
statusDeQueue(WQueue&
Q,ElemTypep){
passengerq;
if(Q.front==Q.rear)
q=Q.front->
p.name=q->
name;
p.ticket.frist=q->
ticket.frist;
p.ticket.second=q->
ticket.second;
p.ticket.third=q->
ticket.third;
next=q->
if(Q.rear==q)
Q.front=Q.rear;
}//DeQueue,入队列
statussearch_delet(passengerL,ElemTypepa){
p=L->
next){
if(p->
next->
name==pa.name)
elsep=p->
}//while
q=p->
free(q);
}//乘客链表的插入和删除
2)各个模块的具体算法
输入数据信息
statusEnter(ALAirline[MAX]){
inti;
printf("
Pleaseenterthesemessages!
\n"
);
for(i=0;
i<
MAX;
i++){
scanf("
%c,%d,%d,%d,%d,%d,%d"
&
Airline[i].EPlace,
&
Airline[i].FNo,
Airline[i].PNo,
Airline[i].Time,
Airline[i].Ticket.frist,
Airline[i].Ticket.second,
Airline[i].Ticket.third
);
passengerPa;
Initlink(Pa);
Airline[i].BPassenger->
next=Pa;
WQueueQ;
InitQueue(Q);
Airline[i].wait->
next=Q.rear;
Airline[i].RTicket.frist=Airline[i].Ticket.frist;
Airline[i].RTicket.second=Airline[i].Ticket.second;
Airline[i].RTicket.third=Airline[i].Ticket.third;
}//for
}//输入航线信息
查询
statusSearch(charplace,ALAirline[MAX]){
if(place==Airline[i].EPlace){
EPlace:
%c\nPNo:
%d\nFNo:
%d\nTime:
%d\n"
Airline[i].EPlace,
Airline[i].PNo,
Airline[i].FNo,
Airline[i].Time);
Therestoftickets\n"
frist:
%dsecond:
%dthird:
%d\n"
Airline[i].RTicket.frist,
Airline[i].RTicket.second,
Airline[i].RTicket.third);
}//if
if(i>
=MAX)
Pleaseenteragain!
returnAirline[i];
}//Search,查找
订票
statusBook(ALline){
intp,q;
ElemTypepa;
Doyouwanttobooktickets?
%d"
p);
Thankyou!
else{
if(line.RTicket.frist==0&
line.RTicket.second==0
&
line.RTicket.third==0)
{printf("
Doyouwanttowaitforreturnedtickets?
q);
q)
elseEnQueue(Q,pa);
else{
printf("
Pleaseenteryournameandticket:
scanf("
%c,%d,%d,%d"
pa.name,&
pa.ticket.frist,&
pa.ticket.second,&
pa.ticket.third);
InsertList(Pa,pa);
line.RTicket.frist=line.RTicket.frist-pa.ticket.frist;
line.RTicket.second=line.RTicket.second-pa.ticket.second;
line.RTicket.third=line.RTicket.third-pa.ticket.third;
Successful!
Thankyou!
}//else
}//else
}//Book,订票
退票
statusReturn(ALline){
Doyouwanttoreturnyourticket?
intp;
if(p){
pa.ticket.second
&
pa.ticket.third);
search_delet(line.BPassenger,pa);
if(Q.rear!
=Q.front){
DeQueue(Q,pa);
InsertList(line.BPassenger,pa);
else{line.RTicket.frist=line.RTicket.frist+pa.ticket.frist;
line.RTicket.second=line.RTicket.second+pa.ticket.second;
line.RTicket.third=line.RTicket.third+pa.ticket.third;
}//else
}//if
elseprintf("
}//退票
八测试数据
输入a,01,747,020312,20,30,40,b,02,747,020312,10,20,30,c,03,747,20,30,50,
d,04,747,020314,50,10,20,d,05,747,020214,10,20,30,
当输出"
Pleaseenteraplace:
"
时,请任意输入一个一个字符的地名,如果输出
"
则表明没有与该地名匹配的信息,反之,会输出终点站、
飞机号、航班号以及一、二、三等舱的余票额
接下来,程序输出"
Doyouwantto
booktickets?
,如果要,请输入"
1"
,程序会输出"
Pleaseenteryourname:
请输入你的姓名(一个字符)和订票额(一等、二等、三等),订票成功后会输出"
Successful!
如果不要订票,请输入"
0"
,程序将输出"
当程序输出"
Doyouwanttoreturnyourtickets?
时,操作与订票基本一致
九心得体会
这次课程设计进行了整整两个星期,虽然一整天都在电脑房里对着电脑,很枯燥,
也很辛苦,但是我觉得还是很有收获的
这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼
首先,为了能写出程序,我将以前所学都好好的巩固了一遍,并且努力的去灵活的运用
起
码现在对结构体,链表的操作还是熟练了很多
以前一些很模糊的知识点,通过这次练习,
很多都清楚起来
其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现
几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢
找到了方法
这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑,
同学之间的合作也是很重要的
在这两个星期里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还
有很多东西要学,而且要真的掌握,还得多用心,多用脑
计算机的确不好学,但只要努力
就会有收获
这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相信,经过
以后的学习和努力,是肯定能做出一个好的程序来的!
返回
16、莫等闲,白了少年头,空悲切——岳飞