数据结构课程设计 停车场管理系统
- 格式:doc
- 大小:345.50 KB
- 文档页数:13
数据结构停车场课程设计一、课程目标知识目标: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语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,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)中的要求。
停车场管理专业班级:学号:姓名:指导教师:课程设计时间:计算机专业数据结构课程设计任务书实验题目:停车场管理系统一、要解决的问题停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。
要求:以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。
每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。
对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
二、基本要求(1)界面友好,函数功能要划分好(2)总体设计应画一流程图(3)程序要加必要的注释(4)要提供程序测试方案。
三、算法基本思想描述由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。
由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场,我设计用顺序存储结构来存储停车场内的车辆信息,并给车辆按进栈顺序编号,当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。
这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车。
当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素设计成汽车的车牌号,并以链表的形式存储。
停车场管理系统数据结构课程设计随着城市化进程的不断加快,车辆的数量也不断增加,而停车场资源却十分有限。
如何高效地管理停车场,让车辆能够快速停放和取车,成为了一个亟待解决的问题。
因此,设计一个高效的停车场管理系统就显得尤为重要。
在设计停车场管理系统时,数据结构是不可忽视的一个重要组成部分。
数据结构是指用于组织和存储数据的一种方式,能够让程序高效地访问和操作数据。
在停车场管理系统中,使用合适的数据结构能够提高系统的运行效率和响应速度,从而提升用户体验。
停车场的车位可以使用数组或链表来表示。
数组是一种有序的数据结构,可以快速访问任意一个元素,因此可以用来表示固定数量的车位。
而链表则可以动态地添加和删除元素,适用于表示数量不固定的车位。
对于停车场来说,使用链表更为合适,因为车位的数量是不确定的,需要动态地添加和删除车位。
停车场管理系统需要对车辆进出进行管理,这时可以使用队列来实现。
队列是一种先进先出的数据结构,可以用来管理车辆的进出顺序。
每当一辆车进入停车场时,就将其加入到队列尾部,而每当一辆车出停车场时,就从队列头部取出。
使用队列可以保证车辆按照先后顺序进出停车场,避免了混乱和拥堵。
在停车场管理系统中,需要对车辆的信息进行管理,如车牌号、停车时间、费用等。
这时可以使用哈希表来存储车辆信息。
哈希表是一种根据关键字直接访问内存地址的数据结构,可以快速地访问和修改车辆信息。
将车牌号作为关键字,可以快速地找到对应的车辆信息,方便管理和计费。
为了提高系统的运行效率,可以使用优先队列来管理车位的分配。
优先队列是一种根据优先级排序的队列,可以根据车辆类型、停车时间等因素确定优先级,从而实现车位的高效分配。
使用优先队列可以避免车辆长时间等待无法停放的情况,提高了停车场的利用率。
停车场管理系统的设计离不开合适的数据结构。
使用数组、链表、队列、哈希表和优先队列等数据结构可以提高系统的运行效率和响应速度,从而提升用户体验。
数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为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 <<"停车场内没有车辆。
停车系统数据结构课程设计一、课程目标知识目标:1. 理解并掌握停车系统中的基本数据结构,如数组、链表、栈和队列。
2. 学会运用数据结构解决停车系统中的实际问题,如车位分配、查找空闲车位等。
3. 掌握分析、设计停车系统数据结构的方法,并能够进行简单优化。
技能目标:1. 培养学生运用所学数据结构进行问题分析、设计解决方案的能力。
2. 提高学生编程实现停车系统数据结构及其相关功能的能力。
3. 培养学生通过合作与交流,共同解决复杂问题的团队协作能力。
情感态度价值观目标:1. 培养学生对数据结构在现实应用中的兴趣,激发学习积极性。
2. 培养学生勇于面对问题,积极寻求解决方案的精神。
3. 增强学生的环保意识,认识到智能停车系统在缓解交通压力、节约资源等方面的价值。
课程性质:本课程为高中年级信息技术课程,结合实际应用场景,培养学生运用数据结构解决实际问题的能力。
学生特点:高中学生具备一定的编程基础,对实际问题有一定的分析能力,但可能在数据结构的应用方面经验不足。
教学要求:注重理论知识与实际应用相结合,引导学生通过自主探究、合作学习,达到学以致用的目的。
同时,关注学生的情感态度发展,培养其正确的价值观。
通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 数据结构基本概念:介绍数据结构的基本概念,如线性结构、非线性结构,以及常见的数据结构种类。
相关教材章节:第一章 数据结构概述2. 常见数据结构及应用:- 数组:介绍数组的定义、特点及应用场景,如停车场的车位表示。
- 链表:讲解链表的定义、分类和操作,探讨其在停车系统中的运用,如车辆进出管理。
- 栈和队列:阐述栈和队列的基本概念、操作方法,以及它们在停车系统中的实际应用,如车辆进出顺序控制。
相关教材章节:第二章 数组与链表;第三章 栈和队列3. 停车系统数据结构设计:- 分析停车系统的需求,设计适合的数据结构模型。
- 介绍如何利用数据结构实现停车场的车位分配、查找空闲车位等功能。
停车场管理系统一编程思想:将停车场设计成一个虚拟的栈,将其入口设计成栈顶,在设计一个倒车场,也将其设计成一个虚拟的栈,使其入口为栈顶,再根据队列设计一个供车来停放的便道,当停车场里的车辆不为满时,车辆进入停车场,当停车场里的车辆为满时,车辆在便道里等候,当车辆从停车场里出来的时候,如果出来的不是第一个车辆,则其前面的车辆将进入倒车场里面,待车辆出去后,倒车场里的车再依次进入停车场,如果停车场不满的话,便道里等候的第一辆车进入停车场,进入停车场的时间为停车场中车辆出来的时间,再设计一个函数用来显示停车场以及便道中车辆的信息。
二程序流程图:三,程序代码:#include<stdio.h>#define Size 3 /*车库容量*/#define Price 5 /*单位价格*/#define Null 0typedef struct time{int hour; /*时间结点*/}Time;typedef struct{int car_number;Time arrivetime,leavetime; /*车信息结点*/ int fee;}car_info;typedef struct{car_info *north;car_info *south; /*停车场信息*/int number;}car_park;typedef struct{car_info *west;car_info *east; /*倒车场信息*/int number;}car_park_back;Typedef struct car{car_info *data;struct car *next; /*结点信息*/}carnode;typedef struct node{carnode *head;carnode *rear; /*便道信息*/int number;}car_park_temp;void init_car_park(car_park *cp){cp->north=(car_info *)malloc(Size * sizeof(car_info)); /*初始化停车场*/ if(!cp->north) printf("error\n");cp->south=cp->north; /*令栈顶等于栈底*/cp->number=0;}void enter_car_park(car_park *cp,car_info *car){*cp->south++=*car; /*车辆进入停车场*/cp->number++;}int notfull_car_park(car_park *cp){int e;if(cp->south-cp->north>=Size) /*判断常常是否已满*/e=0;elsee=1;return(e);int notempty_car_park_back(car_park_back *cpb){int e;if(cpb->east==cpb->west)e=0; /*判断倒车场是否不空*/ elsee=1;return(e);}void back_car_park(car_park *cp,car_info *car){*car=*cp->south; /*进行倒车操作*/cp->number--;}void init_car_park_back(car_park_back *cpb){cpb->west=(car_info *)malloc(Size *sizeof(car_info));if(!cpb->west) printf("error\n"); /*倒车场初始化*/cpb->east=cpb->west;cpb->number=0;}void enter_car_park_back(car_park_back *cpb,car_info *car) {*cpb->east++=*car;cpb->number++; /*进入倒车场操作*/}void leave_car_park_back(car_park_back *cpb,car_info *car) {*car=*--cpb->east;cpb->number--; /*离开倒车场操作*/void init_car_park_temp(car_park_temp *cpt){cpt->head=cpt->rear=(carnode *)malloc(sizeof(carnode)); /*初始化便道*/ cpt->head->next=Null;cpt->number=0;}void enter_car_park_temp(car_park_temp *cpt,car_info *car){carnode *p;p=(carnode *)malloc(sizeof(carnode)); /*进入便道操作*/p->data=car;p->next=Null;cpt->rear->next=p;cpt->rear=p;cpt->number++;}void leave_car_park_temp(car_park_temp *cpt,car_info *car,car_park *cp) {carnode *p;p=cpt->head->next;car=p->data; /*离开便道操作*/cpt->head->next=p->next;enter_car_park(cp, car); /*进入停车场操作*/cpt->number--;}int notempty_car_park_temp(car_park_temp *cpt){int e;if(cpt->head==cpt->rear) /*判断便道是否为空*/e=0;elsee=1;return(e);}void leave_car_park(car_park *cp,car_info *car,car_park_back *cpb){int e, a1,b1,t; /*定义时间变量*/car_info *car1,*car2;car1=(car_info *)malloc(sizeof(car_info)); /*车辆实体化*/car2=(car_info *)malloc(sizeof(car_info));while((--cp->south)->car_number!=car->car_number) /*判断车号是否为要出去的车号*/ {back_car_park(cp,car1); /*进行倒车操作*/enter_car_park_back(cpb,car1); /*进入倒车场*/}car->arrivetime.hour=cp->south->arrivetime.hour;a1=car->arrivetime.hour;b1=car->leavetime.hour;t=(b1-a1);car->fee=t*Price; /*计算价格*/printf("the time of the car is %3d hour\n",t);printf("the money is %3d yuan\n",car->fee);e=notempty_car_park_back(cpb); /*判断倒车场是否为空*/while(e==1){leave_car_park_back(cpb,car2); /*离开倒车场enter_car_park(cp,car2); 进入停车场e=notempty_car_park_back(cpb); 判断倒车场是否为空*/}cp->number--;}void main() /*主函数*/{char ch; /*定义字符和int e,n,i; 整形变量*/car_park_back *cpb; /* 定义停车场,倒车场以及便道的变量*/ car_park *cp;car_park_temp *cpt,*cpt2;car_info *car;cp=(car_park *)malloc(sizeof(car_park)); /*实体化变量*/cpb=(car_park_back *)malloc(sizeof(car_park));cpt=(car_park_temp *)malloc(sizeof(car_park_temp));init_car_park(cp); /*实体化停车场,倒车场,便道*/init_car_park_back(cpb);init_car_park_temp(cpt);do{car=(car_info *)malloc(sizeof(car_info));printf("\ninput the 'A' or 'L' or 'X' ,end with '0' :");/*输入待操作的命令*/ scanf("%s",&ch);e=notfull_car_park(cp); /*判断车场是否为空*/switch(ch) /*判断要输入的命令*/{case 'A':if(e==1) /*车场不满,进入车辆*/{printf("input the car_number:"); /*输入车辆的基本信息*/scanf("%d",&car->car_number);printf("input the arrivetime:");scanf("%d",&(*car).arrivetime.hour);enter_car_park(cp,car); /*进入车场*/printf("the car is in the car_park,the place is %d\n",cp->number);}else /*若车场满,进入便道*/{enter_car_park_temp(cpt,car);printf("input the car_number:");scanf("%d",&car->car_number);printf("the car is in the car_park_temp,the place of temp is %d\n",cpt->number);}break;case 'L': /*离开停车场*/printf("input the car_number:"); /*输入要离开车辆的号码以及离开时间*/scanf("%d",&car->car_number);printf("input the leavetime of the car:");scanf("%d",&(*car).leavetime.hour);leave_car_park(cp,car,cpb); /*执行离开车场*/i=(*car).leavetime.hour; /*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/n=notempty_car_park_temp(cpt); /*判断便道是否不空*/if(n==1)printf("The car %d",cpt->head->next->data->car_number); /*记住便道里第一辆车的号码*/ leave_car_park_temp(cpt,car,cp); /*离开便道,进入停车场*/printf(" is enter the car_park,arrivetime is %d ,the place of carpark is %d\n",i,cp->number);break;case 'X': /*查看车场以及便道里的车辆信息*/printf("\nThere are %d cars in car park!\nFolowing is the carnumber in the car park:\n ",cp->number);for(i=1;i<=cp->number;i++) /*做循环,依次输出停车场里车辆的信息*/printf("%d,",(cp->north++)->car_number);cp->north=cp->north-cp->number;cpt2->head=cpt->head; /*设一个虚拟指针使其指向头结点的下一个位置*/ if(cpt->number==0) /*便道里没有车的情况*/printf("\nThere is no cars in temp!") ;else{ printf("\nThere are %d cars in car temp!\nFolowing is the carnumber in the car temp:\n ",cpt->number);for(i=1;i<=cpt->number;i++) /*做一个循环,输出便道里车辆的信息*/ {printf("%d ",cpt2->head->next->data->car_number); /* 输出车辆的号码*/ cpt2->head=cpt2->head->next;}}break;default:break; /*退出循环*/}}while(ch!='0'); /*退出操作*/}。
数据结构课程设计《停车场管理系统》⽬录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1抽象数据类型定义 (1)3.2模块划分 (3)4 详细设计 (5)4.1数据类型的定义 (5)4.2主要模块的算法描述 (6)5 测试分析 (11)6 课程设计总结 (14)参考⽂献 (14)附录(源程序清单) (15)1 问题描述设停车场是⼀个可停放n辆汽车的狭长通道,且只有⼀个门可供出⼊。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(门在最南端,最先到达的第⼀辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,⼀旦有车开⾛,则排在便道上的第⼀辆汽车即可开⼊;当停车场内某辆车要离开时,在它之后进⼊的车辆必须先退出车场为它让路,待该辆车开出⼤门外,其他车辆再按原顺序进⼊车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费⽤。
2需求分析(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进⾏计时收费。
(2)当有车辆从停车场离开时,等待的车辆按顺序进⼊停车场停放。
实现停车场的调度功能。
(3)⽤顺序栈来表⽰停车场,链队表⽰停车场外的便道。
(4)显⽰停车场信息和便道信息。
(5)程序执⾏的命令为:○1车辆进⼊停车场○2车辆离开停车场○3显⽰停车场的信息。
3概要设计3.1抽象数据类型定义(1)栈的抽象数据类型定义AST Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,...,n, n≥0}数据关系:R1={|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:InitStack(&S)DestroyStack(&S)初始条件:栈S已存在。
操作结果:栈S被销毁。
ClearStack(&S)初始条件:栈S已存在。
操作结果:将栈S清为空栈。
StackEmpty(S)初始条件:栈S已存在。
课程设计:停车场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("欢迎来到停车场!我是管理员小王。
试验二停车场管理班级: A0712学号: 12 姓名: 冷清淼成绩: __________指导教师签名: __________一、问题描述设停车场是一种可停放n辆车旳狭长通道, 且只有一种大门可供汽车进出。
在停车场内, 汽车按抵达旳先后次序, 由北向南依次排列(假设大门在最南端)。
若停车场内已停满n辆车, 则后来旳汽车需在门外旳便道上等待, 当有车开走时, 便道上旳第一辆车即可开入。
当停车场内某辆车要离开时, 在它之后进入旳车辆必须先退出停车场为它让路, 待该辆车开出大门后, 其他车辆再按原次序返回车场。
每辆车离开停车场时, 应按其停留时间旳长短交费(在便道上停留旳时间不收费)。
设计规定:1. 模拟上述管理过程。
规定以次序栈模拟停车场, 以链队列模拟便道。
2.从终端读入汽车抵达或拜别旳数据, 每组数据包括三项:(1)是“抵达”还是“离开”;(2)汽车牌照号码;(3)“抵达”或“离开”旳时刻。
3. 与每组输入信息对应旳输出信息为: 假如是抵达旳车辆, 则输出其在停车场中或便道上旳位置;假如是拜别旳车辆, 则输出其在停车场中停留旳时间和应交旳费用。
二、算法阐明1. 数据构造阐明(1)用到两个堆栈: 一种为车场栈;另一种为临时栈temptypedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车场*/一种队列构造, 存储便道车辆信息:typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟便道*/2. 算法阐明(1) 功能模块阐明:停车场管理系统具有三个模块, 即:车辆抵达、离开、列表显示图1(2)以模块为单位分析算法1.“抵达”模块: 抵达时有两种状况, 即车场与否满, 未满则直接进入停车场;满时, 到便道等待。
如图2。
图22.“离开”模块:离开时, 当车库为空时, 提醒没有车, 结束;否则车辆离开。
实验二停车场管理班级:A0712 学号:12 姓名:冷清淼成绩:__________指导教师签名:__________一、问题描述设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。
在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。
若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。
每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。
设计要求:1.模拟上述管理过程。
要求以顺序栈模拟停车场,以链队列模拟便道。
2.从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离开”;(2)汽车牌照号码;(3)“到达”或“离开”的时刻。
3.与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
二、算法说明1.数据结构说明(1)用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车场*/(2)一个队列结构,存储便道车辆信息:typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟便道*/2.算法说明(1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示图1(2)以模块为单位分析算法1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。
如图2。
图22.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。
如图3。
图33. “显示”模块:显示模块有两个显示选项,即:车场与便道。
如图4。
图4三、测试结果(一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性)1.第一组测试用例(1)测试输入:停车场的车辆离开,如下表:服务选择车牌号/车位到达/离开时间1 QH058 15:251 AB123 18:451 EA642 23:152 2 0:302 1 0:65(错误)(2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。
(3)正确输出:第一次离开的是AB123,应交费3.45元。
第二次时,当在输入65时,应该提示输入错误,重输。
(4)实际输出:(5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。
(6)当前状态:已改正2.第二组测试用例(1)测试输入:连续6辆车到达,如下表:服务选择车牌号到达时间1 A8828 7:561 S2296 8:251 WW666 8:451 HK456 15:501 GH999 12:301 DD555 13:40(2)测试目的:测试到达方法与列表显示方法能否正确完成。
(3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。
(4)实际输出:(5)错误原因:没有作出时间先后的判断,而是先输入先进入。
(6)当前状态:待修改3.第三组测试用例(1)测试输入:接上一步输入离开信息,下表:服务选择离开车位离开时间便道车进入时间2 3 13:30 13:40(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。
(3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。
(4)实际输出:(5)错误原因:没有错误。
(6)当前状态:通过(二)测试结果分析此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,以及结算清单明了。
尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就可以避免了。
但在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。
若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。
会慢慢完善。
附录:源代码///系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。
//在此系统中,车库容量设置为5,便于测试。
在实际使用中可以对容量大小按实际情况设置。
#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 5 /*车库容量,可以根据实际情况改变*/#define price 0.01 /*一辆车每分钟费用,可变*/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; /*模拟便道*//*方法声明*/void InitStack(SeqStackCar *); /*初始化栈*/int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/void List(SeqStackCar,LinkQueueCar); /*显示信息*/void PRINT(CarNode *p,int room); /*输出离开车辆的信息清单*/void main(){system("color F2"); /*设置系统颜色,本系统为白底绿字f2*/SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化车站*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/while(1){cout<<" ※※※※@欢迎使用本停车管理系统@ ※※※※"<<endl;cout<<"********************************************************"<<endl;cout<<" ※--※ 1. 车辆到达※-- ※"<<endl;cout<<" ※--※ 2. 车辆离开※-- ※"<<endl;cout<<" ※--※ 3. 列表显示※-- ※"<<endl;cout<<" ※--※ 4. 退出系统※-- ※"<<endl;cout<<"********************************************************"<<endl;cout<<"!说明:请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”,再输入“分”。
不要为非数字!"<<endl;cout<<"请选择所需要的服务! (1-4)."<<endl;while(1){cin>>ch;if(ch>=1&&ch<=4)break;else cout<<"输入错误!请选择:(1-4)."<<endl;}switch(ch){case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/case 3:List(Enter,Wait);break; /*列表显示信息*/case 4:exit(0); /*退出主程序*/default: break;}}}void InitStack(SeqStackCar *s) /*初始化栈*/{int i;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;}int InitQueue(LinkQueueCar *Q) /*初始化便道*/{Q->head=(QueueNode *)malloc(sizeof(QueueNode));if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;return(1);}else return(-1);}int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/{CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();cout<<"请输入车牌号(例:A1234):"<<endl;gets(p->num);if(Enter->top<MAX) /*车场未满,车进车场*/{Enter->top++;cout<<"车辆在车场第"<<Enter->top <<"位置!"<<endl;cout<<"请输入到达时间:(小时:分钟)"<<endl;cin>>p->reach.hour;while(p->reach.hour<0||p->reach.hour>23) //控制时间格式正确{cout<<"输入错误!"<<endl;cout<<"请重输入到达时间的时(0-23)!"<<endl;cin>>p->reach.hour;}cin>>p->reach.min;while(p->reach.min<0||p->reach.min>59) //控制分钟输入正确{cout<<"输入错误!"<<endl;cout<<"请重输入到达时间的分(0-59)!"<<endl;cin>>p->reach.min;}Enter->stack[Enter->top]=p;return(1);}else /*车场已满,车进便道*/{cout<<"车场已满,请在便道等待!"<<endl;t=(QueueNode *)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ {int room;CarNode *p;QueueNode *q;/*判断车场内是否有车*/if(Enter->top>0) /*有车*/{while(1) /*输入离开车辆的信息*/{cout<<"请输入车在车场的位置1--"<<Enter->top<<":";cin>>room;if(room>=1&&room<=Enter->top) break;}while(Enter->top>room) /*车辆离开*/{Temp->top++; /*临时通道栈顶指针*/Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1) /*判断临时通道上是否有车*/{Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p,room);if((W->head!=W->rear)&&Enter->top<MAX) /*车站是未满*/{ /*便道的车辆进入车场*/q=W->head->next;p=q->data; /*p指向链队头*/Enter->top++;cout<<"便道的"<<p->num<<"号车进入车场第"<<Enter->top<<"位置!"<<endl;cout<<"请输入现在的时间如(小时:分钟):"<<endl;cin>>p->reach.hour;if(p->reach.hour<0||p->reach.hour>23){cout<<"输入错误!"<<endl;cout<<"请重输入到达时间的时(0-23)!"<<endl;cin>>p->reach.hour;}cin>>p->reach.min;if(p->reach.min<0||p->reach.min>59){cout<<"输入错误!"<<endl;cout<<"请重输入到达时间的分(0-59)!"<<endl;cin>>p->reach.min;}Enter->stack[Enter->top]=p;W->head->next=q->next;if(q==W->rear) W->rear=W->head;free(q); /*释放q地址*/}else cout<<"便道里没有车!"<<endl; /*便道没车*/}else cout<<"车场里没有车!"<<endl; /*车场没车*/}void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/{int A1,A2,B1,B2;cout<<"请输入离开的时间:(小时:分钟)"<<endl;cin>>p->leave.hour;while(p->leave.hour<0||p->leave.hour>23){cout<<"输入错误!"<<endl;cout<<"请重输入离开的时间的时(0-23)"<<endl;cin>>p->leave.hour;B1=p->leave.hour;}cin>>p->leave.min;if(p->leave.min<0||p->leave.min>59){cout<<"输入错误!"<<endl;cout<<"请重输入到达时间的分(0-59)!"<<endl;cin>>p->leave.min;}cout<<endl<<"离开车辆的车牌号为:"<<endl;puts(p->num);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;cout<<"应交费用为: "<<(((B1-A1)*60+(B2-A2))+1440)%1440*price<<"元!"<<endl;free(p);}void List1(SeqStackCar *S) /*列表显示车场信息*/{cout<<"您选择的是车场停车情况!"<<endl;int i;if(S->top>0) /*判断车站内是否有车*/{cout<<" 位置到达时间车牌号"<<endl;for(i=1;i<=S->top;i++){cout<<" "<<i<<" "<<S->stack[i]->reach.hour<<":"<<S->stack[i]->reach.min<<" "<<S->stack[i]->num<<endl;}}else cout<<"车场里没有车!"<<endl;}void List2(LinkQueueCar *W) /*列表显示便道信息*/{cout<<"您选择的是便道停车情况!"<<endl;int j=1;QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判断通道上是否有车*/{cout<<"等待车辆的车牌号码为:"<<endl;while(p!=NULL){//cout<<j;//puts(p->data->num);cout<<j<<" "<<p->data->num<<endl;p=p->next;j++;} //开始时显示不正确,没有按照正常输出}else cout<<"便道里没有车!";}void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/ {int flag,tag;flag=1;while(flag) /*列表显示循环控制*/{cout<<"请选择您要显示信息! (1-3):"<<endl;cout<<"※--1.车场--※"<<endl;cout<<"※--2.便道--※"<<endl;cout<<"※--3.返回--※"<<endl;while(1){cin>>tag;if(tag>=1||tag<=3) break;else cout<<"输入错误!请选择(1-3):"<<endl;}switch(tag){case 1:List1(&S);break; /*列表显示车场信息*/case 2:List2(&W);break; /*列表显示便道信息*/case 3:flag=0;break;default: break;}}}。