河北科技大学数据结构课程设计文档格式.docx

上传人:b****4 文档编号:17693756 上传时间:2022-12-08 格式:DOCX 页数:22 大小:202.13KB
下载 相关 举报
河北科技大学数据结构课程设计文档格式.docx_第1页
第1页 / 共22页
河北科技大学数据结构课程设计文档格式.docx_第2页
第2页 / 共22页
河北科技大学数据结构课程设计文档格式.docx_第3页
第3页 / 共22页
河北科技大学数据结构课程设计文档格式.docx_第4页
第4页 / 共22页
河北科技大学数据结构课程设计文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

河北科技大学数据结构课程设计文档格式.docx

《河北科技大学数据结构课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《河北科技大学数据结构课程设计文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

河北科技大学数据结构课程设计文档格式.docx

可以根据需要浏览当前所有航线的信息。

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)

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

当前位置:首页 > 求职职场 > 简历

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

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