停车场管理课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
报告--停车场管理模拟程序的设计
学 院:_电气与信息工程学院_ 专业班级: 计科2011-01
设计地点(单位)__ _ 计算机基础自主学习中心 __ _ _
_ 设计题目:________ _______________ ____
指导教师评语: ______________________ ________________
_________________________________________________________________________________________________________________________________________________________________________________________________________ __________
成绩(五级记分制):______ __________
指导教师(签字):________ _______
课程设计任务书
设计题目:停车场管理模拟程序的设计
学生姓名
课程名称 数据结构课程设计 专业班级 计科2011-01,02,03,04 地 点 计算机基础自主学习中心 起止时间 2012.6.25-2012.7.6
假设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽设
车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达计
的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的内便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离容开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再及按原次序进入车场,每辆停放在车场的车在它离开时必须按它停留的时间长短交纳费用要(在便道上停车不收费)。试为停车场编制按上述要求进行管理的模拟程序。 求 要求:以栈模拟停车场,以队列模拟便道。每一组输入数据包括三个数据项:汽车“到
达”或“离去”信息、汽车牌照号码、到达或离去的时刻。对每一组输入数据进行操作后
的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置(停车位从北
向南依次编号);若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。程
序退出时,应将停车场的当前情况保存在磁盘上,以便下次运行程序时能恢复到上次退出
时的状态。
设 测试数据要求: 计 停车费用单价为每小时3元,不足一小时部分四舍五入,例如4.6小时按5小时收费。参程序运行时,n由键盘输入(6?n?20)。 数
进2012.6.25 完成任务的讲解、并接受课程设计任务,选定课程设计的题目 度 2012.6.26 了解任务的算法、并画出算法的程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图,对任务的关键技术进行验证、要并确定解决办法
求 2012.6.27-2012.6.29 程序设计及编码,上机调试
2012.7.02 对程序进行调试,设计测试用例进行测试
2012.7.03 整理课程设计的过程、并进行
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
,完善程序功能
2012.7.04 编写课程设计报告初稿
2012.7.05 完善课程设计报告、并准备答辨
2012.7.06 提交课程设计报告和程序,进行答辨
参1(严蔚敏 吴伟民, 数据结构,清华大学出版社,2007.3 考2(程杰 ,大话数据结构,清华大学出版社,2011.6 资
3((美)Stephen Prata, C Primer Plus中文版(第五版),人民邮电出版社,2005.2 料
其
它
1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由说负责教师留用。2.若填写
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
较多可另纸附后。3.一题多名学生共用的,在设计内容、参
数、要求等方面应有所区别。 明
I
摘 要
在这个信息发达的当前社会,计算机已成为每一个人的必修课,计算机所带来的方便使得每一个人的生活都变的更加方便快捷,数据结构这门学科提供了对数据的各种操作。
这个程序应用了栈和对列(以栈模拟停车场,以队列模拟便道),包含了到达、离去、依次显示停车场内停放车辆、依次显示便道上停放车辆、读取、保存6大功能。通过栈模拟停车场,以队列模拟便道达到了本程序的目的。这个程序有一个主函数包含几个复函数的结构形式,使得整个程序看来井井有条,不论对于编程,还是错误修改都能带来方便,这个程序的优点在于。
关键词:栈 队列 模拟 主函数
II
目 录
摘 要 ................................................................ II 1设计内容与要求 ....................................................... 1
1.1设计主要要求 ................................................... 1
1.2基本设计要求 ................................................... 1 2 算法思路 ............................................................ 2
2.1两个栈和一个队列 ............................................... 2
2.2操作: 栈 ...................................................... 2
2.3队列:进队:车辆进入 ........................................... 2 3 主要功能及运行流程 .................................................. 3
3.1功能介绍 ....................................................... 3
3.2 具体流程 ....................................................... 3 代码实现 ............................................................ 6 4
4.1 主函数 ......................................................... 6
4.2核心代码 ....................................................... 7
4.2.1停车场栈的定义 ............................................ 7
4.2.2定义便道 .................................................. 7
查找某牌照的车在停车场中的位置 ............................ 7 4.2.3
4.2.5进栈,出栈 ................................................ 8
4.2.6依次显示停车场内停放的所有车辆 ............................ 8
4.2.7依次显示便道上停放的所有车辆 .............................. 9
4.2.8入队操作 .................................................. 9 5 操作测试 ........................................................... 10
5.1 具体操作 ...................................................... 10
5.1.1 开始 ........................................................ 10 总 结 ................................................................ 17 参考文献 ............................................................. 18 致 谢 ................................................................ 19
III
1设计内容与要求
利用栈和队列分别模拟停车场位置和便道,主函数与复函数组合构成整个程序,通过对复函数的各种的调用以达到目的。
1.1设计主要要求
假设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开时必须按它停留的时间长短交纳费用(在便道上停车不收费)。试为停车场编制按上述要求进行管理的模拟程序。
1.2基本设计要求
以栈模拟停车场,以队列模拟便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置(停车位从北向南依次编号);若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。程序退出时,应将停车场的当前情况保存在磁盘上,以便下次运行程序时能恢复到上次退出时的状态。
1
2 算法思路
2.1两个栈和一个队列
根据题目要求,停车场只有一个大门,因此可用一个栈来模拟:当栈满后,继续来到的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,先排队的车辆先离开便道,进入停车场。由于排在停车场中间的车辆可以提出离开停车场,并且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车离开,然后让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要用一个栈来保存为了让路离开停车场的车辆。所以本题要用两个栈和一个队列。
2.2操作: 栈
进栈:车辆进入
出栈:车辆离开
查找:允许排中间的车辆先离开停车场,因此需要在栈中进行查找。
2.3队列:进队:车辆进入
出队:车辆离开
查找:允许排中间的车辆先离开停车场,因此需要在队中进行查找。
2
主要功能及运行流程 3
3.1功能介绍
本程序一共有6大功能,分别为到达、离去、依次显示停车场内停放车辆、依次显示便道上停放车辆、读取、保存。各种功能以满足使用者的需求。通过以上功能可以记录车辆的到达时间、离去时间用以计算车辆的停车费用,还可以查看停车场的停车状况。
3.2 具体流程
打开程序后,首先要输入每小时的停车费用,然后选择需要进行的命令,然后按提示输入即可。当要推出程序时应将停车场的当前情况保存在磁盘上,以便下次运行程序时能恢复到上次退出时的状态,当要推出时选择退出指令即可。
这个程序是主函数包含副函数构成的,所以在程序中可以看到许多的单独定义的副函数
Push(t,x,hh,mm,ss) 进栈
Pop(t,y,&hh,&mm,&ss) 出栈
IsSeqstackEmpty(*t) 判断停车场内
是否已没有车辆
开 始 主 函 数 Showbiandao(*Q) 依次显示便道上
停放的所有车辆
ShowSeqstack(*t) 依次显示停车场
内停放的所有车辆
Find(*t,x) 查找某牌照的车在停车
场中的位置
图3.1 主要函数结构图
3
开始
输入每小时的停车费用 1 2 345 6 7
依依
到 离 次次读 保 结
显显
达 开 取 存 束 示示
停便
车道
场上
内停
停放
放车
车辆
辆
结 束
图3.2 程序流程图
4
便 道
A1 A2 A3 A4 A5 ......
车辆进入停车场
停
车
场
停
车
位
置
共
5
图3.3停车场模拟图
5
4 代码实现
为了实现程序的目的,需要定义很多函数和创建结构体,在模拟停车场和便道的时
候都需要创建结构体。
4.1 主函数
实现程序目的
void main()
{double time,cost;
int ch;
int x,*y,z;
int i,flag=1,h,m,s,unit_price,hh,mm,ss;
y=new int;
Seqstack *t; //定义停车场栈 t=new Seqstack;
InitSeqstack(t);
biandao *Q; //定义便道队列 Q=new biandao;
Initbiandao(Q);
Seqstack *r; //定义让路栈 r=new Seqstack;
InitSeqstack(r);
printf("请设置停车费用单价:(__元/小时)\n"); scanf("%d",&unit_price); while(flag)
{printf("***************************\n");
printf("请选择命令\n");
printf("1:到达\n");
printf("2:离开\n");
printf("3:依次显示停车场内停放车辆\n"); printf("4:依次显示便道上停放车辆 \n"); printf("5:读取\n");
printf("6:保存\n");
printf("7:结束\n");
printf("***************************\n");
scanf("%d",&ch);
switch(ch)
{
case 1:case 2:case 3:case 4: case 5: case 6: case 7:
6
4.2核心代码
核心代码里是使程序完成各种功能的不同代码。
4.2.1停车场栈的定义
typedef struct
{
Datatype bianhao[M]; //定义停车场的大小
int top; //定义栈顶
int h[M]; //天
int m[M]; //时
int s[M]; //分
ack; }Seqst
4.2.2定义便道
typedef struct
{
node *front;
node *rear;
int count;
}biandao; //结构体定义队列 typedef struct Node //便道结点,表示一辆汽车
{
Datatype bianhao;
struct Node *next; }node;
4.2.3查找某牌照的车在停车场中的位置 int Find(Seqstack t,int x) {
int i;
for(i=0;i<=t.top;i++) //循环查找车辆
{ if(t.bianhao[i]!=x)
continue; //没找到车辆继续查找
else
break; //找到后退出
}
if(i>t.top)
return(-1); //当i>栈顶时,错误
else
return(i); //输出位置i }
4.2.4依次显示便道上停放的所有车辆 void Showbiandao(biandao Q)
7
{
node *p; //定义节点P
p=Q.front->next; //头结点指向下一个节点
if(p==NULL)
printf("便道上没有停放车辆!\n");
else
while(p!=NULL)
{
printf("牌照:%d ,p->bianhao\n");
p=p->next; //指向下一个节点
}
}
4.2.5进栈,出栈
int Push(Seqstack *t,int x,int h,int m,int s)
{
if(t->top==M-1)
return 0; //确定停车场栈已满
t->top++;
t->bianhao[t->top]=x;//将新插入的元素赋值给栈顶空间
t->h[t->top]=h;
t->m[t->top]=m;
t->s[t->top]=s;
return 1;
}
int Pop(Seqstack *t,int *x,int *h,int *m,int *s)
{
if(t->top==-1) //
return 0;
else
{
*x=t->bianhao[t->top]; //将要删除的栈顶元素赋值给x
*h=t->h[t->top];
*m=t->m[t->top];
*s=t->s[t->top];
t->top--; //栈顶指针减一
return 1;
}
}
4.2.6依次显示停车场内停放的所有车辆 void ShowSeqstack(Seqstack t) {
int i;
if(t.top==-1) //确定停车场是否停放了车辆
8
printf("停车场内没有停放车辆\n");
else
for(i=0;i<=t.top;i++)
printf("牌照:%d \n",t.bianhao[i]);
}
4.2.7依次显示便道上停放的所有车辆 void Showbiandao(biandao Q) {
node *p; //定义节点P
p=Q.front->next; //头结点指向下一个节点
if(p==NULL)
printf("便道上没有停放车辆!\n");
else
while(p!=NULL)//条件循环显示便道上的停放的车辆
{
printf("牌照:%d \n",p->bianhao);
p=p->next; //指向下一个节点
}
}
4.2.8入队操作
当停车场满了的时候,再到达的车辆进去便道队列 int Enterbiandao(biandao *Q,int x)
{
node *NewNode; //定义节点
NewNode=new node;
if(NewNode!=NULL)
{
NewNode->bianhao=x; //将节点赋值为X
NewNode->next=NULL; //将下一个节点定义为空
Q->rear->next=NewNode;//把拥有元素x新节点NewNode赋值给原队尾结点的后继
Q->rear=NewNode; // 把当前的NewNode设置为对尾节点,rear指向NewNode
Q->count++;
return(true);
}
else return(false);
}
9
5 操作测试
通过实际操作,进一步确定程序是否有错,是否符合设计要求。
5.1 具体操作
为了使程序更加完整,也为了进一步
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
程序是否还有漏洞这需要对程序进行全方位的测试,所以一次完整的测试时必须的。
5.1.1 开始
打开程序首先会提示输入停车费用。
具体测试如图所示:
图5.1
10
当输入具体数字后会出现程序提示指令
具体测试如图所示:
图5.2
如果有车辆进入选择‘1’会提示输入车牌号与进入停车场时间 具体测试如图所示:
图5.3
11
如果要查看停车场内的停车情况可以选择‘3’会显示停车状况 具体测试如图所示:
图5.4
当有车要离开时可以输入指令‘2’,输入指令后会提示输入离开时间用以计算
停车费用。
具体测试如图所示:
图5.5
12
由于车辆离开停车场为空,所以当我们再次输入指令‘3’时,会出现提示‘停
车场内没有车辆’。
具体测试如图所示:
图5.6
当进入车辆大于5时,所停车辆会在便道等候。
具体测试如图所示:
13
图5.7
当需要查看停车场和便道的具体情况的时候可以输入‘3’‘4’指令。
具体测试如图所示:
图5.8
图5.9
14
使用完后可以使用保存功能保存当前数据以便可以下次继续使用。 具体测试如图所示:
图5.10
图5.11
15
最后当要结束本软件的时候可以输入指令‘7’。 具体测试如图所示:
图5.12
16
总 结
本次课程的程序比较大,要理清思路才能快速的完成。在构思这个程序时要注意如何利用栈和队列来模拟停车场和便道,停车场里的车辆只能从入口进入和出去这就类似于栈只能从栈定加入和剪掉数据一样,而队列模拟便道也是一样,车辆只能从一个方向进入,另一个方向则是通往停车场,所以在构思时把握住这一点将有利于程序的编写。在编写程序的时候要注意当有车辆离开停车场的时候后面的车辆会前进一步,便道内的车也会开进停车场,这样需要重新编号。
这个程序的因为使用了主函数引用副函数的结构,所以在编写或者修改的时候带来很多的方便,这个程序的功能也十分强大除了模拟车辆进入和退出停车场二个功能外还附带了数据读取与保存,这使得用户在使用的时候更加方便快捷。在学习上,通过本次课程设计使我更加熟练的使用栈和队列,数据结构也理解的更透彻。程序也存在一定的缺陷,画面不够好看,在一些数据读取上没有确切的界限,这也导致了本程序的不完整性。
17
参考文献
1(严蔚敏 吴伟民, 数据结构,清华大学出版社,2007.3 2(程杰 ,大话数据结构,清华大学出版社,2011.6
3((美)Stephen Prata, C Primer Plus中文版(第五版),人民邮电出版社,2005.2
18
致 谢
本次课程中,在程序书写过程中遇到了很多问题,这些问题都是平时没有太多注意的地方,但在各位老师的帮助下,不厌其烦的讲解下,终于解决这些问题,在这里,表达我最忠诚的感谢。
最后我还要感谢的是我的同学们,在书写程序的过程中,他们也给予了我很大的帮助,最后谢谢给予我帮助的所有人。
19