北京化工大学数据结构课程设计报告.docx

上传人:b****4 文档编号:5918780 上传时间:2023-05-09 格式:DOCX 页数:52 大小:600.88KB
下载 相关 举报
北京化工大学数据结构课程设计报告.docx_第1页
第1页 / 共52页
北京化工大学数据结构课程设计报告.docx_第2页
第2页 / 共52页
北京化工大学数据结构课程设计报告.docx_第3页
第3页 / 共52页
北京化工大学数据结构课程设计报告.docx_第4页
第4页 / 共52页
北京化工大学数据结构课程设计报告.docx_第5页
第5页 / 共52页
北京化工大学数据结构课程设计报告.docx_第6页
第6页 / 共52页
北京化工大学数据结构课程设计报告.docx_第7页
第7页 / 共52页
北京化工大学数据结构课程设计报告.docx_第8页
第8页 / 共52页
北京化工大学数据结构课程设计报告.docx_第9页
第9页 / 共52页
北京化工大学数据结构课程设计报告.docx_第10页
第10页 / 共52页
北京化工大学数据结构课程设计报告.docx_第11页
第11页 / 共52页
北京化工大学数据结构课程设计报告.docx_第12页
第12页 / 共52页
北京化工大学数据结构课程设计报告.docx_第13页
第13页 / 共52页
北京化工大学数据结构课程设计报告.docx_第14页
第14页 / 共52页
北京化工大学数据结构课程设计报告.docx_第15页
第15页 / 共52页
北京化工大学数据结构课程设计报告.docx_第16页
第16页 / 共52页
北京化工大学数据结构课程设计报告.docx_第17页
第17页 / 共52页
北京化工大学数据结构课程设计报告.docx_第18页
第18页 / 共52页
北京化工大学数据结构课程设计报告.docx_第19页
第19页 / 共52页
北京化工大学数据结构课程设计报告.docx_第20页
第20页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北京化工大学数据结构课程设计报告.docx

《北京化工大学数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《北京化工大学数据结构课程设计报告.docx(52页珍藏版)》请在冰点文库上搜索。

北京化工大学数据结构课程设计报告.docx

北京化工大学数据结构课程设计报告

 

程序的设计与实现

——数据结构课程设计

 

小组成员名单

序号

班级

学号

姓名

完成功能简述

成绩

1

计科1103班

2011014257

朱楠

 

2

计科1103班

2011014272

高华超

 

北京化工大学

信息科学与技术学院计算机科学与技术专业

2012.1

一、功能描述

1.1系统实现的目的和意义:

1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发。

2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

航空空订票系统:

(1)熟练掌握链表存储结构及其建立过程和常用操作;

(2)熟练掌握队列的建立过程和常用操作;

(3)学会自己调试程序的方法并掌握一定的技巧。

1.2系统实现的功能:

航空客运订票的业务活动包括:

查询航线、客票预订和办理退票等。

设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

1.3系统开发的环境:

C类,开发软件为DEVC++

二、总体结构

2.1文件清单(按文件系统树型方式排列)

浏览航线信息读入文件(airplane.txt)

浏览已订票客户信息按航班号查找

按终点站查询

菜查询航线

按航班号查询

办理订票业务

办理退票业务

退出系统

2.2系统功能结构图

 

2.3系统的总流程图

Y

N

Y

N

Y

N

Y

N

Y

N

Y

N

三、详细设计(均需注释)

3.1数据结构

订票跟退票的模块均用到了链表跟队列的知识。

以退票模块为例:

(退票模块涉及到两方面,一是客户将定完的票推掉,二是将客户退掉的票安排给排队的客户)

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;/*f指向排队等候名单队列的头结点*/

r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/

t=f;/*t为当前满点条件的排队候补名单域*/

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;

}

}

3.2各模块(或算法)流程图(标明函数名)

(1)显示已初始化的全部航线信息

(2)查询航线

a.按终点站查询

b.按航班号查询

(3)浏览已订票客户信息

(4)订票

 

(5)办理退票业务

四、系统实现

4.1模块一:

初始化

intreadrecord(structairlineair[])

{

FILE*fp;

structairlinea;

if((fp=fopen("airplane.txt","r"))!

=NULL)

{

while(!

feof(fp))

{

fscanf(fp,"%s%s%s%s%d%d",a.ter_name,a.air_num,a.plane_num,a.day,&a.tkt_amt,&a.tkt_sur);

strcpy(air[length].ter_name,a.ter_name);

strcpy(air[length].air_num,a.air_num);

strcpy(air[length].plane_num,a.plane_num);

strcpy(air[length].day,a.day);

air[length].tkt_amt=a.tkt_amt;

air[length].tkt_sur=a.tkt_sur;

length++;

}

air[length].ter_name[0]='\0';

}

else

{

printf("Cannotopenthisfile!

\n");

exit(0);

}

returnlength;

}

4.2模块二:

显示每条航线信息

voiddisplay(structairline*info)

/*输出每条航线的基本信息*/

{

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);

}

4.3模块三:

打印全部航线信息

voidlist()

{

structairline*info;

inti=0;

info=start;

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

while(i

{

display(info);

info++;

i++;

}

printf("\n\n");

}

4.4模块四:

根据客户提出的终点站名输出航线信息

voidsearch()

{

intfindHao();

intfindZhong();

structairline*find();

printf("1......按终点站查询\n2......按航班号查询\n");

switch(getch())

{

case'1':

findHao();

break;

case'2':

findZhong();

break;

default:

;

}

}

4.5模块五:

根据客户提出的终点站名输出航线信息

intfindHao()

{

structairline*info;

charname[10];

inti=0;

info=start;

printf("请输入终点站名:

");

scanf("%s",name);

while(i

{

if(!

strcmp(name,info->ter_name))break;//字符串比较

info++;

i++;

}

if(i>=length)

printf("对不起,该航线未找到!

\n");

else

{

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

display(info);

}

}

4.6模块六:

根据系统提出的航班号查询并以指针形式返回

intfindZhong()

{

structairline*info;

charnumber[10];

inti=0;

info=start;

printf("请输入航班号:

");

scanf("%s",number);

while(i

{

if(!

strcmp(number,info->air_num))

break;

info++;

i++;

}

if(i>=length)

printf("对不起,该航线未找到!

\n");

else

{

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

display(info);

}

returnNULL;

}

4.7模块七:

根据系统提出的航班号查询并以指针形式返回

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++;

}

if(i>=length)

printf("对不起,该航线未找到!

\n");

else

{

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

display(info);

}

returnNULL;

}

4.8模块八:

打印订票乘员名单域的客户名单信息

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");

}

4.9模块九:

增加订票乘员名单域的客户信息

linklist*insertlink(linklist*head,intamount,charname[],intgrade)

{

linklist*p1,*n;

p1=head;

n=(linklist*)malloc(sizeof(linklist));

if(!

n)

{

printf("\nOutofmemory!

!

\n");

returnNULL;

}

strcpy(n->name,name);

n->ord_amt=amount;

n->grade=grade;

n->next=NULL;

if(head==NULL)/*若原无订票客户信息*/

{

head=n;

n->next=NULL;

}

else

head=n;

n->next=p1;

returnhead;

}

4.10模块十:

增加排队等候的客户名单域

linkqueueappendqueue(linkqueueq,charname[],intamount)

{qptrn;

n=(qptr)malloc(sizeof(qnode));

strcpy(n->name,name);

n->req_amt=amount;

n->next=NULL;

if(q.front==NULL)/*若原排队等候客户名单域为空*/

q.front=n;

else

q.rear->next=n;

q.rear=n;

returnq;

}

4.11模块十一:

订票业务

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("请输入您需订购的机票的舱位等级:

",grade);

scanf("%d",&grade);

info->order=insertlink(info->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/

for(i=0;i

printf("%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);

if(r=='Y'||r=='y')

{

printf("\n请输入您的姓名(排队订票客户):

");

scanf("%s",name);

info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/

printf("\n添加成功!

\n");

}

elseprintf("\n欢迎您下次订购!

\n");

}

}

4.12模块十二:

退票业务

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;/*f指向排队等候名单队列的头结点*/

r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/

t=f;/*t为当前满点条件的排队候补名单域*/

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;

}

}

4.13模块十三:

主菜单

intmenu_select()

/*菜单界面*/

{intc;

chars[20];

printf("\n\t\t航空客运订票系统\n");

printf("******************************************\n");

printf("1.浏览航线信息:

\n");

printf("2.浏览已订票客户信息:

\n");

printf("3.查询航线\n");

printf("4.办理订票业务:

\n");

printf("5.办理退票业务:

\n");

printf("6.退出系统\n");

printf("*******************************************\n");

do{

printf("请选择:

");

scanf("%s",s);

c=atoi(s);//convertstringtoint

}while(c<0||c>7);

returnc;

}

4.14模块十四:

主函数

intmain()

{/*structairlineair[MAXSIZE]={{"beijing","1","B8571","SUN",3,3},

{"shanghai","2","S1002","MON",2,2},

{"london","3","L1003","FRI",1,1}};/*初始化航线信息*/

/*clrscr();*/

readrecord(air);

start=air;

for(;;){

switch(menu_select()){

case1:

list();break;

case2:

prtlink();break;

case3:

search();break;

case4:

order();break;

case5:

return_tkt();break;

case6:

printf("\n欢迎使用本系统,再见!

\n");exit(0);

}

printf("\nPressanykeytocontinue!

\n");

getch();

}

}

五、程序的过程展示

5.1程序运行过程展示

主界面

浏览航线信息

浏览已订票客户信息

查询航线

办理订票业务

 

办理退票业务

5.2程

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2