停车场管理系统代码Word下载.docx
- 文档编号:7027825
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:14
- 大小:17.40KB
停车场管理系统代码Word下载.docx
《停车场管理系统代码Word下载.docx》由会员分享,可在线阅读,更多相关《停车场管理系统代码Word下载.docx(14页珍藏版)》请在冰点文库上搜索。
charszDepartureTime[16];
//离开时间
}TCARINFORMATION,*LPTCARINFORMATION;
typedefstructcarstack
LPTCARINFORMATIONlpCarInformation;
//车辆信息
intnTop;
//栈顶元素下标
intnStackSize;
//栈容量
}TCARSTACK,*LPTCARSTACK;
//初始化栈lpCarStack,将其容量设置为nSize
voidInitStack(LPTCARSTACK&
lpCarStack,intnSize)
lpCarStack=(LPTCARSTACK)malloc(sizeof(TCARSTACK));
lpCarStack->
lpCarInformation=(LPTCARINFORMATION)malloc(
nSize*sizeof(TCARINFORMATION)
);
nTop=-1;
nStackSize=nSize;
}
//车辆信息carinfo入栈lpCarStack
voidPush(LPTCARSTACK&
lpCarStack,TCARINFORMATIONcarinfo)
nTop++;
lpCarInformation[lpCarStack->
nTop]=carinfo;
//车辆信息从栈lpCarStack中弹出并存入carinfo
voidPop(LPTCARSTACK&
lpCarStack,TCARINFORMATION&
carinfo)
carinfo=lpCarStack->
nTop];
nTop--;
//若栈lpCarstack空,返回TRUE;
否则,返回FALSE
BOOLIsStackEmpty(LPTCARSTACKlpCarStack)
returnlpCarStack->
nTop==-1;
//若栈lpStackFull满,返回TRUE;
BOOLIsStackFull(LPTCARSTACKlpCarStack)
nTop==(lpCarStack->
nStackSize-1);
//销毁栈lpCarStack,将指针lpCarStack置为NULL
voidDestroyStack(LPTCARSTACK&
lpCarStack)
free(lpCarStack->
lpCarInformation);
free(lpCarStack);
lpCarStack=NULL;
typedefstructcarnode//链队结点信息
TCARINFORMATIONcarinfo;
//车辆信息
structcarnode*lpNext;
//指向下一个元素的指针
}TCARNODE,*LPTCARNODE;
typedefstructcarqueue//链队
LPTCARNODElpHead;
//头结点
LPTCARNODElpRear;
//指向当前队尾的指针
intnEffectiveSize;
//当前队中元素个数
}TCARQUEUE,*LPTCARQUEUE;
//初始化链队lpCarQueue
voidInitQueue(LPTCARQUEUE&
lpCarQueue)
lpCarQueue=(LPTCARQUEUE)malloc(sizeof(TCARQUEUE));
lpCarQueue->
lpHead=(LPTCARNODE)malloc(sizeof(TCARNODE));
lpHead->
lpNext=NULL;
lpRear=lpCarQueue->
lpHead;
nEffectiveSize=0;
//车辆信息carinfo入队lpCarQueue
voidEnQueue(LPTCARQUEUE&
lpCarQueue,TCARINFORMATIONcarinfo)
LPTCARNODElpCarNode=(LPTCARNODE)malloc(sizeof(carnode));
lpCarNode->
carinfo=carinfo;
lpRear->
lpNext=lpCarNode;
lpNext;
nEffectiveSize++;
//队头元素从链队lpCarQueue中出队并存入carinfo
voidDeQueue(LPTCARQUEUE&
lpCarQueue,TCARINFORMATION&
LPTCARNODElpTemp=lpCarQueue->
carinfo=lpTemp->
carinfo;
lpNext=lpTemp->
free(lpTemp);
nEffectiveSize--;
//若链队lpCarQueue为空,返回TRUE;
BOOLIsQueueEmpty(LPTCARQUEUElpCarQueue)
returnlpCarQueue->
nEffectiveSize==0;
//销毁链队lpCarQueue
voidDestroyQueue(LPTCARQUEUE&
LPTCARNODElpNextCarNode=NULL;
for(LPTCARNODElpCarNode=lpCarQueue->
lpCarNode!
=NULL;
lpCarNode=lpNextCarNode)
{
lpNextCarNode=lpCarNode->
free(lpCarNode);
}
free(lpCarQueue);
lpCarQueue=NULL;
//将字符串时间格式转换为数字(分钟)格式,例如12:
36将被转换为756(12*60+36)
intConvertTimeFormat(char*lpTime)
intnHour=0;
intnMinute=0;
sscanf(lpTime,"
%d:
%d"
&
nHour,&
nMinute);
returnnHour*60+nMinute;
//根据在停车场内的停留时间nContinuanceMinutes(分钟)计算费用
doubleCalculateExpense(intnContinuanceMinutes)
returnnContinuanceMinutes*(5.0/60);
intmain(void)
//setcolor();
intnParkCapability=0;
//停车场容量
putchar('
\n'
printf("
请输入停车场容量:
"
scanf("
nParkCapability);
LPTCARSTACKlpCarStack=NULL;
//停车场,用栈模拟豫
InitStack(lpCarStack,nParkCapability);
LPTCARQUEUElpCarQueue=NULL;
//便道,用链队模拟
InitQueue(lpCarQueue);
charcCommandType=NULL;
//命令类型
charszUserInput[128]={NULL};
//用户输入
do
ClearScreen();
//setcolor();
puts("
--------------------"
[命令类型]"
A-车辆到达"
D-车辆离开"
E-停止输入"
O-显示当前停车场和便道使用情况"
例:
A,鄂A3926,13:
33"
D,鄂A3926,14:
44"
E"
O"
请输入命令:
szUserInput);
charszCarInformation[128]={NULL};
sscanf(szUserInput,//将命令类型与车辆信息分开存放
"
%c,%s"
&
cCommandType,//用户输入的前半部分,即命令类型
szCarInformation//用户输入的后半部分,即车辆信息
char*lpCommaLocation=NULL;
//车辆信息字符串中的逗号位置
for(lpCommaLocation=szCarInformation;
*lpCommaLocation!
='
\0'
;
lpCommaLocation++)
if(*lpCommaLocation=='
'
break;
*lpCommaLocation='
TCARINFORMATIONcarinfo={NULL};
//存储本次用户输入的车辆信息
strcpy(carinfo.szRegistrationMark,szCarInformation);
if(cCommandType=='
A'
strcpy(carinfo.szArrivalTime,lpCommaLocation+1);
if(FALSE==IsStackFull(lpCarStack))
strcpy(carinfo.szEntranceTime,carinfo.szArrivalTime);
Push(lpCarStack,carinfo);
已进入停车场第%d个车位\n"
nTop+1
车牌号:
\t\t%s\n"
carinfo.szRegistrationMark);
进入时间:
\t%s\n"
carinfo.szEntranceTime);
是否收费:
\t是"
else
EnQueue(lpCarQueue,carinfo);
停车场已满,已停放在便道的第%d个车位\n"
nEffectiveSize
停放时间:
carinfo.szArrivalTime);
\t否"
elseif(cCommandType=='
D'
strcpy(carinfo.szDepartureTime,lpCommaLocation+1);
LPTCARSTACKlpTempCarStack=NULL;
InitStack(lpTempCarStack,nParkCapability);
TCARINFORMATIONcarinfoOut={NULL};
BOOLbIsCarFound=FALSE;
while(FALSE==IsStackEmpty(lpCarStack))
Pop(lpCarStack,carinfoOut);
if(0!
=strcmp(carinfoOut.szRegistrationMark,carinfo.szRegistrationMark))
Push(lpTempCarStack,carinfoOut);
bIsCarFound=TRUE;
while(FALSE==IsStackEmpty(lpTempCarStack))
TCARINFORMATIONtempcarinfo={NULL};
Pop(lpTempCarStack,tempcarinfo);
Push(lpCarStack,tempcarinfo);
if(FALSE==bIsCarFound)
车牌号为%s的车未进入停车场.\n"
Pause("
--------------------\n按任意键输入下一条信息...\n"
continue;
strcpy(carinfoOut.szDepartureTime,carinfo.szDepartureTime);
intnEntranceTime=ConvertTimeFormat(carinfoOut.szEntranceTime);
intnDepartureTime=ConvertTimeFormat(carinfoOut.szDepartureTime);
intnContinuanceMinutes=nDepartureTime-nEntranceTime;
计费时段:
\t%s-%s(共%d分钟)\n"
carinfoOut.szEntranceTime,
carinfoOut.szDepartureTime,
nContinuanceMinutes
doublerExpense=CalculateExpense(nContinuanceMinutes);
应交纳的费用:
\t%.1lf元\n"
rExpense);
if(FALSE==IsQueueEmpty(lpCarQueue))
DeQueue(lpCarQueue,tempcarinfo);
strcpy(tempcarinfo.szEntranceTime,carinfoOut.szDepartureTime);
停放在便道的第1个车位,车牌号为%s的车已进入停车场\n"
tempcarinfo.szRegistrationMark
E'
********************"
姓名:
吴远彦\n"
学号:
20101003346\n"
O'
[停车场使用情况]\n"
[车位]\t[车牌号]\t[到达时间]\t[进入(开始计费)时间]\n"
);
for(inti=0;
i<
=lpCarStack->
nTop;
i++)
%d\t%s\t\t%s\t\t%s\n"
i+1,
lpCarInformation[i].szRegistrationMark,
lpCarInformation[i].szArrivalTime,
lpCarInformation[i].szEntranceTime
[便道使用情况]\n"
intnNum=0;
lpCarNode=lpCarNode->
lpNext)
nNum++;
nNum,
carinfo.szRegistrationMark,
carinfo.szArrivalTime,
carinfo.szEntranceTime
输入信息有误.第一个字符只能为'
或'
(区分大小写)."
--------------------\n按任意键输入下一条信息.\n"
}while(TRUE);
DestroyStack(lpCarStack);
DestroyQueue(lpCarQueue);
\n按任意键退出程序...\n"
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 代码