c停车场管理系统.doc
- 文档编号:230098
- 上传时间:2022-10-07
- 格式:DOC
- 页数:13
- 大小:376.50KB
c停车场管理系统.doc
《c停车场管理系统.doc》由会员分享,可在线阅读,更多相关《c停车场管理系统.doc(13页珍藏版)》请在冰豆网上搜索。
安阳师范学院·数据结构课程实践·
数据结构课程实践报告
项目名称:
停车场管理系统
所在班级:
14级计算机科学与技术1班
小组成员:
尤攀陆、董金明、付增现、王耀权、曲涛
任课教师:
刘国英
起止时间:
2015.11.20-2015.12.30
项目基本信息
项目名称
停车管理系统
项目简介
设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。
小组成员
尤攀陆董金明付增现王耀权曲涛
任务分工
尤攀陆:
停车模块
董金明:
车辆离开模块
付增现:
堆栈与队列的定义及基本操作
王耀权:
主函数模块
曲涛:
列表显示模块
课程实践评定成绩记录
指导教师意见
系统完成情况:
优良中差
报告完成情况:
优良中差
答辩评定成绩
团队整体成绩:
成员成绩
尤攀陆
140901002
董金明
140901019
付增现
140901022
王耀权
140901058
曲涛
140901040
综合成绩
一、问题描述及分析
于停车场只有一个大门,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,先进停车场的后退出,后进车场的先退出,符合栈的“后进先出,先进后出”的操作特点,因此,可以用一个栈来模拟停车场。
而当停车场满后,继续来到的其它车辆只能停在便道上,根据便道停车的特点,先排队的车辆先离开便道进入停车场,符合队列的“先进先出,后进后出”的操作特点,因此,可以用一个队列来模拟便道。
排在停车场中间的车辆可以提出离开停车场,并且停车场内在要离开的车辆之后到达的车辆都必须先离开停车场为它让路,然后这些车辆依原来到达停车场的次序进入停车场,因此在前面已设的一个栈和一个队列的基础上,还需要有一个地方保存为了让路离开停车场的车辆,由于先退出停车场的后进入停车场,所以很显然保存让路车辆的场地也应该用一个栈来模拟。
因此,本题求解过程中需用到两个栈和一个队列。
栈以顺序结构实现,队列以链表结构实现。
(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
(3)用顺序栈来表示停车场,链队表示停车场外的便道。
(4)显示停车场信息和便道信息。
(5)程序执行的命令为:
1车辆进入停车场 2车辆离开停车场 3显示停车场的信息
二、功能模块及数据结构描述
程序分为三个模块:
车辆到达模块、车辆离开模块、车辆信息显示模块;
车辆到达模块:
void Arrival(SqStack &Enter, LinkQueue &W){ //车辆到达
ElemType p;
printf("请输入车牌号(如陕A1234):
");
fflush(stdin);
gets(p.num);
if(Enter.top printf("请输入到达时间(* * : * * ): "); scanf("%d : %d", &p.reach.hour, &p.reach.min); Push(Enter, p); // 进入停车场 } else{ printf("该车需在便道等待! \n"); EnQueue(W, p); //进入便道 } } 车辆离开模块: void Print(ElemType p){ int A1, A2, B1, B2; printf("请输入离开的时间(* * : * * ): "); scanf("%d: %d", &p.leave.hour, &p.leave.min); printf("离开车辆的车牌号为: "); puts(p.num); printf("其到达时间为: %d : %d\n", p.reach.hour, p.reach.min); printf("其离开时间为: %d : %d\n", p.leave.hour, p.leave.min); A1=p.reach.hour; A2=p.reach.min; B1=p.leave.hour; B2=p.leave.min; printf("应交费用为: %2.1f 元. \n", ((B1 - A1) * 60 + (B2 - A2)) * price); } 车辆显示模块: void List1(SqStack S) {//列表显示停车场信息 int i; if(S.top>0){//判断停车场是否有车 printf("停车场\n"); printf("位置到达 时间 车牌号\n"); for(i=1;i<=S.top;i++){ printf("%-8d",i); printf("%-2d: %-9d",S.data[i].reach.hour,S.data[i].reach.min); puts(S.data[i].num); }} else printf("停车场内没车! \n");} 停车场的管理流程如下: ①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。 ②当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。 之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。 ③列表1显示停车场信息,判断停车场是否有车,如果有车,就显示车辆到达的位置,到达时间及其车牌号。 如果停车场内没有车,就会显示停车场没有车。 列表2显示便道的信息,判断便道是否有车,如果有车,就显示车辆的号牌,否则显示便道没车。 三、主要算法流程描述及部分核心算法 算法流程图描述 流程图按块来分析,共分成整体系统,汽车到达系统,汽车离去系统,汽车显示系统。 如图1。 (1)、汽车整体系统 停车场管理系统 车辆到达 车辆离开 车辆显示 图1 (2)以模块为单位分析算法 1、“到达”模块: 到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。 如图2。 图2 2.“离开”模块: 离开时,当车库为空时,提示没有车,结束;否则车辆离开。 如图3。 图3 3.“显示”模块: 显示模块有两个显示选项,即: 车场与便道。 如图4。 图4 核心算法: 时间节点 typedefstructtime{ inthour; intmin; }Time; 车辆信息节点 typedefstructnode{ charnum[10]; Timereach; Timeleave; }ElemType;////顺序栈的定义与基本操作 typedefstruct{ ElemTypedata[MAXSIZE]; inttop; }SqStack; 便道队列节点: typedefstructQNode{ ElemTypedata; structQNode*next; }Qnode,*QueuePtr; 便道队列: typedefstruct{ QueuePtrfront; QueuePtrrear; }LinkQueue; 顺序栈的初始化 voidInitStack(SqStack&s){ s.top=0; } 入堆栈出堆栈 voidPush(SqStack&s,ElemTypee){ s.top++; s.data[s.top]=e; } voidPop(SqStack&s,ElemType&e){ e=s.data[s.top]; s.top--; } 队列初始化: voidInitQueue(LinkQueue&Q){ Q.front=Q.rear=newQnode; Q.front->next=NULL; } 入队操作: voidEnQueue(LinkQueue&Q,ElemTypee){ Qnode*p; p=newQnode; p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; } 出队操作: voidDeQueue(LinkQueue&Q,ElemType&e){ Qnode*p; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p)Q.rear=Q.front; deletep;} 四、系统使用说明 进入主界面: 车辆到达: 停车场满时车在便道上排队: 列表显示: 车辆离开: 当输入不合法时: 五、问题及解决办法 1、在开始输入车牌号的字符串时总是出错,便不能再执行。 解决途径: 通过上网查资料知道,输入字符时习惯性的会加Enter键然后再输下一个,这样相当于Enter也作为一个字符读入,在输入前加上fflush(stdin)函数,用于清除输入的所有缓冲区即可。 2、在输入停车信息时,若输入不合法,程序便会中断结束,无法继续运行下去。 后来利用whihe (1)永真循环结构,但输入不合法时,重复输入循环。 只有当输入合法时,才会跳出循环,执行下一步操作。 3、刚开始时,程序比较混乱,函数顺序都不是很正确,不能一眼看出来某一个定义是干嘛用 六、课程实践总结 虽然说这次数据结构课程设计是以小组形式进行,但还是有压力的。 在课堂上和课余时间我们互相帮助,互相学习。 这次课程设计通过参考c语言程序设计,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统