河北科技大学数据结构课程设计文档格式.docx
- 文档编号:17693756
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:22
- 大小:202.13KB
河北科技大学数据结构课程设计文档格式.docx
《河北科技大学数据结构课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《河北科技大学数据结构课程设计文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
可以根据需要浏览当前所有航线的信息。
b)浏览订票客户信息:
可以根据需要查看订票客户的信息及订票信息。
c)查询航线:
根据旅客提出的终点站名输出以下信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
d)承办订票业务:
根据客户提出的要求〔航班号、订票数额〕查询该航班票额情况,假设尚有余票,那么为客户办理订票手续,
输出座位号;
假设已满员或余票额少于定票额,那么需重新询问客户要求。
假设需要,可登记排队候补;
e)退票业务:
根据客户提供的情况〔日期、航班〕,为客户办理退票手续,然后查询该航班是否有人排队候补,首先询
问排在第一的客户,假设所退票额能满足他的要求,那么为他办理订票手续,否那么依次询问其他排队候补的客户。
f)录入和修改航班业务:
根据机场要求增加航班或对航班的航班号、飞机号、星期几飞行等信息进展更新。
二、概要设计说明
系统构造图:
航空售票系统抽象数据类型定义为:
ADTairplanelist
{
数据对象:
D={A[i]|A[i]∈Integer,i=1,2,…,n,n>
=0}
数据关系:
R={<
A[i-1],A[i]>
|A[i-1],A[i]∈D,i=1,2,…,n}
根本操作:
}
#defineMAXSIZE10/*定义航线量的最大值*/
intlength=3;
//当前航班数
charhangbanhao[10];
//航班号
inthbh_xiabiao=0;
//航班号的下标即air数组的下标
voiddisplay(structairline*info)/*打印每条航线的根本信息*/
voidlist()/*打印全部航线信息*/
voidsearch()/*根据客户提出的终点站名输出航线信息*/
structairline*find()/*根据系统提出的航班号查询并以指针形式返回*/
voidprtlink()/*打印订票乘员域的客户信息*/
linklist*insertlink(linklist*head,intamount,charname[],intgrade)/*增加订票乘员域的客户信息*/
linkqueueappendqueue(linkqueueq,charname[],intamount)/*增加排队等候的客户域*/
voidorder()/*办理订票业务*/
voidreturn_tkt()/*退票模块*/
voidchange()/*录入和修改航班信息*/
intmenu_select()/*菜单界面*/
三、详细设计说明
1.主函数模块
首先调用menu_select()函数显示菜单界面。
根据用户选择的效劳转入相应的处理函数。
2.浏览航班信息子模块
通过调用display〔〕函数打印当前全部的航班信息,流程图如图二。
3.浏览已订票客户子模块
通过调用find〔〕函数,浏览已订票客户信息,流程图如图三
4.查询航线子模块
根据客户提出的终点站名,调用find〔〕函数寻找航线信息,调用list〔〕函数输出航线信息,流程图如图四。
5.办理订票业务子模块
根据客户提供的航班号进展查询航线信息,假设客户订票额超过乘员定票总额,退出。
假设客户订票额末超过余票量,订票成功并登记信息,在订票乘员域中添加客户信息;
如果暂时没有票,询问客户是否要排队等侯,如果是,那么在等候队列增加该客户的订票信息,流程图如图五。
6.录入和修改航班信息子模块
根据机场要求增加航班或对航班的航班号、飞机号、星期几飞行等信息进展更新,流程图如图六。
7.办理退票业务子模块
四、调试分析
我遇到的问题:
●getchar()与getch()的区别
由于对这两个函数的区别没有搞懂致使在程序调试中经常出现“感觉没有输入〞,却又信息输入的情况。
●c语言的语法与其他语言的混淆
由于忘记了一些c语言的标准使得在调试过程中一些错误没有发现。
例如,调用函数时,数组只需要传递数组名即可;
字符‘0’和整形的0是不同的文明不可以直接对其画等号。
字符串复制需要用strcpy()函数等问题。
●出现溢出错误
为了修正这些溢出错误,消耗了大量的时间,修正解释之后再看源程序,才发现原来只是因为开场的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,
●空指针问题
在函数调用时经常出现返回的空指针,然而还使其指向某个变量,致使出现错误。
五、用户使用说明
运行后按照提示,根据需要选择不同的业务运行状态如图八、图九所示。
如果不小心未按照提示正确操作,程序也不会出错——或者让用户重新输入或者返回主菜单。
六、课程设计总结
经过这次课程设计,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的标准性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。
掌握学习了c语言中的几个细节问题。
改变了之前单纯c编程的思维,增加了数据类的定义与算法设计,使我直观的理解数据构造书中的线性表,队列。
七、测试结果
八、参考书目
[1]严蔚敏,吴伟民.数据构造〔C语言版〕.:
清华大学1997.4
[2]李春葆.数据构造——习题与解析.:
清华大学,2021
[3]MarkAllenWeiss.DataStructuresandAlgorithmAnalysisinC:
SecondEdition.NewYork:
MITPress,2007
[4]郭翠英.C语言课程设计案例精编.:
中国水利,2021
附录程序源代码
/*航空票务管理系统源代码*/
#include<
stdio.h>
stdlib.h>
string.h>
typedefstructwat_ros
{charname[10];
/*XX*/
intreq_amt;
/*订票量*/
structwat_ros*next;
}qnode,*qptr;
typedefstructpqueue
{qptrfront;
/*等候替补客户域的头指针*/
qptrrear;
/*等候替补客户域的属指针*/
}linkqueue;
typedefstructord_ros
/*客户XX*/
intord_amt;
intgrade;
/*舱位等级*/
structord_ros*next;
}linklist;
structairline
{charter_name[10];
/*终点站名*/
charair_num[10];
/*航班号*/
charplane_num[10];
/*飞机号*/
charday[7];
/*飞行周日〔星期几〕*/
inttkt_amt;
/*乘员定额*/
inttkt_sur;
/*余票量*/
linklist*order;
/*乘员域,指向乘员链表的头指针*/
linkqueuewait;
/*等候替补的客户域,分别指向排队等候队头队尾的指针*/
}lineinfo;
structairlineair[MAXSIZE]={{"
beijing"
"
1"
B8571"
SUN"
50,50},
{"
shanghai"
2"
S1002"
MON"
100,100},
london"
3"
L1003"
FRI"
80,80}};
/*初始化航线信息*/
structairline*start;
{printf("
%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n"
info->
ter_name,info->
air_num,info->
plane_num,info->
day,info->
tkt_amt,info->
tkt_sur);
{structairline*info;
inti=0;
info=start;
printf("
终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n"
);
while(i<
length){
display(info);
info++;
i++;
}
\n\n"
{structairline*info,*find();
charname[10];
inti=0,flag=0;
请输入终点站名:
"
scanf("
%s"
name);
length){
if(!
strcmp(name,info->
ter_name))
{
printf("
display(info);
flag=1;
if(flag==0)
对不起,该航线未找到!
\n"
else{
//printf("
//display(info);
请输入航班号:
hangbanhao);
while(hbh_xiabiao<
strcmp(hangbanhao,info->
air_num))returninfo;
//if(info==NULL)break;
hbh_xiabiao++;
returnNULL;
voidprtlink()
/*打印订票乘员域的客户信息*/
{linklist*p;
structairline*info;
info=find();
if(info==NULL)//说明没有该航线
对不起,该航线末找到!
return;
}
p=info->
order;
if(p!
=NULL){
客户XX订票数额舱位等级\n"
while(p){
%s\t\t%d\t%d\n"
p->
name,p->
ord_amt,p->
grade);
p=p->
next;
else
该航线没有客户信息!
!
{linklist*p1,*new;
p1=head;
new=(linklist*)malloc(sizeof(linklist));
new){printf("
\nOutofmemory!
returnNULL;
strcpy(new->
name,name);
//字符的复制
new->
ord_amt=amount;
grade=grade;
next=NULL;
if(head==NULL)/*假设原无订票客户信息*/
{head=new;
new->
head=new;
next=p1;
returnhead;
{qptrnew;
new=(qptr)malloc(sizeof(qnode));
req_amt=amount;
if(q.front==NULL)/*假设原排队等候客户域为空*/
q.front=new;
q.rear->
next=new;
q.rear=new;
returnq;
voidorder()
/*办理订票业务*/
intamount,grade;
(info=find()))
}/*根据客户提供的航班号进展查询,如为空,退出该模块*/
请输入你订票所需要的数量:
%d"
&
amount);
if(amount>
info->
tkt_amt)/*假设客户订票额超过乘员定票总额,退出*/
{printf("
\n对不起,您输入的票的数量已经超过乘员定额!
if(amount<
=info->
tkt_sur)/*假设客户订票额末超过余票量,订票成功并等记信息*/
inti;
请输入您的XX〔订票客户〕:
do{
请输入%s票的舱位等级(1-3):
}while(grade>
3||grade<
0);
info->
order=insertlink(info->
order,amount,name,grade);
/*在订票乘员域中添加客户信息*/
for(i=0;
i<
amount;
i++)/*依次输出该订票客户的座位号*/
%s的座位号是:
%d\n"
name,info->
tkt_amt-info->
tkt_sur+i+1);
tkt_sur-=amount;
/*该航线的余票量应减掉该客户的订票量*/
\n祝您乘坐愉快!
else/*假设满员或余票额少于订票额,询问客户是否需要进展排队等候*/
{charr;
\n已经没有更多的票,您需要排队等候吗?
(Y/N)"
r=getch();
%c"
r);
if(r=='
Y'
||r=='
y'
)
\n请输入您的XX〔排队订票客户〕:
wait=appendqueue(info->
wait,name,amount);
/*在排队等候乘员域中添加客户信息*/
\n注册成功!
elseprintf("
\n欢送您下次再次订购!
voidreturn_tkt()
/*退票模块*/
qnode*t,*back,*f,*r;
linklist*p1,*p2,*head;
charcusname[10];
(info=find())){
/*调用查询函数,根据客户提供的航线进展搜索*/
head=info->
请输入你的XX〔退票客户〕:
cusname);
while(p1!
=NULL){/*根据客户提供的XX到订票客户域进展查询*/
strcmp(cusname,p1->
name))break;
p2=p1;
p1=p1->
if(p1==NULL){printf("
对不起,你没有订过票!
return;
}/*假设未找到,退出本模块*/
else{/*假设信息查询成功,删除订票客户域中的信息*/
if(p1==head)head=p1->
elsep2->
next=p1->
tkt_sur+=p1->
ord_amt;
grade=p1->
grade;
%s成功退票!
p1->
name);
free(p1);
order=head;
/*重新将航线域指向订票单链表的头指针*/
f=(info->
wait).front;
/*f指向排队等候队列的头结点*/
r=(info->
wait).rear;
/*r指向排队等候队列的尾结点*/
t=f;
/*t为当前满点条件的排队候补域*/
while(t)
if(info->
tkt_sur>
wait.front->
req_amt){/*假设满足条件者为头结点*/
wait.front=t->
%s订票成功!
t->
t->
req_amt;
i++)/*输出座位号*/
name,(info->
tkt_sur)-i);
tkt_sur-=t->
order,t->
req_amt,t->
name,grade);
/*插入到订票客户链表中*/
free(t);
break;
back=t;
t=t->
if((info->
tkt_sur)>
=(t->
req_amt)&
&
t!
=NULL)/*假设满足条件者不为头结点*/
{inti;
back->
next=t->
<
%s>
'
sseatnumberis:
break;
if(f==r)break;
voidchange()
{
inttype;
do{
1.录入航班请按1\n"
2.修改航班请按2\n"
scanf("
type);
}while(type!
=1&
type!
=2);
if(type==1)
if(length>
MAXSIZE-1)
{
printf("
本机场最多可容纳%d个航班"
MAXSIZE);
return;
}
//scanf("
if((info=find())!
=NULL)
该航班已存在,如需修改返回后按步骤重新操作"
\n开场录入\n"
输入终点站名:
air[length].ter_name);
//printf("
请再次输入航班号:
strcpy(air[length].air_num,hangbanhao);
输入飞机号:
air[length].plane_num);
飞行周日〔星期几〕:
air[length].day);
乘员定额:
air[length].tkt_amt);
air[length].tkt_sur=air[length].tkt_amt;
//初始化时票数余额等于成员定额
length++;
\n\n录入完毕!
!
if(type==2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河北 科技大学 数据结构 课程设计