数据结构课程设计停车场管理.docx

上传人:b****5 文档编号:8471731 上传时间:2023-01-31 格式:DOCX 页数:15 大小:174.03KB
下载 相关 举报
数据结构课程设计停车场管理.docx_第1页
第1页 / 共15页
数据结构课程设计停车场管理.docx_第2页
第2页 / 共15页
数据结构课程设计停车场管理.docx_第3页
第3页 / 共15页
数据结构课程设计停车场管理.docx_第4页
第4页 / 共15页
数据结构课程设计停车场管理.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构课程设计停车场管理.docx

《数据结构课程设计停车场管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计停车场管理.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构课程设计停车场管理.docx

数据结构课程设计停车场管理

数据结构课程设计报告

学校:

中南大学

学院:

信息科学与工程学院

班级:

计算机科学与技术1101班

姓名:

杜茂鹏

课题:

停车场管理系统

时间:

2013年7月3日

 

1.设计目的

2.问题描述

3.设计要求

4.设计构思

5.算法说明

6.复杂度说明

7.测试结果

8.总结反思

9.源程序

1设计目的

1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4)进行全面综合的训练,对课堂教学、实验等环节的有益补充。

5)提高解决实际问题和培养软件工作所需的动手能力。

6)深化理解和灵活掌握教学内容

7)进行软件工程的综合训练。

训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

2问题描述

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。

停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。

编制一程序模拟该停车场的管理。

3设计要求

要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。

4设计构思

根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:

当栈满后,继续来的车只能停在便道上,根据便道停车的特点,可知这可以用一个队列来实现,先排队的车先离开便道进入停车场。

由于排在停车场的车可以离开并要求后面的车辆都离开停车场,让此车离去。

再让后面的车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上还需要有一个地方(车辆规避所)保存为了让路离开的车辆,很显然着也应该用一个栈来模拟。

因此,本题中用到俩个栈和一个队列。

对于停车场和车辆规避所,有车辆进入和车辆离开俩个过程,这就是是进栈出栈操作,只是还允许排在中间的车辆离开,因此在栈中需要查找。

对于便道,也有如队列和出队列操作,同样允许排在中间的车辆先离开队列。

这样基本动作只需利用栈和队列的基本操作即可。

整个操作过程是:

当输入数据表示有车辆到达时,则判断栈是否满,若未满则新数据进栈,数据包括时间和车牌号;否则,将数据放在队尾,表示车辆在道上等待。

当输入数据表示有车辆离开时,就在栈中寻找是不是有此车牌号的车辆,若有就让其离开,并根据时间计费;若没有,就在便道上找,否则反映出错信息。

当离开停车场的车辆位于栈的中间时,必须先将此位置到栈顶之间的所有数据转到车辆规避所中,然后安排车辆出栈,最后将一个栈中的数据倒回倒停车场栈中。

在模拟停车场管理时还要注意,如果停车长栈中没有车辆停放时数据输入仍然要求车辆退出,则显示出错信息,程序中停车场的停车数为N,便道不做要求。

且每经过一次操作都要显示当前停车场的状况。

5算法说明

2.算法说明

(1)功能模块说明:

停车场管理系统含有三个模块,即:

车辆到达、离开、列表显示

 

 

(2)以模块为单位分析算法

1、“到达”模块:

到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。

 

2.“离开”模块:

离开时,当车库为空时,提示没有车,结束;否则车辆离开。

如图3。

 

3.“显示”模块:

显示模块有两个显示选项,即:

车场与便道。

6复杂度说明

说明:

对时间复杂度的分析,均指在最坏情况下的时间复杂度。

在栈结构中:

(1)初始化栈(即车库),使车库为空的,此时,时间复杂度=O(max)。

(2)停车最坏的情况是要车位已经满,此时,时时间复杂度=O

(1)。

(3)关于车辆离开的时间复杂度=O(max)。

(4)车场信息的显示的时间复杂度=O

(1)。

在队列结构中:

(1)出场车的信息的时间复杂度=O

(1)。

(2)判断通道上是否有车及车站是否已满,此时,时间复杂度O=(max)。

(3)车辆停车费用的时间复杂度O=

(1)。

7测试结果

1)车辆到达

 

2)车辆离开

 

3)列表查看

 

8总结反思

通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含义,并且能够实现模拟停车场管理的主要功能:

利用栈实现车的入库问题,利用队列完成车在便道上停放的问题,主要是通过栈和队列的初始化,调用等函数来模拟停车问题。

学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。

当然在实验中我也遇到了不少实际性的问题,比如车辆停车的时间hour限制在24小时,min限制在60分钟之内,如果加入日期计算就更好了;在便道上等待的车辆,车主不可能无限制的等待,应该编写一个便道上车辆离开的函数更合理些。

编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。

9源程序

#include

#include

#include

/*------------------------------------------------------------------------------*/

#defineMAX3/*车库容量*/

#defineprice0.05/*每车每分钟费用*/

typedefstructtime{

inthour;

intmin;

}Time;/*时间结点*/

typedefstructnode{

charnum[10];

Timereach;

Timeleave;

}CarNode;/*车辆信息结点*/

typedefstructNODE{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟车场*/

typedefstructcar{

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟通道*/

/*------------------------------------------------------------------------------*/

voidInitStack(SeqStackCar*);/*初始化栈*/

intInitQueue(LinkQueueCar*);/*初始化便道*/

intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/

voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*/

voidList(SeqStackCar,LinkQueueCar);/*显示存车信息*/

/*------------------------------------------------------------------------------*/

intmain()

{

SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

InitStack(&Enter);/*初始化车站*/

InitStack(&Temp);/*初始化让路的临时栈*/

InitQueue(&Wait);/*初始化通道*/

while

(1)

{

printf("\n1.车辆到达");

printf("2.车辆离开");

printf("3.列表显示");

printf("4.退出系统");

while

(1)

{

scanf("%d",&ch);

if(ch>=1&&ch<=4)break;

elseprintf("\npleasechoose:

1|2|3|4.");

}

switch(ch)

{

case1:

Arrival(&Enter,&Wait);break;/*车辆到达*/

case2:

Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/

case3:

List(Enter,Wait);break;/*列表打印信息*/

case4:

exit(0);/*退出主程序*/

default:

break;

}

}

}

/*------------------------------------------------------------------------------*/

voidInitStack(SeqStackCar*s)/*初始化栈*/

{

inti;

s->top=0;

for(i=0;i<=MAX;i++)

s->stack[s->top]=NULL;

}

intInitQueue(LinkQueueCar*Q)/*初始化便道*/

{

Q->head=(QueueNode*)malloc(sizeof(QueueNode));

if(Q->head!

=NULL)

{

Q->head->next=NULL;

Q->rear=Q->head;

return

(1);

}

elsereturn(-1);

}

voidPRINT(CarNode*p,introom)/*打印出场车的信息*/

{

intA1,A2,B1,B2;

printf("\n请输入离开的时间:

/**:

**/");

scanf("%d:

%d",&(p->leave.hour),&(p->leave.min));

printf("\n离开车辆的车牌号为:

");

puts(p->num);

printf("\n其到达时间为:

%d:

%d",p->reach.hour,p->reach.min);

printf("离开时间为:

%d:

%d",p->leave.hour,p->leave.min);

A1=p->reach.hour;

A2=p->reach.min;

B1=p->leave.hour;

B2=p->leave.min;

printf("\n应交费用为:

%2.1f元",((B1-A1)*60+(B2-A2))*price);

free(p);

}

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/

{

CarNode*p;

QueueNode*t;

p=(CarNode*)malloc(sizeof(CarNode));

_flushall();

printf("\n请输入车牌号:

");

gets(p->num);

if(Enter->top

{

Enter->top++;

printf("\n车辆在车场第%d位置.",Enter->top);

printf("\n请输入到达时间:

/**:

**/");

scanf("%d:

%d",&(p->reach.hour),&(p->reach.min));

Enter->stack[Enter->top]=p;

return

(1);

}

else/*车场已满,车进便道*/

{

printf("\n该车须在便道等待!

");

t=(QueueNode*)malloc(sizeof(QueueNode));

t->data=p;

t->next=NULL;

W->rear->next=t;

W->rear=t;

return

(1);

}

}

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)

{/*车辆离开*/

inti,room;

CarNode*p,*t;

QueueNode*q;

/*判断车场内是否有车*/

if(Enter->top>0)/*有车*/

{

while

(1)/*输入离开车辆的信息*/

{

printf("\n请输入车在车场的位置/1--%d/:

",Enter->top);

scanf("%d",&room);

if(room>=1&&room<=Enter->top)break;

}

while(Enter->top>room)/*车辆离开*/

{

Temp->top++;

Temp->stack[Temp->top]=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

}

p=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

while(Temp->top>=1)

{

Enter->top++;

Enter->stack[Enter->top]=Temp->stack[Temp->top];

Temp->stack[Temp->top]=NULL;

Temp->top--;

}

PRINT(p,room);

/*判断通道上是否有车及车站是否已满*/

if((W->head!

=W->rear)&&Enter->top

{

q=W->head->next;

t=q->data;

Enter->top++;

printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top);

printf("\n请输入现在的时间/**:

**/:

");

scanf("%d:

%d",&(t->reach.hour),&(t->reach.min));

W->head->next=q->next;

if(q==W->rear)W->rear=W->head;

Enter->stack[Enter->top]=t;

free(q);

}

elseprintf("\n便道里没有车.\n");

}

elseprintf("\n车场里没有车.");/*没车*/

}

voidList1(SeqStackCar*S)/*列表显示车场信息*/

{

inti;

if(S->top>0)/*判断车站内是否有车*/

{

printf("\n车场:

");

printf("\n位置到达时间车牌号\n");

for(i=1;i<=S->top;i++)

{

printf("%d",i);

printf("%d:

%d",S->stack[i]->reach.hour,S->stack[i]->reach.min);

puts(S->stack[i]->num);

}

}

elseprintf("\n车场里没有车");

}

voidList2(LinkQueueCar*W)/*列表显示便道信息*/

{

QueueNode*p;

p=W->head->next;

if(W->head!

=W->rear)/*判断通道上是否有车*/

{

printf("\n等待车辆的号码为:

");

while(p!

=NULL)

{

puts(p->data->num);

p=p->next;

}

}

elseprintf("\n便道里没有车.");

}

voidList(SeqStackCarS,LinkQueueCarW)

{

intflag,tag;

flag=1;

while(flag)

{

printf("\n请选择1|2|3:

");

printf("\n1.车场\n2.便道\n3.返回\n");

while

(1)

{

scanf("%d",&tag);

if(tag>=1||tag<=3)break;

elseprintf("\n请选择1|2|3:

");

}

switch(tag)

{

case1:

List1(&S);break;/*列表显示车场信息*/

case2:

List2(&W);break;/*列表显示便道信息*/

case3:

flag=0;break;

default:

break;

}

}}

 

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

当前位置:首页 > 高等教育 > 工学

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

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