《2022年数据结构停车场管理系统》由会员分享,可在线阅读,更多相关《2022年数据结构停车场管理系统(9页珍藏版)》请在金锄头文库上搜索。
1、数据结构停车场管理系统.txt遇事潇洒一点,看世糊涂一点。相亲是经销,恋爱叫直销,抛绣球招亲则为围标。没有准备请不要开始,没有能力请不要承诺。爱情这东西,没得到可能是缺憾,不表白就会有遗憾,可是如果自不量力,就只能抱憾了。#include #include #include #include #include / 清空当前屏幕#define ClearScreen() system( cls ) / 显示字符串 szPrompt 并等待用户按下任意键#define Pause( szPrompt ) printf( %s, szPrompt ),getch() typedef struct c
2、arinformation / 车辆信息 char szRegistrationMark64; / 车牌号 char szArrivalTime16; / 到达时间 char szEntranceTime16; / 进入停车场 ( 开始计费 ) 时间 char szDepartureTime16; / 离开时间 TCARINFORMATION, *LPTCARINFORMATION; typedef struct carstack LPTCARINFORMATION lpCarInformation; / 车辆信息 int nTop; / 栈顶元素下标 int nStackSize; / 栈容
3、量 TCARSTACK, *LPTCARSTACK; / 初始化栈 lpCarStack, 将其容量设置为 nSize void InitStack( LPTCARSTACK &lpCarStack, int nSize ) lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ) ); lpCarStack-lpCarInformation = ( LPTCARINFORMATION ) malloc( nSize * sizeof ( TCARINFORMATION ) ); lpCarStack-nTop = -1; lpCarS
4、tack-nStackSize = nSize; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - / 车辆信息 carinfo 入栈 lpCarStack void Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo ) lpCarStack-nTop+; lpCarStack-lpCarInformationlpCarStack-nTop = carinfo; / 车辆
5、信息从栈 lpCarStack 中弹出并存入 carinfo void Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo ) carinfo = lpCarStack-lpCarInformationlpCarStack-nTop; lpCarStack-nTop-; / 若栈 lpCarstack 空, 返回 TRUE;否则 , 返回 FALSE BOOL IsStackEmpty( LPTCARSTACK lpCarStack ) return lpCarStack-nTop = -1; / 若栈 lpStackFull 满, 返
6、回 TRUE;否则 , 返回 FALSE BOOL IsStackFull( LPTCARSTACK lpCarStack ) return lpCarStack-nTop = ( lpCarStack-nStackSize - 1 ); / 销毁栈 lpCarStack,将指针 lpCarStack 置为 NULL void DestroyStack( LPTCARSTACK &lpCarStack ) free( lpCarStack-lpCarInformation ); free( lpCarStack ); lpCarStack = NULL; typedef struct carn
7、ode / 链队结点信息 TCARINFORMATION carinfo; / 车辆信息 struct carnode *lpNext; / 指向下一个元素的指针 TCARNODE, *LPTCARNODE; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - typedef struct carqueue / 链队 LPTCARNODE lpHead; / 头结点 LPTCARNODE lpRear; / 指向当前队尾的指针 in
8、t nEffectiveSize; / 当前队中元素个数 TCARQUEUE, *LPTCARQUEUE; / 初始化链队 lpCarQueue void InitQueue( LPTCARQUEUE &lpCarQueue ) lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) ); lpCarQueue-lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) ); lpCarQueue-lpHead-lpNext = NULL; lpCarQueue-lpRear = lpCarQue
9、ue-lpHead; lpCarQueue-nEffectiveSize = 0; / 车辆信息 carinfo 入队 lpCarQueue void EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION carinfo ) LPTCARNODE lpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode ) ); lpCarNode-carinfo = carinfo; lpCarNode-lpNext = NULL; lpCarQueue-lpRear-lpNext = lpCarNode; lpCar
10、Queue-lpRear = lpCarQueue-lpRear-lpNext; lpCarQueue-nEffectiveSize+; / 队头元素从链队 lpCarQueue 中出队并存入 carinfo void DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo ) LPTCARNODE lpTemp = lpCarQueue-lpHead-lpNext; carinfo = lpTemp-carinfo; lpCarQueue-lpHead-lpNext = lpTemp-lpNext; free( lpTemp );
11、 lpCarQueue-nEffectiveSize-; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - / 若链队 lpCarQueue 为空 , 返回 TRUE;否则 , 返回 FALSE BOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue ) return lpCarQueue-nEffectiveSize = 0; / 销毁链队 lpCarQueue void DestroyQueue(
12、LPTCARQUEUE &lpCarQueue ) LPTCARNODE lpNextCarNode = NULL; for ( LPTCARNODE lpCarNode = lpCarQueue-lpHead; lpCarNode != NULL; lpCarNode = lpNextCarNode ) lpNextCarNode = lpCarNode-lpNext; free( lpCarNode ); free( lpCarQueue ); lpCarQueue = NULL; / 将字符串时间格式转换为数字( 分钟 ) 格式 , 例如 12:36 将被转换为 756 ( 12 * 6
13、0 + 36 ) int ConvertTimeFormat( char *lpTime ) int nHour = 0; int nMinute = 0; sscanf( lpTime, %d:%d, &nHour, &nMinute ); return nHour * 60 + nMinute; / 根据在停车场内的停留时间 nContinuanceMinutes (分钟 ) 计算费用double CalculateExpense( int nContinuanceMinutes ) return nContinuanceMinutes * ( 5.0 / 60 ); int main(
14、void ) int nParkCapability = 0; / 停车场容量名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - putchar( n ); printf(tt=欢迎你进入停车场管理系统=n); printf(tt 徐沙利 20074470149n); printf( 请输入停车场容量: ); scanf( %d, &nParkCapability ); LPTCARSTACK lpCarStack = NULL;
15、/ 停车场 , 用栈模拟 InitStack( lpCarStack, nParkCapability ); LPTCARQUEUE lpCarQueue = NULL; / 便道 , 用链队模拟 InitQueue( lpCarQueue ); char cCommandType = NULL; / 命令类型 char szUserInput128 = NULL ; / 用户输入 do ClearScreen(); putchar( n ); puts( - ); puts( 命令类型 ); puts( A - 车辆到达 ); puts( D - 车辆离开 ); puts( E - 停止输入
16、 ); puts( O - 显示当前停车场和便道使用情况 ); putchar( n ); puts( 例: ); puts( A,冀 A1234,14:26 ); puts( D,冀 A1234,16:51 ); puts( E ); puts( O ); putchar( n ); printf( 请输入命令 : ); scanf( %s, szUserInput ); puts( - ); char szCarInformation128 = NULL ; sscanf( szUserInput, / 将命令类型与车辆信息分开存放 %c,%s, &cCommandType, / 用户输入
17、的前半部分, 即命令类型 szCarInformation / 用户输入的后半部分, 即车辆信息 ); char *lpCommaLocation = NULL; / 车辆信息字符串中的逗号位置名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - for ( lpCommaLocation = szCarInformation; *lpCommaLocation != 0; lpCommaLocation+ ) if ( *lpCom
18、maLocation = , ) break; *lpCommaLocation = 0; TCARINFORMATION carinfo = NULL ; / 存储本次用户输入的车辆信息 strcpy( carinfo.szRegistrationMark, szCarInformation ); if ( cCommandType = A ) strcpy( carinfo.szArrivalTime, lpCommaLocation + 1 ); if ( FALSE = IsStackFull( lpCarStack ) ) strcpy( carinfo.szEntranceTime
19、, carinfo.szArrivalTime ); Push( lpCarStack, carinfo ); printf( 已进入停车场第 %d 个车位 n, lpCarStack-nTop + 1 ); printf( 车牌号 :tt%sn, carinfo.szRegistrationMark ); printf( 进入时间 :t%sn, carinfo.szEntranceTime ); puts( 是否收费 :t是 ); else EnQueue( lpCarQueue, carinfo ); printf( 停车场已满 , 已停放在便道的第 %d 个车位 n, lpCarQueu
20、e-nEffectiveSize ); printf( 车牌号 :tt%sn, carinfo.szRegistrationMark ); printf( 停放时间 :t%sn, carinfo.szArrivalTime ); puts( 是否收费 :t否 ); else if ( cCommandType = D ) strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6
21、页,共 9 页 - - - - - - - - - LPTCARSTACK lpTempCarStack = NULL; InitStack( lpTempCarStack, nParkCapability ); TCARINFORMATION carinfoOut = NULL ; BOOL bIsCarFound = FALSE; while ( FALSE = IsStackEmpty( lpCarStack ) ) Pop( lpCarStack, carinfoOut ); if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinf
22、o.szRegistrationMark ) ) Push( lpTempCarStack, carinfoOut ); else bIsCarFound = TRUE; break; while ( FALSE = IsStackEmpty( lpTempCarStack ) ) TCARINFORMATION tempcarinfo = NULL ; Pop( lpTempCarStack, tempcarinfo ); Push( lpCarStack, tempcarinfo ); if ( FALSE = bIsCarFound ) printf( 车牌号为 %s 的车未进入停车场.
23、n, carinfo.szRegistrationMark ); Pause( -n按任意键输入下一条信息.n ); continue; strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime ); int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime ); int nDepartureTime = ConvertTimeFormat( carinfoOut.szDepartureTime ); int nContinuanceMinutes = nDep
24、artureTime - nEntranceTime; printf( 计费时段 :t%s - %s (共 %d 分钟 )n, carinfoOut.szEntranceTime, carinfoOut.szDepartureTime, nContinuanceMinutes ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - double rExpense = CalculateExpense( nContinuanceMi
25、nutes ); printf( 应交纳的费用 :t%.1lf 元n, rExpense ); if ( FALSE = IsQueueEmpty( lpCarQueue ) ) TCARINFORMATION tempcarinfo = NULL ; DeQueue( lpCarQueue, tempcarinfo ); strcpy( tempcarinfo.szEntranceTime, carinfoOut.szDepartureTime ); Push( lpCarStack, tempcarinfo ); puts( - ); printf( 停放在便道的第 1 个车位 ,车牌号为
26、 %s 的车已进入停车场n, tempcarinfo.szRegistrationMark ); else if ( cCommandType = E ) puts( * ); puts( 徐沙利 - Build201006n ); puts( * ); break; else if ( cCommandType = O ) ClearScreen(); putchar( n ); puts( 停车场使用情况n ); puts( 车位 t车牌号 t到达时间 t进入 ( 开始计费 ) 时间 n); for ( int i = 0; i nTop; i+ ) printf( %dt%stt%stt
27、%sn, i + 1, lpCarStack-lpCarInformationi.szRegistrationMark, lpCarStack-lpCarInformationi.szArrivalTime, lpCarStack-lpCarInformationi.szEntranceTime ); putchar( n ); putchar( n ); putchar( n ); puts( 便道使用情况 n ); puts( 车位 t车牌号 t到达时间 t进入 ( 开始计费 ) 时间 n); int nNum = 0; for ( LPTCARNODE lpCarNode = lpCar
28、Queue-lpHead-lpNext; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - lpCarNode != NULL; lpCarNode = lpCarNode-lpNext ) nNum+; printf( %dt%stt%stt%sn, nNum, lpCarNode-carinfo.szRegistrationMark, lpCarNode-carinfo.szArrivalTime, lpCarNode-car
29、info.szEntranceTime ); putchar( n ); else puts( 输入信息有误. 第一个字符只能为 A 或 D 或 E 或 O (区分大小写). ); Pause( -n按任意键输入下一条信息.n ); while ( TRUE ); DestroyStack( lpCarStack ); DestroyQueue( lpCarQueue ); Pause( n按任意键退出程序.n ); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -