数据结构课程设计报告停车场管理系统
- 格式:doc
- 大小:900.50 KB
- 文档页数:30
数据结构课程设计停车场管理系统设计报告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,客户端,短信等界面,实现用户的操作及查询;前端应用可跨平台进行。
数据结构课程设计——停车场在当今社会,随着汽车数量的不断增加,停车场的管理变得日益重要。
一个高效、合理的停车场管理系统不仅能够提高停车场的使用效率,还能为车主提供更好的服务体验。
在本次数据结构课程设计中,我们将深入探讨如何设计一个实用的停车场管理系统。
一、需求分析首先,我们需要明确停车场管理系统的基本需求。
一般来说,它应该具备以下功能: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");}}```五、系统测试在完成系统的开发后,我们需要进行充分的测试以确保系统的稳定性和正确性。
数据结构课程设计停车场管理系统
停车场管理系统是一种体现现代化管理的车库管理系统,它可以有效地控制车辆的入库、出库和停车费收取等。
停车场管理系统的设计原则是以业务实用性为基础,以车辆的安全和管理的效率为核心,以车主的方便为目标,以信息安全和财务支持为基础,以及以智慧停车场的发展为发展方向来设计。
停车场管理系统是一个基于互联网的系统,可以实现停车场的网络化管理,它可以实现停车场车辆的实时管理,可以实现停车场数据的实时上传和下载,可以实现停车场费用的实时收取,可以实现停车场财务的实时总结等功能,可以提高停车场的管理效率,提升停车场的运营水平。
总之,停车场管理系统是一个具有较强实用性的系统,它可以有效地控制车辆的入库、出库和停车费收取等,并可以实现停车场的网络化管理,提高停车场的管理效率,提升停车场的运营水平。
只要系统管理人员根据实际情况,灵活有效地调整系统的参数和指标,停车场管理系统将会发挥出最大的作用。
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100/*预设停车场有100个车位*/#define D 1.2/*预设车辆停车费为1.2元每小时*/ #define NUMBER 100void menu();void start();void parkingplace();void drive();struc car{int carnumber;int cararrave;int carleave;int carplace;}car[NUMBER];struct park;{int null;}parkingplace[N-1];void main (){menu();/*菜单*/}void menu(){int n;do{puts("****MENU***");puts("1、停车");puts("2、开车");puts("3、退出");puts("4、初始化");printf("请选择你需要的服务(1-4):");scanf("%d",&n);}switch(n){case 1:parking;break;/*停车函数*/case 2:drive;brea ;/*开车函数*/case 3:exit;break;/*退出*/case 4:start;break;/*初始化*/}}void start()/*初始化*/{int i,j;for(i=0;j<N;i++)parking[i].null=0;/*停车场设置为空*/printf("已初始化");menu();}void parkingplace()/*车辆进入函数*/{int i,a,h=0;printf(“请输入该车系序号(从0开始):”);scanf(“%d”,&a);for(i=0;i<N;i++){if(parking[i].park==0)/*无车标记*/if(parking[i].park==1)/*有车标记*/h=h+1;}if(h==N)printf(“停车场内已满!”);else{car[a].carplace=h;parkingplace[h].null=1;printf(“该车应该停在停车场内”);printf(“请输入该车进停车场时间:”);scanf(“d%”,&car[a].cararrave);}void drive()/*车辆离开函数*/{int i,k,time;double(“请输入车辆次序号【】”);scanf(“%d”,&i);printf(“请输入离开时间:”);scanf(“%d”,&car[i]carleave);fee=D*(car[i].carleave-car[i].cardrrave);time=car[i].carleave-car[i].cardrrave;printf(“次序号为%d的车停时间%d小时,应收费%f元”,i,time,fee); }。
数据结构课程设计停车场管理系统停车场管理系统设计文档1.引言1.1.目的本文档旨在详细描述停车场管理系统的设计和功能要求。
1.2.范围本文档适用于数据结构课程设计的停车场管理系统。
1.3.定义、缩写和缩写词①.数据结构:一组数据元素和一组操作这些数据元素的关系的数学模型。
②.停车场:用于停放汽车的专用场所。
③.系统:由一组相互关联的元素组成,以实现特定目标。
④.管理:处理和控制组织中的资源和相关活动以达到特定的目标。
⑤.法律名词及注释详见附件1.2.概述2.1.系统功能停车场管理系统旨在实现以下功能:●记录车辆进入和离开停车场的时间和位置●管理停车位的分配和释放●提供停车费计算功能●提供查询和统计功能2.2.用户类别停车场管理系统将提供以下用户类别的功能:●系统管理员:负责管理系统的整体运行和设置参数●停车场经理:负责监督停车场日常运作●停车员:负责接收车辆、记录进出时间、收取停车费等操作●车主:可以查询自己车辆的停车情况和费用信息2.3.系统约束停车场管理系统将在以下约束条件下进行设计和开发:●系统将使用C++编程语言实现●系统将采用面向对象的设计方法●系统将在Windows操作系统上运行3.系统设计3.1.系统架构停车场管理系统将采用分层架构,包括以下几个层次:●用户界面层:提供用户与系统交互的界面●业务逻辑层:处理用户请求和管理数据库●数据访问层:与数据库进行交互3.2.数据结构停车场管理系统将使用以下数据结构:●队列:用于记录车辆进入停车场的顺序●栈:用于记录车辆离开停车场的顺序●数组:用于存储停车位的状态信息3.3.算法停车场管理系统将使用以下算法:●车辆进入停车场:将车辆信息加入队列,并更新停车位状态●车辆离开停车场:从队列中删除车辆信息,并更新停车位状态和计算停车费用●查询停车位状态:遍历数组,输出停车位的状态信息●统计停车场使用情况:遍历数组,统计停车位的占用情况4.接口设计4.1.用户界面停车场管理系统将提供以下用户界面:●系统管理员界面:用于设置系统参数和管理用户信息●停车场经理界面:用于进行停车场状态监视和管理●停车员界面:用于处理车辆进入和离开的操作●车主界面:用于查询停车信息和费用5.数据库设计5.1.数据库结构停车场管理系统将包含以下数据库表:●用户表:用于存储用户信息,包括用户名、密码、角色等●车辆表:用于存储车辆信息,包括车牌号、车主姓名等●记录表:用于存储车辆进出停车场的记录,包括车牌号、进出时间、停车位号等5.2.数据库操作停车场管理系统将提供以下数据库操作:●用户登录和注册●车辆信息增删改查●记录查询和统计6.系统测试6.1.单元测试对停车场管理系统的每个模块进行独立测试,确保其功能正常。
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。
数据结构课程设计题目:停车场管理系统姓名:邓全飞学号:201120320105专业:信息和计算科学指导老师:姜俊坡目录一课题分析 (3)二逻辑分析 (3)2.1 数据结构的描述和每个基本操作的功能说明 (3)2.1 给出本程序包含的模块及模块之间的调用关系图 (4)2.3 写出重要部分的伪码算法 (4)三详细设计 (5)3.1 数据结构的定义,及其基本操作的实现 (5)3.2主函数和其他函数的实现或伪码算法 (5)3.3 程序的层次结构的函数调用关系图 (8)3.4 详细设计 (8)四程序源代码 (9)五程序调试和测试 (16)5.1 主界面 (16)5.2 具体操作 (16)5.2.1进站时间和车牌号 (16)5.2.2 车站已满,请进入临时车道 (17)5.2.3 出站和收费 (18)5.2.4 结束 (18)5.3 相关操作 (18)六程序中遇到的问题和解决方法 (19)6.1 写提纲 (19)6.2 在程序调试过程,遇到的相关问题.............. 错误!未定义书签。
七总结.. (20)八参考文献 (21)一课题分析a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)4、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A为到达,D离开,E退出系统;车的编号是整型,输入数字即可;时间是float类型,可精确到分钟c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。
课程设计报告课程名称数据结构课程设计课题名称停车场管理系统专业信息管理与信息系统班级 09级1班学号 ************姓名洪俊斌指导教师赵锦元、李峰、罗敬2011年 1 月 9 日湖南工程学院课程设计任务书课程名称数据结构课题停车场管理系统专业班级信息管理0901班学生姓名洪俊斌学号************指导老师赵锦元、李峰、罗敬审批任务书下达日期2011 年1 月 3 日任务完成日期2011 年1 月20 日一、设计内容与设计要求1.设计内容:[问题描述] 设停车场只是一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出,还有一个等停的的狭长通道。
汽车在停车场内按车辆的先后顺序依次排列,若车站内已停满汽车,则后来的汽车只能在门外的通道上等停,一旦停车场内有车开走,则排在通道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车站为它让路,待该车辆开出大门,为它让路的车辆再按原来次序进入车场。
在这里假设汽车不能从便道上开走,试设计这样一个停车场模拟管理程序。
[基本功能](1)车辆成批入站。
当一个停车场刚开始投入运行的时候,会有很多车进来,因此,要设计一个函数来实现车辆批量进站。
并要检测车辆的数目是否超过规定的最大容量,给出相关提示信息。
(2)单个车辆入站。
当系统正常投入运行后,会有零散的车辆进进出出,因此,设计一个函数实现单个车辆入站。
(3)车站内信息实时显示。
车站内信息包括两个部分:停车场内停放的车辆以及在外面通道上等停的车辆。
(4)车辆出站。
当停车场内车辆出站后,检查通道上是否有车等停,如果有,则要把排在最前面的车调入停车场内。
2.设计要求:1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5).实际操作过程中遇到的问题及解决方法:设计总结及心得体会。
6).上机演示。
二、进度安排第 19 周星期一 8时:00分——11时:30分星期二 8时:00分——11时:30分星期三 14时:00分——17时:30分星期四 14时:00分——17时:30分星期五 8时:00分——11时:30分第 20 周星期一 8时:00分——11时:30分附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的源代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序源代码)。
目录1 系统需求分析 (1)1.1设计思想 (1)1.2实现方法 (1)2 总体设计 (2)2.1总体设计图 (2)2.2模块流程图 (3)2.2.1:车辆成批入站 (3)2.2.2:车站内信息显示 (4)3 详细设计 (5)3.1 采用结构体定义的相关数据类型 (5)3.2 功能函数设计 (6)4 系统测试及其结果 (11)4.1 程序调试中的问题 (11)4.2 结果截图 (13)4.2.1:case1:车辆成批入站 (13)4.2.2:case3:车辆出站 (15)5 心得体会 (16)6 附录 (18)6.1源程序代码 (18)6.2 参考文献 (24)7 评分表 (25)1 系统需求分析1.1设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个循环队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的循环队列的头结点连到原来的第二辆车上就可以了。
这个程序的关键是车辆的进站和出站操作,以及车场和通道之间的相互关系。
由于车站是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用栈这种数据结构来描述。
外面的狭长的通道,先进先出,故可用队列结构来描述。
考虑到车场和通道在整个程序中都要用到。
故把这两个变量定义成全局变量。
本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键项,不能重复,和现实中一样,另外加了车主姓名这一数据项,为表简洁,其他相关信息如入场时间,车的类型,收取费率等,都不再考虑,具体应用的时候可以方便地修改得到。
1.2实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个循环队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此循环队列上的结点而已。
2 总体设计2.1总体设计图图2.1 功能模块图运行程序到系统界面,接着系统界面就会出现让你能选择的功能:【1】车辆成批入站【2】单个车辆入站【3】车辆出站【4】车站内信息实时显示【5】相关功能设定【0】退出本系统2.2模块流程图2.2.1:车辆成批入站图2.2车辆成批入站流程图2.2.2:车站内信息显示图2.3停车场内信息显示流程图3 详细设计3.1 采用结构体定义的相关数据类型前面提到,要用到栈和队列的操作。
这里,由于一个车场的最大容量是一定的,且车场最多执行的操作是插入和删除操作,所以用顺序储存结构可以带来更大益处。
为了防止队列中出现“假溢出”现象,这里采用了循环队列。
在模拟汽车这个对象时,进行了简化处理,只取得最核心的两个数据项:车牌号和车主姓名。
具体数据结构定义如下:首先定义maxsize为20:#define maxsize 20第二个再定义汽车的信息:车牌号num[10]和车主姓名name[10]:typedef struct car{char num[10];char name[10];}Car;第三个定义汽车场的结构,在这里我把它看成是一个栈,在这里定义栈的容量等信息:typedef struct {Car data[maxsize];int n;//栈容量设定int top;}Stack;//顺序栈用来存放汽车场内的车辆信息第四个定义通道的结构,在这里我把它看成是一个循环队列,在这里定义队列胡容量等信息:typedef struct {Car data[maxsize];int n;//队列容量设定int num;//当前通道上的车辆数int front,rear;}Queue;//循环队列用来存放通道内的车辆信息3.2 功能函数设计(1)车辆成批入站void InitCarpark(void)//车辆成批入站此函数也可以作为初始化车场的函数,因为一个车场刚开始投入运行的时候会有很多的车进来,这也是设计此函数最重要的一个原因。
每行输入一个汽车信息,最后结束的时候输入“# #”即可。
汽车信息中前面表示汽车的车牌号,后面表示车主姓名,中间用空格隔开。
当输入汽车的数目超过规定的最大容量的时候(如果开始不设置最大容量,默认值为系统申请的最大值maxsize=20),自动检测条件,给出相关提示信息。
程序如下:void InitCarpark(void)//车辆成批入站{ char num[8],*pnum,name[10],*pname;Car pcar;pnum=num;pname=name;printf("\n\n请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开))(以'# #'这个符号结束):\n");scanf("%s%s",pnum,pname);while(strcmp(pnum,"#")!=0){ strcpy(pcar.num,pnum);strcpy(,pname);if(Push(SCar,pcar)==-1){ printf("\n车站已满!车辆已经入通道!\n");if(InsertQueue(QCar,pcar)==-1)printf("\n通道已满,进入通道失败!!\n");}scanf("%s%s",pnum,pname);}printf("这批汽车已经成功进入停车场\n");getch();carmenu();}(2)单个车辆入站void InsertCar(void)//单个车辆入站当系统正常投入运行后,会有零散的车辆进进出出,如还用成批输入方式的话,将会带来一定的麻烦。
此函数具有函数InitCarpark()几乎所有的功能,程序跟InitCarpark()这个差不多,同样先输入,然后再判断停车场是否满了,通道是否满了,最后执行结果,程序如下:void InsertCar(void)//单个车辆入站{ char num[10],*pnum,name[10],*pname;Car pcar;pnum=num;pname=name;printf("\n\n请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开)):\n");scanf("%s%s",pnum,pname);strcpy(pcar.num,pnum);strcpy(,pname);if(Push(SCar,pcar)==-1){printf("\n车站已满!车辆已经入通道!\n");if(InsertQueue(QCar,pcar)==-1)printf("\n通道已满,进入通道失败!\n");getch();}(3)车辆内信息显示函数void ShowCar(void)//车站内信息显示如果车场本身是空的,没有汽车,那么也就不存在查看汽车信息了。
故本函数一开始进行合理性检查,如果条件不成立,拒绝执行显示信息操作,给出出错的信息后返回到主界面。
前面提到,车站内信息包括两部分:车场内停放的车辆,在外面通道上等停的车辆。
因为通道上也不一定有车,程序输出车场内的所有汽车信息后,自动进行判断通道上是否有车辆。