数据结构 停车场管理

合集下载

数据结构—停车场管理系统

数据结构—停车场管理系统

数据结构—停车场管理系统数据结构—停车场管理系统1.引言本文档描述了一个停车场管理系统的设计和实现。

停车场管理系统是一个用于管理停车场内车辆进出、计费等相关事务的系统。

该系统通过数据结构的应用实现了高效的车辆管理和计费功能。

2.系统概述2.1 目标停车场管理系统的目标是提供一个高效、准确和可靠的车辆管理和计费系统,使停车场管理人员能够更好地管理停车场内的车辆。

2.2 功能该系统的主要功能包括:●车辆进入管理:记录进入停车场的车辆信息,包括车牌号码、进入时间等●车辆离开管理:记录离开停车场的车辆信息,包括车牌号码、离开时间等,并计算相应的停车费用●停车位管理:记录停车场内所有车位的使用情况,包括已使用和空闲的车位信息●支付管理:根据停车时长计算停车费用,并提供支付功能●统计报表:停车场内车辆进出、停车时长、收入等相关统计报表3.系统设计3.1 数据结构选择为了实现停车场管理系统的高效运行,选择以下数据结构:●链表:用于管理车辆进出的顺序,支持快速插入和删除操作●哈希表:用于存储车辆信息,通过车牌号码作为键,快速检索和访问各个车辆的信息●栈:用于管理停车场内的车位,支持快速分配和释放车位●队列:用于统计报表时的数据存储和处理3.2 系统架构停车场管理系统的整体架构如下所示:●用户界面:提供用户操作界面,包括车辆进入、离开、支付以及查询等功能●车辆管理模块:负责处理车辆进入和离开的相关逻辑,包括记录车辆信息、计算停车费用等●停车位管理模块:负责管理停车场内车位的分配和释放,包括查找空闲车位、更新车位状态等●统计报表模块:负责停车场内各种统计报表,包括车辆进出统计、停车时长统计、收入统计等4.系统实现4.1 用户界面实现用户界面可以通过文本命令行交互或者图形用户界面来实现,具体实现方式根据实际需求决定。

4.2 车辆管理模块实现车辆管理模块可以通过链表来实现车辆进出的顺序管理。

每次车辆进入时,创建一个新的节点插入链表末尾;每次车辆离开时,从链表中删除对应节点。

数据结构课程设计——停车场

数据结构课程设计——停车场

数据结构课程设计——停车场在当今社会,随着汽车数量的不断增加,停车场的管理变得日益重要。

一个高效、合理的停车场管理系统不仅能够提高停车场的使用效率,还能为车主提供更好的服务体验。

在本次数据结构课程设计中,我们将深入探讨如何设计一个实用的停车场管理系统。

一、需求分析首先,我们需要明确停车场管理系统的基本需求。

一般来说,它应该具备以下功能:1、车辆的入场登记,包括车辆的车牌号、入场时间等信息。

2、车辆的出场结算,根据停车时间计算停车费用。

3、实时显示停车场内的车位使用情况,以便车主了解是否有空闲车位。

4、能够支持不同类型的车辆,如小型车、中型车、大型车等,并根据车辆类型收取不同的费用。

二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理停车场的相关信息。

1、对于车辆信息的存储,我们可以使用链表。

链表的优点是插入和删除操作比较方便,可以快速地对车辆的入场和出场进行处理。

2、对于车位的管理,我们可以使用栈或者队列。

如果采用栈的方式,先进后出,适合模拟停车场的一端进出;如果采用队列的方式,先进先出,更符合一些实际场景中车辆按顺序入场和出场的情况。

3、为了快速查找车辆的信息,我们还可以使用哈希表,通过车牌号作为键,快速获取车辆的相关数据。

三、系统设计1、入场流程当车辆入场时,系统会获取车辆的车牌号、车型和入场时间等信息。

将这些信息存储到链表中,并在车位管理的数据结构(如栈或队列)中为车辆分配一个车位。

同时,更新停车场内的车位使用情况。

2、出场流程车辆出场时,根据车牌号在链表中查找车辆的入场时间等信息,计算停车时间和费用。

然后在车位管理的数据结构中释放车位,并更新车位使用情况。

3、车位显示实时统计车位管理数据结构中的空闲车位数量,并展示给车主,让他们能够提前了解停车场的空位情况。

4、费用计算根据车辆的车型和停车时间,按照预设的收费标准计算停车费用。

四、算法实现1、车辆入场算法```cvoid vehicleEntry(char plateNumber, int vehicleType) {Vehicle newVehicle =(Vehicle )malloc(sizeof(Vehicle));strcpy(newVehicle>plateNumber, plateNumber);newVehicle>vehicleType = vehicleType;newVehicle>entryTime = time(NULL);//将车辆信息插入链表insertVehicle(newVehicle);//为车辆分配车位allocateParkingSpace(newVehicle);updateParkingStatus();}```2、车辆出场算法void vehicleExit(char plateNumber) {Vehicle vehicle = searchVehicle(plateNumber);if (vehicle == NULL) {printf("未找到该车辆信息\n");return;}double parkingFee = calculateFee(vehicle);//释放车位releaseParkingSpace(vehicle);//从链表中删除车辆信息deleteVehicle(vehicle);updateParkingStatus();printf("车牌号:%s,停车费用:%2f 元\n", plateNumber, parkingFee);}```3、车位分配算法(以栈为例)void allocateParkingSpace(Vehicle vehicle) {if (top < MAX_PARKING_SPACES 1) {parkingSpaces++top = vehicle;vehicle>parkingSpaceNumber = top + 1;} else {printf("停车场已满\n");}}```4、车位释放算法```cvoid releaseParkingSpace(Vehicle vehicle) {if (top >= 0 && parkingSpacestop == vehicle) {parkingSpacestop = NULL;top;} else {printf("车位释放错误\n");}}```五、系统测试在完成系统的开发后,我们需要进行充分的测试以确保系统的稳定性和正确性。

数据结构停车场管理系统数据结构设计

数据结构停车场管理系统数据结构设计

数据结构停车场管理系统数据结构设计在智能化时代的今天,停车问题成为了城市管理的一大难题。

为了解决车辆日益增多的停车需求,设计一个高效的停车场管理系统显得尤为重要。

本文将围绕数据结构的设计来探讨停车场管理系统的实现。

一、需求分析停车场管理系统的主要功能是提供用户停车、缴费、查询等服务,同时需要为管理人员提供车辆调度、收费统计等功能。

为了实现这些功能,我们需要从需求角度对数据结构进行设计。

1. 用户管理停车场管理系统需要记录每个用户的停车信息,包括车辆信息、停车时间等。

为了高效查询用户信息,可以使用哈希表作为数据结构,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。

2. 车辆管理为了维护停车场内的车辆信息,我们可以使用链表作为数据结构来管理车辆。

每个节点可以保存一个车辆的信息,如车牌号、停车时间等,同时连接下一个车辆节点。

3. 车位管理停车场需要管理可用车位和已停车位。

为了高效分配车位,可以使用堆作为数据结构来存储可用车位信息。

堆可以根据剩余车位数量进行自动排序,当有车辆进入停车场时,从堆中取出最小的剩余车位。

4. 收费管理停车场管理系统需要计算用户停车时间并进行费用结算。

为了高效计算停车时间,可以使用栈作为数据结构来记录每个用户进入停车场的时间。

栈可以实现先进后出的特点,正好符合车辆停车的实际情况。

当用户离开停车场时,可以根据进入时间计算停车时间并进行费用结算。

5. 查询与统计为了用户能够方便地查询自己的停车信息,可以使用二叉查找树作为数据结构,将用户的车牌号作为键值进行存储。

二叉查找树可以在O(log n)的时间复杂度内完成查询操作。

另外,为了方便管理人员进行统计工作,可以使用散列表来存储车辆的停车信息,以便根据不同条件进行统计分析。

二、系统设计基于以上需求分析,我们可以得出停车场管理系统的数据结构设计如下:1. 用户管理使用哈希表来存储用户信息,将用户的身份证号或车牌号作为键值,用户信息作为值进行存储。

数据结构(C语言版)停车场管理(完美版)

数据结构(C语言版)停车场管理(完美版)

数据结构(C语言版)停车场管理(完美版)#include#include#include#define OK 1#define OVERFLOW -2#define SIZE 2 //停车场位置数typedef int Status;typedef struct Car1{int number; //车号int ar_time; //到达时间}CarNode;typedef struct{CarNode *base; //堆栈底CarNode *top; //堆栈顶int stacksize;}Park;typedef struct Car2{int number; //车号int ar_time; //到达时间struct Car2 *next;}*CarPtr;typedef struct{ //便道CarPtr front; //便道的队列的对头CarPtr rear; //便道的队列的队尾int length;}Shortcut;Status InitStack(Park &P){ //初始化停车场P.base=(CarNode*)malloc(SIZE*sizeof(Car1));if(!P.base)exit(OVERFLOW);P.top=P.base;P.stacksize=0;return OK;}Status Push(Park &P,CarNode e){ //车进入停车场*P.top++=e;++P.stacksize;return OK;}Status Pop(Park &P,CarNode &e){ //车离开停车场if(P.top==P.base)printf("停车场为空");else{e=*--P.top;--P.stacksize;}return OK;}Status InitQueue(Shortcut &S){ //初始化便道S.front=S.rear=(CarPtr)malloc(sizeof(Car2));if(!S.front||!S.rear)exit(OVERFLOW);S.front->next=NULL;S.length=0;return OK;}Status EnQueue(Shortcut &S,int number,int ar_time){ //车进入便道CarPtr p;p=(CarPtr)malloc(sizeof(Car2));if(!p)exit(OVERFLOW);p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;++S.length;return OK;}Status DeQueue(Shortcut &S,CarPtr &w){ //车离开便道if(S.length==0)printf("通道为空");else{w=S.front->next;S.front->next=w->next;--S.length;}return OK;}//对进栈车辆的处理Status Arrival(Park &P,Shortcut &S){int number,ar_time;printf("请输入车牌号:");scanf("%d",&number);printf("请输入进停车场的时刻:");scanf("%d",&ar_time);if(P.stacksize<size){CarNode c;c.number=number;c.ar_time=ar_time;Push(P,c);printf("该车停在第%d号车道\n",P.stacksize);}else{EnQueue(S,number,ar_time);printf("停车场已满,暂时停在便道的第%d个位置。

数据结构停车场管理实验报告

数据结构停车场管理实验报告

数据结构停车场管理实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构中的栈和队列等知识,提高解决实际问题的能力。

二、实验环境编程语言:C++开发工具:Visual Studio三、实验原理1、停车场采用栈结构来存储停放的车辆信息。

栈具有先进后出的特点,符合车辆先进入停车场后离开的逻辑。

2、停车场外的便道采用队列结构来存储等待进入停车场的车辆。

队列具有先进先出的特点,符合车辆按到达顺序进入停车场的需求。

四、实验内容1、设计数据结构定义栈和队列的数据结构,包括存储车辆信息的结构体。

实现栈和队列的基本操作,如入栈、出栈、入队、出队等。

2、功能实现车辆进入停车场:当有车辆进入停车场时,将车辆信息压入栈中。

车辆离开停车场:当有车辆离开停车场时,从栈中弹出相应车辆,并计算停车费用。

显示停车场状态:实时显示停车场内车辆的信息。

处理便道上的车辆:当停车场有空位时,将便道上的车辆依次入停车场。

3、界面设计设计简单的命令行交互界面,方便用户输入操作指令。

五、实验步骤1、定义数据结构```cppstruct Car {int carNumber;int arrivalTime;int departureTime;};class Stack {private:Car stackArray;int top;int capacity;public:Stack(int size) {capacity = size;stackArray = new Carcapacity; top =-1;}~Stack(){delete stackArray;}bool isFull(){return top == capacity 1;}bool isEmpty(){return top ==-1;}void push(Car car) {if (!isFull()){stackArray++top = car;} else {std::cout <<"停车场已满,无法进入!"<< std::endl;}}Car pop(){if (!isEmpty()){return stackArraytop;} else {std::cout <<"停车场为空,无法离开!"<< std::endl; return {-1, -1, -1};}}Car peek(){if (!isEmpty()){return stackArraytop;} else {std::cout <<"停车场为空!"<< std::endl; return {-1, -1, -1};}}};class Queue {private:Car queueArray;int front;int rear;int capacity;public:Queue(int size) {capacity = size;queueArray = new Carcapacity;front = rear =-1;}~Queue(){delete queueArray;}bool isFull(){return (rear + 1) % capacity == front;}bool isEmpty(){return front ==-1;}void enqueue(Car car) {if (!isFull()){if (isEmpty()){front = 0;}rear =(rear + 1) % capacity; queueArrayrear = car;} else {std::cout <<"便道已满,无法等待!"<< std::endl;}}Car dequeue(){if (!isEmpty()){Car car = queueArrayfront;if (front == rear) {front = rear =-1;} else {front =(front + 1) % capacity;}return car;} else {std::cout <<"便道为空!"<< std::endl;return {-1, -1, -1};}}Car frontElement(){if (!isEmpty()){return queueArrayfront;} else {std::cout <<"便道为空!"<< std::endl;return {-1, -1, -1};}}};```2、主函数实现```cppint main(){int parkingLotCapacity = 10; //假设停车场容量为 10 Stack parkingLot(parkingLotCapacity);Queue waitingQueue(parkingLotCapacity);int choice;while (true) {std::cout <<"1、车辆进入停车场" << std::endl;std::cout <<"2、车辆离开停车场" << std::endl;std::cout <<"3、显示停车场状态" << std::endl;std::cout <<"4、退出" << std::endl;std::cout <<"请选择操作:";std::cin >> choice;switch (choice) {case 1: {int carNumber;std::cout <<"请输入车辆号码:";std::cin >> carNumber;Car car ={carNumber, time(NULL),-1};if (!parkingLotisFull()){parkingLotpush(car);std::cout <<"车辆"<< carNumber <<"进入停车场" <<std::endl;} else {waitingQueueenqueue(car);std::cout <<"停车场已满,车辆"<< carNumber <<"在便道等待" << std::endl;}break;}case 2: {int carNumber;std::cout <<"请输入要离开的车辆号码:";std::cin >> carNumber;Car car;bool found = false;for (int i = parkingLottop; i >= 0; i) {if (parkingLotstackArrayicarNumber == carNumber) {car = parkingLotpop();cardepartureTime = time(NULL);found = true;break;}}if (found) {int parkingTime = difftime(cardepartureTime, cararrivalTime);double parkingFee = parkingTime 2; //假设每单位时间停车费为2 元std::cout <<"车辆"<< carNumber <<"离开停车场,停车时间:"<< parkingTime <<"秒,停车费用:"<<parkingFee <<"元" << std::endl;if (!waitingQueueisEmpty()){Car waitingCar = waitingQueuedequeue();parkingLotpush(waitingCar);std::cout <<"便道上的车辆"<< waitingCarcarNumber <<"进入停车场" << std::endl;}} else {std::cout <<"未找到要离开的车辆" << std::endl;}break;}case 3: {std::cout <<"停车场内车辆:"<< std::endl;for (int i = parkingLottop; i >= 0; i) {std::cout << parkingLotstackArrayicarNumber <<"";}std::cout << std::endl;std::cout <<"便道上等待的车辆:"<< std::endl;if (!waitingQueueisEmpty()){for (int i = waitingQueuefront; i!= waitingQueuerear; i =(i + 1) %waitingQueuecapacity) {std::cout << waitingQueuequeueArrayicarNumber <<"";}std::cout << waitingQueuequeueArraywaitingQueuerearcarNumber<< std::endl;} else {std::cout <<"无" << std::endl;}break;}case 4:return 0;default:std::cout <<"无效的选择,请重新输入" << std::endl;}}return 0;}```六、实验结果1、车辆正常进入停车场,并在停车场已满时在便道等待。

数据结构--停车场管理-完整版-实习报告

数据结构--停车场管理-完整版-实习报告

实习报告题目:停车场管理一.需求分析1.用栈来表示停车场,用队列来表示停车道。

2.用户需输入车辆的必要信息,如车辆的到达或离开,汽车牌号以及到达或离去的时刻。

停车场的容量及单位时间的停车费由编程序者自行设置,结构需输出车辆停车所需缴纳的费用。

3.本程序要求对车辆的动态能够输出具体的信息内容,包括停车或离开的时间,位置,及所需缴纳的停车费。

4.测试数据为:N=2,输入数据为:(’A’,1,5),(‘A’,2.,10), (‘D’,1,15), (‘A’,3,20), (‘A’,4,25), (‘A’,5,30),(‘D’,2,35), (‘D’,4,40), (‘E’,0,0). 其中:’A’表示到达,’D’表示离去,’E’表示输入结束。

5.程序执行的命令为:1.创建栈和队列。

2.对车辆的行为进行相应的处理。

3.输出车辆的信息。

二.概要设计1.设定栈的抽象数据类型定义:ADT Stack{数据对象:D={ai|ai属于Elem,i=1,2……,n, n>=0}数据关系:R1={<ai-1, ai>| ai-1,ai属于D,i=2,……,n}基本操作:initStack(&S)操作结果:构造一个空栈S.pop(&S,&e)初始条件:栈S已存在。

操作结果:删除S的栈顶元素,并以e返回其值。

push(&S,&e )初始条件:栈S已存在。

操作结果:在栈S的栈顶插入新的栈顶元素e。

lengthstack(S)初始条件:栈S已存在。

操作结果:返回S中的元素个数,即栈的长度。

}ADT Stack;2.设定队列的抽象数据类型定义:ADT Queue{数据对象:D={ai| ai属于Elem, i=1,2,……,n, n>=0}数据关系:R1={<ai-1 ,ai>| ai-1,ai 属于D,i=2,……,n}基本操作:initqueue(&Q)操作结果:构造一个空队列Q.enqueue(&Q, e)初始条件:队列Q已存在。

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、需求分析1、停车场内有固定数量的停车位。

2、车辆进入停车场时,记录车辆信息(车牌号、进入时间)。

3、车辆离开停车场时,计算停车费用并输出相关信息。

4、能够显示停车场内车辆的停放情况。

四、数据结构设计1、为了实现车辆的先进先出,选择队列来存储停车场内的车辆信息。

2、用栈来存储临时停放的车辆信息,以便在停车场已满时进行处理。

五、算法设计1、车辆进入停车场检查停车场是否已满。

如果未满,将车辆信息加入队列,并记录进入时间。

2、车辆离开停车场在队列中查找要离开的车辆。

计算停车时间和费用。

将车辆从队列中删除。

3、显示停车场内车辆停放情况遍历队列,输出车辆信息。

六、主要代码实现```cppinclude <iostream>include <string>include <ctime>using namespace std;//车辆结构体struct Car {string licensePlate; //车牌号time_t entryTime; //进入时间};//队列类class Queue {private:Car data;int front, rear, capacity;public:Queue(int size) {capacity = size;data = new Carcapacity;front = rear = 0;}~Queue(){delete data;}bool isFull(){return (rear + 1) % capacity == front;}bool isEmpty(){return front == rear;}void enqueue(Car car) {if (isFull()){cout <<"停车场已满!"<< endl; return;}datarear = car;rear =(rear + 1) % capacity;}Car dequeue(){if (isEmpty()){cout <<"停车场为空!"<< endl;return Car();}Car car = datafront;front =(front + 1) % capacity;return car;}void display(){if (isEmpty()){cout <<"停车场内没有车辆。

数据结构设计-停车场管理系统

数据结构设计-停车场管理系统

数据结构设计-停车场管理系统数据结构设计停车场管理系统在现代社会,随着汽车数量的不断增加,停车场的管理变得日益重要。

一个高效、准确且便捷的停车场管理系统对于提高停车场的运营效率、提升用户体验以及保障停车场的安全都具有重要意义。

而在实现这样一个系统的过程中,数据结构的设计起着关键的作用。

首先,让我们来明确一下停车场管理系统的基本需求。

它需要能够记录车辆的进入和离开时间,计算停车费用,管理车位的占用和空闲状态,提供车位的查询和预订功能,以及处理异常情况,如超时未缴费等。

为了满足这些需求,我们需要选择合适的数据结构来存储和操作相关的数据。

对于车辆信息的存储,我们可以使用一个链表或者数组来实现。

每个车辆的信息可以包括车牌号码、进入时间、预计离开时间、实际离开时间、停车费用等。

链表的优点是插入和删除操作比较方便,适合车辆频繁进出的情况;而数组则在随机访问方面具有优势,可以快速获取特定车辆的信息。

车位的管理是停车场系统的核心部分之一。

我们可以将停车场看作一个二维的矩阵,每个位置表示一个车位。

使用一个布尔型的二维数组来表示车位的占用状态,True 表示占用,False 表示空闲。

这样,在查询空闲车位时,只需要遍历这个数组即可。

为了提高查询效率,我们还可以对车位进行分区,比如按照楼层、区域等划分,然后分别管理每个分区的车位状态。

在计算停车费用时,需要根据车辆的停车时间来确定。

可以使用时间戳来记录车辆的进入和离开时间,然后通过计算时间差来得到停车时长。

停车费用的计算规则可以根据不同的时间段设置不同的费率,例如,白天和晚上的费率可能不同,周末和工作日的费率也可能有所差异。

为了实现车位的预订功能,我们可以使用一个优先级队列或者堆来管理预订请求。

预订请求包含预订时间、预计停车时长等信息。

根据预订时间和预计停车时长,可以对预订请求进行排序,优先处理先到的请求。

当车辆进入停车场时,系统首先查询空闲车位,如果有空闲车位,则记录车辆信息,并更新车位状态。

数据结构—停车场管理系统

数据结构—停车场管理系统

数据结构—停车场管理系统数据结构—停车场管理系统1:引言该文档旨在描述停车场管理系统的数据结构,详细介绍了系统的各个模块和数据的组织方式,帮助开发人员深入理解系统的结构和实现方式。

2:系统概述停车场管理系统是一种用于管理停车场的软件系统。

它可以跟踪和管理车辆的进入和离开,并提供数据分析和报告功能。

3:系统架构3.1 模块1:用户管理3.1.1 注册用户3.1.2 登录功能3.1.3 用户权限管理3.2 模块2:停车场管理3.2.1 停车位管理3.2.1.1 增加停车位3.2.1.2 删除停车位 3.2.2 车辆管理3.2.2.1 车辆入场 3.2.2.2 车辆离场 3.2.3 计费管理3.2.3.1 定价策略 3.2.3.2 车辆计费3.3 模块3:数据分析3.3.1 车辆进出统计3.3.2 收入统计3.3.3 时间段分析4:数据结构4.1 用户信息4.1.1 用户ID4.1.2 用户名4.1.3 密码4.1.4 权限4.2 停车位信息4.2.1 停车位ID4.2.2 车位类型4.2.3 是否占用4.3 车辆信息4.3.1 车牌号4.3.2 车辆类型4.3.3 入场时间4.3.4 离场时间4.4 计费信息4.4.1 车辆ID4.4.2 入场时间4.4.3 离场时间4.4.4 价格5:系统流程5.1 用户注册和登录流程 5.1.1 用户注册5.1.2 用户登录认证5.2 车辆进出流程5.2.1 车辆入场5.2.2 车辆离场5.2.3 计费过程6:附件本文档附带以下文件:7:法律名词及注释- 用户信息:指用户在系统中注册和登录时提供的个人信息。

- 停车位信息:指停车场中每个停车位的相关信息,包括唯一标识、类型和占用情况等。

- 车辆信息:指进入停车场的车辆的相关信息,包括车牌号、类型和进出时间等。

- 计费信息:指车辆停留时间和计费价格等相关信息。

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理实验目的:通过模拟停车场管理的过程,理解数据结构的应用和实际工程问题的解决思路。

实验内容:1.设计停车场类和车辆类,并实现相关操作方法。

2.模拟停车场管理的过程,包括车辆的进入和离开。

3.根据实际需求设计停车场管理算法,如何选择停车位和调度车辆等。

实验步骤:1.设计停车场类停车场类需要保存停车位的信息,可以使用数组或链表实现。

需要提供以下方法:- void addCar(Car car):将车辆添加到停车场,如果停车场已满,则禁止入场。

- void removeCar(Car car):将车辆从停车场移除,并更新停车位信息。

- int getAvailableSpaces(:返回停车场中当前可用的停车位数量。

2.设计车辆类车辆类需要保存车辆的信息,如车牌号、车型等。

3.实现停车场管理算法停车场管理需要考虑车辆进入和离开的顺序,以及停车位的选择等问题。

可以使用队列或堆栈等数据结构来保存车辆的进出顺序。

停车位的选择可以根据具体算法进行,如先到先得、最近最便等原则。

4.完成模拟停车场管理过程的代码根据实际需求,编写代码模拟车辆进入和离开停车场的过程。

可以通过输入车辆信息和操作指令来模拟。

5.测试与优化对停车场管理算法进行测试,并根据实际情况进行优化。

可以通过增加数据量、调整车辆进出顺序等方式进行测试,并根据测试结果进行优化。

实验结果:经过实验测试,停车场管理系统可以良好地处理车辆的进入和离开,并正确计算可用停车位的数量。

通过合理的停车位选择算法,确保了车辆进出的顺序。

实验总结:通过本次实验,我们学习了如何利用数据结构来实现停车场管理系统。

停车场管理系统是一种常见的实际应用,对于解决停车难问题具有重要意义。

在实验过程中,我们掌握了设计和实现停车场类、车辆类以及停车场管理算法的方法,加深了对数据结构的理解和应用。

在实验过程中,我们还发现停车场管理算法可以通过不同的策略进行优化,如最大化停车利用率、最小化顾客等待时间等。

数据结构设计报告停车场管理系统方案

数据结构设计报告停车场管理系统方案

数据结构设计报告停车场管理系统方案数据结构设计报告:停车场管理系统方案一、引言随着汽车数量的不断增加,停车场管理成为了一个重要的问题。

一个高效、准确、便捷的停车场管理系统对于提高停车场的运营效率、服务质量以及用户体验都具有重要意义。

本报告将详细介绍一种停车场管理系统的数据结构设计方案,旨在为相关开发人员提供参考。

二、需求分析(一)基本功能需求1、车辆的入场登记,包括车辆信息、入场时间等。

2、车辆的出场结算,根据停车时间计算费用。

3、车位的实时监控,显示空闲车位数量和位置。

4、数据的存储和查询,如车辆历史停车记录等。

(二)性能需求1、系统响应迅速,车辆入场和出场操作能够在短时间内完成。

2、数据的准确性和完整性,确保停车信息不丢失、不错误。

(三)用户需求1、为停车场管理人员提供简洁、直观的操作界面。

2、为车主提供清晰的停车引导和费用信息。

三、数据结构设计(一)车辆信息结构体```ctypedef struct {char licensePlate20; //车牌号time_t entryTime; //入场时间time_t exitTime; //出场时间float parkingFee; //停车费用} Vehicle;```(二)车位信息结构体```ctypedef struct {int parkingSpaceNumber; //车位编号int status; // 0:空闲 1:占用} ParkingSpace;```(三)停车场结构体```ctypedef struct {ParkingSpace parkingSpaces; //车位数组int totalSpaces; //总车位数Vehicle vehicles; //车辆数组int totalVehicles; //车辆总数} ParkingLot;```(四)数据存储1、使用文件存储停车场的基本信息,如总车位数等。

2、使用数据库存储车辆的停车记录,便于查询和统计。

数据结构—停车场管理系统

数据结构—停车场管理系统

数据结构—停车场管理系统停车场管理系统【⒈系统介绍】本章主要介绍停车场管理系统的背景和目的,包括系统的功能和应用场景等。

【⒉系统需求】本章详细描述停车场管理系统的功能性需求和非功能性需求,包括系统的基本功能、用户需求、安全性要求、性能要求等。

【⒊系统架构设计】本章介绍停车场管理系统的架构设计,包括系统的分层架构、模块划分、数据流程等。

【⒋数据结构设计】本章详细描述停车场管理系统使用的数据结构,包括停车场信息、车辆信息、停车记录等。

【⒌模块设计】本章详细描述停车场管理系统的各个模块的设计,包括用户管理模块、车辆管理模块、停车管理模块、费用管理模块等。

本章描述停车场管理系统的各个模块之间的接口设计,包括接口的参数、返回值、数据格式等。

【⒎数据库设计】本章详细描述停车场管理系统的数据库设计,包括数据库表结构、表之间的关系、索引设计等。

【⒏系统测试】本章描述停车场管理系统的测试计划和测试方法,包括功能测试、性能测试、安全测试等。

【⒐系统部署】本章描述停车场管理系统的部署方案,包括硬件环境要求、软件环境要求、安装步骤等。

【⒑系统维护】本章描述停车场管理系统的维护计划和维护方法,包括故障排除、数据备份、系统升级等。

【1⒈用户指南】本章提供给用户使用停车场管理系统的指南,包括用户注册、登录、车辆入场、支付退款等操作说明。

本章介绍停车场管理系统的安全性保障措施,包括数据加密、访问控制、日志监控等。

【1⒊性能优化】本章介绍停车场管理系统的性能优化方案,包括数据库优化、代码优化、服务器优化等。

【附件】⒈停车场管理系统原型设计图⒉停车场管理系统数据库表结构定义文件⒊停车场管理系统测试用例【法律名词及注释】⒈法律名词1:注释1(解释)⒉法律名词2:注释2(解释)(以下类似)。

数据结构停车场管理

数据结构停车场管理

数据结构停车场管理简介停车场管理是一项涵盖车辆进出、停放、缴费等多方面功能的系统。

为了实现停车场的高效管理,需要运用数据结构来进行实现。

在本文中,我们将介绍如何利用数据结构来实现停车场管理系统。

数据结构的应用停车场有许多可管理的事情,例如停车场的空余车位数、车辆的进出、缴费等等。

在这些功能中,有一些需要我们使用数据结构来简化实现和提高效率。

队列停车场的管理需要使用队列这种数据结构。

当一个车辆要停入停车场时,需要将它按照到达的时间先后排序,按顺序排队等待停车。

而车辆离开停车场时,则需要先进先出,也就是先离开停车场的车辆需要先交费,后离开。

这一过程需要用到队列。

栈在停车场管理中,可用栈来实现车辆的进出。

车辆在进入停车场时,需要将车辆的信息保存。

而在车辆离开停车场时,则需要将对应的信息出栈并完成缴费后,才能让车辆离开。

这一过程需要用到栈。

链表停车场的剩余车位数是一个变化的过程。

在每有一辆车进入停车场或者有一辆车辆离开停车场时,都要对剩余车位数做出相应的更改。

这一过程中,可以用链表来实现。

只需要将每一辆车对应的链表节点记录进来,每进入一辆车就将一个节点从链表中删除,每辆车离开停车场则将一个节点加入链表。

数据结构的具体应用现在我们将来看看停车场管理中具体的应用。

进入停车场当一辆车进入停车场时,需要执行以下操作:1.首先,要判断停车场是否已经满了。

若停车场已满,则无法允许车辆进入停车场。

2.若停车场未满,则需要将这辆车的信息加入栈中,用于管理和监测。

3.同时,还需要将这辆车按到达的时间加入到队列中,便于后续的管理。

4.最后,还需要更新停车场的剩余车位数,并将结果写入数据库中。

离开停车场当一辆车在完成缴费后离开停车场时,需要执行以下操作:1.首先,需要从栈中出栈,将车辆的信息拿出来。

2.然后,需要将这辆车从队列中删除,避免干扰后续车辆的出场。

3.接着,需要更新停车场的剩余车位数,将车位数加一,并将结果写入数据库中。

数据结构 停车场管理报告

数据结构 停车场管理报告

实验二:停车场管理(栈和队列应用)班级学号姓名一、实验目的1 掌握队列和栈顺序存储结构和链式存储结构,以便在实际背景下灵活运用。

2 掌握栈和队列的特点,即先进后出与先进先出的原则。

3 掌握栈和队列的基本运算。

二、实验内容1 问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚,依次从停车场最里面向大门口处停放。

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

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

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

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

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

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

3 实现提示汽车的模拟输入信息格式可以为:(到达/离开,汽车牌照号码,到达/离开的时间)。

用栈和队列来模拟停车场和便道。

三、实验结果:头文件#define MAXSIZE 3#define price 0.4typedef struct time {int hour;int min;}Time;typedef struct car {char num[10];Time reach;Time leave;}CarNode;typedef struct SNode {CarNode *data1[MAXSIZE+1];int top;}SeqStackCar;typedef struct QNode {CarNode *data2;struct QNode *next;}QueueNode;typedef struct LQNode {QueueNode *front;QueueNode *rear;}LinkQueueCar;void InitStack(SeqStackCar *s);int InitQueue(LinkQueueCar *Q);void Display(CarNode *p,int place);int Arrival(SeqStackCar *s,LinkQueueCar *LQ);void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ); void Leave2(LinkQueueCar *LQ);void List1(SeqStackCar *s);void List2(LinkQueueCar *LQ);源文件#include "car.h"#include<iostream>using namespace std;int i=0;void InitStack(SeqStackCar *s){int i;s->top=0;for(i=0;i<=MAXSIZE;i++)s->data1[s->top]=NULL;}int InitQueue(LinkQueueCar *Q){Q->front=new QueueNode;if(Q->front!=NULL){Q->front->next=NULL;Q->rear=Q->front;return 1;}elsereturn 0;}void Display(CarNode *p,int place){int A1,A2,B1,B2,time;cout<<"请输入离开的时间:";cin>>p->leave.hour;cin>>p->leave.min;while(p->leave.hour<p->reach.hour||p->leave.hour>23){cout<<"error!"<<endl;cout<<"请输入离开的时间:";cin>>p->leave.hour;cin>>p->leave.min;}cout<<endl;cout<<"离开车辆的车牌号为:";cout<<p->num<<endl;cout<<"其到达时间为: "<<p->reach.hour<<":"<<p->reach.min<<endl;cout<<"其离开时间为: "<<p->leave.hour<<":"<<p->leave.min<<endl;A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;time=(B1-A1)*60+(B2-A2);cout<<"该车停在停车场中的时间:"<<time<<"分钟!"<<endl;cout<<"应交费用为: "<<time*price<<"元!"<<endl;cout<<endl;}int Arrival(SeqStackCar *s,LinkQueueCar *LQ){CarNode *p;QueueNode *t;p=new CarNode;cout<<"请输入车牌号(例:A1234):";cin>>p->num;if(s->top<MAXSIZE){s->top++;cout<<"车辆在车场第"<<s->top <<"位置!"<<endl;cout<<"请输入到达时间:";cin>>p->reach.hour;cin>>p->reach.min;while(p->reach.hour<0||p->reach.hour>23||p->reach.min<0||p->reach.min>59) {cout<<"error!"<<endl;cout<<"请输入到达时间:";cin>>p->reach.hour;cin>>p->reach.min;}s->data1[s->top]=p;return 1;}else{cout<<"该车停在便道上!"<<endl;t= new QueueNode;t->data2=p;t->next=NULL;LQ->rear->next=t;LQ->rear=t;i++;cout<<"车辆在便道"<<i<<"个位置!"<<endl;return 1;}}void Leave1(SeqStackCar *s1,SeqStackCar *s2,LinkQueueCar *LQ) {int place;CarNode *p,*t;QueueNode *q;if(s1->top>0){while(1){cout<<"请输入车在车场的位置1--"<<s1->top<<":";cin>>place;if(place>=1&&place<=s1->top) break;}while(s1->top>place){s2->top++;s2->data1[s2->top]=s1->data1[s1->top];s1->data1[s1->top]=NULL;s1->top--;}p=s1->data1[s1->top];s1->data1[s1->top]=NULL;s1->top--;while(s2->top>=1){s1->top++;s1->data1[s1->top]=s2->data1[s2->top];s2->data1[s2->top]=NULL;s2->top--;}Display(p,place);if((LQ->front!=LQ->rear)&&s1->top<MAXSIZE){q=LQ->front->next;t=q->data2;s1->top++;cout<<"便道的"<<t->num<<"号车进入车场第"<<s1->top<<"位置!"<<endl;cout<<"请输入到达的时间:";cin>>t->reach.hour;cin>>t->reach.min;if(t->reach.hour<0||t->reach.hour>23||t->reach.min<0||t->reach.min>59){cout<<"error!"<<endl;cout<<"请输入到达时间:";cin>>t->reach.hour;cin>>t->reach.min;}LQ->front->next=q->next;if(q==LQ->rear)LQ->rear=LQ->front;s1->data1[s1->top]=t;delete q;}elsecout<<"便道里没有车!"<<endl;}elsecout<<"停车场里没有车!"<<endl;}void Leave2(LinkQueueCar *LQ){QueueNode *q;CarNode *t;if(LQ->front!=LQ->rear){q=LQ->front->next;t=q->data2;LQ->front->next=q->next;if(q==LQ->rear)LQ->rear=LQ->front;delete q;cout<<"便道上车牌号为"<<t->num<<"的车从便道上离开!"<<endl;}elsecout<<"便道里没有车!"<<endl;}void List1(SeqStackCar *s){int i;if(s->top>0){cout<<" 位置到达时间车牌号"<<endl;for(i=1;i<=s->top;i++){cout<<" "<<i<<" "<<s->data1[i]->reach.hour<<":"<<s->data1[i]->reach.min<<" "<<s->data1[i]->num<<endl;}}elsecout<<"停车场里没有车!"<<endl;}void List2(LinkQueueCar *LQ){QueueNode *p;p=LQ->front->next;if(LQ->front!=LQ->rear){cout<<"便道上车的车牌号为:"<<endl;while(p!=NULL){cout<<p->data2->num<<endl;p=p->next;}}elsecout<<"便道上没有车!"<<endl;}测试文件#include "car.h"#include<iostream>using namespace std;void main(){SeqStackCar s1,s2;LinkQueueCar LQ; int m;InitStack(&s1);InitStack(&s2);InitQueue(&LQ);while(1){cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cout<<"1.车辆到达2.离开停车场3.离开便道4.停车场列表5.便道列表6.退出系统"<<endl;cout<<"★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cin>>m;switch(m){case 1:Arrival(&s1,&LQ);break;case 2:Leave1(&s1,&s2,&LQ);break;case 3:Leave2(&LQ);break;case 4:List1(&s1);break;case 5:List2(&LQ);break;case 6:exit(0);default: break;}}}(两运行结果:个图表联在一起)四、实验总结1.学会了栈和队列的综合使用,更加灵活运用栈和队列。

数据结构课程设计——停车场

数据结构课程设计——停车场

数据结构课程设计——停车场管理一、需求分析:1、问题描述:设停车场是一个可停放n辆汽车的狭长通道,且只有一个门可供出入。

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

应用个简单的栈与队列实现该功能。

2、基本要求(1)以顺序栈模拟停车场,以链队列模拟便道。

(2)当车辆到达时,输入车辆车牌号、达到时间,得到车辆在停车场的位置。

车牌号格式要正确,达到时间为00:00到24:00之间。

(3)当车辆离开时,输入车辆在停车场位置及离开时间,离开时间应在该车进入时间之后。

等待车辆按顺序进入停车场,并输入进入时间,进入时间应在上辆离开车辆离开时间之后。

(4)打印出离开车辆的车牌号、到达时间、离开时间、停留时间及应缴费用。

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

二、概要设计1、数据结构:typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct node{char num[10];Time reach;Time leave;}CarNode; /*车辆信息结点*/typedef struct NODE{CarNode *stack[Max+1];int top;}SeqStackCar; /*模拟车站*/typedef struct car{CarNode *data;struct car *next;}QueueNode;typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟通道*/2、模块本程序首先定义了用来模拟停车场的堆栈模块和用来模拟便道的链队列模块为全局变量,然后编写主函数,在主函数中实现对其他各个模块的调用。

数据结构停车场收费系统管理实践报告

数据结构停车场收费系统管理实践报告

数据结构停车场收费系统管理实践报告停车场收费系统,这个话题一提起来,大家都不陌生。

说实话,谁没在大街小巷的停车场为了一块停车费而头疼过呢?尤其是在城市里,停车位稀缺,收费又是天价,弄得有时候进个停车场就像进了赌场,不知道到底会“亏”多少。

今天就聊聊我最近搞的一次“停车场收费系统管理实践”,说实话,整个过程就像是看一部高能悬疑片,既有趣又有点小紧张。

停车场的管理,说白了,就是得搞清楚停车位的利用率,然后合理收费,确保不亏本。

这听起来简单,但要做好,光靠脑袋里的想法可不行。

得用点“硬核”的东西,比如数据结构。

说到这里,很多人可能开始懵了:数据结构?那是啥?别担心,数据结构就是一堆有序的、按照特定规则组织起来的数据,简单点说,就是停车场的“内部管理”嘛。

比如你停车时,停车场会分配一个车位给你,那些车位就得按照一定的规则排序,不然你想找个位置就得像大海捞针一样。

我们做的这个停车场收费系统,首先就要搞清楚如何让停车位、车主和收费三个元素高效地“打交道”。

你想,假如停车场没有规则,那就乱套了,车位没人用,车主也找不到地方停车,收费自然就乱七八糟了。

搞清楚了这些,系统的基础架构就稳了。

说到收费,最常见的就是按时间收费。

我们通过程序算出来每个车主停车的时长,再按照预设的费用标准进行结算。

这里就得用到“链表”这个数据结构了。

车主的停车信息就像一颗颗“珠子”串在一起,每个珠子里面有车主的停车时间、车牌号、停车收费等数据。

如果一个车主停车时间很长,那收费就得按时间增加,反之,停车时间短,自然收费也少。

这种管理方式非常高效,不容易出错,而且能够快速计算每个车主的停车费。

哎,说实话,我一开始听到链表这俩字儿时,还挺疑惑的,感觉好像很“高大上”,但一弄明白后,才发现原来就是个简单又实用的东西,跟停车场的条理化管理一样,处理起来简洁又明了。

再说到停车收费的“智能化”,以前我们去停车场,不是排队等着人工收费,就是站在收费亭前一脸懵逼,不知道到底该怎么付。

数据结构停车场管理问题

数据结构停车场管理问题

数据结构停车场管理问题在现代社会,停车场的管理是一个常见但又复杂的问题。

无论是商场、办公楼、住宅小区还是机场等场所,都需要一个高效且合理的停车场管理系统来满足车辆的停放需求,并确保停车场的有序运行。

停车场管理涉及到多个方面,首先是车辆的进入和驶出登记。

当车辆进入停车场时,系统需要记录车辆的相关信息,如车牌号、进入时间等。

这就需要一个有效的数据存储结构来快速准确地记录这些信息。

在数据结构的选择上,常见的有链表、数组、栈和队列等。

对于车辆信息的存储,链表是一个不错的选择。

链表的特点是插入和删除操作比较方便,当有新车辆进入或车辆驶出时,可以快速地进行信息的更新。

假设我们使用链表来存储车辆信息,每个节点代表一辆车的信息。

节点中包含车牌号、进入时间、预计停留时间等字段。

当车辆进入时,创建一个新的节点并插入到链表中。

车辆驶出时,通过车牌号在链表中查找对应的节点,然后删除该节点,并计算停车费用。

除了车辆信息的存储,停车场的车位管理也是一个关键问题。

我们需要知道哪些车位是空的,哪些车位被占用。

这可以通过一个二维数组或者位图来表示。

以二维数组为例,假设停车场有 M 行 N 列的车位。

那么可以创建一个 M×N 的二维数组,数组中的每个元素表示一个车位的状态,0 表示空闲,1 表示已占用。

当车辆进入时,找到一个空闲的车位,并将对应的数组元素标记为 1。

车辆驶出时,将相应的元素标记为 0。

然而,在实际的停车场管理中,可能会有不同类型的车位,比如普通车位、残疾人车位、VIP 车位等。

为了更好地管理这些不同类型的车位,可以使用结构体或者类来表示车位的信息。

结构体中可以包含车位的类型、位置、状态等属性。

另外,停车场的收费管理也是一个重要的部分。

收费方式可能多种多样,比如按时间收费、按次收费、包月收费等。

这就需要根据不同的收费方式设计相应的数据结构和算法来计算费用。

对于按时间收费,可以记录车辆的进入时间和驶出时间,然后根据时间差和收费标准来计算费用。

数据结构c语言版课程设计停车场管理系统

数据结构c语言版课程设计停车场管理系统

课程设计:停车场c语言版本的数据结构课程设计,规定用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include <stdio.h>//#include <stdlib.h> //malloc#include <time.h> //获取系统时间所用函数#include <conio.h> //getch()#include <windows.h> //设立光标信息mallco#define MaxSize 5 /*定义停车场栈长度*/#define PRICE 0.05 /*每车每分钟收费值*/#define BASEPRICE 0.5 //基础停车费#define Esc 27 //退出系统#define Exit 3 //结束对话#define Stop 1 //停车#define Drive 2 //取车int jx=0,jy=32; //全局变量日记打印位置typedef struct{int hour;int minute;}Time,*PTime; /*时间结点*/typedef struct /*定义栈元素的类型即车辆信息结点*/ {int num ; /*车牌号*/Time arrtime; /*到达时刻或离区时刻*/}CarNode;typedef struct /*定义栈,模拟停车场*/{CarNode stack[MaxSize];int top;}SqStackCar;typedef struct node /*定义队列结点的类型*/{int num; /*车牌号*/struct node *next;}QueueNode;typedef struct /*定义队列,模拟便道*/{QueueNode *front,*rear;}LinkQueueCar;/*函数声明*/PTime get_time();CarNode getcarInfo();void qingping(int a);void gotoxy(int x,int y);void printlog(Time t,int n,int io,char ab,int po,double f);void printstop(int a,int num,int x0,int y0);void printleave(int a,int po,int num);/*初始化栈*/void InitSeqStack(SqStackCar *s){s->top=-1;}/* push入站函数*/int push(SqStackCar *s,CarNode x) //数据元素x入指针s所指的栈{if(s->top==MaxSize-1)return(0); //假如栈满,返回0 else{s->stack[++s->top]=x; //栈不满,到达车辆入栈return(1);}}/*栈顶元素出栈*/CarNode pop(SqStackCar *s){CarNode x;if(s->top<0){x.num=0;x.arrtime.hour=0;x.arrtime.minute=0;return(x); //假如栈空,返回空值}else{s->top--;return(s->stack[s->top+1]); //栈不空,返回栈顶元素}}/*初始化队列*/void InitLinkQueue(LinkQueueCar *q){q->front=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点,作头结点if(q->front!=NULL){q->rear=q->front;q->front->next=NULL;q->front->num=0; //头结点的num保存队列中数据元素的个数}}/*数据入队列*/void EnLinkQueue(LinkQueueCar *q,int x){QueueNode *p;p=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点p->num=x;p->next=NULL;q->rear->next=p; //新结点入队列q->rear=p;q->front->num++; //队列元素个数加1}/*数据出队列*/int DeLinkQueue(LinkQueueCar *q){QueueNode *p;int n;if(q->front==q->rear) //队空返回0return(0);else{p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;n=p->num;free(p);q->front->num--;return(n); //返回出队的数据信息}}/********************* 车辆到达***************************/ //参数:停车栈停车队列车辆信息//返回值:空//功能:对传入的车辆进行入栈栈满则入队列void Arrive(SqStackCar *stop,LinkQueueCar *lq,CarNode x){int f;f=push(stop,x); //入栈if (f==0) //栈满{EnLinkQueue(lq,x.num); //入队printstop(1,lq->front->num,0,23);printlog(x.arrtime,x.num,1,'B',lq->front->num,0);qingping(0); printf("您的车停在便道%d号车位上\n",lq->front->num); //更新对话}else{printstop(0,stop->top+1,0,23);printlog(x.arrtime,x.num,1,'P',stop->top+1,0);qingping(0); printf("您的车停在停车场%d号车位上\n",stop->top+1); //更新对话}qingping(1); printf("按任意键继续");getch();}/************************** 车辆离开*************************************///参数:停车栈指针s1,暂存栈指针s2,停车队列指针p,车辆信息x//返回值:空//功能:查找栈中s1的x并出栈,栈中没有则查找队p中并出队,打印离开收费信息void Leave(SqStackCar *s1,SqStackCar *s2,LinkQueueCar *p,CarNode x){double fee=0;int position=s1->top+1; //车辆所在车位int n,f=0;CarNode y;QueueNode *q;while((s1->top > -1)&&(f!=1)) //当栈不空且未找到x{y=pop(s1);if(y.num!=x.num){n=push(s2,y);position--;}elsef=1;}if(y.num==x.num) //找到x{gotoxy(33,17);printf("%d:%-2d",(x.arrtime.hour-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=((x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute))*PRICE+BASEP RICE;gotoxy(48,17); printf("%2.1f元\n",fee);qingping(0); printf("确认您的车辆信息");qingping(1); printf("按任意键继续");getch();while(s2->top>-1){ y=pop(s2);f=push(s1,y);}n=DeLinkQueue(p);if(n!=0){y.num=n;y.arrtime=x.arrtime;f=push(s1,y);printleave(p->front->num+1,position,s1->top+1); //出栈动画ji队列成员入栈printlog(x.arrtime,x.num,0,'P',position,fee);printlog(y.arrtime,y.num,1,'P',s1->top+1,0);}else{printleave(0,position,s1->top+2);printlog(x.arrtime,x.num,0,'P',position,fee);}}else //若栈中无x{while(s2->top > -1) //还原栈{y=pop(s2);f=push(s1,y);}q=p->front;f=0;position=1;while(f==0&&q->next!=NULL) //当队不空且未找到xif(q->next->num!=x.num){q=q->next;position++;}else //找到x{q->next=q->next->next;p->front->num--;if(q->next==NULL)p->rear=p->front;gotoxy(33,17); printf("0:0");gotoxy(48,17); printf("0元");qingping(0); printf("您的车将离便道");qingping(1); printf("按任意键继续");getch();printleave(-1,position,p->front->num+1); //出队动画printlog(x.arrtime,x.num,0,'B',position,0);f=1;}if(f==0) //未找到x{qingping(0); printf("停车场和便道上均无您的车");qingping(1); printf("按任意键继续");getch();}}}/*获取系统时间*///返回PTime类型PTime get_time(){Time *t;t=new Time;time_t timer;struct tm *tblock;timer=time(NULL);tblock=localtime(&timer);t->minute=tblock->tm_min;t->hour=tblock->tm_hour;return t;}/*移动光标*///蒋光标移动到(x,y)点void gotoxy(int x,int y){COORD coord;coord.X=x;coord.Y=y+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); }/*画图*///画出系统界面void panitPL(){gotoxy(20,4);printf("****************对话框****************");int x=18,y=6; //起始点int a[2][4]={2,0,0,1,-2,0,0,-1}; //方向for(int i=0;i<2 ;i++){for(int j=0; j<20; j++){x+=a[i][0]; y+=a[i][1];gotoxy(x,y);printf("═");}x+=a[i][0]; y+=a[i][1];gotoxy(x,y);if(i==0)printf("╗");elseprintf("╚");for(j=0; j<12; j++){x+=a[i][2]; y+=a[i][3];gotoxy(x,y);printf("║");}x+=a[i][2]; y+=a[i][3];gotoxy(x,y);if(i==0)printf("╝");elseprintf("╔");}gotoxy(22,8);printf("小王:");gotoxy(22,11);printf("顾客:");gotoxy(22,14); printf("*********** 停车信息***********");gotoxy(23,15); printf("车牌号:");gotoxy(42,15); printf("时间:");gotoxy(23,17); printf("停车时长:");gotoxy(42,17); printf("收费:");}/*清屏函数*///更新对话框前将原对话晴空void qingping(int a){if(a==0) //清空小王的对话{gotoxy(28,8); printf(" ");gotoxy(28,9); printf(" ");gotoxy(28,8);}else if(a==1) //清空顾客的对话{gotoxy(28,11); printf(" ");gotoxy(28,12); printf(" ");gotoxy(28,13); printf(" ");gotoxy(28,11);}else //清空车辆信息{gotoxy(31,15); printf(" ");gotoxy(48,15); printf(" ");gotoxy(33,17); printf(" ");gotoxy(48,17); printf(" ");gotoxy(31,15);}}//用上下键移动选择int getkey(){char c;int x=28,y=11;while(1){gotoxy(x,11); printf(" ");gotoxy(x,12); printf(" ");gotoxy(x,13); printf(" ");gotoxy(x,y); printf(">>");c=getch();if(c==13) return y-10; //enter键返回当前选项if(c!=-32)continue; //不是方向键进行下次循环c=getch();if(c==72) if(y>11) y--; //上if(c==80) if(y<13) y++; //下}}//输入车辆信息CarNode getcarInfo(){PTime T;CarNode x;qingping(0); printf("请输入您的车牌号\n");qingping(1); printf("在下面输入车辆信息");qingping(2);scanf("%d",&(x.num));T=get_time();x.arrtime=*T;gotoxy(48,15); printf("%d:%d",x.arrtime.hour,x.arrtime.minute);getch();return x;}//打印停车场void printcar(){gotoxy(0,20); //╔ ╗╝╚═║printf("═══════════════════════════════════════╗");printf(" 出场暂放区║ 1 2 3 4 5 ║");printf("---------------------------------------------------------------------- ║");printf(" 主车道║");printf("---------------------------------------------------------------------- ║");printf(" 12 11 10 9 8 7 6 5 4 3 2 1 ║");printf("═══════════════════════════════════╗ ║");printf(" ↑ ╔══════════════╝ ║");printf(" 便道停车区→ ║ 1 2 3 4 5 ║");printf(" ╚══════════════════╝");printf(" 停车场管理日记\n\n");printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) "); }//打印日记记录void printlog(Time t,int n,int io,char ab,int po,double f){jy++;gotoxy(jx,jy);// printf(" 时间车牌号进(1)/出(0) 车位(B便道P停车场) 收费(元) ");if(io==0)printf("/ %2.1f",f);gotoxy(jx,jy);printf(" / %d / %c:%d",io,ab,po);gotoxy(jx,jy);printf(" %d:%d / %d",t.hour,t.minute,n);}void printstop(int a,int num,int x0,int y0){static char *car="【█】";// int x0=0,y0=23;int x=0,y=28;if(a==0){x=(num+6)*6;for(;x0<72;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}for(;y0<y;y0++){gotoxy(x0,y0); printf("%s",car); Sleep(100);gotoxy(x0,y0); printf(" ");}for(;x0>x;x0--){gotoxy(x0,y0); printf("%s",car); Sleep(50);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}else{x=(12-num)*6;y=y-3;for(;x0<x;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}}void printleave(int a,int po,int num){static char *car="【█】";int x0=0,y0=23;int x=0,y=28;int i;if(a==-1){x=(12-po)*6;y=y-3;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car);Sleep(100);if(12>num){gotoxy((12-num)*6,y);printf(" ");}gotoxy(x,y); printf("%s",car);for(;x>x0;x--){gotoxy(x,y-2); printf("%s",car); Sleep(30);gotoxy(x,y-2); printf(" ");}}else{i=num+1;for(;num>po;num--){x=(num+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>21;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(i-num+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}x=(po+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>23;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>0;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}num++;for(;i-num>0;num++){x=(i-num+6)*6; y=21;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y<28;y++){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(num-1+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}if(a>0){x=66;y=25;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car); Sleep(100);if(12>a){gotoxy((12-a)*6,y);printf(" ");}if(a>1){gotoxy(x,y); printf("%s",car);}printstop(0,i-1,x,y-2);}}}/************************************************************ main ********************************************************/int main(void){SqStackCar s1,s2; //停车栈和暂存栈LinkQueueCar p; //队列InitSeqStack(&s1);InitSeqStack(&s2);InitLinkQueue(&p);printf(" 停车场管理系统\n\n");printf("************************* 欢(=^_^=)迎***************************\n");printf(" 收费标准:基础费0.5元,每分钟收取0.05元,收费精确到0.1元\n");printf(" PS:车牌号由阿拉伯数字组成");panitPL();printcar(); gotoxy(0,-3);char c=0; //接受按键while(1) //按ESC退出系统{for(int i=2;i>-1 ;i--) //初始化对话框qingping(i);printf("按ESC退出系统,其它键开始对话");c=getch();if(c==Esc){qingping(0);break;}while(1){qingping(2);gotoxy(28,8); printf("欢迎来到停车场!我是管理员小王。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实习报告题目:停车场管理姓名:袁韬博学号:16030120021 完成日期:2017.10.23一、需求分析1.本题目要求建立一个可指定长度的栈,和长度可变化的队列,以当作停车场和便道的车的存放。

2.本题目要求在停车场的车离开时,便道的车按照先后顺序进入一辆,并开始于此时记录时间。

3.在本题目之中在便道的停车不计费用,在此题中应判断在停车场还是在便道的信息。

4.本题目要求根据数据的第一位数据判断进入还是离开,根据要求输出信息。

5.程序执行命令为:1.存入车辆时输出停车信息2.车辆离开时输出停车时间和应缴纳费用 3.输入‘E’时表示结束。

6.测试数据:n=2,m(每小时停车费用)=3,(A,1,5)(A,2,10)(D,1,15)(A,3,20)(A,4,25)(A,5,30)(D,2,35)(D,4,40)(E,0,0)其中A表示为Arrival(到达),D表示为Departure(离开),E表示为End(结束)。

二、概要设计1.设定栈的抽象数据类型定义数据对象:D={a i|a i∈SStop,i=1,2,3,······,n}数据关系:R={<a i>|a i∈D, i=1,2,3,······,n }基本操作:initStack(&S,d)操作结果:建立一个长度为d的空栈Push(&S, &e, &d)初始条件:栈已存在,长度为d操作结果:如栈已满返回false,否则将e,压入栈中,返回truePop(&S, e)初始条件:栈已存在操作结果:如栈为空返回false,否则弹栈入e,返回true2.设定队列的抽象数据类型定义数据对象:D={a i|a i∈SStop,i=1,2,3,······,n}数据关系:R={<a i>|a i∈D, i=1,2,3,······,n }*SQTypeInit()操作结果:建立一个空队列InSQType(*q, &data)初始条件:队列已存在操作结果:将data压入队列之中*OutSQType( *q)初始条件:队列已存在操作结果:弹出队列,返回其指针。

3.程序包含6个模块1)主程序模块:包含栈与队列的对象建立,输入值的判断以及函数的实现2)栈模块:实现停车场抽象数据类型3)队列模块:实现便道抽象数据类型4)函数模块:实现数据的输入,进入和离开的弹栈与压栈及输出操作三、详细设计#include<stdio.h>#include<iostream>#include<malloc.h>using namespace std;typedef struct{ //定义车辆的结构体char a; //进入与离开信息int b; //车牌号int c; //进入或离开时间int d; //在停车场或便道的序号int e; //在停车场为1,在便道为0}SStop;typedef struct{ //定义栈结构体SStop *base; //定义栈底指针SStop *top; //定义栈顶指针SStop a; //定义栈元素}Stop;struct SQType //定义队列结构体{SStop data[100]; //分配队列neicunint head; //定义队列头int tail; //定义队列尾};SQType *SQTypeInit()//建立空队列{SQType * q; //定义队列指针if(q=new SQType) //建立队列{q->head=0; //将队列的头的定为0q->tail=0; //将队列的尾的定为0return q; //返回队列指针}else{return NULL; //建立不成功返回NULL}}int InSQType(SQType *q,SStop &data)//入队列操作{if(q->tail==100) //如果队列满返回"队列已满!操作失败!"{cout<<"队列已满!操作失败!"<<endl;return 0;}else //如果队列不满将data入队列并设置该车的停车位置{data.d=1-q->head+q->tail;q->data[q->tail++]=data;return 1;}}SStop *OutSQType(SQType *q)//出队列操作{if(q->tail==q->head) //如果队列为空返回NULL{return NULL;}else //如果队列不为空出队列并返回此数据指针{return &(q->data[q->head++]);}}bool initStack(Stop &S,int d){ //建立空栈S.base=(SStop*)malloc(d*sizeof(SStop)); //分配长达d的内存if(!S.base)return false; //分配不成功返回falseS.top=S.base; //是栈顶指针等于栈底指针return true; //建立成功返回ture}bool Push(Stop &S,SStop &e,int &d){ //压栈操作if(S.top-S.base>=d)return false; //如果栈满返回falseif(S.top==S.base)e.d=1; //如果栈为空将e的停车位置设为1 else e.d=1+S.top-S.base; //设置e的停车位置*S.top++=e; //将e压入栈中return true; //返回true}bool Pop(Stop &S,SStop &e){ //弹栈操作if(S.top==S.base)return false; //如果栈为空返回falsee=*--S.top; //弹栈并将其值赋给ereturn true; //返回true}int Scanf(SStop &e){ //输入数据操作cin>>e.a; //输入操作cin>>e.b; //输入车牌号cin>>e.c; //输入进入或离开时间e.d=0;return 0;}int Arrival(Stop &stop,SQType *wait,SStop &e,int &n,SStop a[],int&y){//进入操作if(Push(stop,e,n)){ //如果栈不满将e压入栈e.e=1; //将判断数据设置为1a[y]=e;y++; //将数据存入数组cout<<e.b<<"车停在停车场的"<<e.d<<"位置"<<endl ;//打印停车位置}else{ //如果栈满将e入队列InSQType(wait,e);e.e=0; //将判断数据数值为0a[y]=e;y++; //将数据存入数组cout<<e.b<<"车停在便道的"<<e.d<<"位置"<<endl; //打印停车位置}}int Departure(Stop &stop,SStop a[],Stop &wait1,SQType *wait,SStop&e,int &n,int &y,int &rt){//离开操作int o=0;SStop *q,u,mn,*kl;for(int i=0;i<y;i++){ //应用循环判断停车时间if(e.b==a[i].b){e.e=a[i].e;e.d=a[i].d;o=e.c-a[i].c;}}int ui=0;if(e.e==0){cout<<"该车在停车场停车时间为:0"<<" "<<"费用为0"<<endl; //如果未进入停车场,打印停车时间与费用while(e.d-wait->head>1){ //将e之前的数据出队列再入队列kl=OutSQType(wait);InSQType(wait,*kl);}if(wait!=NULL)OutSQType(wait); //将e出队列while(wait->tail-e.d-wait->head>1&&wait!=NULL){// 将e之后的数据出队列再入队列mn=*OutSQType(wait);InSQType(wait,mn);}}if(e.e==1){cout<<"该车在停车场停车时间为:"<<o<<" "<<"费用为:"<<o*rt<<endl; //如果在停车场之中,计算费用并输出while(ui<n-e.d){ //将e之后的数据出栈Pop(stop,u);Push(wait1,u,n);ui++;}Pop(stop,mn); //将e出栈while(wait1.top!=wait1.base){//将先前出栈数据压入栈中Pop(wait1,u);Push(stop,u,n);}q=OutSQType(wait); //从队列中出一个数据if(q!=NULL){Push(stop,*q,n); //将q压入栈中for(int i=0;i<y;i++){if(q->b==a[i].b){a[i].e=1; //用循环将q的判断数据设置为1a[i].c=e.c; //用循环将q的如停车场时间设为e离开时间}}}}return 0;}int main(){ //主函数模块SStop as[100]; //定义一个数组存储车辆信息Stop stop,wait1; //定义两个栈SQType *wait; //定义队列int n,m,y=0;cout<<"输入停车场长度:"; //输入ncin>>n;cout<<"请输入每小时停车费用:"; //输入mcin>>m;initStack(stop,n); //建立空栈stopinitStack(wait1,n); //建立空栈wait1wait=SQTypeInit(); //建立空队列waitSStop a;loop:cout<<"请输入数据:";Scanf(a); //应用函数输入数据if(a.a=='A'){ //如果为进入执行进入操作Arrival(stop,wait,a,n,as,y);}if(a.a=='D'){ //如果为离开执行离开操作Departure(stop,as,wait1,wait,a,n,y,m);}if(a.a!='E')goto loop;cout<<"结束"<<endl; //如果为‘E’结束return 0;}四、调试分析1.在此程序之中,一开始在栈与队列的建立是出现指针的错乱,检查后更改。

相关文档
最新文档