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

合集下载

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

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

//系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。

//在此系统中,车库容量设置为3,便于测试。

在实际使用中可以对容量大小按实际情况设置。

#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 3 //停车场最大容量为3辆,便于观察#define price 0.02//定义时间结构体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 PRINT(CarNode *p,int room);//车辆收费void List1(SeqStackCar *S);//显示车场里的车辆情况void List2(LinkQueueCar *W);//显示便道上的车辆情况void List(SeqStackCar,LinkQueueCar);//显示信息//void savecar(CarNode *);//保存车辆信息//自定义函数/*void savecar(CarNode *p1)//保存车辆信息{FILE *fp1;if((fp1=fopen("car1.txt","w"))==NULL){printf("\n\t◆不能保存车辆信息◆\n");return;}while(p1){fwrite(p1,sizeof(struct node),1,fp1);p1=p1->next;}}*///栈的初始化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);}elsereturn(-1);}//车辆收费void PRINT(CarNode *p,int room){int A1,A2,B1,B2;printf("\n■请输入车辆离开的时间:(小时:分钟)");scanf("%d:%d",&(p->leave.hour),&(p->leave.min));while(p->leave.hour<0||p->leave.hour>23){printf("◆您的输入有误!");printf("■请重新输入离开时间的'时'(0-23):");scanf("%d",&(p->leave.hour));}if(p->leave.min<0||p->leave.min>59){printf("◆您的输入有误!");printf("■请重新输入离开时间的'分'(0-59):");scanf("%d",&(p->leave.min));}printf("\n●离开车辆的车牌号为:");puts(p->num);printf("\n●该车到达时间为: %d:%d",p->reach.hour,p->reach.min);printf("\n●该车离开时间为: %d:%d",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf("\n●应交费用为: %2.1f元!",((B1-A1)*60+(B2-A2))*price);free(p);}//车辆的到达登记int Arrival(SeqStackCar *Enter,LinkQueueCar *W){//char num[10];//int a;CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();//清空缓存输入的作用printf("\n■请输入车牌号(例:豫B1234):");gets(p->num);/*a=Enter->top;loop:scanf("%s",&num);if(a==0){strcpy(p->num,num);a++;}while(a){if(strcmp(num,Enter->stack[a]->num)==0){printf("您输入的车牌号重复,请重新输入!");goto loop;}}*/if(Enter->top<MAX)//车辆未满,车进车场{Enter->top++;printf("\n●车辆在车场第%d位置.",Enter->top);printf("\n●车辆到达时间:");scanf("%d:%d",&(p->reach.hour),&(p->reach.min));while(p->reach.hour<0||p->reach.hour>23) //控制时间格式正确{printf("◆您的输入有误!");printf("■请重新输入到达时间的'时'(0-23):");scanf("%d",&(p->reach.hour));}while(p->reach.min<0||p->reach.min>59) //控制分钟输入正确{printf("◆您的输入有误!");printf("■请重新输入到达时间的'分'(0-59):");scanf("%d",&(p->reach.min));}Enter->stack[Enter->top]=p;printf("\n●恭喜您登记成功!");//savecar(??);printf("\n");return(1);}else//车场已满,车进便道{printf("\n◆您好,停车场车位已满,请该车在便道上等待!有空余车位时才能进入停车场!/n");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,*t;QueueNode *q;if(Enter->top>0)//判断停车场是否为空{while(1)//输入离开车辆的信息{printf("\n■请输入车在车场的位置/1--%d/:",Enter->top);scanf("%d",&room);if(room>=1&&room<=Enter->top) break;elseprintf("\n◆您的输入有误,请重新输入: ");}while(Enter->top>room)//把要离开车辆前面的车开出来,进临时栈。

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

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

数据结构课程设计停车场管理系统设计报告2停车场管理系统设计报告一、引言停车场管理系统是一种用于管理和控制停车场内停车位的软件系统。

本报告旨在详细描述设计一个停车场管理系统的过程,并介绍系统的功能、架构、模块设计以及相关技术细节。

二、系统概述本停车场管理系统旨在提供一个高效、智能化的停车场管理解决方案,以便实现停车场资源的合理利用和车辆流量的有效管理。

系统主要包括以下功能模块:1. 车辆入场管理:记录车辆的入场时间、车牌号码等信息,并分配合适的停车位。

2. 车辆出场管理:记录车辆的出场时间,计算停车费用,并提供支付方式。

3. 停车位管理:实时监测和管理停车位的占用情况,提供可用停车位的查询功能。

4. 数据统计与分析:根据车辆进出记录,生成报表,分析车流量、停车时长等数据。

5. 系统设置:包括管理员账号管理、停车场信息设置等。

三、系统架构本停车场管理系统采用三层架构,包括表现层、业务逻辑层和数据访问层。

1. 表现层:用户通过图形界面与系统进行交互,输入车辆信息、查询停车位、支付停车费用等。

2. 业务逻辑层:负责处理用户请求,实现车辆入场、出场管理,停车位管理以及数据统计与分析功能。

3. 数据访问层:负责与数据库进行交互,实现数据的存取和管理。

四、模块设计1. 车辆入场管理模块该模块主要包括车辆信息录入、停车位分配和入场记录保存等功能。

用户在系统界面输入车辆信息后,系统将分配一个合适的停车位,并将车辆信息和入场时间保存至数据库中。

2. 车辆出场管理模块该模块主要包括出场记录查询、停车费用计算和支付功能。

用户通过输入车牌号码查询出场记录,系统将根据停车时间计算停车费用,并提供多种支付方式供用户选择。

3. 停车位管理模块该模块实时监测和管理停车位的占用情况,提供可用停车位的查询功能。

系统将通过查询数据库中的停车位信息,实时更新停车位的占用状态,并在系统界面显示可用停车位的数量。

4. 数据统计与分析模块该模块根据车辆进出记录,生成报表,分析车流量、停车时长等数据。

数据结构停车场课程设计

数据结构停车场课程设计

数据结构停车场课程设计一、课程目标知识目标:1. 理解数据结构中图和树的概念,掌握它们在解决实际问题中的应用。

2. 学习并掌握停车场系统的逻辑结构,能运用所学数据结构设计停车场的模拟系统。

3. 了解不同数据结构在处理停车场问题时的效率差异,能够分析其时间复杂度和空间复杂度。

技能目标:4. 能够运用所学知识,设计并实现一个简单停车场的管理系统,包括车辆入场、出场、查找空车位等基本功能。

5. 通过课程设计活动,提升学生利用数据结构解决实际问题的编程能力,加强代码的逻辑性和可读性。

6. 培养学生将理论知识应用于实际问题的能力,通过团队协作完成课程设计任务。

情感态度价值观目标:7. 激发学生对计算机科学和数据结构的兴趣,增强其对复杂问题探究的积极态度。

8. 培养学生的团队协作精神,学会在团队中分工合作、共同解决问题。

9. 增强学生的创新意识,鼓励学生大胆尝试不同的解决方案,体会科技创新对现实生活的影响。

课程性质分析:本课程设计属于高中信息技术或计算机科学课程,以实践性和应用性为主,旨在通过实际问题的解决,加深学生对数据结构知识的理解和运用。

学生特点分析:高中生具有一定的数据结构基础和编程能力,思维活跃,对实际问题具有较强的探究欲望,但需要进一步引导他们将理论知识与实际问题相结合。

教学要求:教师应引导学生将所学知识综合运用到停车场系统设计中,注重理论与实践相结合,鼓励学生创新思维和团队合作,通过具体的学习成果来衡量学生掌握情况。

二、教学内容1. 数据结构基本概念复习:回顾图和树的基本概念,包括相关术语、性质及常用算法。

教材章节:第五章“图”,第六章“树”2. 停车场系统需求分析:介绍停车场系统的基本功能,如车辆入场、出场、查找空车位等。

教材章节:项目实战部分3. 数据结构选择与应用:探讨不同数据结构在停车场系统中的应用,如邻接表、邻接矩阵、二叉树等。

教材章节:第五章、第六章应用实例4. 停车场系统设计:详细讲解如何利用数据结构设计停车场系统,包括数据模型、算法实现等。

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

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

《数据结构与算法》课程设计任务书题目:停车场管理系统学生姓名:李雷正学号:16480217 班级:物联网工程二班题目类型:停车场管理系统指导教师:一.题目简介该设计要求学生以停车场管理业务为背景,设计出一个简单的能够实现停车场管理功能的系统。

通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握栈、队列上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。

二.主要任务第一部分:基本算法实现1、线性结构基本算法实现(指导老师根据题目指定);2、树型结构基本算法实现(指导老师根据题目指定);3、图型结构基本算法实现(指导老师根据题目指定);4、查找基本算法实现(指导老师根据题目指定);5、排序基本算法实现(指导老师根据题目指定);第二部分:指定题目的设计与实现1、查阅文献资料,一般在3篇以上;2、建立数据的逻辑结构和物理结构;3、完成相应算法的设计;4、完成测试工作;5、撰写设计说明书;6、做好答辩工作。

三.主要内容、功能及技术指标(1)使用链表或顺序表实现数据的录入(顺序表或链表的创建)、查找、修改、插入、追加、删除、排序、统计、输出等功能;(2)建立一个测试的数据表,至少要有20个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;(3)算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;(4)车辆基本情况包括的数据项有:汽车到达或离开的信息、汽车牌照号码、到达或离去的时刻等;(5)要求:若车辆到达,则输出汽车在停车场内或便道上的停车位置;若车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。

四.提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 序言;3)采用类c语言定义相关的数据类型4)各模块的伪码算法5)函数的调用关系图6)调试分析a、调试中遇到的问题及对问题的解决方法;b、算法的时间复杂度和空间复杂度。

《数据结构》停车场系统设计报告--停车场管理系统_

《数据结构》停车场系统设计报告--停车场管理系统_

《数据结构》停车场系统设计报告--停车场管理系统_一、系统总体原则1.1、系统的安全性:停车场管理系统要求引入多重安全措施,确保其系统数据的安全,以防止非法黑客进行攻击;系统本身要具备安全保护机制,确保核心系统重要功能不能被破坏。

1.2、系统功能:停车场管理系统要具备通行证管理,车辆管理,收费管理,维修管理,系统权限控制和固定车位管理等多种功能。

1.3、系统数据管理:停车场管理系统要实现对用户信息,车辆信息,收费信息,维修信息和工作日志等数据的便捷管理;支持数据注入,报表输出,日志查询,备份恢复等。

二、系统数据结构2.1、用户信息结构:用户类型、用户名、密码、真实姓名、联系电话、优惠折扣比、优惠申请次数等2.2、车辆信息结构:车牌号、车牌颜色、停放位置、停放时间、收费金额等2.3、收费信息结构:收费时间、车牌号、应缴金额、实缴金额、优惠金额、收费员等2.4、维修信息结构:维修时间、车牌号、维修内容、维修费用、维修人等2.5、工作日志结构:日志类型、生成时间、触发时间、操作内容、操作人等三、系统模块设计通行证管理模块:能够管理停车场的客户信息,支持优惠折扣的设置,支持多种客户角色的分配及权限管理。

车辆管理模块:能够管理停车场的车辆信息,支持分配停车位、跟踪车辆停放时间以及出入位置,以实现计算停车费用。

收费管理模块:能够实现车辆停放费用的计费与收取,支持优惠计算功能,支持收费记录的查询与管理。

维修管理模块:能够管理停车场的车辆维修信息,能够针对每辆车的维修记录进行查询、录入和管理。

系统权限控制模块:支持可根据多种角色分配权限,以实现系统模块及功能的控制,保证信息安全性。

固定车位管理模块:能够支持固定车位信息的管理,可支持用户管理固定车位,以便系统自动识别用户并提供优惠处理。

四、系统实现方案4.1 前端 : 对停车场系统进行交互式操作,支持web,客户端,短信等界面,实现用户的操作及查询;前端应用可跨平台进行。

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

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

数据结构课程设计停车场管理系统停车场管理专业班级:XXXXXXX 学号:XXXXXXX 姓名:XXXXXXX 指导教师:XXXXXXX 课程设计时间:XXXXXXX计算机专业数据结构课程设计任务书学生姓名XXXXXX专业班级XXXXXX学号XXXXXX题目停车场管理系统课题性质工程设计课题来源XXXXXX 指导教师XXXXXX同组姓名XXXXXX主要内容任务要求1、系统应具备的功能:(1)停车场的车位管理(2)停车场的停车管理(3)停车场的记费管理2、数据结构设计3、主要算法设计4、编程及上机实现5、撰写课程设计报告参考文献1.《数据结构(C语言版)》,严蔚敏、吴伟民,清华大学出版社,1997.2.谭浩强. C语言程序设计(第三版)[M]. 北京:清华大学出版社,20053.廖雷、罗代忠. C语言程序设计基础实验教程[M]. 北京:高等教育出版社,20054.谭浩强. C程序设计解题与上机指导(第三版) [M]. 北京:清华大学出版社,2005 .审查意见指导教师签字:教研室主任签字:年月日实验题目:停车场管理系统一、要解决的问题停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。

要求:以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。

每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。

对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构课程设计停车场管理系统
停车场管理系统是一种体现现代化管理的车库管理系统,它可以有效地控制车辆的入库、出库和停车费收取等。

停车场管理系统的设计原则是以业务实用性为基础,以车辆的安全和管理的效率为核心,以车主的方便为目标,以信息安全和财务支持为基础,以及以智慧停车场的发展为发展方向来设计。

停车场管理系统是一个基于互联网的系统,可以实现停车场的网络化管理,它可以实现停车场车辆的实时管理,可以实现停车场数据的实时上传和下载,可以实现停车场费用的实时收取,可以实现停车场财务的实时总结等功能,可以提高停车场的管理效率,提升停车场的运营水平。

总之,停车场管理系统是一个具有较强实用性的系统,它可以有效地控制车辆的入库、出库和停车费收取等,并可以实现停车场的网络化管理,提高停车场的管理效率,提升停车场的运营水平。

只要系统管理人员根据实际情况,灵活有效地调整系统的参数和指标,停车场管理系统将会发挥出最大的作用。

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

《数据结构》课程设计报告设计报告题目:停车场管理问题学院:信息科学与工程学院《数据结构》课程设计报告书1.1 课程设计选题的目的为大家解决一些生活中的实际问题,在这个过程中,自我设计的能力也在不断地提高。

此次程序设计综合运用所学数据额结构以及C语言的知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,使我们更理解了C语言及数据结构的功能之强大,进一步让学生对面向对象的方法以及数据结构的编程思想有了较好了解和认识。

1.通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。

2.通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计出合理的模块化结构。

3.通过课程设计,提高程序开发功能,培养分析问题、解决实际问题的能力,能运用合理的控制流程编写清晰高效的程序。

1.2 课程设计选题的内容[问题描述]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

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

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

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

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

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

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

一.需求分析以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包含三个数据项:汽车“到达”或“离去”信息,汽车牌照号码以及汽车到达或离去的时刻。

对每一组输入数据操作后的输出结果为:①若是车辆到达,则输出汽车在停车场内或便道上的停车位置;②若是汽车离去,则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上停留的时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

二.概要设计设计框图①设计思想:按照题目的要求,此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能。

因此,可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。

至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。

当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。

②实现方法:对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。

至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。

对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。

③若干主要模块:1.车辆到达模块2.车辆离开模块3.停车场内停放车辆的信息显示模块4.退出模块首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。

在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。

其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。

最后,从调出的这四个函数中回到主函数结束整个程序的运行。

④以上各个模块中,出现的调用的函数为:void InitStack(SeqStackCar *s);/*初始化栈*/int InitQueue(LinkQueueCar *Q);/*初始化通道*/int Arrival(SeqStackCar *Enter,LinkQueueCar *W);/*定义到达车辆函数*/void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W); /*定义离开车辆函数*/void PRINT(CarNode *p);/*显示出站车辆相关信息,定义出站函数*/ void List(SeqStackCar S,LinkQueueCar W);/*定义列表函数*/void List1(SeqStackCar *S);列表1 停车场void List2(LinkQueueCar *W);列表2 便道三.详细设计部分主要源程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 10 /*定义车库容量*/#define price 0.5 /*定义收费单价*/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); /*定义列表函数*/InitStack(&Enter); /*初始化车站*/InitStack(&Temp);/*初始化让路的临时栈*/InitQueue(&Wait);/*初始化等待的通道*/void InitStack(SeqStackCar *s){ /*初始化栈*/int i;s->top=0;/*s起始为空栈*/for(i=0;i<=MAX;i++)/*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);}出站函数及时间费用计算功能:void PRINT(CarNode *p,int room)/*显示出站车辆相关信息,定义出站函数*/ {int A1,A2,B1,B2;/*取四个函数*/printf("\n车辆离开的时间:");scanf("%d:%d",&(p->leave.hour),&(p->leave.min));printf("\n离开车辆的车牌号为:");puts(p->num);printf("\n其到达时间为: %d:%d",p->reach.hour,p->reach.min);printf("离开时间为: %d:%d",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;/*定义四个函数,分别表示到达的时间和离开的时间*/printf("\n应交费用为: %2.1f元",((B1-A1)*60+(B2-A2))*price);/*定义价格计算方式*/free(p); }车辆到达模块:int Arrival(SeqStackCar *Enter,LinkQueueCar *W){ /*车辆到达*/CarNode *p;QueueNode *t;/*定义指针*/p=(CarNode *)malloc(sizeof(CarNode));/*设定车辆指针的内存*/flushall();printf("\n请输入车牌号(例:京A1234):");gets(p->num);/*获取车辆位置编号*/if(Enter->top<MAX)/*如果位置数小于最大*/{Enter->top++;printf("\n车辆在车场第%d位置.",Enter->top);/*位置数输出然后自加一用作下一次*/printf("\n车辆到达时间:");scanf("%d:%d",&(p->reach.hour),&(p->reach.min));/*记录车辆到达时间*/Enter->stack[Enter->top]=p;/*将时间函数p整体赋值给已经进站的车辆*/return(1);/*返回主界面函数*/}else/*如果车辆数超过最大*/{printf("\n该车须在便道等待!有车位时进入车场");t=(QueueNode *)malloc(sizeof(QueueNode));/*临时栈的内存*/t->data=p;/*p的值赋予t*/t->next=NULL;/*临时栈指针非空*/W->rear->next=t;/*将临时栈的赋值到等待便道的等待车辆*/W->rear=t;/*将临时栈的值t赋予便道等待的车*/return(1);/*返回主函数*/}}车辆离开模块:void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/*车辆离开*/{int room;/*定义位置函数*/CarNode *p,*t;/*定义停车场的车辆的位置和时间两个指针p和t*/QueueNode *q;/*定义便道的车辆的指针q*/if(Enter->top>0) /*如果进站车辆的头指针非零则执行*/{while(1){printf("\n请输入车在车场的位置/1--%d/:",Enter->top);scanf("%d",&room);/*输入位置数值*/if(room>=1&&room<=Enter->top) break;/*如果输入的数值大于等于1且小于等于进站的最大数量,则跳出执行下一步*/}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;t=q->data;Enter->top++;printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top);/*如果指针存在,则显示进入并指向下一指针*/printf("\n请输入%s号车进入车场的时间:");scanf("%d:%d",&(t->reach.hour),&(t->reach.min));/*判定存在之后,同样记录时间*/W->head->next=q->next;if(q==W->rear) W->rear=W->head;Enter->stack[Enter->top]=t;free(q);/*指针不存在则为空*/}else printf("\n便道里没有车.\n");}else printf("\n车场里没有车.");}车辆列表显示函数:void List1(SeqStackCar *S)/*定义停车场的车辆显示函数*/{int i;if(S->top>0)/*如果指针非空*/{printf("\n车场:");printf("\n 位置到达时间车牌号\n");for(i=1;i<=S->top;i++)/*定义数目的循环方式*/{printf(" %d ",i);/*显示停车场数目*/printf(" %d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min);/*定义到达时间的显示*/puts(S->stack[i]->num);/*定义显示车辆的号码*/}}else printf("\n车场里没有车");/*如果指针为空则显示停车场没有车辆*/}void List2(LinkQueueCar *W)/*定义通道的车辆函数*/{QueueNode *p;/*定义指针p*/p=W->head->next;if(W->head!=W->rear){printf("\n等待车辆的号码为:");/*如果指针存在则显示等待车辆号码*/ while(p!=NULL){puts(p->data->num);p=p->next;}}else printf("\n便道里没有车.");/*如果指针为空则显示指针为空*/}四.调试分析调试过程中的主要问题:由于此停车场管理系统是分模块设计的,整体来看结构较为清晰,使用方便,易读易懂,不过由于没有添加清屏函数,所以看似有些繁琐。

相关文档
最新文档