数据结构课程设计停车场管理报告
- 格式:docx
- 大小:59.34 KB
- 文档页数:15
数据结构课程设计停车场管理系统设计报告2停车场管理系统设计报告一、引言停车场管理系统是一种用于管理和控制停车场内停车位的软件系统。
本报告旨在详细描述设计一个停车场管理系统的过程,并介绍系统的功能、架构、模块设计以及相关技术细节。
二、系统概述本停车场管理系统旨在提供一个高效、智能化的停车场管理解决方案,以便实现停车场资源的合理利用和车辆流量的有效管理。
系统主要包括以下功能模块:1. 车辆入场管理:记录车辆的入场时间、车牌号码等信息,并分配合适的停车位。
2. 车辆出场管理:记录车辆的出场时间,计算停车费用,并提供支付方式。
3. 停车位管理:实时监测和管理停车位的占用情况,提供可用停车位的查询功能。
4. 数据统计与分析:根据车辆进出记录,生成报表,分析车流量、停车时长等数据。
5. 系统设置:包括管理员账号管理、停车场信息设置等。
三、系统架构本停车场管理系统采用三层架构,包括表现层、业务逻辑层和数据访问层。
1. 表现层:用户通过图形界面与系统进行交互,输入车辆信息、查询停车位、支付停车费用等。
2. 业务逻辑层:负责处理用户请求,实现车辆入场、出场管理,停车位管理以及数据统计与分析功能。
3. 数据访问层:负责与数据库进行交互,实现数据的存取和管理。
四、模块设计1. 车辆入场管理模块该模块主要包括车辆信息录入、停车位分配和入场记录保存等功能。
用户在系统界面输入车辆信息后,系统将分配一个合适的停车位,并将车辆信息和入场时间保存至数据库中。
2. 车辆出场管理模块该模块主要包括出场记录查询、停车费用计算和支付功能。
用户通过输入车牌号码查询出场记录,系统将根据停车时间计算停车费用,并提供多种支付方式供用户选择。
3. 停车位管理模块该模块实时监测和管理停车位的占用情况,提供可用停车位的查询功能。
系统将通过查询数据库中的停车位信息,实时更新停车位的占用状态,并在系统界面显示可用停车位的数量。
4. 数据统计与分析模块该模块根据车辆进出记录,生成报表,分析车流量、停车时长等数据。
数据结构课程设计《停车场管理》班级::学号:设计日期:2012年7月2日——2012年7月11日1)需求分析本次的数据结构课程设计所选的题目是停车场管理系统。
根据题目要求,已知停车场是一个可停放n辆汽车的狭长通道,只有一个大门可供汽车出入,由此可将停车场的类型定义为栈,其容量为n。
当停车场已经停满n辆车后,后来的车辆只能在便道上等待。
当停车场有车开走,便道上的第一辆汽车便可以进入停车场中。
根据其先入先出的特点,可以将便道的类型定义为队列,容量不限。
由题目可知,需停车辆的信息包括:车牌、汽车“到达”“离去”的信息、“到达”“离去”的时刻等。
按照从终端读入的数据序列进行模拟管理。
每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。
车辆牌照为整型数据,车辆到达或离开的时刻同样为整型数据。
输入车辆到达应该输出的信息为:汽车在停车场或便道上的停车位置;输入车辆离开应该输出的信息为汽车在停车场停留的时间和应交纳的费用(在便道上停留的时间不收费)。
停车场管理系统主要实现以下几个功能:(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
该程序设计可以完整的模拟停车场的管理过程。
2)概要设计停车场管理系统是充分利用数据结构中栈和队列的思想实现的,栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。
栈的主要特点是”后进先出”,即后进栈的元素先处理。
停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存储的方式更适合,也方便车辆的调度。
队列是限定仅能在表的一端进行插入,在表的另一端进行删除的线性表。
队列中可以插入的一端称为队尾,可以删除的一端称为队首。
把一个元素插入队列中的操作为进队,队列中删除一个元素的操作为出队。
《数据结构》停车场系统设计报告--停车场管理系统_一、系统总体原则1.1、系统的安全性:停车场管理系统要求引入多重安全措施,确保其系统数据的安全,以防止非法黑客进行攻击;系统本身要具备安全保护机制,确保核心系统重要功能不能被破坏。
1.2、系统功能:停车场管理系统要具备通行证管理,车辆管理,收费管理,维修管理,系统权限控制和固定车位管理等多种功能。
1.3、系统数据管理:停车场管理系统要实现对用户信息,车辆信息,收费信息,维修信息和工作日志等数据的便捷管理;支持数据注入,报表输出,日志查询,备份恢复等。
二、系统数据结构2.1、用户信息结构:用户类型、用户名、密码、真实姓名、联系电话、优惠折扣比、优惠申请次数等2.2、车辆信息结构:车牌号、车牌颜色、停放位置、停放时间、收费金额等2.3、收费信息结构:收费时间、车牌号、应缴金额、实缴金额、优惠金额、收费员等2.4、维修信息结构:维修时间、车牌号、维修内容、维修费用、维修人等2.5、工作日志结构:日志类型、生成时间、触发时间、操作内容、操作人等三、系统模块设计通行证管理模块:能够管理停车场的客户信息,支持优惠折扣的设置,支持多种客户角色的分配及权限管理。
车辆管理模块:能够管理停车场的车辆信息,支持分配停车位、跟踪车辆停放时间以及出入位置,以实现计算停车费用。
收费管理模块:能够实现车辆停放费用的计费与收取,支持优惠计算功能,支持收费记录的查询与管理。
维修管理模块:能够管理停车场的车辆维修信息,能够针对每辆车的维修记录进行查询、录入和管理。
系统权限控制模块:支持可根据多种角色分配权限,以实现系统模块及功能的控制,保证信息安全性。
固定车位管理模块:能够支持固定车位信息的管理,可支持用户管理固定车位,以便系统自动识别用户并提供优惠处理。
四、系统实现方案4.1 前端 : 对停车场系统进行交互式操作,支持web,客户端,短信等界面,实现用户的操作及查询;前端应用可跨平台进行。
int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&c ar.event!='E')){getchar(); //除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;2)分别构造空栈和空队列栈:Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}队列:Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;3)车辆到达处理Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}4)车辆离开处理Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e) { //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) //车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); //从栈中依次退出Push(TempS,a); //依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do { //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); //前面的车进入队尾printf("您的车牌号为%d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;2.主要设计程序如下:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define MAX 2 //停车场容量#define price 2 //单价#define OK 1#define FALSE 0#define TRUE 1#define ERROR -1#define OVERFLOW -2typedef int Status;//============================================================== =======typedef struct CarNode{char event;int num;int time;}CarNode; //车辆信息结点typedef struct SqStack{CarNode *base;CarNode *top;int Stacksize;}SqStack; //栈(停车场)typedef struct QNode{CarNode data;struct QNode *next;}QueueNode; //便道结点typedef struct LinkQueue{QueueNode *front;QueueNode *rear;int queuesize;}LinkQueue; //队列(便道)//============================================================== =======Status InitStack(SqStack &S){ //构造一个空栈S.Stacksize=0;S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));if(!S.base){exit(OVERFLOW);printf("存储空间分配失败");}S.top=S.base;return OK;}//============================================================== =======Status InitQueue(LinkQueue &Q){ //构造一个空队列(带头结点)Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));if(!Q.front){exit(OVERFLOW);printf("存储空间分配失败");}Q.front->next=NULL;Q.queuesize=0;return OK;}//============================================================== =======Status GetTop(SqStack S,CarNode &e){ //返回栈顶元素if(S.top==S.base)return ERROR;e=*(S.top-1);return TRUE;}//============================================================== =======Status Pop(SqStack &S,CarNode &e){ //删除栈顶元素if(S.top==S.base)return ERROR;e=*--S.top;return OK;}//============================================================== =======Status Push(SqStack &S,CarNode e){//插入元素为新的栈顶元素(在栈不满的前提下) if(S.top-S.base>=MAX)return FALSE;*S.top++=e;return OK;}//============================================================== =======Status DeQueue(LinkQueue &Q,CarNode &e){ //删除队头元素(带头结点) if(Q.rear==Q.front)return ERROR;QueueNode *p=Q.front->next;e=p->data;Q.front->next=p->next;if(p==Q.rear)Q.rear=Q.front;free(p);Q.queuesize--;return OK;}//============================================================== =======Status EnQueue(LinkQueue &Q,CarNode e){ //插入新的队尾元素QueueNode *p=(QueueNode*)malloc(sizeof(QueueNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;Q.queuesize++;return OK;}//============================================================== =======Status Check_Stack(SqStack &S,CarNode e){//车辆到达时车库内是否有同名车CarNode *Temp=S.base;while((Temp!=(S.top))&&(Temp->num!=e.num))Temp++;if((Temp==S.top))return FALSE;elsereturn TRUE;}//============================================================== =======Status Check_Queue(LinkQueue &Q,CarNode e){//车辆到达时便道上是否有同名车QueueNode *Temp=Q.front;while((Temp!=Q.rear) && (Temp->data.num!=e.num))Temp=Temp->next;if((Temp==Q.rear) && (Temp->data.num!=e.num))return FALSE;elsereturn TRUE;}//============================================================== =======Status Arrive(SqStack &S,LinkQueue &Q,CarNode &e){ //车辆到达处理if((S.top-1)->time<=e.time){ //时间处理if(!Check_Stack(S,e)&&!Check_Queue(Q,e)){ //是否已存在if(S.top-S.base<MAX){Push(S,e);printf("成功进入停车场,在%d号车库!\n",S.top-S.base);return OK;}else{EnQueue(Q,e);printf("停车场已满,车辆进入便道,在%d号车位!\n",Q.queuesize);}}elseprintf("该牌照的车已存在,输入有误,请重新输入\n");return OK;}else{printf("时间输入有误,请重新输入!\n");return FALSE;}}//============================================================== =======Status Leave(SqStack &S,SqStack &TempS,LinkQueue &Q,CarNode &e){ //车辆离开处理CarNode a;int leatime,leanum;int entertime; //进入停车场时间int cost;if(!(Check_Stack(S,e) || Check_Queue(Q,e))){printf("数据输入错误,本停车场内无所查询车辆,请重新输入!\n");return true;}else{if(Check_Stack(S,e)) //若需要离开的车辆在停车场{if(e.num==(S.top-1)->num) //车辆处在栈顶{Pop(S, a);leatime=e.time;leanum=e.num;entertime=a.time;printf("车辆进入车库时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);}else //车辆处在栈中间{do{Pop(S,a); //从栈中依次退出Push(TempS,a); //依次进入临时栈}while((S.top-1)->num!=e.num);//直到top指针下一个位置的num=车牌号Pop(S, a); //该车离开leatime=e.time;leanum=e.num;entertime=a.time;printf("车进入停车场时间:%d\t现在(离开)时间:%d\t停留时间:%d\t\n",entertime,leatime,leatime-entertime);do { //其余车辆按原来次序返回停车场Pop(TempS,a);Push(S,a);}while(TempS.top!=TempS.base);//条件与上面不同,此时是全部回去}cost=(leatime-entertime)*price;if(cost>=0)printf("您的车牌号为%d 的车应交纳的费用是:%d\n",leanum,cost);if(Q.front!=Q.rear){ //队列不空的话从便道进停车场DeQueue(Q,a);if(a.time<leatime) //便道车辆进车库时间应该比车库车辆离开时间晚entertime=leatime;a.time=leatime;Push(S,a); //该车进入停车场printf("车牌号为%d的车辆从便道上进入%d号车库!从现在开始计时,现在时间为:%d\n",a.num,S.top-S.base,a.time);}}else if(Check_Queue(Q,e)){ //从便道直接离开do{DeQueue(Q,a);EnQueue(Q,a);}while(Q.front->next->data.num!=e.num);DeQueue(Q,e); //前面的车进入队尾printf("您的车牌号为%d 的车辆未进入车库从便道直接离开,费用为0!\n",e.num);}}return true;}//============================================================== =======void Initialization(){ //初始化程序printf("======================================================= ===\n");printf("* 停车场管理模拟程序*\n");printf("======================================================= ===\n");printf("请依次输入车辆到达(A/a)/离去(D/d)/结束(E/e)信息、车牌号以及当前时间:\n\n");}//============================================================== =======int main(){Initialization();CarNode car;SqStack Park,TempPark;LinkQueue Q;InitStack(Park);InitStack(TempPark);InitQueue(Q);while((scanf("%c%d%d",&car.event,&car.num,&car.time))&&(car.event!='e'&&c ar.event!='E')){getchar(); //除去输入结束时的回车switch(car.event){case 'A':case 'a':Arrive(Park,Q,car);break;case 'D':case 'd':Leave(Park,TempPark,Q,car);break;default: printf("您的第一个数据输入有误!\n");break;}}printf("程序结束,谢谢使用!\n");return 0;}。
数据结构课程设计停车场模拟管理系统报告(含源码)《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (2)(三)数据结构 (2)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (3)(三)界面设计 (4)五、设计结果与分析 (6)六、总结(收获和不足) (6)(一)课设的不足 (6)(二)课设的收获 (7)附录程序源码 (7)参考文献: (19)指导教师意见 (20)一、设计题目停车场模拟管理系统。
二、设计目的利用所学的知识,模拟设计一个停车场管理系统。
通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。
当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场。
当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。
输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。
车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。
(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列。
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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 <<"停车场内没有车辆。
《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (1)(三)数据结构 (1)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (2)(三)界面设计 (3)五、设计结果与分析 (4)六、总结(收获和不足) (5)(一)课设的不足 (5)(二)课设的收获 (5)附录程序源码 (5)参考文献: (16)指导教师意见 (17)一、设计题目停车场模拟管理系统。
二、设计目的利用所学的知识,模拟设计一个停车场管理系统.通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。
当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场.当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。
输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序.车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍.(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列.四、详细设计(一)分析与实现1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。
《数据结构》课程设计停车场管理系统班级:*********指导教师:*** 学号:*********** 姓名:***小组成员:*****************完成日期:2009年3月6日成绩:________________目录(一)设计目的 (3)(二)设计内容 (3)(三)概要设计…………………………………4—5(四)调试分析…………………………………6-8(五)用户手册 (9)(六)附录…………………………………9-17《数据结构》课程设计停车场管理系统一、课程设计目的1、通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容①问题描述:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
②基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
数据结构课程设计报告学校:中南大学学院:信息科学与工程学院班级:计算机科学与技术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设计构思根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:当栈满后,继续来的车只能停在便道上,根据便道停车的特点,可知这可以用一个队列来实现,先排队的车先离开便道进入停车场。
数据结构设计报告停车场管理系统方案数据结构设计报告:停车场管理系统方案一、引言随着汽车数量的不断增加,停车场管理成为了一个重要的问题。
一个高效、准确、便捷的停车场管理系统对于提高停车场的运营效率、服务质量以及用户体验都具有重要意义。
本报告将详细介绍一种停车场管理系统的数据结构设计方案,旨在为相关开发人员提供参考。
二、需求分析(一)基本功能需求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、使用数据库存储车辆的停车记录,便于查询和统计。
数据结构课程设计《停车场管理》班级:姓名:学号:设计日期:2012年7月2日——2012年7月11日1)需求分析本次的数据结构课程设计所选的题目是停车场管理系统。
根据题目要求,已知停车场是一个可停放n辆汽车的狭长通道,只有一个大门可供汽车出入,由此可将停车场的类型定义为栈,其容量为n。
当停车场已经停满n辆车后,后来的车辆只能在便道上等待。
当停车场内有车开走,便道上的第一辆汽车便可以进入停车场中。
根据其先入先出的特点,可以将便道的类型定义为队列,容量不限。
由题目可知,需停车辆的信息包括:车牌号码、汽车“到达”“离去”的信息、“到达”“离去”的时刻等。
按照从终端读入的数据序列进行模拟管理。
每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。
车辆牌照号码为整型数据,车辆到达或离开的时刻同样为整型数据。
输入车辆到达应该输出的信息为:汽车在停车场内或便道上的停车位置;输入车辆离开应该输出的信息为汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
停车场管理系统主要实现以下几个功能:(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
该程序设计可以完整的模拟停车场的管理过程。
2)概要设计停车场管理系统是充分利用数据结构中栈和队列的思想实现的,栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。
栈的主要特点是”后进先出”,即后进栈的元素先处理。
停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存储的方式更适合,也方便车辆的调度。
队列是限定仅能在表的一端进行插入,在表的另一端进行删除的线性表。
队列中可以插入的一端称为队尾,可以删除的一端称为队首。
把一个元素插入队列中的操作为进队,队列中删除一个元素的操作为出队。
停车场管理系统数据结构课程设计程序设计书小组成员:彭路20131344031崔琦20131344028徐佳20131344027范福龙20121344024班级:13软件工程1班时间:2014.12.22目录一、程序设计目标二、问题描述三、需求分析四、概要设计五、详细设计六、源程序清单七、软件说明书八、测试报告九、课程设计总结一、程序设计目标本管理程序由C/C++语言完成,实现了对停车场收费问题的处理。
本程序保证了程序的健壮性和操作性,在阅读过使用说明书之后可以轻松使用。
本管理系统假设车辆在停车场时一直有人在驾驶,或者说停车场的每块停车位均可智能移动。
并假设车辆进出场耗时不计,且时间均为整数类型。
最后自动或者人工完成收费。
二、问题描述设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车, 则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
三、需求分析根据问题描述,可把本停车场抽象成一个栈存储类型si,需要输入最大停车容量no每当输入’A'时即为有车辆申请进入停车场操作,此时需要判断停车场是否有空位,如果有空位,那么这辆车可以进入停车场,即为执行一次压栈操作(push),并记录进入停车场的时间t1,并输出位置pi;如果停车场没有空位,那么这辆车在门外便道等候,并输出位置p2o根据问题描述,可以把此门外便道抽象成一个队列存储类型q,而每有一辆车进入门外便道,即相当于进行一次插入队列操作(push)o每当输入'D'时即为有车辆申请离开停车场操作,此时需要判断该车辆在停车场的位置。
数据结构课程设计题目:模拟停车场管理问题2020 年6 月 25 日·北京信息工程学院信息技术教学与实验中心二、目录目录二、目录 (1)三、设计任务书 (2)四、小组成员及分工 (3)五、报告正文 (3)1.设计题目 (3)2.设计目的 (3)3.算法思想分析 (3)4.算法描述与实现 (4)5.程序运行结果 (10)6.结论 (11)三、设计任务书课程设计名称:数据结构课程设计课程设计编号:CST206课程设计学分:2课程设计周(时)数:2周课程设计授课单位:信息工程学院计算机系指导方式:集体辅导与个别辅导相结合课程设计适用专业:计算机科学与技术课程设计教材及主要参考资料:《数据结构课程设计》,滕国文编著,清华大学出版社,2010年;《数据结构课程设计》,陈越钦铭雁编著,浙江大学出版社,2009年《数据结构课程设计案例教程》, 马巧梅等编著, 人民邮电出版社,2012年题目1:模拟停车场管理问题问题描述:设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场按车辆到来的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。
每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
基本要求:试为停车场编制按上述要求进行管理的模拟程序。
在这里假设汽车不能从便道上开走。
试设计一个停车场管理程序。
实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,例如:('A',1,5)表示一号牌照车在5这个时刻到达,而('D',5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为('E',0,0)时结束。
数据结构课程设计报告停车场管理系统课程设计报告课程名称数据结构课程设计课题名称停车场管理系统专业信息管理与信息系统班级 09级1班学号 200903110112姓名洪俊斌指导教师赵锦元、李峰、罗敬2011年 1 ⽉ 9 ⽇湖南⼯程学院课程设计任务书课程名称数据结构课题停车场管理系统专业班级信息管理0901班学⽣姓名洪俊斌学号200903110112指导⽼师赵锦元、李峰、罗敬审批任务书下达⽇期2011 年1 ⽉ 3 ⽇任务完成⽇期2011 年1 ⽉20 ⽇⼀、设计内容与设计要求1.设计内容:[问题描述] 设停车场只是⼀个可停放⼏辆汽车的狭长通道,且只有⼀个⼤门可供汽车进出,还有⼀个等停的的狭长通道。
汽车在停车场内按车辆的先后顺序依次排列,若车站内已停满汽车,则后来的汽车只能在门外的通道上等停,⼀旦停车场内有车开⾛,则排在通道上的第⼀辆车即可进⼊;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开⼊的车辆必须先退出车站为它让路,待该车辆开出⼤门,为它让路的车辆再按原来次序进⼊车场。
在这⾥假设汽车不能从便道上开⾛,试设计这样⼀个停车场模拟管理程序。
[基本功能](1)车辆成批⼊站。
当⼀个停车场刚开始投⼊运⾏的时候,会有很多车进来,因此,要设计⼀个函数来实现车辆批量进站。
并要检测车辆的数⽬是否超过规定的最⼤容量,给出相关提⽰信息。
(2)单个车辆⼊站。
当系统正常投⼊运⾏后,会有零散的车辆进进出出,因此,设计⼀个函数实现单个车辆⼊站。
(3)车站内信息实时显⽰。
车站内信息包括两个部分:停车场内停放的车辆以及在外⾯通道上等停的车辆。
(4)车辆出站。
当停车场内车辆出站后,检查通道上是否有车等停,如果有,则要把排在最前⾯的车调⼊停车场内。
2.设计要求:1).设计正确,⽅案合理。
2).界⾯友好,使⽤⽅便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
. ..数据结构课程设计停车场管理系统目录一、课设目的 (2)二、问题描述 (2)三、基本要求 (2)四、详细设计 (2)(1)原理分析 (2)(2)功能模块 (3)(3)用户手册 (5)(4)流程图 (6)(5)测试用例 (7)(6)测试目的 (7)(7)测试要求 (7)五、程序源码 (7)六、测试结果 (13)七、课设总结 (14)八、参考文献 (15)一、课设目的(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程中的问题分析,系统设计,程序编码,测试等基本方法和技能;(3)提高综合应用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发和一般规进行软件开发,培养软件工作者所应具有的科学的工作方法和作风。
二、问题描述设停车场只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
三、基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车离去,则输出汽车在停车场停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表实现。
四、详细设计(1)原理分析:栈是一种只能在一段进行输入和输出操作的线性表,表尾称为栈顶,表头称为栈底。
停车场管理实验报告姓名:学号:学院:继续教育学院班级:计算机科学与技术一.实验目的和要求熟练栈和队列的结构特性,掌握在实际问题背景下的应用二.实验主要内容以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“达到”或“离去”信息、汽车牌照号码以及达到或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆达到、则输出汽车在停车场内或便道上停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
三.实验仪器和环境PC机Windows xp Visual c++ c语言四.实验原理1.概要设计(1)抽象数据类型定义ADT Stack{数据对象:D={ai|ai ∈ElemSet, i=1,2,…n;n>0}数据关系:R1={<ai-1,ai>|ai-1,ai ∈D,i=2,…n}基本操作:InitStack(&S)操作结果:构造一个空栈S。
Push(&S,e)初始条件:栈S已存在。
操作结果:插入e为新的栈顶元素Pop(&S,&e)初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并且用e返回。
}ADT StackADT Queue {数据对象:D={ai|ai ∈ElemSet, i=1,2,…n; n>0}数据关系:R1={<ai-1,ai>|ai-1,ai ∈D, i=2,…n}其中:a1为队头, an为队尾基本操作:InitQueue(&Q);操作结果:构造一个空队列QEnQueue(&Q,&e);初始条件:对列Q已存在。
操作结果:插入元素e为Q的新队尾元素。
DeQueue(&Q,&e);初始条件:对列Q已存在。
操作结果:删除Q的队头元素, 并用e返回。
数据结构课程设计《停车场管理》班级:姓名:学号:设计日期:2012年7月2日——2012年7月11日1)需求分析本次的数据结构课程设计所选的题目是停车场管理系统。
根据题目要求,已知停车场是一个可停放n辆汽车的狭长通道,只有一个大门可供汽车出入,由此可将停车场的类型定义为栈,其容量为n。
当停车场已经停满n辆车后,后来的车辆只能在便道上等待。
当停车场内有车开走,便道上的第一辆汽车便可以进入停车场中。
根据其先入先出的特点,可以将便道的类型定义为队列,容量不限。
由题目可知,需停车辆的信息包括:车牌号码、汽车“到达”“离去”的信息、“到达”“离去”的时刻等。
按照从终端读入的数据序列进行模拟管理。
每辆车需要三个数据,其中车辆数据为:A表示到达,D表示离去,E表示程序结束。
车辆牌照号码为整型数据,车辆到达或离开的时刻同样为整型数据。
输入车辆到达应该输出的信息为:汽车在停车场内或便道上的停车位置;输入车辆离开应该输出的信息为汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
停车场管理系统主要实现以下几个功能:(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号能查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
该程序设计可以完整的模拟停车场的管理过程。
2)概要设计停车场管理系统是充分利用数据结构中栈和队列的思想实现的,栈是一种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。
栈的主要特点是”后进先出”,即后进栈的元素先处理。
停车场的容量即为栈的存储空间,停车场的车辆的停靠是无秩序的,因此采用链式存储的方式更适合,也方便车辆的调度。
队列是限定仅能在表的一端进行插入,在表的另一端进行删除的线性表。
队列中可以插入的一端称为队尾,可以删除的一端称为队首。
把一个元素插入队列中的操作为进队,队列中删除一个元素的操作为出队。
队列存取操作符合:先进先出。
停车场的车辆到达停车和车辆的离开的管理方式就是采用队列的“先进先出”的移动的思想。
停车场的入口就是队列的队首,停车场的出口就是队列的队尾。
停车场管理系统流程图如图1所示。
、图1 停车场管理系统流程图3.详细设计1.全局变量及编译预处理语句#define ERROR 0#define OK 1#define NULL 0int count=0; //队列是否为空的标志int times;stack s,temp; //初始化栈LinkQueue Q; //初始化队列2.车辆信息类型typedef struct node{int passport; //存储车辆牌照信息int time; //存储进场时间信息}node;3.栈类型(停车场)typedef struct stack{node *base;node *top;int stacksize;}stack;void initstack(stack &S,int n){ //构造空栈S.base=(node *)malloc(n*sizeof(node));S.top=S.base;S.stacksize=n;}void push(stack &S,node e){ //入栈函数if((S.top-S.base)>=S.stacksize){EnQueue(Q,e);} //如果栈满,调用入队函数else {S.top->passport=e.passport;S.top->time=e.time;S.top++;}}int pop(stack &S,node &e){ //出栈函数if(S.top==S.base)return ERROR; //如果栈空,返回ERROR--S.top;e.passport=S.top->passport;e.time=S.top->time;return OK;}4.队列类型(便道)typedef struct Qnode{node Qdata;struct Qnode *next;}Qnode;typedef struct {Qnode *front;Qnode *rear;}LinkQueue;void EnQueue(LinkQueue &Q,node e){ //入队函数Qnode *q;q=(Qnode *)malloc(sizeof(Qnode));q->Qdata.passport=e.passport;q->Qdata.time=e.time;q->next=NULL;if(count==0){Q.front=q;count++;} //若创建节点前队空,头指针指向节点Q.rear->next=q;Q.rear=q;}void DeQueue(LinkQueue &Q,node &e){ //出队函数if(Q.rear==NULL){}else {e.passport=Q.front->Qdata.passport;e.time=Q.front->Qdata.time;Q.front=Q.front->next;if(Q.front==NULL){Q.rear=Q.front;count=0;}}}5.主函数及其他函数的C++算法void main(){int n,exit;float money;char info;int pass;Q.front=NULL ;Q.rear=(Qnode *)malloc(sizeof(Qnode));Q.rear->next=Q.rear;printf("欢迎使用停车场管理系统\n本停车场容量为:");cin>>n;initstack(s,n);initstack(temp,n);printf("停车场费率为:");cin>>money;while(exit!=OK){printf("\n请输入车辆数据\nA到达 D离去 E结束:"); cin>>info;printf("请输入车辆牌照号码:");cin>>pass;if(info=='A'||info=='E')printf("请输入车辆进场时间:"); if(info=='D')printf("请输入车辆离场时间:");cin>>times;if(info=='E'){exit=OK;}else if(info=='A'){int i,j;node a;a.passport=pass;a.time=times;push(s,a);for(i=1;i<=n;i++){if(s.base[i-1].passport==a.passport){printf("停车位置(停车场内):%d\n",i);}}Qnode *tp;tp=Q.front;if(tp==NULL){}else{j=1;while(tp!=Q.rear){tp=tp->next;j++;}printf("停车位置(便道):%d\n",j);}}else if(info=='D'){node d;int tp,counter=0;do{counter++;tp=pop(s,d);while(tp!=ERROR){if(d.passport==pass){float m;m=(times-d.time)*money;printf("停留时间:%d您需交费:%f\n",times-d.time,m); while(temp.base!=temp.top){pop(temp,d);push(s,d);}wait(s);d.passport=9999;tp=ERROR;}else{push(temp,d);d.passport=0;tp=ERROR;}}}while(d.passport==0||counter>n);}else if(info!='A'&&info!='D'&&info!='E'){}}}void wait(stack &S){if((S.top-S.base)==(S.stacksize-1)&&count!=0){node temp;DeQueue(Q,temp);temp.time=times;push(S,temp);}4}.调试分析(1)一开始在调试程序时遇到了内存错误,经过DEBUG,找到了引起内存错误的原因:即在建立队头指针与队尾指针时没有对指针进行初始化(没有为指针动态分配空间)。
问题得到解决。
(2)在Wait函数中的If语句处,一开始的算法有些问题,导致实现的功能与设想的有出入,无法得到正确的结果。
原条件为: S.top-S.base==S.stacksize后改为: (S.top-S.base)==(S.stacksize-1)&&count!=0该函数的功能得以正确实现。
(3)在EnQueue函数中,一开始用的是建立实体结点,用队头队尾指针指向该实体的方法来创建队列。
在调试过程中发现,忽略了生存期,导致队列并没有被创建。
改为创建指针,并为指针分配空间,再给头指针和尾指针赋值的方式解决问题。
虽然指针也有生存期,但为它分配的空间却并没有被收回,于是队列创建成功,问题解决。
(4)本程序中:车辆到达,离去时的时间复杂度均为:O(n)。
本程序空间复杂度为:O(n)。
(5)前面运行一切正常,但是最后无法结束退出。
经调试后解决。
5).用户手册1、运行程序进入停车场管理界面,首先输入停车场容量和停车场费率。
2、然后根据车辆到达和离去的实际情况输入A或D。
例如车辆到达输入A,然后输入车辆车牌号码及到达时刻。
此时便会显示车辆停放的信息(在停车场内,当停车场停满后,车辆会停放在便道上)。
3、车辆离开输入D,然后输入车辆号码及离开时刻。
此时会显示离开车辆的停车时间以及应缴纳的费用。
4、输入E结束本程序。
6)测试结果测试数据:设n=2输入数据:2输出:停车场容量为:2停车场费率为:1.5元/分钟A,1,5 停车位置(停车场内):1A,2,10 停车位置(停车场内):2D,1,15 停留时间:10分钟需交费:15.00元A,3,20 停车位置(停车场内):2A,4,25 停车位置(便道):1A,5,30 停车位置(便道):2D,2,35 停留时间:25分钟需交费:37.50元D,4,40 停留时间:5分钟需交费:7.50元E,0,07)附录(源程序代码)#include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <malloc.h>#define ERROR 0#define OK 1#define NULL 0typedef struct node{int passport;int time;}node;typedef struct stack{node *base;node *top;int stacksize;}stack;typedef struct Qnode{node Qdata;struct Qnode *next;}Qnode;typedef struct {Qnode *front;Qnode *rear;}LinkQueue;int count=0;int times;stack s,temp;LinkQueue Q;void initstack(stack &S,int n){S.base=(node *)malloc(n*sizeof(node));S.top=S.base;S.stacksize=n;}void EnQueue(LinkQueue &Q,node e);void DeQueue(LinkQueue &Q,node &e);void push(stack &S,node e){if((S.top-S.base)>=S.stacksize){EnQueue(Q,e);} else {S.top->passport=e.passport;S.top->time=e.time;S.top++;}}int pop(stack &S,node &e){if(S.top==S.base)return ERROR;--S.top;e.passport=S.top->passport;e.time=S.top->time;return OK;}void wait(stack &S){if((S.top-S.base)==(S.stacksize-1)&&count!=0){ node temp;DeQueue(Q,temp);temp.time=times;push(S,temp);}}void EnQueue(LinkQueue &Q,node e){Qnode *q;q=(Qnode *)malloc(sizeof(Qnode));q->Qdata.passport=e.passport;q->Qdata.time=e.time;q->next=NULL;if(count==0){Q.front=q;count++;}Q.rear->next=q;Q.rear=q;}void DeQueue(LinkQueue &Q,node &e){if(Q.rear==NULL){}else {e.passport=Q.front->Qdata.passport;e.time=Q.front->Qdata.time;Q.front=Q.front->next;if(Q.front==NULL){Q.rear=Q.front;count=0;} }}int main(){int n,exit;float money;char info;int pass;Q.front=NULL;Q.rear=(Qnode *)malloc(sizeof(Qnode));Q.rear->next=Q.rear;printf("欢迎使用停车场管理系统\n本停车场容量为:");cin>>n;initstack(s,n);initstack(temp,n);printf("停车场费率为:");cin>>money;while(exit!=OK){printf("\n请输入车辆数据\nA到达 D离去 E结束:");cin>>info;if(info=='E'){return 0;}printf("请输入车辆牌照号码:");cin>>pass;if(info=='A')printf("请输入车辆进场时间:");if(info=='D')printf("请输入车辆离场时间:");cin>>times;if(info=='A'){int i,j;node a;a.passport=pass;a.time=times;push(s,a);for(i=1;i<=n;i++){if(s.base[i-1].passport==a.passport){printf("停车位置(停车场内):%d\n",i);}}Qnode *tp;tp=Q.front;if(tp==NULL){}else{j=1;while(tp!=Q.rear){tp=tp->next;j++;}printf("停车位置(便道):%d\n",j);}}else if(info=='D'){node d;int tp,counter=0;do{counter++;tp=pop(s,d);while(tp!=ERROR){if(d.passport==pass){float m;m=(times-d.time)*money;printf("停留时间:%d分钟您需交费:%2.2f元\n",times-d.time,m);while(temp.base!=temp.top){pop(temp,d);push(s,d);}wait(s);d.passport=9999;tp=ERROR;}else{push(temp,d);d.passport=0;tp=ERROR;}}}while(d.passport==0||counter>n);}else if(info!='E'){}}}参考文献:数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社数据结构实验教程(C语言版)王国钧唐国民编著清华大学出版社。