停车场车辆管理主要设计源码:
void StopInput(SqStack *S) //停车场车辆登记
{
int e;
int i;
int j = 0;
int isReach = FALSE; //车到达与否
int isLeave = FALSE; //车离开与否
int leaveTime = 0; //即尚未离开
int cost = 0; //停车费用
int isEmpty = TRUE; //车位是否为空
int *p = NULL;
printf("\n--车辆到达登记--\n");
printf("\n请输入车牌号:(车牌号重复时自动退出)\n");
scanf("%d",&e);
isReach = TRUE;
if(Search(S,0) && !Search(S,e)) //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此
{
if((*S).top != (*S).base) //栈不为空时
{
for(p= (*S).base;p <= (*S).top-1;p++)
{
j++;
//printf("\n--%d--\n",j);
if(j == 4)
{
time(&rawtime);
*p = rawtime;
timeinfo = localtime (&rawtime);
printf("到达时间: %s",asctime(timeinfo));
}
else if(j == 6)
{
if(*p != NULL)
{
rawtime = *p;
timeinfo = localtime (&rawtime);
printf("离开时间: %s",asctime(timeinfo));
}
else
printf("离开时间: 空\n");
}
else if(j == 7)
{
*p = 0;
printf("停车费用:%d元\n",*p);
}
else if(j == 8)
{
*p = FALSE;
if(*p == FALSE)
printf("停车位是否为空: 否\n");
else
printf("停车位是否为空: 是\n");
j = 0;
break;
}
else if(j == 1 || j == 2 || j == 3 || j == 5)
{
if(j == 1)
{
while(*p != 0 && p <= (*S).top-1)
{
for(i = 0;i < 8;i++)
p++;
j = 1;
}
if(*p == 0)
{
*p = e;
printf("\n车牌号: %d\n",*p);
}
}
if(j == 2)printf("停车位: %d\n",*p);
if(j == 3)
{
*p = TRUE;
if(*p == FALSE)
printf("到达: 否\n");
else
printf("到达: 是\n");
}
if(j == 5)
{
*p = FALSE;
if(*p == FALSE)
printf("离开: 否\n");
else
printf("离开: 是\n");
}
}
}
}
}
else{
while(e != 0 && !Search(S,e))
{
sLocation++;
time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间)
isEmpty = FALSE;
Push(S,e);
Push(S,sLocation);
Push(S,isReach);
Push(S,rawtime);
Push(S,isLeave);
Push(S,leaveTime);
Push(S,cost);
Push(S,isEmpty);
printf("\n--车牌号%d登记成功--\n",e);
printf("\n请输入车牌号:\n");
scanf("%d",&e);
}
printf("\n--车牌号已存在,无法登记--\n");
StackTraverse(S); //遍历输出
}
}
void StopToLoad(dat *Q,int tempCarNumber) //车辆从停车场转入便道
{
int e;
int i;
int j = 0;
int isReach = FALSE; //车到达与否
int isLeave = FALSE; //车离开与否
int leaveTime = 0; //即尚未离开
int cost = 0; //停车费用
int isEmpty = TRUE; //车位是否为空
isReach = TRUE;
e = tempCarNumber;
if(QSearch(Q,0) && !QSearch(Q,e)) //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此
{
if((*Q).front != (*Q).rear) //队列不为空时
{
DAT *p = (*Q).front -> next;
while(p != NULL)
{
j++;
if(j == 4)
{
time(&rawtime);
p -> data = rawtime;
timeinfo = localtime (&rawtime);
printf("到达时间: %s",asctime(timeinfo));
}
else if(j == 6)
{
if(p -> data != NULL)
{
rawtime = p -> data;
timeinfo = localtime (&rawtime);
printf("离开时间: %s",asctime(timeinfo));
}
else
printf("离开时间: 空\n");
}
else if(j == 7)
{
p -> data = 0;
printf("在便道停留时间:%d秒\n",p -> data);
}
else if(j == 8)
{
p -> data = FALSE;
if(p -> data == FALSE)
printf("停车位是否为空: 否\n");
else
printf("停车位是否为空: 是\n");
j = 0;
break;
}
else if(j == 1 || j == 2 || j == 3 || j == 5)
{
if(j == 1)
{
while(p -> data != 0)
{
for(i = 0;i < 8;i++)
{
p = p -> next;
}
j = 1;
}
if(p -> data == 0)
{
p -> data = e;
printf("\n车牌号: %d\n",p -> data);
}
}
if(j == 2)printf("便道车位: %d\n",p -> data);
if(j == 3)
{
p -> data = TRUE;
if(p -> data == FALSE)
printf("到达: 否\n");
else
printf("到达: 是\n");
}
if(j == 5)
{
p -> data = FALSE;
if(p -> data == FALSE)
printf("离开: 否\n");
else
printf("离开: 是\n");
}
}
p = p -> next;
}
}
printf("\n便道的车辆信息已更新:\n");
QueueTraverse(Q); //遍历输出
printf("\n-----------------------------\n");
}
else{
while(e != 0 && !QSearch(Q,e))
{
lLocation++;
time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间)
isEmpty = FALSE;
EnQueue(Q,e);
EnQueue(Q,lLocation);
EnQueue(Q,isReach);
EnQueue(Q,rawtime);
EnQueue(Q,isLeave);
EnQueue(Q,leaveTime);
EnQueue(Q,cost);
EnQueue(Q,isEmpty);
printf("\n--车牌号%d成功转入便道--\n",e);
}
printf("\n便道的车辆信息已更新:\n");
QueueTraverse(Q); //遍历输出
printf("\n-----------------------------\n");
}
}
void StopLeave(SqStack *S,dat *Q) //车辆离开停车场
{
int tempCarNumber;
int flag;
int e;
int i;
int j = 0;
int *p = NULL;
int isEmpty = TRUE; //车位是否为空
int cost = 0; //车辆停车费用
int sCost = 2; //停车场停车费1秒2元
int time1,time2; //用于记录离开和到达的时间(中间变量)
printf("\n--车辆离开登记(车牌号不存在时自动退出)--\n");
printf("\n请输入已经离开的车牌号:\n");
scanf("%d",&e);
while(e != 0 && Search(S,e))
{
tempCarNumber = e;
printf("\n离开的车辆的信息如下:\n");
printf("-----------------------------------\n");
if((*S).top != (*S).base) //栈不为空时
{
for(p = (*S).base;p <= (*S).top-1;p++)
{
j++;
//printf("\n--j = %d--\n",j);
if(j == 4)
{
if(*p != NULL)
{
rawtime = *p;
timeinfo = localtime (&rawtime);
printf("到达时间: %s",asctime(timeinfo));
time1 = rawtime;
*p = 0; //车辆离开后时间重置
}
}
else if(j == 6)
{
time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间)
timeinfo = localtime (&rawtime);
printf("离开时间: %s",asctime(timeinfo));
time2 = rawtime;
*p = 0;
}
else if(j == 7)
{
cost = (time2 - time1) * sCost;
printf("停车费用: %d元\n",cost);
cost = 0;
}
else if(j == 8)
{
*p = TRUE;
printf("停车位是否为空: 是\n");
printf("-----------------------------------\n");
j = 0;
break;
}
else if(j == 1 || j == 2 || j == 3 || j == 5)
{
if(j == 1)
{
while(*p != e)
{
for(i = 0;i < 8;i++)
{
//printf("\n--p = %d--\n",*p);
p++;
}
j = 1;
}
if(*p == e)
{
printf("车牌号: %d\n",*p);
*p = 0;
}
}
else if(j == 2)printf("停车位: %d\n",*p);
else if(j == 3)
{
if(*p == FALSE)
printf("到达: 否\n");
else
printf("到达:是\n");
*p = FALSE;
}
if(j == 5)
{
*p = TRUE;
if(*p == FALSE)
printf("离开: 否\n");
else
printf("离开:是\n");
*p = FALSE;
}
}
}
}
printf("\n离开停车场的该车辆是否要进入便道(1/0)?\n");
scanf("%d",&flag);
if(flag == 1)
StopToLoad(Q,tempCarNumber);
printf("\n如果还有车辆需要离开停车场的话:\n");
printf("请输入已经离开的车牌号:\n");
scanf("%d",&e);
}
printf("\n--查无此车牌号--\n");
}