数据结构 停车场管理系统.docx

上传人:b****1 文档编号:2915635 上传时间:2023-05-05 格式:DOCX 页数:22 大小:45.44KB
下载 相关 举报
数据结构 停车场管理系统.docx_第1页
第1页 / 共22页
数据结构 停车场管理系统.docx_第2页
第2页 / 共22页
数据结构 停车场管理系统.docx_第3页
第3页 / 共22页
数据结构 停车场管理系统.docx_第4页
第4页 / 共22页
数据结构 停车场管理系统.docx_第5页
第5页 / 共22页
数据结构 停车场管理系统.docx_第6页
第6页 / 共22页
数据结构 停车场管理系统.docx_第7页
第7页 / 共22页
数据结构 停车场管理系统.docx_第8页
第8页 / 共22页
数据结构 停车场管理系统.docx_第9页
第9页 / 共22页
数据结构 停车场管理系统.docx_第10页
第10页 / 共22页
数据结构 停车场管理系统.docx_第11页
第11页 / 共22页
数据结构 停车场管理系统.docx_第12页
第12页 / 共22页
数据结构 停车场管理系统.docx_第13页
第13页 / 共22页
数据结构 停车场管理系统.docx_第14页
第14页 / 共22页
数据结构 停车场管理系统.docx_第15页
第15页 / 共22页
数据结构 停车场管理系统.docx_第16页
第16页 / 共22页
数据结构 停车场管理系统.docx_第17页
第17页 / 共22页
数据结构 停车场管理系统.docx_第18页
第18页 / 共22页
数据结构 停车场管理系统.docx_第19页
第19页 / 共22页
数据结构 停车场管理系统.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构 停车场管理系统.docx

《数据结构 停车场管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构 停车场管理系统.docx(22页珍藏版)》请在冰点文库上搜索。

数据结构 停车场管理系统.docx

数据结构停车场管理系统

一、设计目的

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

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

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

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

二、设计容

设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

三、设计要求

按照从终端读入的输入数据进行模拟管理,每一组输入数据包括三个数据项:

汽车“进站”或“出站”信息、汽车牌照以及进站或出站的时刻,对每一组输入数据进行操作后的输出信息为:

若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场逗留的时间和应交纳的费用(在便道上停留不收费),按以顺序结构实现,队列以链表结构实现。

四、设计过程

1、算法思想分析

由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场按车辆到达时间的先后顺序,依次由北向南排列。

由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,又因为每个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素我设计成汽车的车牌号。

当停车场某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。

这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。

当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。

另外,停车场根据汽车在停车场停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆离开停车场时的时间不需要记录,当从终端输入时可直接使用。

由于时间不像汽车一样需要让道,我设计了一个顺序表来存放时间。

又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。

2、算法描述与实现

(1)时间结点类型

typedefstructtime{

inthour;

intmin;

}Time;/*时间结点*/

(2)车辆进出站信息类型

typedefstructnode{

charnum[10];

Timereach;

Timeleave;

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

(3)停车场和便道信息类型

typedefstructNODE{

CarNode*stack[Max+1];

inttop;

}SeqStackCar;/*模拟车站*/

typedefstructcar{

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟通道*/

voidInitStack(SeqStackCar*,intn);/*声明栈*/

//初始化,创建一个新栈S用于停车场

intInitQueue(LinkQueueCar*);/*声明便道*/

//初始化,创建一个队列Q用于便道

intArrival(SeqStackCar*,LinkQueueCar*,intn);/*车辆进站*/

{

CarNode*p;

QueueNode*t;

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

flushall();

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

吉A1234):

");

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*,SeqStackCar*,LinkQueueCar*,intn);/*车辆出站*/

(4)主函数和其它函数的伪码算法

voidmain()

{

SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

intn;

n=getn();

InitStack(&Enter,n);/*初始化车场*/

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

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

while

(1)

{

printf("\n1.车辆进站");

printf("2.车辆出站");

printf("3.存车信息");

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

while

(1)

{

printf("请选择:

1|2|3|4.\n");

scanf("%d",&ch);

fflush(stdin);

do

{

if(ch>4||ch<1){

printf("输入有误,请重新输入!

");

scanf("%d",&ch);

fflush(stdin);

}

else

break;

}

while(ch>4||ch<1);

break;

}

switch(ch)

{

case1:

Arrival(&Enter,&Wait,n);break;/*车辆进站*/

case2:

Leave(&Enter,&Temp,&Wait,n);break;/*车辆出站*/\

case3:

List(Enter,Wait);break;/*存车信息*/

case4:

exit(0);/*退出系统*/

default:

break;

}

}

}

系统测试

程序初始界面:

车辆进站:

停车场存车信息:

车辆进入便道:

车辆出站:

便道上的车出站:

五、设计总结

参考文献:

《数据结构程序设计题典》

春葆等编清华大学出版社

《数据结构(C语言版)》

黄国瑜叶乃菁编清华大学出版社

《数据结构课程设计》

苏仕华等编机械工业出版社

附录:

#include

#include

#include

#include

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

#defineMax10

intgetn()

{

intn;

printf("欢迎您光临吉吉停车场,");

printf("本停车场管理实行24小时制,停车每分钟0.1元.\n");

printf("请输入停车场可容纳的车(最多10辆):

");

scanf("%d",&n);

fflush(stdin);

do

{

if(n<1||n>10)

{

printf("输入的车辆数不在要求围,请重新输入!

");

scanf("%d",&n);

fflush(stdin);

}

elsebreak;

}

while(n<1||n>10);

returnn;

}

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*,intn);/*声明栈*/

intInitQueue(LinkQueueCar*);/*声明便道*/

intArrival(SeqStackCar*,LinkQueueCar*,intn);/*车辆进站*/

voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*,intn);/*车辆出站*/

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

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

{

inti;

s->top=0;

for(i=0;i<=n;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)/*打印出站车的信息*/

{

intA1,A2,B1,B2;

inta,b,c;

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

/**:

**/");

scanf("%d:

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

fflush(stdin);

do

{

if(p->leave.hourreach.hour||(p->leave.hour==p->reach.hour&&p->leave.minreach.min))

{

printf("输入离开时间比进站时间早,请重新输入!

\n");

scanf("%d:

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

fflush(stdin);

}

if(p->leave.hour<0||p->leave.hour>=24||p->leave.min<0||p->leave.min>=60)

{

printf("输入的时间格式有错,请重新输入!

");

scanf("%d:

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

fflush(stdin);

}

elsebreak;

}

while(p->leave.hourreach.hour||(p->leave.hour==p->reach.hour&&p->leave.minreach.min)||p->leave.hour<0||p->leave.hour>=24||p->leave.min<0||p->leave.min>=60);\

printf("车场现在有一辆车离开,请便道里的第一辆车进入车场!

\n");

printf("出站的车的车牌号为:

");

puts(p->num);

printf("\n");

A1=p->reach.hour;

A2=p->reach.min;

B1=p->leave.hour;

B2=p->leave.min;

a=(B1-A1)*60+B2-A2;

if(a>=60)

{

b=a/60;

c=a-60*b;

}

else

{

b=0;

c=a;

}

printf("祝您一路顺风,欢迎您下次光临.");

printf("\n收据\n");

printf("==================================车牌号:

");

puts(p->num);

printf("\n");

printf("===================================================\n");

printf("|进车场时刻|出车场时刻|停留时间|应付(元)|\n");

printf("====================================================\n");

printf("|%d:

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

printf("|%d:

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

printf("|%d:

%d",b,c);

printf("|%2.1f",0.1*a);

printf("|\n");

printf("-----------------------------------------------------\n");

free(p);

}

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

{

CarNode*p;

QueueNode*t;

inta,b;

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

flushall();

printf("\n请输入车牌号(七位,例:

吉A1234):

\n");

printf("请严格按照要求输入车牌号,否则系统会出错!

\n");

do

{

a=strlen("陕A1234");

b=strlen(gets(p->num));

fflush(stdin);

if(a!

=b)

{

printf("输入车牌号格式错误,请重新输入(七位)!

\n");

gets(p->num);

fflush(stdin);

}

elsebreak;

if(a!

=b)

printf("输入车牌号格式错误,请重新输入(七位)!

\n");

}

while(a!

=b);

if(Enter->top

{

Enter->top++;

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

fflush(stdin);

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

/**:

**/");

scanf("%d:

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

fflush(stdin);

do

{

if(p->reach.hour<0||p->reach.hour>=24||p->reach.min<0||p->reach.min>=60)

{

printf("输入的时间格式有错,请重新输入!

");

scanf("%d:

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

fflush(stdin);

}

else

break;

}

while(p->reach.hour<0||p->reach.hour>=24||p->reach.min<0||p->reach.min>=60);

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,intn)

{/*车辆离开*/

inti,room;

CarNode*p,*t;

QueueNode*q;

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

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

{

while

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

{

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

",Enter->top);

scanf("%d",&room);

fflush(stdin);

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

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

if((W->head!

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

{

q=W->head->next;

t=q->data;

Enter->top++;

printf("\n现在请便道上的车进入车场.该车的车牌号为:

");

puts(t->num);

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

printf("\n请输入现在的时间(即该车进站的时间)/**:

**/:

");

scanf("%d:

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

fflush(stdin);

do

{

if(t->reach.hour<0||t->reach.hour>=24||t->reach.min<0||t->reach.min>=60)

{

printf("输入的时间格式有错,请重新输入!

");

scanf("%d:

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

fflush(stdin);

}

else

break;

}

while(t->reach.hour<0||t->reach.hour>=24||t->reach.min<0||t->reach.min>=60);

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)/*判断通道上是否

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

当前位置:首页 > 法律文书 > 调解书

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

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