华夏理工学院停车场管理系统报告.docx
- 文档编号:7368903
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:35
- 大小:360.01KB
华夏理工学院停车场管理系统报告.docx
《华夏理工学院停车场管理系统报告.docx》由会员分享,可在线阅读,更多相关《华夏理工学院停车场管理系统报告.docx(35页珍藏版)》请在冰豆网上搜索。
华夏理工学院停车场管理系统报告
武汉华夏理工学院
课程设计报告书
课程名称:
数据结构与算法课程设计
题目:
用C语言实现停车场管理程序的设计
系名:
计算机与网络工程系
专业班级:
姓名:
学号:
指导教师:
2017年6月27日
武汉华夏理工学院信息工程学院
课程设计任务书
课程名称:
数据结构与算法课程设计指导教师:
王绪梅
班级名称:
开课系、教研室:
计算机与网络工程系
一、课程设计目的与任务
《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。
目的:
学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。
提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。
任务:
根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。
二、课程设计的内容与基本要求
设计题目:
用C语言实现停车场管理程序的设计
〔问题描述〕设有一个停放n辆车的狭长停车场,它只有一个大门供车辆出入。
车辆按到达停车场时间的早晚依次从停车场最里面向大门处停放。
若已放满n辆车,则后来的车只能停在外面等待,当有车开走后方依次进入,停在场内的车按时计费。
编制一个程序模拟该停车场管理。
〔实现要求〕要求程序输出每辆车到达后的停车位置,以及离开停车场时应缴纳的费用及停留时间。
〔实现提示〕汽车的模拟输入信息格式可设为:
汽车牌照号码,到达/离去时刻
如(‘a’,1,5)为1号车在5时刻到达,(‘b’,5,20)为5号车在20这个时刻离去。
具体要完成的任务是:
A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。
B.写出规范的课程设计报告书;
三、课程设计步骤及时间进度和场地安排
时间:
本课程设计安排在第19周地点:
现代教育中心
具体时间安排如下:
第一天:
布置题目,确定任务、查找相关资料
第二天~第四天:
功能分析,编写程序,调试程序、运行系统;
第五天:
程序验收、答辩(答辩时,要提交课设报告初稿给老师审阅)。
课程设计集中时间安排:
周次
星期一
星期二
星期三
星期四
第19周
第1-4节
第5-8节
第1-4节
第1-4节
地点
现教221
现教221
现教221
现教221
四、课程设计考核及评分标准
课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、答辩情况等各因素。
具体评分标准如下:
(1)设计方案正确,具有可行性、创新性;30分
(2)系统开发效果较好;20分
(3)设计报告规范、课程设计报告质量高;20分
(4)课程设计答辩时,问题回答正确;20分
(5)态度认真、刻苦钻研、遵守纪律;10分
按上述五项分别记分后求和,总分按五级制记载最后成绩。
优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)
1、设计题目
用C语言实现停车场管理程序的设计
2、设计思想
这个程序的关键是车辆的进站和出站操作,以及车辆的通道之间的相互关系。
由于停车场是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用顺序栈这种数据结构来描述。
外面的狭长的通道,先进后出,通道的车辆可以随时退出,故可用链式队列结构来描述。
考虑到车场和通道在整个程序中都要用到,故把这两个变量定义为全局变量。
在通道上的车由于没有入场,故不用收取费用。
3、系统结构
4、数据结构说明和模块算法说明
4.1程序主要函数原型及功能
1.voidGetInTime(string)
功能:
获取进入停车场时间,把字符串形式的时间转换为数字。
2.voidGetOutTime(string)
功能:
获取离开停车场时间,把字符串形式的时间转换为数字。
3.boolCompare(string)
功能:
当有车离开停车场时,需要在车库中寻找该车,用于比较车牌是否相同。
4.voidCharge(double)
功能:
参数为每分钟收费价格,计算并输出停车费用。
5.voidPush(constT&item)
功能:
入栈函数,模拟车辆进入停车场。
6.TPop()
功能:
出栈函数,把车开出停车场。
7.boolEnQueue(constT&x)
功能:
进队列函数,模拟车辆开进后备车道。
8.boolDeQueue(T&x)
功能:
出队列函数,模拟车辆从后备车道进入。
4.2各函数的实现
(1)各类的初始化:
车:
顺序栈:
队列:
(2)车类的函数实现:
template
:
GetLicensePlate(stringa)
{
licensePlate=a;//传递车牌号进来
}
template
:
GetInTime(stringy)//把字符串形式的时间转换为数字
{
intaa,bb,cc=1;
intxx=0;
inti;
doubled;
for(i=0;i<8;i++)
{
if(y[i]!
=':
')
xx=y[i]-'0'+10*xx;
else
{
if(cc==1)aa=xx;
if(cc==2)bb=xx;
cc++;
xx=0;
}
}
d=60.0*(60*aa+bb)+xx;
inTime=d;
}
template
:
GetOutTime(stringy)//把字符串形式的时间转换为数字
{
intaa,bb,cc=1;
intxx=0;
inti;
doubled;
for(i=0;i<8;i++)
{
if(y[i]!
=':
')xx=y[i]-'0'+10*xx;
else//把字符串形式的时间转换为数字
{
if(cc==1)aa=xx;
if(cc==2)bb=xx;
cc++;
xx=0;
}
}
d=60.0*(60*aa+bb)+xx;
outTime=d;
}
template
:
Compare(stringa)
{
if(licensePpare(a)==0)returntrue;//调用字符串的比较函数,相等则返回0
elsereturnfalse;
}
template
:
Charge(doublem)
{
cout< cout<<"停车应支付的费用为: "<<(outTime-inTime)*m/3600<<"元."< } (3)栈的成员函数实现: template : GetSize(intsz)//定义栈数组长度 { maxSize=sz; elements=newT[maxSize]; } template : Push(constT&item)//入栈函数 { if(top==maxSize-1) cout<<"停车场已满! "< elseelements[++top]=item;//先把栈顶指针后移一位,再入栈 } template : Pop()//出栈函数 { Tret;//自由垃圾值,参考老师做法 if(top>=0){ret=elements[top--];}//先判定是否空,空则返回垃圾值 elsecout< returnret; } (4)队列成员函数的实现 template : MakeEmpty()//清空队列 { T*p; while(front! =NULL)//逐个结点释放 { p=front; front=front->link; deletep; } rear=0; } template : EnQueue(constT&x)//插入到队尾 { if(front==NULL)//若队空则创建第一个结点 { front=rear=newT(x); if(! front)returnfalse; } else//队列不空,插入 { rear->link=newT(x); if(! rear->link)returnfalse; rear=rear->link; } returntrue; } template : DeQueue(T&x) { if(IsEmpty())returnfalse;//若队空 T*p=front; x=*front; front=front->link; deletep;//队首后移 returntrue; } template : GetFront(T&x) { if(IsEmpty())returnfalse; x=*front; returntrue; } template : GetSize()//求队列元素个数 { T*p=front; intcount=0; while(p) { p=p->link; count++; } returncount; } (5)主函数设计 intmain() { intparkSize=10;//停车场拥有的车位数 intparkNum=0;//当前停车场里面停车数 intparksurplus=0;//停车场剩余的车位数 intwaitNum=0;//当前后备车道等待车数 intprice=0;//停车每小时收费价格 intreversing=0;//用于记录车辆离开时需要倒回停车场的车 boolhaveCar=false;//用于标记是否存在车牌为name的车 boolselectRight=false; stringname;//车牌名,形如AD1235 stringinTime,outTime;//进出时间,输入格式为xx: xx: xx Car SeqStack SeqStack LinkedQueue cout<<"\t\t\t\t停车场管理系统"< cout<<"********************************************************************************"< stringselection;//用于功能选择 intselect;//把selection转换为整型,便于判断 intmark=0;//用于标记初始化是否完成 while (1) { do { cout<<"**************************************************************************"< cout<<"0: 停车场初始化1: 进入停车场2: 离开停车场"< cout<<"3: 查看当前停车场及后备队列的状态9: 退出"< cout< cout<<"请选择功能(输入对应数字选项): "; cin>>selection; if(selection.size()>1||! (selection[0]=='1'||selection[0]=='2'||selection[0]=='3'||selection[0]=='0'||selection[0]=='9')) { cout<<"输入数字错误,请重新输入: "< selectRight=false; break; } selectRight=true;//表明输入功能选项合法 select=selection[0]-'0'; if(select==0) { cout<<"请输入每小时的停车费用(单位: 元): "; cin>>price; cout<<"请输入停车场拥有的车位数: "; cin>>parkSize; parksurplus=parkSize; if(parkSize>=1) { ParkingLot.GetSize(parkSize);//设定停车场容量 TempPark.GetSize(parkSize); mark=1;//标记初始化完成 } elsecontinue; } if(select==3) { if(mark! =1) { cout<<"初始化未完成,请先初始化! "< continue; } else { cout<<"停车场里面有"< cout<<"停车场里面剩余"< cout<<"后备车道有"< cout< continue; } } if(select==9)exit(0); }while(! (select==1||select==2)); if(mark! =1) { cout<<"(请先完成初始化)"< continue; } if(selectRight) { cout<<"请输入车牌号: ";//此时是进出停车场情况,先输入车牌 cin>>name; car.GetLicensePlate(name); } elsecontinue; if(select==1) { if(parkNum>=parkSize) { cout<<"停车场已满,开进后备车道! "< ReserveLane.EnQueue(car); waitNum++;//后备车道的车数加1 } else { cout<<"请输入进入时间(以xx: xx: xx形式输入): "; cin>>inTime; car.GetInTime(inTime); ParkingLot.Push(car); parkNum++;//当前停车场里面车数加1 parksurplus--; } } if(select==2) { if(parkNum<1) { cout<<"停车场没有车! "< cout< continue; } for(inti=1;i<=parkNum;i++)//寻找车牌为named的车 { tempCar=ParkingLot.Pop(); if(tempCar.Compare(name))//若找到该车 { haveCar=true; cout<<"请输入离开时间(以xx: xx: xx形式输入): "; cin>>outTime; tempCar.GetOutTime(outTime); tempCar.Charge(price);//计算费用,并输出 tempCar=TempPark.Pop(); ParkingLot.Push(tempCar); reversing--; parkNum--; break;//跳出循环 } else { TempPark.Push(tempCar); reversing++;//记录需要倒回的车数 } } if(! haveCar) { cout<<"停车场里没有该车! "< }; if(reversing>=1)//车需要倒回 { intm; m=reversing; for(intj=1;j<=m;j++) { tempCar=TempPark.Pop(); ParkingLot.Push(tempCar); reversing--;//需要倒回的车减1 } }; if(waitNum>0&&parkNum { ReserveLane.DeQueue(tempCar); cout<<"在外等候车辆进停车场,请输入进入时间(以xx: xx: xx形式输入): "; cin>>inTime; tempCar.GetInTime(inTime); ParkingLot.Push(tempCar); waitNum--; parkNum++; cout<<"已开进后备车道一辆车! "< }; } continue; } return0; } 4.3函数模块调用关系 函数模块调用图如图0-1所示。 图0-1函数模块调用图 5、使用说明书 按照菜单所给选项进行操作,第一次使用需要先对停车场初始化,然后输入停车场的相关信息(每分钟的停车费用及停车场总车位数)。 在输入进入和离开时间时要使用(XX: XX: XX)的格式进行输入,且要使用英文的“: ”,如果分号输入错误计算会出错。 若数据未按要求输入则回到菜单界面需要重新进行操作,停车场收费只能输入整数,停车不超过30分钟不收费,超过30分钟按1小时收费。 6、运行结果 1、程序菜单界面图如图1-1所示。 图1-1程序菜单图 2、选项0停车场初始化运行图如图1-2所示。 图1-2选项0停车场初始化运行图 3、输入完初始数据后选项1进入停车场运行图如图1-3所示。 图1-3输入完初始数据后选项1进入停车场运行图 4、停车完成图如图1-4所示。 图1-4停车完成图 5、选项3查看当前停车场及后备队列的状态运行图如图1-5所示 图1-5选项3查看当前停车场及后备队列的状态运行图 6、选项2离开停车场运行图如图1-6所示。 图1-6选项2离开停车场运行图 7、测试过程及结果分析 7.1测试数据 停车场每小时收费3元。 停车场车位设置为1。 共有3辆车(A,B,C)要停入该停车场。 7.2测试过程 A车先进停车场,B,C车在后备车道等候,1小时后A车离开停车场,此时B车将进入停车场,C车继续在后备车道等候,1小时后B车离开停车场,C车进入停车场,再过1小时C车离开停车场,程序运行图如下图所示。 1、3辆车全部进入停车场状态图如图2-1所示。 图2-13辆车全部进入停车场状态图 2、选项3查看当前停车场及后备队列的状态运行图如图2-2所示。 图2-2选项3查看当前停车场及后备队列的状态运行图 3、A车离开停车场后停车场状态图如图2-3所示。 图2-3A车离开停车场后停车场状态图 4、B车离开停车场状态图如图2-4所示。 图2-4B车离开停车场状态图 5、C车离开停车场状态图如图2-5所示 图2-5C车离开停车场状态图 7.3结果分析 原程序编好后,经过编译,有如下几个问题: 1.在声明定义了栈后,栈数组的长度是固定,无法改变;这样为了避免内存溢出,其初始长度必须足够大;改进后,通过成员函数来定义其长度,节约了空间开销。 。 2.对于车辆出,没有及时动态变化后备车道,当有车出去时应该判断是否有车在等待,且自动把车开进去,同时注意记录停车场里面车数变化和等待车数变化,及时更新。 3.对于功能选择的框架,没有设定好是否初始化完成与其他功能的关系,导致数据混乱,多次修改后才改正错误。 4.编译过程中出现errorC2679: binary'>>',未添加头文件#include 设计过程中质疑(或答辩)记载: 1.程序中使用了哪些学到的知识? 停车场用栈的数组形式实现,后备车道用链式队列实现。 2.写程序中有没有遇到什么困难,怎么克服的? 在编写后备车道时出现了问题,后备车道的车不会在车库有空位时自动进入车库,通过网上查询解决了问题。 3.停车场的计时是怎样实现的? 输入的时间是xx: xx: xx的字符串形式,要通过车类成员函数转化为数字。 指导教师评语: 签名: 2017年6月30日 8、附录: 源程序清单 #include #include #include #include #include usingnamespacestd; template { publ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华夏 理工学院 停车场 管理 系统 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)