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

数据结构停车场课程设计一、课程目标知识目标:1. 理解数据结构中图和树的概念,掌握它们在解决实际问题中的应用。
2. 学习并掌握停车场系统的逻辑结构,能运用所学数据结构设计停车场的模拟系统。
3. 了解不同数据结构在处理停车场问题时的效率差异,能够分析其时间复杂度和空间复杂度。
技能目标:4. 能够运用所学知识,设计并实现一个简单停车场的管理系统,包括车辆入场、出场、查找空车位等基本功能。
5. 通过课程设计活动,提升学生利用数据结构解决实际问题的编程能力,加强代码的逻辑性和可读性。
6. 培养学生将理论知识应用于实际问题的能力,通过团队协作完成课程设计任务。
情感态度价值观目标:7. 激发学生对计算机科学和数据结构的兴趣,增强其对复杂问题探究的积极态度。
8. 培养学生的团队协作精神,学会在团队中分工合作、共同解决问题。
9. 增强学生的创新意识,鼓励学生大胆尝试不同的解决方案,体会科技创新对现实生活的影响。
课程性质分析:本课程设计属于高中信息技术或计算机科学课程,以实践性和应用性为主,旨在通过实际问题的解决,加深学生对数据结构知识的理解和运用。
学生特点分析:高中生具有一定的数据结构基础和编程能力,思维活跃,对实际问题具有较强的探究欲望,但需要进一步引导他们将理论知识与实际问题相结合。
教学要求:教师应引导学生将所学知识综合运用到停车场系统设计中,注重理论与实践相结合,鼓励学生创新思维和团队合作,通过具体的学习成果来衡量学生掌握情况。
二、教学内容1. 数据结构基本概念复习:回顾图和树的基本概念,包括相关术语、性质及常用算法。
教材章节:第五章“图”,第六章“树”2. 停车场系统需求分析:介绍停车场系统的基本功能,如车辆入场、出场、查找空车位等。
教材章节:项目实战部分3. 数据结构选择与应用:探讨不同数据结构在停车场系统中的应用,如邻接表、邻接矩阵、二叉树等。
教材章节:第五章、第六章应用实例4. 停车场系统设计:详细讲解如何利用数据结构设计停车场系统,包括数据模型、算法实现等。
数据结构课程设计——停车场

数据结构课程设计——停车场在当今社会,随着汽车数量的不断增加,停车场的管理变得日益重要。
一个高效、合理的停车场管理系统不仅能够提高停车场的使用效率,还能为车主提供更好的服务体验。
在本次数据结构课程设计中,我们将深入探讨如何设计一个实用的停车场管理系统。
一、需求分析首先,我们需要明确停车场管理系统的基本需求。
一般来说,它应该具备以下功能: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); }。
数据结构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。
数据结构 课程设计 停车场管理系统

《数据结构》课程设计报告设计报告题目:停车场管理问题学院:信息科学与工程学院《数据结构》课程设计报告书1.1 课程设计选题的目的为大家解决一些生活中的实际问题,在这个过程中,自我设计的能力也在不断地提高。
此次程序设计综合运用所学数据额结构以及C语言的知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,使我们更理解了C语言及数据结构的功能之强大,进一步让学生对面向对象的方法以及数据结构的编程思想有了较好了解和认识。
1.通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2.通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计出合理的模块化结构。
3.通过课程设计,提高程序开发功能,培养分析问题、解决实际问题的能力,能运用合理的控制流程编写清晰高效的程序。
1.2 课程设计选题的内容[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
[实现要求]要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
一.需求分析以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包含三个数据项:汽车“到达”或“离去”信息,汽车牌照号码以及汽车到达或离去的时刻。
数据结构课程设计停车场管理系统

数据结构课程设计停车场管理系统停车场管理系统设计文档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.单元测试对停车场管理系统的每个模块进行独立测试,确保其功能正常。
数据结构课程设计_停车场管理系统方案

课题分析 (2)二逻辑分析 (2)2.1数据结构的描述和每个基本操作的功能说明 (2)2.1给出本程序包含的模块及模块之间的调用关系图 (3)2.3写出重要部分的伪码算法 (3)三详细设计3.1数据结构的定义,及其基本操作的实现 (4)3.2主函数和其他函数的实现或伪码算法 (5)3.3程序的层次结构的函数调用关系图 (7)3.4详细设计 (7)四程序源代码 (8)五程序调试与测试 (16)5.1主界面 (16)5.2具体操作 (17)5.2.1进站时间与车牌号 (17)5.2.2车站已满,请进入临时车道 (18)5.2.3 出站与收费 (19)5.2.4 结束 (19)5.3相关操作 (19)六程序中遇到的问题与解决方法 (20)6.1写提纲 (20)6.2在程序调试过程,遇到的相关问题 (20)七总结 (24)八参考文献25课题分析a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1 、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理2 、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照及到达或离去的时间3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是离去,则输出汽车在停车场停留的时间和应缴纳的费用(在便道上停留的时间不收费)4 、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A为到达,D离开,E退出系统;车的编号是整型,输入数字即可;时间是float类型,可精确到分钟c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。
d)测试数据,(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 以及a)中的要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一课题分析 (3)二逻辑分析 (4)2.1 数据结构的描述和每个基本操作的功能说明 (4)2.1 给出本程序包含的模块及模块之间的调用关系图 (5)2.3 写出重要部分的伪码算法 (5)三详细设计 (6)3.1 数据结构的定义,及其基本操作的实现 (6)3.2主函数和其他函数的实现或伪码算法 (8)3.3 程序的层次结构的函数调用关系图 (12)3.4 详细设计 (12)四程序源代码 (13)五程序调试与测试 (28)5.1 主界面 (28)5.2 具体操作 (29)5.2.1进站时间与车牌号 (29)5.2.2 车站已满,请进入临时车道 (30)5.2.3 出站与收费 (31)5.2.4 结束 (31)5.3 相关操作 (31)六程序中遇到的问题与解决方法 (32)6.1 写提纲 (32)6.2 在程序调试过程,遇到的相关问题 (32)七总结 (39)八参考文献 (40)一课题分析a)该程序主要利用栈和队列来实现车的到达及其离开功能,其中主要有对各种情况的处理,要求如下:1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)4、要求栈以顺序结构实现;b)程序的输入,程序功能选择,字符型,A为到达,D离开,E退出系统;车的编号是整型,输入数字即可;时间是float类型,可精确到分钟c)程序的输出,当车到达,程序输出车的编号及到达时间,若栈满则提示停到便道上;车离开时,输出车的编号及其所需费用。
d)测试数据,(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以及a)中的要求。
其中‘A’表示到达,D表示离开,E表示结束。
二逻辑分析2.1 数据结构的描述和每个基本操作的功能说明ADT stack{数据对象:D={a i | a i∈CharSet,i=1,2,…,n,n≥0}数据关系:R1={<a i-1,a i>| a i-1, a i∈D,i=2,…,n}基本操作:initstack()操作结果:构造一个空栈,并返回地址。
gettop(&S)初使条件:栈S已存在。
操作结果:栈S不为空,输出顶元素。
stop(&S,e)初始条件:栈S已存在。
操作结果:要栈S中栈顶插入新的栈顶元素e。
ADT queue{数据对象:D={a i | a i∈ElemSet,i=1,2,…,n,n≥0}数据关系:R1={<a i-1,a i>| a i-1, a i∈D,i=2,…,n}约定其中a i端为队列的头,a n端为队列的尾}initqueue(&Q)操作结果:构造一个空栈,并返回地址。
gethead(&S)初使条件:栈S已存在。
操作结果:栈S不为空,输出顶元素。
enqueue(&S,e)初始条件:栈S已存在。
操作结果:要栈S中栈顶插入新的栈顶元素e2.1 给出本程序包含的模块及模块之间的调用关系图本程序包含三个模块:1)主程序模块:Void main(){初始化;do{接受命令;处理命令;}while(命令!=“退出”)}2)栈模块——实现栈抽象数据类型3)队列模块——实现队列抽象数据类型2.3 写出重要部分的伪码算法车辆到达或者离开的伪码算法:do{输出菜单选项;如果选择A,即车辆到达,则{若栈不满,车辆进栈,停到停车场;否则,车入队,车停在便道上;}如果选择D,即车辆离开,则{ 如果队不空并且栈不满,被选的车辆离开,队列上的车出队入栈;被选的车辆离开;计算时间及其所需费用;}如果选择E,退出程序;}while(输入的菜单选项不正确)三详细设计3.1 数据结构的定义,及其基本操作的实现typedef struct time{int hour;int min;}Time;typedef struct//车信息{char label[10];float time;}Car,Car2;typedef struct//车库信息{Car *top;Car *base;int stacksize;}SqStack;typedef struct//临时车道{Car2 *top2;Car2 *base2;int stacksize2;}SqStack2;typedef struct QNode//车道信息{Car data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;}LinkQueue;3.2主函数和其他函数的实现或伪码算法void main(){SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);//初始化while(ch==1){do{printf("\n\t\t\t\tA-车辆到达\n\t\t\t\tD-车辆离开\n\t\t\t\tE-退出\n\t\t\t\tA/D/E ?\b");scanf("%c",&status);getchar();}while(status!='A'&&status!='a'&&status!='D'&&status!='d'&&status!='E'&&st atus!='e');if(status=='A'||status=='a')//当车到达{输入车号;输入车到达时间;if(!StackFull(S))//栈不满{车入栈;printf("\n\t\t\t\t继续请输入1\n\t\t\t\t放弃请输入0 ?\b");scanf("%d",&ch);getchar();}//ifelse{车入队;printf("\n\t\t\t\t继续请输入1\n\t\t\t\t放弃请输入0 ?\b");scanf("%d",&ch);getchar();}//else}//if当车到达else if(status=='D'||status=='d')/*当车离开*/ {do{输入车号;输入车离开时间;do{Pop(&S,&car_M);if(car_bel!=car_bel)Push2(&S2,car_M);elsecar_I.time=car_M.time;}while(car_bel!=car_bel);position_s--;while(!StackEmpty2(S2))//栈2不空{Pop2(&S2,&car_M);Push(&S,car_M);}//whilewhile(!QueueEmpty(Q)&&!StackFull(S)){if(!StackFull(S)){栈不满的话,临时车道上的车进栈}//if}//whiletime=car_D.time-car_I.time;if(time<0.00){printf("\n\t\t\t\tSorry!You input a wrong time !\n\t\t\t\tPlease check and type again.\n");}//ifelse{计算停车时间;计算所需费用;}//elseprintf("\n\t\t\t\tWelcome to back ! Do you want to continue \n\t\t\t\t1-contine/0-quit ?\b");scanf("%d",&ch);getchar();}while(!mistime);}//else ifelse exit(0);//退出程序}//第一个while}//main3.3 程序的层次结构的函数调用关系图3.4 详细设计根据老师的要求,在这里我主要分析程序设计中停车场管理系统的进站模块:该模块涉及多个函数,过程依次有初始化,选择进站输入A,车牌号,时间。
若站满,则车进入临时车道,分别记录时间和车牌号以及临时车道上的位置,站不满时临时车道上的车进站。
该程序流程图如下:车进站流程图四程序源代码#include "stdio.h" #include "stdlib.h" #include "string.h"#define NULL 0#define ERROR 0#define OK 1#define OVERFLOW -1#define STACK_INIT_SIZE 2//车库容量typedef struct time{int hour;int min;}Time; //时间结点typedef struct//车信息{char label[10];float time;}Car,Car2;typedef struct//车库信息{Car *top;Car *base;int stacksize;}SqStack;int InitStack(SqStack *S)//栈的初始化{S->base=(Car *)malloc(STACK_INIT_SIZE*sizeof(Car)); if(!(S->base)) return ERROR;S->top=S->base;S->stacksize=STACK_INIT_SIZE;return OK;}int StackEmpty(SqStack S)//栈空{if(S.top==S.base)return OK;elsereturn ERROR;}int StackFull(SqStack S)//栈满{if(S.top-S.base>=STACK_INIT_SIZE)return OK;elsereturn ERROR;int Push(SqStack *S,Car e)//入栈{if(S->top-S->base>=STACK_INIT_SIZE)return OVERFLOW;else {*(S->top++)=e;return OK;}//else}int Pop(SqStack *S,Car *e)//出栈{if(S->top==S->base)return ERROR;else *e=*(--(S->top));return OK;}int GetTop(SqStack *S,Car *e)//返回栈顶元素{if(S->top==S->base) return ERROR;else *e=*(S->top-1);return OK;typedef struct//临时车道{Car2 *top2;Car2 *base2;int stacksize2;}SqStack2;int InitStack2(SqStack2 *S2){S2->base2=(Car2 *)malloc(STACK_INIT_SIZE*sizeof(Car2)); if(!(S2->top2)) return ERROR;S2->top2=S2->base2;S2->stacksize2=STACK_INIT_SIZE;return OK;}int Push2(SqStack2 *S2,Car2 e2){if(S2->top2-S2->base2>=STACK_INIT_SIZE)return OVERFLOW;*(S2->top2++)=e2;return OK;int Pop2(SqStack2 *S2,Car2 *e2) {if(S2->top2==S2->base2)exit(OVERFLOW);*e2=*(--(S2->top2));return OK;}int StackEmpty2(SqStack2 S2){if(S2.top2==S2.base2)return OK;elsereturn ERROR;}typedef struct QNode//车道信息{Car data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;}LinkQueue;int InitQueue(LinkQueue *Q)//初始化队列{Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)); if(!(Q->front)) return ERROR;Q->front->next=NULL;return OK;}int EnQueue(LinkQueue *Q,Car e)//插入元素{QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));if(!p) return ERROR;p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;return OK;}int QueueEmpty(LinkQueue Q)//队空{if(Q.front==Q.rear)return OK;elsereturn ERROR;}int DeQueue(LinkQueue *Q,Car *e){QueuePtr p;if(Q->front==Q->rear) return ERROR; p=Q->front->next;*e=p->data;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);return OK;}void main(){int i,position_s=1,position_q=1,mistime=1;int ch=1;char status;float time,money;LinkQueue Q;Car car_I,car_D,car_M,car_S;SqStack S;SqStack2 S2;InitStack(&S);InitStack2(&S2);InitQueue(&Q);for(i=0;i<80;i++)printf("*");printf("\n\t\t\t\t停车场管理系统");printf("\n\n\n\t\t\t09计算机科学与技术学院刘婷200917020117\n"); printf("\n\t\t\t\t停车场\t\t");printf("\n");printf("\t\t\t\t相关信息:\n");printf("\t\t\t\t请输入字符(A D E)进行相关操作");printf("\n");while(ch==1){do{printf("\n\t\t\t\tA.车辆到达\n\t\t\t\tD.车辆离开\n\t\t\t\tE.退出\n\t\t\t\tA/D/E ?\b");scanf("%c",&status);getchar();}while(status!='A'&&status!='a'&&status!='D'&&status!='d'&&status!='E'&&st atus!='e');if(status=='A'||status=='a'){printf("\n\t\t\t\t请输入车牌号:");gets(car_bel);//scanf("%d",&(car_bel));printf("\n\t\t\t\t请输入车辆到达时间: ?\b");scanf("%f",&(car_I.time));if(!StackFull(S))//栈不满{Push(&S,car_I);printf("\n\n");for(i=0;i<80;i++) printf("-");printf("\n");printf("\t\t\t\t输出车牌号:");printf(" %s\n",car_bel);printf("\n\t\t\t\t请输出车辆到达时间:");printf(" %5.2f",car_I.time);printf("\n\n");for(i=0;i<80;i++) printf("-");printf("\n\n");printf("\n\t\t\t\t欢迎您来我们车站!\n\n\t\t\t\t您的车位号是: %d",position_s);position_s++;printf("\n");printf("\t\t\t\t继续请输入1\n\t\t\t\t放弃请输入0 ?\b");scanf("%d",&ch);getchar();}//ifelse{EnQueue(&Q,car_I);printf("\t\t\t\tWelcome to our CAR POSITION ,We are sorrythat\n\n\t\t\t\tOur position is full,but you are free to place \\n\n\t\t\t\tyour car on our road.The position of yourcar\n\t\t\t\tis %d",position_q);position_q++;printf("\n\t\t\t\t进站请输入1\n\t\t\t\t放弃请输入0 ?\b");scanf("%d",&ch);getchar();}//else}//if当车到达else if(status=='D'||status=='d')/*当车离开*/{do{for(i=0;i<80;i++)printf("*");printf("\n");printf("\t\t\t\tCAR POSITION");printf("\n\t\t\t\t");printf("Information");printf("\n\n");printf("\t\t\t\tYour are going to drive your car away ,\n\t\t\t\tPleasefill of the form !\n");printf("\t\t\t\tYour car Number :");scanf("%d",&car_bel);printf("\n\t\t\t\tTime : ?\b");scanf("%f",&(car_D.time));do{Pop(&S,&car_M);if(car_bel!=car_bel)Push2(&S2,car_M);elsecar_I.time=car_M.time;}while(car_bel!=car_bel); position_s--;while(!StackEmpty2(S2))//栈2不空{Pop2(&S2,&car_M);Push(&S,car_M);}//whilewhile(!QueueEmpty(Q)&&!StackFull(S)) {if(!StackFull(S)){//栈不满的话,临时车道上的车进栈DeQueue(&Q,&car_S);position_q--;car_S.time=car_D.time;Push(&S,car_S);printf("\n\t\t\t\tThe car %d just drivedaway ,\n\n\t\t\t\tthe car %d has entered the CARPOSITION .\n",car_bel,car_bel);}//if}//whiletime=car_D.time-car_I.time;if(time<0.00){printf("\n\t\t\t\tSorry!You input a wrong time !Please check and type again.\n");;}//ifelse{mistime=1;money=time*2;printf("\n\n");for(i=0;i<80;i++)printf("-");printf("\n\t");printf("\t\t\tYour car number %d :\n\t\t\t\tThe feeis :%5.2f",car_bel,money);printf("\n\n");for(i=0;i<80;i++) printf("-");printf("\n\n");}//elseprintf("\t\t\t\tWelcome to back ! Do you want tocontinue\n\t\t\t\t 1-contine/0-quit ?\b");scanf("%d",&ch);getchar();}while(!mistime);}//else ifelse exit(0);//退出程序}//第一个while}//main五程序调试与测试5.1 主界面5.2 具体操作5.2.1进站时间与车牌号5.2.2 车站已满,请进入临时车道5.2.3 出站与收费5.2.4 结束5.3 相关操作1、输入(A,1,5)时,显示是CAR NUMBER :1 ARRIVE TIME:5.002、入(A,2,10)时,显示CAR NUMBER :2 ARRIVE TIME:10.003、入(D,1,15)时,显示Your car number:1 The fee is:20.004、入(A,3,20)时,显示CAR NUMBER :3 ARRIVE TIME:20.005、输入(A,4,25)时,显示Welcome to our CAR POSITION ,We are sorry that Our position is full, but you are free to place your car on our road The position of your car is16、入(A,5,30)时,显示Welcome to our CAR POSITION ,We are sorry that Our position is full, but you are free to place your car on our road The position of your car is27、入(D,2,35)时,显示Your car number:2 The fee is:50.008、入(D,4,40)时,显示The car 4 just drived away , the car 5 has entered the CAR POSITION . Your car number:4 The fee is:10.009、入E时,程序结束,显示Press any key to continue。