数据结构 停车场管理系统(附源码)C++ 团队接课设、毕设 [email protected]

 

 

模拟停车场管理问题

 

问题描述:

 

设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到来的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

基本要求:

试为停车场编制按上述要求进行管理的模拟程序。在这里假设汽车不能从便道上开走。试设计一个停车场管理程序。

实现提示:

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,例如:('A',1,5)表示一号牌照车在5这个时刻到达,而('D',5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为('E',0,0)时结束。对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。

1.设计题目:《停车管理系统》

2.设计目的:
(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。

(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。实现停车场的调度功能。

(3)用顺序栈来表示停车场,链队表示停车场外的便道。

(4)显示停车场信息和便道信息。

(5)操作提示界面。

算法思想分析

(1)、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、自动匹配本地时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在链式栈、链式队列中定义结点类型为车辆信息结点类型。

(2)、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义expenses函数实现。

(3)、车辆到达时要输入车辆的信息,并以此存放在停车场内;每进入一辆车,要判断停车场(链式栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。

(4)、车辆的离开,要另外设计一个辅助栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作。

(5)、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询显示车辆的当前情况。

算法思想分析

(1)、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、自动匹配本地时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在链式栈、链式队列中定义结点类型为车辆信息结点类型。

(2)、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义expenses函数实现。

(3)、车辆到达时要输入车辆的信息,并以此存放在停车场内;每进入一辆车,要判断停车场(链式栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。

(4)、车辆的离开,要另外设计一个辅助栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作。

 

(5)、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询显示车辆的当前情况。

 

算法思想分析

(1)、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、自动匹配本地时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在链式栈、链式队列中定义结点类型为车辆信息结点类型。

(2)、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义expenses函数实现。

(3)、车辆到达时要输入车辆的信息,并以此存放在停车场内;每进入一辆车,要判断停车场(链式栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。

(4)、车辆的离开,要另外设计一个辅助栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作。

(5)、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询显示车辆的当前情况。

 

 

 

五、算法主要功能函数及实现

typedef struct        //时间结构图

{

int day;          

int hour;       

int min;

int sec;

}TIME;         //时间结点

typedef struct

{

char num[10];   //车牌号

TIME time;      //进入停车场的时间

int n;          //进入停车场的位置

}information;

                     

typedef struct node           

{

information data;

struct node *next;

}stacknode; stacknode *top1,*top2,*top3; //栈结构体定义

 

 

 

typedef struct

{

information data;

stacknode *front,*rear;

}LQueue;LQueue *Q;               //队列结构体定义

stacknode *into(stacknode *top1,LQueue *Q);      //初始化车辆进入

{

time_t rawtime; //调用系统时间函数

struct tm *timeinfo; //时间结点

time( &rawtime);

timeinfo = localtime( &rawtime);

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

if(p == NULL)

{

printf(" 内存分配失败");

return top1;

}

printf(" 请输入进入停车场车辆的车牌号:");

scanf("%s", p->data.num);

q = top1;

while(q!= NULL)

{

if(strcmp(p->data.num, q->data.num) == 0)

{

printf("车牌号输入有误,该车已进入!");

return top1;

}

q = q->next;

}

p->data.time.day  = timeinfo->tm_mday;

p->data.time.hour = timeinfo->tm_hour;

p->data.n = b;

if(b > maxs)

{

printf("停车场已满,请在便道等候!\n");

wait(Q,p);

return top1;

}

if(top1 == NULL)

{

p->next = NULL;

top1 = p;

 

}

else

{

p->next = top1;

top1 = p;

}

b++;

printf("车牌为%s的汽车驶入时间为:%d号%d点%d分%d秒\n",top1->data.num,);

return top1;

}                     

int expenses(stacknode *p,int x,int y);         //停车费用计算函数

{

if(x3!= 0)

w = (x1*24+x2+1-(p->data.time.day*24+p->data.time.hour))*price;

else

w = (x1*24+x2-(p->data.time.day*24+p->data.time.hour))*price;

return w;

}

stacknode *leave(stacknode *top1,char str[],LQueue *Q);               {                                               //车辆驶出出场函数

if(top1 == NULL)

{printf("停车场没有车辆!\n");return top1;}

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

if(p == NULL)

{printf("内存分配失败");return top1;}

q = top1;

while(q!= NULL)

{if(strcmp(q->data.num,str) == 0)

break;

q = q->next;}

{printf("输入有误,该车辆不在停车场!\n");

   if(q == NULL)

return top1;}

for(i = top1->data.n; i > q->data.n; i--)

{p = (stacknode *)malloc(sizeof(stacknode));

strcpy(p->data.num,top1->data.num);

p->data.time = top1->data.time;

p->data.n    = top1->data.n-1;

top1 = top1->next;

if(top2 == NULL)

{p->next = NULL;top2 = p;}

else

{p->next = top2;top2 = p;}}

top1 = top1->next;

while( top2!= NULL)

{p=(stacknode*)malloc(sizeof(stacknode));if(p==NULL){printf("内存分配失败");return top1;}

p->data.n = top2->data.n;

strcpy(p->data.num,top2->data.num);

p->data.time = top2->data.time;

p->next = top1;

top1 = p;

top2 = top2->next;}

if(EmptyLQue(Q))

{p = out(Q);p->data.n--;top1 = LQinto(p,top1);}

else b--;

printf("车牌为%s的汽车驶出时间为:%d号%d点%d分%d秒\n",  q->data.num,);

printf("汽车停留的时间为%f小时\n",  time(q));

printf("车辆驶出停车场需要缴纳的费用为:%d元\n",  expenses(q));return top1;}

LQueue *wait(LQueue *q,stacknode *s);           //车辆进入候车便道函数

{s->next = NULL;q->rear->next = s;q->rear = s;return q;}  

int EmptyLQue(LQueue *q);               //判断候车便道有无等待车辆函数

stacknode *out(LQueue *q);                     //候车区车辆出队

{ p = q->front->next;

if(q->front->next == q->rear)

{q->rear = q->front;return p;}

else

q->front->next = p->next;p->next = NULL;return p;}                                       

stacknode *LQinto(stacknode *p,stacknode *top1);                       {//从候车便道进入停车场函数 p->next = top1;top1 = p;return top1; }              

void show(stacknode *top1);                   //显示停车场所有信息函数

{ printf("   停车场内全部车辆信息表\n");

if(top1 == NULL)

printf("  停车场内无车!\n");

 

 

else

{

printf("车牌号      进入时间       位置\n");

while(top1!= NULL)

{printf(" %s        %d号%d点%d分   第%d位\n",top1->data.num,);top1 = top1->next;}} }

void T_shou(LQueue *Q);  //显示候车区信息

 

double time(stacknode *p,int x1,int x2,int x3,int x4);                 //计算停留时间

{ q = (LQueue *)malloc(sizeof(LQueue));q ->front = Q->front;

q ->rear  = Q->rear;printf("     候车区信息\n");if(q->front == q->rear)

printf("候车区没有车辆!\n");

else

{q->front = q->front->next;printf("车牌号      进入时间\n");while(q->front!= NULL)

{printf("%s %d号%d点%d分 \n",q->front->data.num,q->front->data.time.day,q->front->data.time.hour,q->front->data.time.min);q->front = q->front->next;}

 

全部源码:

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <windows.h>

#define  maxs 3       //最大停车数量

#define price 1       //天气晴朗资费

#define prices 3       //天气恶略资费

int b=1;              //计数

typedef struct        //时间结构图

{

    int day;         

    int hour;      

    int min;

    int sec;

}TIME;              //时间结点  

typedef struct

{

    char num[10];   //车牌号

    TIME time;      //进入停车场的时间

    int n;          //进入停车场的位置

}information;

typedef struct node          

{

    information data;

    struct node *next;

}stacknode; stacknode *top1,*top2,*top3; //栈结构体定义


 

typedef struct

{

    information data;

    stacknode *front,*rear;

}LQueue;LQueue *Q;                //队列结构体定义

 

stacknode *Init();                                                 //栈的初始化

stacknode *into(stacknode *top1,LQueue *Q);                        //初始化车辆进入                    

int expenses(stacknode *p,int x,int y);                            //停车费用计算函数

stacknode *leave(stacknode *top1,char

  • 16
    点赞
  • 185
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
【资源说明】 1、基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip 基于MySQL+Java的仓库管理系统项目源码+数据库(课毕设).zip
实验二 停车场管理 班级:A0712 学号:12 姓名:冷清淼 成绩:__________ 指导教师签名:__________ 一、问题描述 停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场 ,汽车按到达的先后次序,由北向南依次排列(假大门在最南端)。若停车场已停满 n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开 入。当停车场某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该 辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时 间的长短交费(在便道上停留的时间不收费)。 要求: 1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 2.从终端读入汽车到达或离去的数据,每组数据包括三项: (1)是"到达"还是"离开"; (2)汽车牌照; (3)"到达"或"离开"的时刻。 3.与每组输入信息相应的输出信息为:如果是到达车辆,则输出其在停车场中或 便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。 二、算法说明 1.数据结构说明 (1)用到两个堆栈:一个为车场栈;另一个为临时栈temp typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车场*/ 一个队列结构,存储便道车辆信息: typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ 2.算法说明 (1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达离开、列表显示 图1 (2)以模块为单位分析算法 1、"到达"模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到 便道等待。如图2。 图2 2."离开"模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. "显示"模块:显示模块有两个显示选项,即:车场与便道。如图4。 图4 三、测试结果 (一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例 ,同时检验程序的正确性和强壮性) 1.第一组测试用例 (1)测试输入:停车场车辆离开,如下表: "服务选择 "车牌号/车位 "到达/离开时间 " "1 "QH058 "15:25 " "1 "AB123 "18:45 " "1 "EA642 "23:15 " "2 "2 "0:30 " "2 "1 "0:65(错误) " (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。 (3)正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时, 应该提示输入错误,重输。 (4)实际输出: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式 控制。 (6)当前状态:已改正 2.第二组测试用例 (1)测试输入:连续6辆车到达,如下表: " 服务选 " 车牌号 " 到达时间 " "择 " " " "1 "A8828 "7:56 " "1 "S2296 "8:25 " "1 "WW666 "8:45 " "1 "HK456 "15:50 " "1 "GH999 "12:30 " "1 "DD555 "13:40 " 测试目的:测试到达方法与列表显示方法能否正确完成。 (3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。 (4)实际输出: (5)错误原因:没有作出时间先后的判断,而是先输入先进入。 (6)当前状态:待修改 3.第三组测试用例 (1)测试输入:接上一步输入离开信息,下表: "服务选择"离开车位"离开时间"便道车进入时 " " " " "间 " "2 "3 "13:30 "13:40 " (2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。 (3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。 (4)实际输出: 错误原因:没有错误。 (6)当前状态:通过 (二)测试结果分析 此停车管理系统基本可能实现一个小的停车场的管理,其"到达"与"离开"方法都相对比 较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时, 那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出 现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关 机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。 录:源代码 ///系统说明:本系统适应于小型停车场,且停车时间在一天之的短期停放停车场。 //在此系统中,车库容量置为5,便于测

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值