您好,欢迎来到赴品旅游。
搜索
您的当前位置:首页停车场管理系统汇报

停车场管理系统汇报

来源:赴品旅游
停车场管理系统大作业汇报

一、问题描述:

设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。

二、设计要求:

1、以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 2、每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。3、 对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。

三、概要设计:

3.1 逻辑结构设计

停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。同时采用一个临时栈,存放暂时从停车场中开出的车辆。

3.2 存储结构设计

栈用顺序结构实现,原因是栈的大小固定,且操作简单。

队列用链式结构实现,原因是队列的大小不固定,需要动态增加。

3.3 实现方法

①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。

②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。

3.4 主要模块

1 车辆到达信息的处理

2 车辆离开信息的处理

3 输出在停车场和便道的停车情况

3.5 主要函数

(1) 栈的相关操作

status InitStack(SqStackCar &s);

status PushCar(SqStackCar &s,CarNode &e);

status PopCar(SqStackCar &s,CarNode &e);

status StackEmpty(SqStackCar s);

(2) 队列的相关操作

status InitQueue(LinkQueueCar &q)

status EnQueue(LinkQueueCar &q,CarNode &e)

status DeQueue(LinkQueueCar &q,CarNode &e)

status QueueEmpty(LinkQueueCar q)

3)处理车辆的操作

status Arrive(SqStackCar &stack,

LinkQueueCar &llist)

status Departure(SqStackCar &stack,

LinkQueueCar &llist,SqStackCar &temp)

status List(SqStackCar &stack,

LinkQueueCar &llist,SqStackCar &temp)

四、详细设计:

1、各种结构体类型的定义

typedef struct time{

int hour;

int min;

}Time; /*时间结点*/

typedef struct {

char carnum[10];

Time reach;

Time leave;

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

typedef struct {

CarNode *base;

CarNode *top;

int num;

int stacksize;

}SqStackCar; /*模拟车站*/

2、栈的相关操作

status InitStack(SqStackCar &s) //栈的初始化

{

s.base=(CarNode *)malloc(MAXSTACKSIZE*sizeof(CarNode));

if(!s.base) exit(0);/*分配失败*/

s.top=s.base;

s.num=0;

s.stacksize=MAXSTACKSIZE;

return 1;

}

status PushCar(SqStackCar &s,CarNode &e){ if(s.top-s.base>=s.stacksize) return 0;

else *s.top++=e;

s.num++;

return 1;

}

status PopCar(SqStackCar &s,CarNode &e) { //车辆的入栈操作

//车辆的出栈操作

if(s.top==s.base) return 0;

e=*--s.top;

s.num--;

// printf(\"车辆%s退出车站\\n\

return 1;

}

status StackEmpty(SqStackCar s){ //判断栈是否为空

if(s.base==s.top) return 1;

else return 0;

}

3、队列的相关操作status InitQueue(LinkQueueCar &q){ q.front=(LinkCarNode*)malloc(sizeof(LinkCarNode));

if(!q.front) exit(0);

//队列的初始化

q.rear=q.front;

q.front->next=NULL;

q.num=0;

return 1;

}

status EnQueue(LinkQueueCar &q,CarNode &e){ LinkCarNode *p;

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

if(!p) exit(0);

p->data=e;

p->next=NULL;

q.rear->next=p;

q.rear=p;

//车辆进入队列

q.num++;

return 1;

}

status DeQueue(LinkQueueCar &q,CarNode &e) {

LinkCarNode *p;

if(q.front==q.rear) return 0;

p=q.front->next;

e=p->data;

q.front->next=p->next;

q.num--;

if(q.rear==p) q.front=q.rear;

free(p);

//车辆离开队列

return 1;

}

status QueueEmpty(LinkQueueCar q) { 判断队列是否为空

if(q.front==q.rear)

return 1;

else

return 0;

}

3、arrive函数的实现(陈国强3872008016)

status Arrive(SqStackCar &stack,LinkQueueCar &llist)

{

CarNode *car;

LinkCarNode *lcar;

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

lcar=(LinkCarNode*)malloc(sizeof(LinkCarNode));

printf(\" 请输入车牌号码\\n\");

printf(\" \");

flushall();

gets(car->carnum);

printf(\" 请输入车辆到达的时间,格式xx:xx\\n\");

printf(\" \");

flushall();

scanf(\"%2d:%2d\

if(stack.num{

PushCar(stack,*car);

printf(\" 车辆进入停车场\\n\");

printf(\" 车辆停在停车场的第%d个位置\\n\

}

else //停车场已满

{

lcar=(LinkCarNode*)malloc(sizeof(LinkCarNode));

lcar->data=*car;

lcar->next=NULL;

EnQueue(llist,*car);

printf(\" 车辆进入便道\\n\");

printf(\" 车辆停在便道的第%d个位置\\n\

}

return 1;

}

4、departure函数的设计(钟超3872008039、周伟伟3872008034)

status Departure(SqStackCar &stack,LinkQueueCar &llist,SqStackCar &temp)

{

int flag=0,a1,a2,b1,b2,money;

CarNode e,w;

CarNode *leavecar;

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

printf(\" 请输入离去车辆的号码\\n\");

printf(\" \");

flushall();

gets(leavecar->carnum);

while(!StackEmpty(stack))

{

PopCar(stack,e);

if(strcmp(leavecar->carnum,e.carnum)==0)

{

printf(\" 请输入车辆离去的时间\\n\");

printf(\" \");

flushall();

scanf(\"%ld:%ld\

printf(\" 第\");

printf(\"%s号车\

printf(\"离开了停车场\\n\");

e.leave.hour=leavecar->leave.hour;

e.leave.min=leavecar->leave.min;

a1=e.leave.hour;

a2=e.reach.hour;

b1=e.leave.min;

b2=e.reach.min;

money=((a1-a2+24)%24*60+(b1-b2))*PRICE;

printf(\"\\n 车辆来到停车场的时间为: %2ld:%2ld\

printf(\"\\n 车辆离开停车场的时间为: %2ld:%2ld\

printf(\"\\n 需要%d元\\n\

flag=1;

break;

}

else

{

PushCar(temp,e);

}

}

if(!flag)

{

printf(\" 没有这辆车\\n\");

}

while(!StackEmpty(temp))

{

PopCar(temp,e);

PushCar(stack,e);

}

if(flag&&!QueueEmpty(llist))

{

DeQueue(llist,w);

PushCar(stack,w);

w.reach.hour=leavecar->leave.hour;

w.reach.min=leavecar->leave.min;

flushall();

printf(\" 车辆%s\

printf(\"进入停车场\\n\");

printf(\"时间为\");

printf(\"%d:%d\\n\

}

return 1;

}

5、显示停车情况

status List(SqStackCar &stack,LinkQueueCar &llist,SqStackCar &temp)

{

int cmd,count;

CarNode e;

LinkCarNode *q;

q=(LinkCarNode*)malloc(sizeof(LinkCarNode));

do

{

printf(\" 请输入要进行的操作\\n\");

printf(\" 1为显示在车站的车 2为显示在便道上的车 3为退出\\n\");

printf(\" \");

flushall();

scanf(\"%d\

switch(cmd)

{

case 1:

printf(\" 显示在停车场的车\\n\");

count=1;

while(!StackEmpty(stack))

{

PopCar(stack,e);

PushCar(temp,e);

}

while(!StackEmpty(temp))

{

PopCar(temp,e);

printf(\" 第\");

printf(\"%d\

count++;

printf(\"辆车是\");

printf(\"%s\\n\

PushCar(stack,e);

}

break;

case 2:

printf(\" count=1;

q=llist.front->next;

显示在便道上的车\\n\");

if(llist.front!=llist.rear)

{

while(q!=NULL)

{

e=q->data;

printf(\" 第\");

printf(\"%d\

printf(\"辆车是\");

printf(\"%s\\n\

q=q->next;

count++;

}

}

else

{printf(\" 在便道上没有车\\n\");}

break;

case 3:

break;

default:

printf(\" break;

}

}while(cmd!=3);

return 1;

}

6、 主函数的设计

输入错误\\n\");

void main()

{

WelCome();

char cmd;

SqStackCar part,temp;

LinkQueueCar road;

InitStack(part);

InitStack(temp);

InitQueue(road);

do

{

printf(\" printf(\" a为车辆到来 d为车辆离开出系统\\n\");

请输入命令操作\\n\");

l为显示停车情况 c为清除屏幕 e为退 printf(\" \");

flushall();

cmd=ReadCommand();

switch(cmd)

{ case 'a':

case 'A':

Arrive(part,road);

break;

case 'c':

case 'C':

system(\"cls\");

break;

case 'd':

case 'D':

Departure(part,road,temp);

break;

case 'l':

case 'L':

List(part,road,temp);

break;

case 'e':

case 'E':

flushall();

break;

default:printf(\"错误的命令\\n\");

break;

}

}while(cmd!='e'&&cmd!='E');

}

五、总结:

通过本次大作业的学习和研究,我们有以下收获。

1、 我们培养了团队精神,初步了解了一个大的工程从分析到计划,再从分工到合作,从修改到提交的整个过程。

2、我们加深了对数据结构中栈和队列的理解,并产生了对计算机的强烈兴趣。总的来讲,这次大作业的完成情况是比较令人满意的。

2010-11-24

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fupindai.com 版权所有 赣ICP备2024042792号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务