停车场管理系统数据结构_第1页
停车场管理系统数据结构_第2页
停车场管理系统数据结构_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嗫*#in elude <coni o.h>#in elude <malloc.h>#i nclude <stdio.h>For pers onal use only in study and research; not for commercial use #i nclude <stdlib.h>#i nclude <win dows.h>For pers onal use only in study and research; not for commercial use/清空当前屏幕 #defi ne ClearScree n(

2、) system( "cls") /显示字符串szPrompt并等待用户按下任意键#defi ne Pause( szPrompt ) prin tf( "%s", szPrompt ),getch()车辆信息typedef struct cari nformati on /char szRegistrati onM ark64; / char szArrivalTime16; / char szE ntran ceTime16; / char szDepartureTime16; /车牌号到达时间进入停车场(开始计费)时间 离开时间 TCARINFOR

3、MATION, *LPTCARINFORMATION;typedef struct carstack车辆信息LPTCARINFORMATION lpCarI nformatio n; / int nTop; /栈顶元素下标int n StackSize; /栈容量 TCARSTACK, *LPTCARSTACK;/初始化栈lpCarStack,将其容量设置为nSizevoid Ini tStack( LPTCARSTACK & lpCarStack, i nt n Size ) lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTAC

4、K ); lpCarStack->lpCarl nformation = ( LPTCARINFORMATION ) malloc( n Size * sizeof ( TCARINFORMATION );lpCarStack-nTop = -1;lpCarStack->nStackSize = nSize;/ 车辆信息 carinfo 入栈 lpCarStackvoid Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo ) lpCarStack->nTop+; lpCarStack->lpCarInf

5、ormationlpCarStack->nTop = carinfo;/ 车辆信息从栈 lpCarStack 中弹出并存入 carinfovoid Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo ) carinfo = lpCarStack->lpCarInformationlpCarStack->nTop; lpCarStack->nTop-;/ 若栈IpCarstack 空,返回TRUE;否则,返回FALSEBOOL IsStackEmpty( LPTCARSTACK lpCarStack

6、 )return IpCarStack->nTop = -1;/ 若栈IpStackFuII 满,返回TRUE;否则,返回FALSEBOOL IsStackFuII( LPTCARSTACK IpCarStack )return IpCarStack->nTop = ( IpCarStack->nStackSize - 1 );/ 销毁栈 IpCarStack, 将指针 IpCarStack 置为 NULLvoid DestroyStack( LPTCARSTACK &IpCarStack )free( IpCarStack->IpCarInformation

7、);free( IpCarStack );IpCarStack = NULL;typedef struct carnode /链队结点信息车辆信息 指向下一个元素的指针链队头结点 指向当前队尾的指针 当前队中元素个数TCARINFORMATION carinfo; / struct carnode *lpNext; / TCARNODE, *LPTCARNODE;typedef struct carqueue / LPTCARNODE lpHead; / LPTCARNODE lpRear; / int nEffectiveSize; / TCARQUEUE, *LPTCARQUEUE;/ 初

8、始化链队 lpCarQueuevoid InitQueue( LPTCARQUEUE &lpCarQueue ) lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) ); lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) ); lpCarQueue->lpHead->lpNext = NULL;lpCarQueue->lpRear = lpCarQueue->lpHead; lpCarQueue->nEffectiv

9、eSize = 0;/ 车辆信息 carinfo 入队 lpCarQueuevoid EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION carinfo ) LPTCARNODE lpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode ) ); lpCarNode->carinfo = carinfo;lpCarNode->lpNext = NULL; lpCarQueue->lpRear->lpNext = lpCarNode;lpCarQueue->lpRea

10、r = lpCarQueue->lpRear->lpNext; lpCarQueue->nEffectiveSize+;/ 队头元素从链队 lpCarQueue 中出队并存入 carinfovoid DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo ) LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;carinfo = lpTemp->carinfo;lpCarQueue->lpHead->lpNext = lpTem

11、p->lpNext;free( lpTemp );lpCarQueue->nEffectiveSize-;/ 若链队IpCarQueue 为空,返回TRUE;否则,返回FALSEBOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue )return IpCarQueue->nEffectiveSize = 0;/ 销毁链队 IpCarQueuevoid DestroyQueue( LPTCARQUEUE &IpCarQueue )LPTCARNODE IpNextCarNode = NULL;for ( LPTCARNODE IpCarNo

12、de = IpCarQueue->IpHead; IpCarNode != NULL; IpCarNode = IpNextCarNode )IpNextCarNode = IpCarNode->IpNext;free( IpCarNode );free( IpCarQueue );IpCarQueue = NULL;/ 将字符串时间格式转换为数字(分钟)格式, 例如 12:36 将被转换为 756 ( 12 * 60 + 36 )int ConvertTimeFormat( char *IpTime )int nHour = 0;int nMinute = 0;sscanf( I

13、pTime, "%d:%d", &nHour, &nMinute );return nHour * 60 + nMinute;/ 根据在停车场内的停留时间 nContinuanceMinutes ( 分钟) 计算费用doubIe CaIcuIateExpense( int nContinuanceMinutes )return nContinuanceMinutes * ( 5.0 / 60 );int main( void )停车场容量int nParkCapability = 0; /putchar( 'n' ); printf( &qu

14、ot; 请输入停车场容量 :" ); scanf( "%d", &nParkCapability );LPTCARSTACK lpCarStack = NULL; /停车场 , 用栈模拟InitStack( lpCarStack, nParkCapability );LPTCARQUEUE lpCarQueue = NULL; / 便道 , 用链队模拟 InitQueue( lpCarQueue );char cCommandType = NULL; /命令类型char szUserInput128 = NULL ; /用户输入doClearScreen(

15、);putchar( 'n' );puts( "" );puts( " 命令类型 " );puts( "A -车辆到达 " );puts( "D -车辆离开 " );puts( "E -停止输入 " );puts( "O - 显示当前停车场和便道使用情况 " );putchar( 'n' );puts( " 例:" );puts( "A, 冀 A1234,14:26" ); puts( "D,

16、冀 A1234,16:51" ); puts( "E" );puts( "O" );putchar( 'n' );printf( " 请输入命令 :" ); scanf( "%s", szUserInput ); puts( "" );char szCarInformation128 = NULL ;"%c,%s", &cCommandType, / szCarInformation /用户输入的前半部分 , 即命令类型 用户输入的后半部分

17、, 即车辆信息sscanf( szUserInput, /将命令类型与车辆信息分开存放);char *lpCommaLocation = NULL; / 车辆信息字符串中的逗号位置for ( lpCommaLocation = szCarInformation; *lpCommaLocation != lpCommaLocation+ )if ( *lpCommaLocation = ',' )break;*lpCommaLocation = '0'TCARINFORMATION carinfo = NULL ; /存储本次用户输入的车辆信息strcpy( ca

18、rinfo.szRegistrationMark, szCarInformation );if ( cCommandType = 'A' )strcpy( carinfo.szArrivalTime, lpCommaLocation + 1 );if ( FALSE = IsStackFull( lpCarStack ) )strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime );Push( lpCarStack, carinfo );printf( "已进入停车场第 %d 个车位 n",lpCarSta

19、ck->nTop + 1);printf( "车牌号 :tt%sn", carinfo.szRegistrationMark );printf( "进入时间 :t%sn", carinfo.szEntranceTime );puts( "是否收费 :t 是 " );elseEnQueue( lpCarQueue, carinfo );printf( "停车场已满 , 已停放在便道的第 %d 个车位 n",lpCarQueue->nEffectiveSize);printf( "车牌号 :tt%

20、sn", carinfo.szRegistrationMark );printf( "停放时间 :t%sn", carinfo.szArrivalTime );puts( "是否收费 :t 否 " );else if ( cCommandType = 'D' )strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 );LPTCARSTACK lpTempCarStack = NULL;InitStack( lpTempCarStack, nParkCapability );TC

21、ARINFORMATION carinfoOut = NULL ;BOOL bIsCarFound = FALSE;while ( FALSE = IsStackEmpty( lpCarStack ) )Pop( lpCarStack, carinfoOut );if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinfo.szRegistrationMark ) ) Push( lpTempCarStack, carinfoOut );elsebIsCarFound = TRUE;break;while ( FALSE = IsStackE

22、mpty( lpTempCarStack ) )TCARINFORMATION tempcarinfo = NULL ;Pop( lpTempCarStack, tempcarinfo ); Push( lpCarStack, tempcarinfo );if ( FALSE = bIsCarFound )printf( " 车牌号为 %s 的车未进入停车场 .n", carinfo.szRegistrationMark );Pause( "n 按任意键输入下一条信息 .n" );continue;strcpy( carinfoOut.szDepartu

23、reTime, carinfo.szDepartureTime );int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime );int nDepartureTime = ConvertTimeFormat( carinfoOut.szDepartureTime );int nContinuanceMinutes = nDepartureTime - nEntranceTime;printf( "计费时段 :t%s - %s ( 共 %d 分钟 )n",carinfoOut.szEntranceTime

24、, carinfoOut.szDepartureTime,nContinuanceMinutes);double rExpense = CalculateExpense( nContinuanceMinutes ); printf( " 应交纳的费用 :t%.1lf 元 n", rExpense );if ( FALSE = IsQueueEmpty( lpCarQueue ) )TCARINFORMATION tempcarinfo = NULL ;DeQueue( lpCarQueue, tempcarinfo );strcpy( tempcarinfo.szEntra

25、nceTime, carinfoOut.szDepartureTime );Push( lpCarStack, tempcarinfo );puts( "" );printf( " 停放在便道的第 1 个车位 , 车牌号为 %s 的车已进入停车场 n", tempcarinfo.szRegistrationMark); else if ( cCommandType = 'E' ) puts("*");puts( "陈赛 - Buildn" );puts("*");break;el

26、se if ( cCommandType = 'O' )ClearScreen(); putchar( 'n' );puts( " 停车场使用情况 n" );puts( "车位 t 车牌号 t 到达时间 t 进入 ( 开始计费 ) 时间 n");for ( int i = 0; i <= lpCarStack->nTop; i+ )printf( "%dt%stt%stt%sn",i + 1, lpCarStack->lpCarInformationi.szRegistrationMa

27、rk, 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论