停车场管理系统数据结构课程设计.docx
《停车场管理系统数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统数据结构课程设计.docx(11页珍藏版)》请在冰豆网上搜索。
停车场管理系统数据结构课程设计
停车场管理系统
一编程思想:
将停车场设计成一个虚拟的栈,将其入口设计成栈顶,在设计一个倒车场,也将其设计成一个虚拟的栈,使其入口为栈顶,再根据队列设计一个供车来停放的便道,当停车场里的车辆不为满时,车辆进入停车场,当停车场里的车辆为满时,车辆在便道里等候,当车辆从停车场里出来的时候,如果出来的不是第一个车辆,则其前面的车辆将进入倒车场里面,待车辆出去后,倒车场里的车再依次进入停车场,如果停车场不满的话,便道里等候的第一辆车进入停车场,进入停车场的时间为停车场中车辆出来的时间,再设计一个函数用来显示停车场以及便道中车辆的信息。
二程序流程图:
NY
三,程序代码:
#include
#defineSize3/*车库容量*/
#definePrice5/*单位价格*/
#defineNull0
typedefstructtime
{
inthour;/*时间结点*/
}Time;
typedefstruct
{
intcar_number;
Timearrivetime,leavetime;/*车信息结点*/
intfee;
}car_info;
typedefstruct
{
car_info*north;
car_info*south;/*停车场信息*/
intnumber;
}car_park;
typedefstruct
{
car_info*west;
car_info*east;/*倒车场信息*/
intnumber;
}car_park_back;
Typedefstructcar
{
car_info*data;
structcar*next;/*结点信息*/
}carnode;
typedefstructnode
{
carnode*head;
carnode*rear;/*便道信息*/
intnumber;
}car_park_temp;
voidinit_car_park(car_park*cp)
{
cp->north=(car_info*)malloc(Size*sizeof(car_info));/*初始化停车场*/
if(!
cp->north)printf("error\n");
cp->south=cp->north;/*令栈顶等于栈底*/
cp->number=0;
}
voidenter_car_park(car_park*cp,car_info*car)
{
*cp->south++=*car;/*车辆进入停车场*/
cp->number++;
}
intnotfull_car_park(car_park*cp)
{
inte;
if(cp->south-cp->north>=Size)/*判断常常是否已满*/
e=0;
else
e=1;
return(e);
}
intnotempty_car_park_back(car_park_back*cpb)
{
inte;
if(cpb->east==cpb->west)
e=0;/*判断倒车场是否不空*/
else
e=1;
return(e);
}
voidback_car_park(car_park*cp,car_info*car)
{
*car=*cp->south;/*进行倒车操作*/
cp->number--;
}
voidinit_car_park_back(car_park_back*cpb)
{
cpb->west=(car_info*)malloc(Size*sizeof(car_info));
if(!
cpb->west)printf("error\n");/*倒车场初始化*/
cpb->east=cpb->west;
cpb->number=0;
}
voidenter_car_park_back(car_park_back*cpb,car_info*car)
{
*cpb->east++=*car;
cpb->number++;/*进入倒车场操作*/
}
voidleave_car_park_back(car_park_back*cpb,car_info*car)
{
*car=*--cpb->east;
cpb->number--;/*离开倒车场操作*/
}
voidinit_car_park_temp(car_park_temp*cpt)
{
cpt->head=cpt->rear=(carnode*)malloc(sizeof(carnode));/*初始化便道*/
cpt->head->next=Null;
cpt->number=0;
}
voidenter_car_park_temp(car_park_temp*cpt,car_info*car)
{
carnode*p;
p=(carnode*)malloc(sizeof(carnode));/*进入便道操作*/
p->data=car;
p->next=Null;
cpt->rear->next=p;
cpt->rear=p;
cpt->number++;
}
voidleave_car_park_temp(car_park_temp*cpt,car_info*car,car_park*cp)
{
carnode*p;
p=cpt->head->next;
car=p->data;/*离开便道操作*/
cpt->head->next=p->next;
enter_car_park(cp,car);/*进入停车场操作*/
cpt->number--;
}
intnotempty_car_park_temp(car_park_temp*cpt)
{
inte;
if(cpt->head==cpt->rear)/*判断便道是否为空*/
e=0;
else
e=1;
return(e);
}
voidleave_car_park(car_park*cp,car_info*car,car_park_back*cpb)
{
inte,a1,b1,t;/*定义时间变量*/
car_info*car1,*car2;
car1=(car_info*)malloc(sizeof(car_info));/*车辆实体化*/
car2=(car_info*)malloc(sizeof(car_info));
while((--cp->south)->car_number!
=car->car_number)/*判断车号是否为要出去的车号*/
{
back_car_park(cp,car1);/*进行倒车操作*/
enter_car_park_back(cpb,car1);/*进入倒车场*/
}
car->arrivetime.hour=cp->south->arrivetime.hour;
a1=car->arrivetime.hour;
b1=car->leavetime.hour;
t=(b1-a1);
car->fee=t*Price;/*计算价格*/
printf("thetimeofthecaris%3dhour\n",t);
printf("themoneyis%3dyuan\n",car->fee);
e=notempty_car_park_back(cpb);/*判断倒车场是否为空*/
while(e==1)
{
leave_car_park_back(cpb,car2);/*离开倒车场
enter_car_park(cp,car2);进入停车场
e=notempty_car_park_back(cpb);判断倒车场是否为空*/
}
cp->number--;
}
voidmain()/*主函数*/
{
charch;/*定义字符和
inte,n,i;整形变量*/
car_park_back*cpb;/*定义停车场,倒车场以及便道的变量*/
car_park*cp;
car_park_temp*cpt,*cpt2;
car_info*car;
cp=(car_park*)malloc(sizeof(car_park));/*实体化变量*/
cpb=(car_park_back*)malloc(sizeof(car_park));
cpt=(car_park_temp*)malloc(sizeof(car_park_temp));
init_car_park(cp);/*实体化停车场,倒车场,便道*/
init_car_park_back(cpb);
init_car_park_temp(cpt);
do
{
car=(car_info*)malloc(sizeof(car_info));
printf("\ninputthe'A'or'L'or'X',endwith'0':
");/*输入待操作的命令*/
scanf("%s",&ch);
e=notfull_car_park(cp);/*判断车场是否为空*/
switch(ch)/*判断要输入的命令*/
{
case'A':
if(e==1)/*车场不满,进入车辆*/
{
printf("inputthecar_number:
");/*输入车辆的基本信息*/
scanf("%d",&car->car_number);
printf("inputthearrivetime:
");
scanf("%d",&(*car).arrivetime.hour);
enter_car_park(cp,car);/*进入车场*/
printf("thecarisinthecar_park,theplaceis%d\n",cp->number);
}
else/*若车场满,进入便道*/
{
enter_car_park_temp(cpt,car);
printf("inputthecar_number:
");
scanf("%d",&car->car_number);
printf("thecarisinthecar_park_temp,theplaceoftempis%d\n",cpt->number);
}
break;
case'L':
/*离开停车场*/
printf("inputthecar_number:
");/*输入要离开车辆的号码以及离开时间*/
scanf("%d",&car->car_number);
printf("inputtheleavetimeofthecar:
");
scanf("%d",&(*car).leavetime.hour);
leave_car_park(cp,car,cpb);/*执行离开车场*/
i=(*car).leavetime.hour;/*令便道里车辆进入车场的时间和车场里面的
车离开的时间相等*/
n=notempty_car_park_temp(cpt);/*判断便道是否不空*/
if(n==1)
printf("Thecar%d",cpt->head->next->data->car_number);/*记住便道里第一辆车的号码*/
leave_car_park_temp(cpt,car,cp);/*离开便道,进入停车场*/
printf("isenterthecar_park,arrivetimeis%d,theplaceofcarparkis%d\n",i,cp->number);
break;
case'X':
/*查看车场以及便道里的车辆信息*/
printf("\nThereare%dcarsincarpark!
\nFolowingisthecarnumberinthecarpark:
\n",cp->number);
for(i=1;i<=cp->number;i++)/*做循环,依次输出停车场里车辆的信息*/
printf("%d,",(cp->north++)->car_number);
cp->north=cp->north-cp->number;
cpt2->head=cpt->head;/*设一个虚拟指针使其指向头结点的下一个位置*/
if(cpt->number==0)/*便道里没有车的情况*/
printf("\nThereisnocarsintemp!
");
else
{printf("\nThereare%dcarsincartemp!
\nFolowingisthecarnumberinthecartemp:
\n",cpt->number);
for(i=1;i<=cpt->number;i++)/*做一个循环,输出便道里车辆的信息*/
{
printf("%d",cpt2->head->next->data->car_number);/*输出车辆的号码*/
cpt2->head=cpt2->head->next;
}
}
break;
default:
break;/*退出循环*/
}
}while(ch!
='0');/*退出操作*/
}