哪位高手能帮我用C语言(不是C++哦)和数据结构做个停车场管理系统包括实验报告!拜托啦!!!!!!

哪位高手能帮我用C语言(不是C++哦)和数据结构做个停车场管理系统包括实验报告!拜托啦!!!!!!,第1张

把扩展名改成CPP,然后编译连接

///////////////////////////////

下面这个程序是我大二上数据结构课时交的作业,现在正好电脑里面放着,所以就给你,应该满足你老师的要求了编译环境是 VC++ 60

如果不会用的话就在问题补充里说,那个"例"是我临时给你打上去的,随便写了点,你要看不懂例子不会输命令就问我

//

#include <conioh>

#include <malloch>

#include <stdioh>

#include <stdlibh>

#include <windowsh>

// 清空当前屏幕

#define ClearScreen() system( "cls" )

// 显示字符串 szPrompt 并等待用户按下任意键

#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()

typedef struct carinformation // 车辆信息

{

char szRegistrationMark[64]; // 车牌号

char szArrivalTime[16]; // 到达时间

char szEntranceTime[16]; // 进入停车场(开始计费)时间

char szDepartureTime[16]; // 离开时间

} TCARINFORMATION, LPTCARINFORMATION;

typedef struct carstack

{

LPTCARINFORMATION lpCarInformation; // 车辆信息

int nTop; // 栈顶元素下标

int nStackSize; // 栈容量

} 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;

lpCarStack->nStackSize = nSize;

}

// 车辆信息 carinfo 入栈 lpCarStack

void Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo )

{

lpCarStack->nTop++;

lpCarStack->lpCarInformation[lpCarStack->nTop] = carinfo;

}

// 车辆信息从栈 lpCarStack 中d出并存入 carinfo

void Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo )

{

carinfo = lpCarStack->lpCarInformation[lpCarStack->nTop];

lpCarStack->nTop--;

}

// 若栈 lpCarstack 空,返回 TRUE;否则,返回 FALSE

BOOL IsStackEmpty( LPTCARSTACK lpCarStack )

{

return lpCarStack->nTop == -1;

}

// 若栈 lpStackFull 满,返回 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 carnode // 链队结点信息

{

TCARINFORMATION carinfo; // 车辆信息

struct carnode lpNext; // 指向下一个元素的指针

} TCARNODE, LPTCARNODE;

typedef struct carqueue // 链队

{

LPTCARNODE lpHead; // 头结点

LPTCARNODE lpRear; // 指向当前队尾的指针

int 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 = lpCarQueue->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;

lpCarQueue->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 );

lpCarQueue->nEffectiveSize--;

}

// 若链队 lpCarQueue 为空,返回 TRUE;否则,返回 FALSE

BOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue )

{

return lpCarQueue->nEffectiveSize == 0;

}

// 销毁链队 lpCarQueue

void DestroyQueue( 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 60 + 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 ( 50 / 60 );

}

int main( void )

{

int nParkCapability = 0; // 停车场容量

putchar( '\n' );

printf( "请输入停车场容量:" );

scanf( "%d", &nParkCapability );

LPTCARSTACK lpCarStack = NULL; // 停车场,用栈模拟

InitStack( lpCarStack, nParkCapability );

LPTCARQUEUE lpCarQueue = NULL; // 便道,用链队模拟

InitQueue( lpCarQueue );

char cCommandType = NULL; // 命令类型

char szUserInput[128] = { NULL }; // 用户输入

do

{

ClearScreen();

putchar( '\n' );

puts( "--------------------" );

puts( "[命令类型]" );

puts( "A - 车辆到达" );

puts( "D - 车辆离开" );

puts( "E - 停止输入" );

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 szCarInformation[128] = { NULL };

sscanf( szUserInput, // 将命令类型与车辆信息分开存放

"%c,%s",

&cCommandType, // 用户输入的前半部分,即命令类型

szCarInformation // 用户输入的后半部分,即车辆信息

);

char lpCommaLocation = NULL; // 车辆信息字符串中的逗号位置

for ( lpCommaLocation = szCarInformation; lpCommaLocation != '\0'; lpCommaLocation++ )

{

if ( lpCommaLocation == ',' )

{

break;

}

}

lpCommaLocation = '\0';

TCARINFORMATION carinfo = { NULL }; // 存储本次用户输入的车辆信息

strcpy( carinfoszRegistrationMark, szCarInformation );

if ( cCommandType == 'A' )

{

strcpy( carinfoszArrivalTime, lpCommaLocation + 1 );

if ( FALSE == IsStackFull( lpCarStack ) )

{

strcpy( carinfoszEntranceTime, carinfoszArrivalTime );

Push( lpCarStack, carinfo );

printf( "已进入停车场第 %d 个车位\n",

lpCarStack->nTop + 1

);

printf( "车牌号:\t\t%s\n", carinfoszRegistrationMark );

printf( "进入时间:\t%s\n", carinfoszEntranceTime );

puts( "是否收费:\t是" );

}

else

{

EnQueue( lpCarQueue, carinfo );

printf( "停车场已满,已停放在便道的第 %d 个车位\n",

lpCarQueue->nEffectiveSize

);

printf( "车牌号:\t\t%s\n", carinfoszRegistrationMark );

printf( "停放时间:\t%s\n", carinfoszArrivalTime );

puts( "是否收费:\t否" );

}

}

else if ( cCommandType == 'D' )

{

strcpy( carinfoszDepartureTime, lpCommaLocation + 1 );

LPTCARSTACK lpTempCarStack = NULL;

InitStack( lpTempCarStack, nParkCapability );

TCARINFORMATION carinfoOut = { NULL };

BOOL bIsCarFound = FALSE;

while ( FALSE == IsStackEmpty( lpCarStack ) )

{

Pop( lpCarStack, carinfoOut );

if ( 0 != strcmp( carinfoOutszRegistrationMark, carinfoszRegistrationMark ) )

{

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 的车未进入停车场\n", carinfoszRegistrationMark );

Pause( "--------------------\n按任意键输入下一条信息\n" );

continue;

}

strcpy( carinfoOutszDepartureTime, carinfoszDepartureTime );

int nEntranceTime = ConvertTimeFormat( carinfoOutszEntranceTime );

int nDepartureTime = ConvertTimeFormat( carinfoOutszDepartureTime );

int nContinuanceMinutes = nDepartureTime - nEntranceTime;

printf( "计费时段:\t%s - %s (共 %d 分钟)\n",

carinfoOutszEntranceTime,

carinfoOutszDepartureTime,

nContinuanceMinutes

);

double rExpense = CalculateExpense( nContinuanceMinutes );

printf( "应交纳的费用:\t%1lf 元\n", rExpense );

if ( FALSE == IsQueueEmpty( lpCarQueue ) )

{

TCARINFORMATION tempcarinfo = { NULL };

DeQueue( lpCarQueue, tempcarinfo );

strcpy( tempcarinfoszEntranceTime, carinfoOutszDepartureTime );

Push( lpCarStack, tempcarinfo );

puts( "--------------------" );

printf( "停放在便道的第 1 个车位,车牌号为 %s 的车已进入停车场\n",

tempcarinfoszRegistrationMark

);

}

}

else if ( cCommandType == 'E' )

{

puts( "" );

puts( "陈赛 - Build20090507\n" );

puts( "" );

break;

}

else if ( cCommandType == 'O' )

{

ClearScreen();

putchar( '\n' );

puts( "[停车场使用情况]\n" );

puts( "[车位]\t[车牌号]\t[到达时间]\t[进入(开始计费)时间]\n");

for ( int i = 0; i <= lpCarStack->nTop; i++ )

{

printf( "%d\t%s\t\t%s\t\t%s\n",

i + 1,

lpCarStack->lpCarInformation[i]szRegistrationMark,

lpCarStack->lpCarInformation[i]szArrivalTime,

lpCarStack->lpCarInformation[i]szEntranceTime

);

}

putchar( '\n' );

putchar( '\n' );

putchar( '\n' );

puts( "[便道使用情况]\n" );

puts( "[车位]\t[车牌号]\t[到达时间]\t[进入(开始计费)时间]\n");

int nNum = 0;

for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;

lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )

{

nNum++;

printf( "%d\t%s\t\t%s\t\t%s\n",

nNum,

lpCarNode->carinfoszRegistrationMark,

lpCarNode->carinfoszArrivalTime,

lpCarNode->carinfoszEntranceTime

);

}

putchar( '\n' );

}

else

{

puts( "输入信息有误第一个字符只能为 'A' 或 'D' 或 'E' 或 'O' (区分大小写)" );

}

Pause( "--------------------\n按任意键输入下一条信息\n" );

} while ( TRUE );

DestroyStack( lpCarStack );

DestroyQueue( lpCarQueue );

Pause( "\n按任意键退出程序\n" );

return 0;

}

停车场车牌识别出入口管理系统:

对停车场进出车辆进行车牌识别、抬闸、收费、放行等管理工作。广泛应用于各类停车场出入口场景。

车辆达到小区入口摄像机识别区域,自动识别车辆车牌号码,并对车辆类型做出判断。

月卡车:自动开闸放行/手工开闸放行可选,车辆进入信息及保存数据库。

临时车:自动开闸放行/手工开闸放行可选,计时并保存入口抓拍到数据库。如收费,按临时车收费标准收费,一般选择手工放行。

无法确认车辆/识别错误车辆:可手动放行,手工输入车牌号码,记录数据库,并产生正确的费用。

当然要用数据库了 输入车牌号后 插入数据库 并记录当然时间 用datetimenowtostring() 可以记录到秒 嘿嘿 在输入一遍的时候 先从数据库里查询 如果有输入的车牌号就用当前的时间 减去刚开始记录的那个时间 然后乘以单价 就是费用了 就这个样

智慧泊车收费系统主要是体现在智慧两个字,再结合停车,构成的一个系统,分发挥物联网技术的强力推动作用,并且还解决了停车场难找、车位紧张、等位耗时等问题一直困扰着公众,建设智慧泊车管理系统,可借鉴迪蒙·智慧停车收费系统,它是采用物联网技术对停车场进行管理,并综合使用了车位检测技术、视频监控技术和电子化收费技术来监管路侧停车场的使用及收费。疏导交通,缓解停车难、乱停放、 停车纠纷和因停车导致的交通拥堵问题, 实现车辆快速通行,方便车主停车!

以上就是关于哪位高手能帮我用C语言(不是C++哦)和数据结构做个停车场管理系统包括实验报告!拜托啦!!!!!!全部的内容,包括:哪位高手能帮我用C语言(不是C++哦)和数据结构做个停车场管理系统包括实验报告!拜托啦!!!!!!、停车场管理系统、怎么用C# 2005做一个停车场管理系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9350302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存