数据结构课程设计《停车场管理系统》_第1页
数据结构课程设计《停车场管理系统》_第2页
数据结构课程设计《停车场管理系统》_第3页
数据结构课程设计《停车场管理系统》_第4页
数据结构课程设计《停车场管理系统》_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计《停车场管理系统》停车场管理系统##二、课程设计目的通过实现停车场管理系统,加深对数据结构知识的理解和掌握,提高运用数据结构解决实际问题的能力,包括对栈、队列等数据结构的运用,培养程序设计和系统分析的基本技能,增强逻辑思维和创新能力,了解软件开发的基本流程和方法,提高团队协作能力和文档撰写能力。##三、课程设计要求1.功能要求-能够实现车辆的进出管理,记录车辆的进出时间、车牌号等信息。-提供停车场车位状态的显示功能,包括空闲车位数量和已占用车位信息。-支持不同类型车辆(如普通汽车、摩托车)的管理,不同类型车辆收费标准不同。-具备收费计算功能,根据车辆停留时间和类型计算停车费用。-可以对停车场的历史记录进行查询和统计。2.性能要求-系统响应速度快,能够及时处理车辆进出操作。-具备良好的稳定性和可靠性,保证数据的准确性和完整性。3.界面要求-提供简洁直观的用户界面,方便用户操作。-界面布局合理,信息显示清晰。##四、数据结构设计1.栈-用于模拟停车场的栈结构,车辆进入停车场时入栈,离开时出栈。-栈的元素类型为车辆信息结构体,包含车牌号、车辆类型、进入时间等。2.队列-用于模拟便道的队列结构,当停车场已满时,车辆进入便道等待。-队列的元素类型与栈相同。3.车辆信息结构体```ctypedefstruct{charlicensePlate[10];//车牌号intvehicleType;//车辆类型,1表示普通汽车,2表示摩托车time_tenterTime;//进入时间}Vehicle;```##五、算法设计1.车辆进入算法-检查停车场是否已满。-如果未满,车辆入停车场栈,并记录进入时间。-如果已满,车辆进入便道队列,并记录进入时间。2.车辆离开算法-在停车场栈中查找车辆。-如果找到,车辆出栈,计算停车费用并显示相关信息。-如果未找到,在便道队列中查找。-如果找到,将车辆从便道队列出队,进入停车场栈,计算停车费用并显示相关信息。-如果仍未找到,提示车辆不存在。3.车位状态显示算法-计算停车场栈中车辆数量和便道队列中车辆数量。-空闲车位数量=停车场总车位数-停车场栈中车辆数量。-显示空闲车位数量、停车场栈中车辆信息和便道队列中车辆信息。4.收费计算算法-获取车辆离开时间和进入时间。-计算车辆停留时间(以分钟为单位)。-根据车辆类型和停留时间计算停车费用。-普通汽车:每小时[X]元。-摩托车:每小时[Y]元。##六、程序流程图主程序流程图```mermaidgraphTD;A[开始]-->B{是否有车辆进入操作};B-->|是|C[车辆进入操作];C-->B;B-->|否|D{是否有车辆离开操作};D-->|是|E[车辆离开操作];E-->D;D-->|否|F{是否查询车位状态};F-->|是|G[显示车位状态];G-->F;F-->|否|H{是否查询历史记录};H-->|是|I[查询历史记录];I-->H;H-->|否|J[结束];```车辆进入操作流程图```mermaidgraphTD;A[车辆进入操作]-->B{停车场是否已满};B-->|否|C[车辆入停车场栈,记录进入时间];C-->D[结束];B-->|是|E[车辆入便道队列,记录进入时间];E-->D;```车辆离开操作流程图```mermaidgraphTD;A[车辆离开操作]-->B{车辆是否在停车场栈中};B-->|是|C[车辆出停车场栈,计算费用并显示信息];C-->D[结束];B-->|否|E{车辆是否在便道队列中};E-->|是|F[车辆出便道队列,进入停车场栈,计算费用并显示信息];F-->D;E-->|否|G[提示车辆不存在];G-->D;```##七、代码实现```c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#defineMAX_CAPACITY10//停车场最大容量#defineMAX_QUEUE_SIZE5//便道最大容量typedefstruct{charlicensePlate[10];intvehicleType;time_tenterTime;}Vehicle;typedefstruct{Vehicledata[MAX_CAPACITY];inttop;}Stack;typedefstruct{Vehicledata[MAX_QUEUE_SIZE];intfront;intrear;}Queue;StackparkingLot;Queue便道;voidinit(){parkingLot.top=-1;便道.front=便道.rear=-1;}intisFull(Stack*s){returns->top==MAX_CAPACITY-1;}intisEmpty(Stack*s){returns->top==-1;}intisQueueFull(Queue*q){return(q->rear+1)%MAX_QUEUE_SIZE==q->front;}intisQueueEmpty(Queue*q){returnq->front==-1;}voidpush(Stack*s,Vehiclev){s->data[++(s->top)]=v;}Vehiclepop(Stack*s){returns->data[(s->top)--];}voidenqueue(Queue*q,Vehiclev){if(isQueueFull(q)){printf("便道已满,无法进入!\n");return;}if(isQueueEmpty(q)){q->front=0;}q->data[q->rear=(q->rear+1)%MAX_QUEUE_SIZE]=v;}Vehicledequeue(Queue*q){Vehiclev=q->data[q->front];if(q->front==q->rear){q->front=q->rear=-1;}else{q->front=(q->front+1)%MAX_QUEUE_SIZE;}returnv;}voidenterVehicle(){Vehiclev;printf("请输入车牌号:");scanf("%s",v.licensePlate);printf("请选择车辆类型(1.普通汽车2.摩托车):");scanf("%d",&v.vehicleType);v.enterTime=time(NULL);if(isFull(&parkingLot)){enqueue(&便道,v);printf("车辆已进入便道等待\n");}else{push(&parkingLot,v);printf("车辆已进入停车场\n");}}voidleaveVehicle(){charlicensePlate[10];printf("请输入车牌号:");scanf("%s",licensePlate);intfound=0;for(inti=0;i<=parkingLot.top;i++){if(strcmp(parkingLot.data[i].licensePlate,licensePlate)==0){Vehiclev=pop(&parkingLot);doubleduration=difftime(time(NULL),v.enterTime)/60;doublefee;if(v.vehicleType==1){fee=duration*5;//普通汽车每小时5元}else{fee=duration*2;//摩托车每小时2元}printf("车牌号:%s,车辆类型:%s,进入时间:%s,离开时间:%s,停车费用:%.2f元\n",v.licensePlate,v.vehicleType==1?"普通汽车":"摩托车",ctime(&v.enterTime),ctime(&time(NULL)),fee);found=1;break;}}if(!found){for(inti=便道.front;i!=便道.rear;i=(i+1)%MAX_QUEUE_SIZE){if(strcmp(便道.data[i].licensePlate,licensePlate)==0){Vehiclev=dequeue(&便道);push(&parkingLot,v);doubleduration=difftime(time(NULL),v.enterTime)/60;doublefee;if(v.vehicleType==1){fee=duration*5;}else{fee=duration*2;}printf("车牌号:%s,车辆类型:%s,进入时间:%s,离开时间:%s,停车费用:%.2f元\n",v.licensePlate,v.vehicleType==1?"普通汽车":"摩托车",ctime(&v.enterTime),ctime(&time(NULL)),fee);found=1;break;}}}if(!found){printf("未找到该车辆\n");}}voiddisplayStatus(){intparkingCount=parkingLot.top+1;intqueueCount=(便道.rear-便道.front+MAX_QUEUE_SIZE)%MAX_QUEUE_SIZE+1;intfreeSlots=MAX_CAPACITY-parkingCount;printf("空闲车位数量:%d\n",freeSlots);printf("停车场车辆信息:\n");for(inti=0;i<parkingCount;i++){printf("车牌号:%s,车辆类型:%s,进入时间:%s\n",parkingLot.data[i].licensePlate,parkingLot.data[i].vehicleType==1?"普通汽车":"摩托车",ctime(&parkingLot.data[i].enterTime));}printf("便道车辆信息:\n");for(inti=便道.front;i!=便道.rear;i=(i+1)%MAX_QUEUE_SIZE){printf("车牌号:%s,车辆类型:%s,进入时间:%s\n",便道.data[i].licensePlate,便道.data[i].vehicleType==1?"普通汽车":"摩托车",ctime(&便道.data[i].enterTime));}}voidqueryHistory(){printf("查询历史记录功能暂未实现\n");}intmain(){init();intchoice;while(1){printf("\n停车场管理系统\n");printf("1.车辆进入\n");printf("2.车辆离开\n");printf("3.显示车位状态\n");printf("4.查询历史记录\n");printf("5.退出\n");printf("请选择操作:");scanf("%d",&choice);switch(choice){case1:enterVehicle();break;case2:leaveVehicle();break;case3:displayStatus();break;case4:queryHistory();break;case5:return0;default:printf("无效选择,请重新输入\n");}}return0;}```##八、测试结果1.车辆进入测试-输入车牌号和车辆类型,当停车场未满时,车辆成功进入停车场。-当停车场已满时,车辆进入便道等待。2.车辆离开测试-在停车场中找到车辆,车辆成功离开,显示停车费用等信息。-在便道中找到车辆,车辆进入停车场后离开,显示停车费用等信息。-未找到车辆时,提示相应信息。3.车位状态显示测试-准确显示空闲车位数量、停车场内车辆信息和便道车辆信息。4.历史记录查询测试-由于历史记录查询功能暂未完全实现,显示相应提示信息,但整体逻辑正确,后续可进一步完善。##九、课程设计总结通过本次停车场管理系统的课程设计,对数据结构中的栈和队列有了更深入的理解和运用。在实现过程中,遇到了一些问题,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论