停车场模拟管理系统报告.docx
- 文档编号:25760038
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:17
- 大小:28.62KB
停车场模拟管理系统报告.docx
《停车场模拟管理系统报告.docx》由会员分享,可在线阅读,更多相关《停车场模拟管理系统报告.docx(17页珍藏版)》请在冰豆网上搜索。
停车场模拟管理系统报告
停车场模拟管理系统实验报告
班级:
数学一班姓名:
杨宁学号:
2007429010日期:
2008-11-8
一、需求分析:
1.程序功能:
用顺序栈模拟停车位和辅助栈,用顺序队模拟便道。
来车显示停车位置,离车显示车辆调度情况及应交的停车费,还能查询特定车牌号的汽车所在的位置。
2.输入输出要求:
C,L,F,Q分别表示来车,离车,查询车,退出;来车时输入车牌号,走时输入所在停车位的位置,查询输入车牌号;
3.测试数据:
(1)来车:
JE001到JE010
(2)查询:
JE003,JE008
(3)离车:
JE001,JE007
(4)退出
二、概要设计:
1.本程序所用的抽象数据类型定义:
顺序栈,顺序队;
2.主模块的流程及个子模块的主要功能:
(1)STOPPING*init_stopping()初始化停位
(2)BUFFER*init_buff()初始化辅助栈
(3)PAVEMENT*init_pavement()初始化便道
(4)voidcar_come(char*plate,char*in_time)来车函数
(5)voidcar_leave(intpos,char*out_time)离车函数
(6)voidstop_to_buff(intpos)从停车位进入辅助栈函数
(7)voidbuff_to_stop(intpos)从辅助栈进入停车位函数
(8)voidpave_to_stop()从便道进入停车位函数
(9)floatcheckout(char*in_time,char*out_time)计算停车费函数
(10)voidwelcome()欢迎函数
(11)voiddisplay()显示停车场情况的函数
(12)voidshow_car(char*plate)查询并显示汽车信息的函数
(13)voidmain()主函数
三、详细设计:
1.采用C语言定义停车位、辅助栈、便道:
(1)STOPPING*init_stopping()/*初始化停车位*/
{
STOPPING*s;
s=(STOPPING*)malloc(sizeof(STOPPING));
if(!
s)
{
printf("STOPPING空间不足!
");
returnNULL;
}
else
{
s->top=-1;
returns;
}
}
(2)BUFFER*init_buff()/*初始化辅助栈*/
{
BUFFER*b;
b=(BUFFER*)malloc(sizeof(BUFFER));
if(!
b)
{
printf("BUFFER空间不足!
");
returnNULL;
}
else
{
b->top=-1;
returnb;
}
}
(3)PAVEMENT*init_pavement()/*初始化便道*/
{
PAVEMENT*p;
p=(PAVEMENT*)malloc(sizeof(PAVEMENT));
p->front=p->rear=MAX_PAVE-1;
returnp;
}
2.主要功能模块的伪码算法:
(1)voidcar_come(char*plate,char*in_time)
{
If(停车为未满)
来车进入停车位;
Else
来车进入便道等候;
}
(2)voidcar_leave(intpos,char*out_time)
{
输入汽车所在位置;
If(汽车不在最后一个车位)
stop_to_buff(intpos);
所选汽车离去;
显示应缴费用;
If(辅助栈不空)
buff_to_stop(intpos);
if(便道不空)
pave_to_stop();
}
(3)voidshow_car(char*plate)
{
遍历停车位,如找到所查汽车则停止;
If(停车位无此车)
遍历便道,如找到停止;
if(便道无此车)
显示信息无此车;
}
3.
Welcome()
函数调用关系:
Stop_to_buff()
Display()
Buff_to_stop()
Main()
Car_leave()
Pave_to_stop()
Car_come()
Checkout()
Show_car()
四、调试分析:
1.调试中的问题及解决方法:
(1)各函数无法都作用于顺序队和顺序栈,解决方法:
将顺序队和顺序栈定义成全局变量;
(2)无法将输入的字符指针char*plate接收的车牌号字符串传递给各函数,解决方法:
在给plate输入前给plate开辟空间
plate=(char*)malloc(sizeof(char));
(3)无法将字符串型的时间逐个转换成整型,解决方法:
定义字符型指针,逐一指向字符串中的每个字符;
五、使用说明及测试结果:
1.使用说明:
输入C(L、F、Q)表示来车(离车、查询、退出),接下来按照提示输入;
2.测试结果:
(1)来车:
请选择您要的操作:
c
请输入您的车牌号:
JE001
请输入您的入场时间:
10:
10
请您停放在1号车位!
您的入场时间为:
10:
10
停车位的情况:
1车位——JE001
(2)离车:
请选择您要的操作:
L
请输入您的汽车所在停车位的车位数:
1
请输入您的离场时间:
10:
40
牌照为JE003的汽车暂时退出停车位!
牌照为JE002的汽车暂时退出停车位!
拍照为JE001的汽车从停车场开走!
请交费3.0元!
牌照为JE002的汽车停回停车位的1车位!
牌照为JE003的汽车停回停车位的2车位!
停车位的情况:
1车位——JE002
2车位——JE003
(3)请选择您要的操作:
F
请输入您要查找的车牌号:
JE002
您的汽车JE002位于停车位的1车位!
六、源程序:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#defineMAX_STOP5/*停车位*/
#defineMAX_PAVE100/*便道位*/
typedefstruct
{
char*license_plate;/*车牌号*/
char*in_time;/*进入停车场的时间*/
char*out_time;/*离开停车场的时间*/
charstate;/*状态,S表示停车位,P表示便道,L表示离开*/
}CAR;
typedefstruct/*定义停车为类型*/
{
CARSTOP[MAX_STOP];
inttop;
}STOPPING;
typedefstruct/*定义便道类型*/
{
CARPAVE[MAX_PAVE];
intfront,rear;
}PAVEMENT;
typedefstruct/*定义辅助栈类型*/
{
CARBUFF[MAX_STOP];
inttop;
}BUFFER;
STOPPING*init_stopping()/*初始化停车位*/
{
STOPPING*s;
s=(STOPPING*)malloc(sizeof(STOPPING));
if(!
s)
{
printf("STOPPING空间不足!
");
returnNULL;
}
else
{
s->top=-1;
returns;
}
}
BUFFER*init_buff()/*初始化辅助栈*/
{
BUFFER*b;
b=(BUFFER*)malloc(sizeof(BUFFER));
if(!
b)
{
printf("BUFFER空间不足!
");
returnNULL;
}
else
{
b->top=-1;
returnb;
}
}
PAVEMENT*init_pavement()/*初始化便道*/
{
PAVEMENT*p;
p=(PAVEMENT*)malloc(sizeof(PAVEMENT));
p->front=p->rear=MAX_PAVE-1;
returnp;
}
staticSTOPPING*stopping=init_stopping();/*定义停车位*/
staticBUFFER*buff=init_buff();/*定义辅助栈*/
staticPAVEMENT*pavement=init_pavement();/*定义便道*/
voidcar_come(char*plate,char*in_time)/*来车函数*/
{
if(stopping->top!
=MAX_STOP-1)
{
stopping->top++;
stopping->STOP[stopping->top].license_plate=plate;
stopping->STOP[stopping->top].in_time=in_time;
stopping->STOP[stopping->top].state='S';
printf("请您停放在%d号车位!
您的入场时间为:
%s\n",stopping->top+1,stopping->STOP[stopping->top].in_time);
}
else
{
pavement->rear=(pavement->rear+1)%MAX_PAVE;
pavement->PAVE[pavement->rear].license_plate=plate;
pavement->PAVE[pavement->rear].in_time=in_time;
pavement->PAVE[pavement->rear].state='P';
printf("停车位已满!
请在便道等待!
您的入场时间为:
%s\n",pavement->PAVE[pavement->rear].in_time);
}
}
voidstop_to_buff(intpos)/*暂入辅助栈函数*/
{
buff->top++;
buff->BUFF[buff->top].license_plate=stopping->STOP[pos].license_plate;
buff->BUFF[buff->top].in_time=stopping->STOP[pos].in_time;
stopping->top--;
printf("牌照为%s的汽车暂时退出停车位!
\n",stopping->STOP[pos].license_plate);
}
voidbuff_to_stop(intpos)/*由辅助栈返回停车位函数*/
{
stopping->top++;
stopping->STOP[pos].license_plate=buff->BUFF[buff->top].license_plate;
stopping->STOP[pos].in_time=buff->BUFF[buff->top].in_time;
stopping->STOP[pos].state='S';
buff->top--;
printf("牌照为%s的汽车停回停车位的%d车位!
\n",stopping->STOP[pos].license_plate,pos+1);
}
voidpave_to_stop()/*由便道进入停车位函数*/
{
stopping->top++;
pavement->front=(pavement->front+1)%MAX_PAVE;
stopping->STOP[stopping->top].license_plate=pavement->PAVE[pavement->front].license_plate;
stopping->STOP[stopping->top].in_time=pavement->PAVE[pavement->front].in_time;
stopping->STOP[stopping->top].state='S';
printf("牌照为%s的汽车从便道上进入停车位的%d车位!
\n",pavement->PAVE[pavement->front].license_plate,MAX_STOP);
}
floatcheckout(char*in_time,char*out_time)/*记时收费函数*/
{
intsum1=0,sum2=0;
char*a,*b;
a=in_time;
b=out_time;
sum1+=(*(a+4)-'0')+(*(a+3)-'0')*10;
sum1+=((*(a+1)-'0')+(*a-'0')*10)*60;
sum2+=(*(b+4)-'0')+(*(b+3)-'0')*10;
sum2+=((*(b+1)-'0')+(*b-'0')*10)*60;
return((sum2-sum1)*0.1);
}
voidcar_leave(intpos,char*out_time)/*离车函数*/
{
inta=pos;
intb=a-1;
intc,d;
floatmoney;
money=checkout(stopping->STOP[b].in_time,out_time);
if(a>MAX_STOP||a<1)
{
printf("车位号只能是1——5,请重新输入!
");
scanf("%d",&a);
car_leave(a,out_time);
return;
}
if(b!
=stopping->top)
{
for(c=stopping->top;c>b;c--)
stop_to_buff(c);
d=buff->top;
}
stopping->top--;
printf("牌照为%s的汽车从停车场开走!
请交费%f元!
\n",stopping->STOP[b].license_plate,money);
if(buff->top!
=-1)
{
for(c=b;c<=b+d;c++)
buff_to_stop(c);
}
if(pavement->front!
=pavement->rear)
pave_to_stop();
}
voidwelcome()/*欢迎界面*/
{
printf("\n●欢迎使用本程序●\n\n");
printf("本程序为停车场的模拟管理程序,有车到来时请按C(或c)键。
\n");
printf("然后根据屏幕提示进行相关操作,有车要走时请按L(或l)键。
\n");
printf("然后根据屏幕提示进行相关操作,查找汽车时请按F(或f)键。
\n");
printf("然后根据屏幕提示进行相关操作,要退出程序请按Q(或q)键。
\n\n\n");
}
voiddisplay()/*显示停车场情况函数*/
{
inti=0,j;
intk=1;/*表示便道位置*/
if(stopping->top==-1)
printf("停车位上暂无车辆!
\n\n");
else
{
printf("停车位的情况:
\n");
while(i<=stopping->top)
{
printf("%d车位——%s\n",i+1,stopping->STOP[i].license_plate);
i++;
}
if(pavement->front!
=pavement->rear)
{
j=(pavement->front+1)%MAX_PAVE;
printf("便道上的情况:
\n");
while(j<=pavement->rear)
{
printf("%d位置——%s\n",k,pavement->PAVE[j].license_plate);
j++;
k++;
}
}
printf("\n");
}
}
voidshow_car(char*plate)/*查找并显示信息函数*/
{
inti,j;
for(i=0;i<=stopping->top;i++)
if(!
strcmp(stopping->STOP[i].license_plate,plate))break;
if(i==stopping->top+1)
{
for(j=(pavement->front+1)%MAX_PAVE;j<=pavement->rear;j++)
if(!
strcmp(pavement->PAVE[j].license_plate,plate))break;
}
if(i
printf("您的汽车%s位于停车位的%d车位!
\n\n",plate,i+1);
else
{
if(j
printf("您的汽车位于便道的%d位置!
\n\n",j-(pavement->front+1)%MAX_PAVE+1);
else
printf("对不起,停车场中无此车!
\n\n");
}
}
voidmain()
{
charkey;
char*plate,*in_time,*out_time;
inta;
welcome();
display();
printf("请选择您要的操作:
");
do
{
scanf("%c",&key);
if(key=='c'||key=='C')
{
printf("请输入您的车牌号:
");
plate=(char*)malloc(sizeof(char));
scanf("%s",plate);
printf("请输入您的入场时间:
");
in_time=(char*)malloc(sizeof(char));
scanf("%s",in_time);
car_come(plate,in_time);
display();
printf("请选择您要的操作:
");
}
if(key=='l'||key=='L')
{
printf("请输入您的汽车所在停车位的车位数:
");
scanf("%d",&a);
printf("请输入您的离场时间:
");
out_time=(char*)malloc(sizeof(char));
scanf("%s",out_time);
car_leave(a,out_time);
display();
printf("请选择您要的操作:
");
}
if(key=='f'||key=='F')
{
printf("请输入您要查找的车牌号:
");
plate=(char*)malloc(sizeof(char));
scanf("%s",plate);
show_car(plate);
printf("请选择您要的操作:
");
}
}while(key!
='q'&&key!
='Q');
printf("谢谢使用本程序,再见!
\n");
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 模拟 管理 系统 报告