[计算机软件及应用]停车场管理系统.doc_第1页
[计算机软件及应用]停车场管理系统.doc_第2页
[计算机软件及应用]停车场管理系统.doc_第3页
[计算机软件及应用]停车场管理系统.doc_第4页
[计算机软件及应用]停车场管理系统.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

文档名称文档密级Parkingsys.cpp#include #include #include list.h#include api.htypedef struct ParkingAutoInfo info;bool isInSys;/是否在车库中bool isValidNo;/是否为套牌车CarInfo_ST;/*全局变量声明*/ParkingHisInfoNode * hisInfo;/历史信息链表CardStatus PackingCardCARD_COUNT;/停车卡ParkSysTime sysTime;/系统时间CarInfo_ST carInfo11;/车信息,包含车牌号,以及其停车次数void main(int argc, char* argv)hisInfo = NULL;sysTime.hh = 0;sysTime.mm = 0;apiServerStart(argc,argv);/*函 数 名 : OpReset功能描述 : 需要考生实现的接口,系统初始化输入参数 : 无输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpReset(void)int i=0;for(i=0;iCARD_COUNT;i+)PackingCardi = CARD_IDLE;if(NULL = hisInfo)hisInfo = initList();elseresetList(hisInfo);hisInfo = initList();for(i =0;i11;i+)carI.ParkingCount = 0;carInfoi.isInSys = false;carI.AutoNo = 0;carI.CardNo = 5;carInfoi.isValidNo = false;sysTime.hh = 0;sysTime.mm = 0;api_parksys_ret(OP_RESET_SUCC);/*函 数 名 : OpGetin功能描述 : 需要考生实现的接口,车辆进入停车场输入参数 : UL AutoNo 车牌号ParkSysAutoType AutoType 车辆类型ParkSysTime InTime 车辆进入停车场时间输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpGetin(UL AutoNo, ParkSysAutoType AutoType, ParkSysTime InTime)if(hisInfo = NULL)api_parksys_ret(OP_INTERNAL_ERR);return;int idx = 0;int cardIdx = 0;bool isIdle = false;if(AutoNo 20) |(AutoType != CAR & AutoType != BUS) | (InTime.hh 23) |(InTime.mm 59)/参数合法性判断api_parksys_ret(OP_E_PARAMETER);return;if(InTime.hh sysTime.hh | ( InTime.hh = sysTime.hh & InTime.mm sysTime.mm )/时间逻辑错误api_parksys_ret(OP_E_TIME_LOGIC);return;for(idx;idxCARD_COUNT;idx+)/判断车位是否满if(CARD_IDLE = PackingCardidx)isIdle = true;cardIdx = idx;break;if(!isIdle)api_parksys_ret(OP_E_PARKING_FULL);return;for(idx = 0;idx 11;idx+)if(AutoNo = carI.AutoNo)/车信息已经存在if(carInfoidx.isInSys)/判断车是否已经在车位api_parksys_ret(OP_E_EXISTED_ATUO);return;if(carInfoidx.isValidNo)/该车牌之前已经判断为套牌车api_parksys_ret(OP_E_MISMATCH_AUTO_TYPE);return;if(carI.AutoType!= AutoType)/判断是否前后车类型不同,为套牌车api_parksys_ret(OP_E_MISMATCH_AUTO_TYPE);carInfoidx.isValidNo = true;deleteItemWithAutoNo(hisInfo,AutoNo);return;PackingCardcardIdx = CARD_INUSE;carInfoidx.isInSys = true;carI.CardNo = cardIdx;carI.CurGetInTime = InTime;carI.ParkingCount+;sysTime = InTime;api_parksys_ret(OP_PARKING_SUCC);ParkingAutoHistoryInfo info;info.AutoNo = carI.AutoNo;info.AutoType = carI.AutoType;info.CardNo = carI.CardNo;info.Fee = 0;info.GetInTime = InTime;info.GetOutTime.hh = 99;info.GetOutTime.mm = 99;insertItem(hisInfo,info);return;for(idx=0;idx11;idx+)if(0 = carI.AutoNo)PackingCardcardIdx = CARD_INUSE;carI.AutoNo = AutoNo;carInfoidx.isInSys = true;carInfoidx.isValidNo = false;carI.AutoType = AutoType;carI.CardNo = cardIdx;carI.CurGetInTime = InTime;carI.ParkingCount +;sysTime = InTime;api_parksys_ret(OP_PARKING_SUCC);ParkingAutoHistoryInfo info;info.AutoNo = carI.AutoNo;info.AutoType = carI.AutoType;info.CardNo = carI.CardNo;info.Fee = 0;info.GetInTime = InTime;info.GetOutTime.hh = 99;info.GetOutTime.mm = 99;insertItem(hisInfo,info);return;/*计算停车费函数*/int cost(ParkSysTime inTime,ParkSysTime outTime,ParkSysAutoType AutoType)int inTimeSum = inTime.hh*60+inTime.mm;int outTimeSum = outTime.hh*60+outTime.mm;int time = outTimeSum - inTimeSum;if(time = 30)return 0;if(time 12*60)if(CAR = AutoType)return 20;return 30;time -= 120;int i = time/60;int j = time%60;if( j != 0)i+;if(CAR = AutoType)return 10+i;return 20+i;/*函 数 名 : OpGetout功能描述 : 需要考生实现的接口,车辆离开停车场输入参数 : UL AutoNo 车牌号UL CardNo 卡号ParkSysTime OutTime 车辆离开停车场时间输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpGetout(UL AutoNo, UL CardNo, ParkSysTime OutTime)if(hisInfo = NULL)api_parksys_ret(OP_INTERNAL_ERR);return;if(AutoNo 20) |(CardNo 4) |(OutTime.hh 23) |(OutTime.mm 59)/参数合法性判断api_parksys_ret(OP_E_PARAMETER);return;if(OutTime.hh sysTime.hh | ( OutTime.hh = sysTime.hh & OutTime.mm sysTime.mm )/时间逻辑错误api_parksys_ret(OP_E_TIME_LOGIC);return;int idx = 0;int carIdx = 0;bool isInSys = false;for(idx = 0;idx11;idx+)if(carI.AutoNo = AutoNo & carInfoidx.isInSys)carIdx = idx;isInSys = true;break;if(!isInSys)api_parksys_ret(OP_E_NOT_IN_PARKING);return;if(carInfocarI.AutoNo != AutoNo | carInfocarI.CardNo != CardNo)api_parksys_ret(OP_E_AUTONO_MISMATCH_CARDNO);return;sysTime = OutTime;int fee = cost(carInfocarI.CurGetInTime,OutTime,carInfocarI.AutoType);api_parksys_fee(fee);carInfocarIdx.isInSys = false;carInfocarI.CardNo = 5;PackingCardCardNo = CARD_IDLE;updateItem(hisInfo,carInfocarI.AutoNo,carInfocarI.CurGetInTime,fee,OutTime);return;/*函 数 名 : OpListIdleParkingSpaceNumber功能描述 : 需要考生实现的接口,停车场空闲车位查询输入参数 : 无输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpListIdleParkingSpaceNumber(void)UL sum = 0;int idx = 0;for(idx=0;idxCARD_COUNT;idx+)if(PackingCardidx = CARD_IDLE)sum+;api_parksys_idle_parkingspace_number(sum);/*函 数 名 : OpListCardStatus功能描述 : 需要考生实现的接口,指定卡状态查询输入参数 : UL CardNo 卡号输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpListCardStatus(UL CardNo)if(CardNo 4)api_parksys_ret(OP_E_PARAMETER);return;if(PackingCardCardNo = CARD_IDLE)api_parksys_card_status(CARD_IDLE);return;api_parksys_card_status(CARD_INUSE);return;/*函 数 名 : OpListParkingAuto功能描述 : 需要考生实现的接口,停车场中指定车辆信息查询输入参数 : UL AutoNo 车牌号输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpListParkingAuto(UL AutoNo)if(AutoNo 20)api_parksys_ret(OP_E_PARAMETER);return;bool isInSys = false;int idx = 0;for(idx =0 ;idx 11;idx+)if(carI.AutoNo = AutoNo)if(carInfoidx.isInSys = true)isInSys = true;break;if(!isInSys)api_parksys_ret(OP_E_NOT_IN_PARKING);return;api_parksys_parking_auto(&carI);return;/*函 数 名 : OpListParkingAutoHistoryInfo功能描述 : 需要考生实现的接口,停车场中历史所有车辆停车信息查询输入参数 : UL AutoNo 车牌号输出参数 : 无返 回 值 : 无调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数 */void OpListParkingAutoHistoryInfo(UL AutoNo)if(hisInfo = NULL)api_parksys_ret(OP_INTERNAL_ERR);return;if(AutoNo != 0)if(AutoNo 20)api_parksys_ret(OP_E_PARAMETER);return;bool flag = false;ParkingHisInfoNode * pTemp = hisInfo-pNext;if(0 = AutoNo)while(pTemp != NULL)api_parksys_parking_auto_history_info(&pTemp-data);if(!flag)flag = true;if(pTemp-pNext = NULL)break;pTemp = pTemp-pNext;if(!flag)api_parksys_ret( OP_ANY_CAR_PAKING);return;while(pTemp != NULL)if(pTemp-data.AutoNo = AutoNo)api_parksys_parking_auto_history_info(&pTemp-data);if(!flag)flag = true;if(pTemp-pNext = NULL)break;pTemp = pTemp-pNext;if(!flag)api_parksys_ret(OP_SPEC_CAR_PARKING);return;List.cpp#include list.h#include #include ParkingHisInfoNode* initList()ParkingHisInfoNode * head;head = (ParkingHisInfoNode*)malloc(sizeof(ParkingHisInfoNode);if(NULL = head)return NULL;memset(head,0,sizeof(ParkingHisInfoNode);head-pNext = NULL;return head;bool insertItem(ParkingHisInfoNode* hisInfo,ParkingAutoHistoryInfo dataItem)ParkingHisInfoNode *pTemp;ParkingHisInfoNode *pTempData;if(NULL = hisInfo)return false;pTemp = hisInfo;while(pTemp -pNext != NULL & pTemp-pNext-data.AutoNo pNext;pTempData = (ParkingHisInfoNode*)malloc(sizeof(ParkingHisInfoNode);if(NULL = pTempData)return false;pTempData-data = dataItem;pTempData-pNext = pTemp-pNext;pTemp-pNext = pTempData;return true;void resetList(ParkingHisInfoNode * hisInfo)ParkingHisInfoNode *pTemp;while(hisInfo != NULL)pTemp = hisInfo-pNext;free(hisInfo);hisInfo = pTemp;bool deleteItemWithAutoNo(ParkingHisInfoNode * hisInfo,UL AutoNo)bool ret = false;if(NULL = hisInfo)return false;ParkingHisInfoNode * pTemp = NULL;ParkingHisInfoNode * pTempTail = NULL;pTemp = hisInfo;while(pTemp != NULL & pTemp-pNext != NULL)if(pTemp-pNext-data.AutoNo = AutoNo)pTempTail = pTemp-pNext-pNext;free(pTemp-pNext);pTemp-pNext = pTempTail;if(!ret)ret = true;pTemp = pTemp-pNext;return ret;void updateItem(ParkingHisInfoNode* hisInfo,UL AutoNo,ParkSysTime inTime,UL fee,ParkSysTime outTime)if(hisInfo = NULL)return;ParkingHisInfoNode *pTemp;pTemp = hisInfo-pNext;bool flag = false;while(pTemp != NULL)if(pTemp-data.AutoNo = AutoNo & pTemp-data.GetInTime.hh = inTime.hh & pTemp-data.GetInTime.mm = inTime.mm)flag = true;break;elseif(pTemp-pNext != NULL)pTemp = pTemp-pNext;elsebreak;if(!flag)return;pTemp-data.Fee = fee;pTemp-data.GetOutTime = outTime;List.h#ifndef _LIST_H_#define _LIST_H_#include api.htypedef struct ParkingHisInfoNodeParkingAutoHistoryInfodata;struct ParkingHisInfoNode * pNext;ParkingHisInfoNode;ParkingHisInfoNode* initList();bool insertItem(ParkingHisInfoNode* hisInfo,ParkingAutoHistoryInfo dataItem);void resetList(ParkingHisInfoNode * hisInfo);bool deleteItemWithAutoNo(ParkingHisInfoNode * hisInfo,UL AutoNo);void updateItem(ParkingHisInfoNode* hisInfo,UL AutoNo,ParkSysTime inTime,UL fee,ParkSysTime outTime);#endifApi.h/* 版权所有 (C), 2009-2009, 华为技术有限公司 * 文 件 名 : api.h 版 本 号 : 初稿 作 者 : 生成日期 : 2009年9月9日 最近修改 : 功能描述 : api.cpp 的头文件 函数列表 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 创建文件*/#ifndef _API_H_#define _API_H_#ifdef _cplusplusextern C#endif /* _cplusplus */#define CARD_COUNT 5 /卡的数量#define MIN_AUTONO 10 /最小车牌号#define MAX_AUTONO 20 /最大车牌号typedef unsigned char UC;typedef unsigned long UL;/汽车类型typedef enum CAR, /小轿车 BUS, /大巴 AUTO_TYPE_BUTT,ParkSysAutoType;/卡状态typedef enum CARD_IDLE = 0, /卡空闲 CARD_INUSE = 1, /卡已经使用CardStatus;/操作码定义typedef enum OP_E_CMD = 0, /(考生不使用)无效的命令 OP_RESET_SUCC = 1, /系统初始化成功 OP_E_PARAMETER = 2, /参数不合法 OP_E_PARKING_FULL = 3, /车位已满 OP_E_EXISTED_ATUO = 4, /该车已经在停车场 OP_E_MISMATCH_AUTO_TYPE = 5, /可能是套牌车不允许进入 OP_E_NOT_IN_PARKING = 6, /该车不在停车场 OP_E_AUTONO_MISMATCH_CARDNO = 7, /车牌号和卡号不对应不允许离开 OP_E_TIME_LOGIC = 8, /时间逻辑错误 OP_PARKING_SUCC = 9, /停车操作成功 OP_SPEC_CAR_PARKING = 10, /指定的车辆在停车场内尚未停过 OP_ANY_CAR_PAKING = 11, /停车场内尚未有任何车辆停过 OP_INTERNAL_ERR =999, /内部系统错误ParkSysOpRet;/时间typedef struct UC hh; /小时 UC mm; /分钟ParkSysTime;/在停车场中的车辆信息typedef struct UL AutoNo; /车牌号 ParkSysTime CurGetInTime; /当前进入时间 UL CardNo; /卡号 ParkSysAutoType AutoType; /车型 UC ParkingCount; /停车次数ParkingAutoInfo;/停车场中车辆历史停车信息typedef struct UL AutoNo; /车牌号 ParkSysAutoType AutoType; /车辆类型 UL CardNo; /卡号 ParkSysTime GetInTime; /停车时间 ParkSysTime GetOutTime; /取车时间 UL Fee; /停车费用ParkingAutoHistoryInfo;/* 函 数 名 : api_parksys_ret 功能描述 : 系统提供的函数,供考生调用,打印操作结果信息 输入参数 : ParkSysOpRet OpRet操作码定义 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数*/void api_parksys_ret(ParkSysOpRet OpRet);/* 函 数 名 : api_parksys_fee 功能描述 : 系统提供的函数,供考生调用,车辆离开停车场后收取的费用 输入参数 : UL fee当次停车收取的费用 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数*/void api_parksys_fee(UL fee);/* 函 数 名 : api_parksys_idle_parkingspace_number 功能描述 : 系统提供的函数,供考生调用,停车场空闲车位查询结果 输入参数 : UL number空闲车位数 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月9日 作 者 : 修改内容 : 新生成函数*/void api_parksys_idle_parkingspace_number(UL number);/* 函 数 名 : api_parksys_card_status 功能描述 : 系统提供的函数,供考生调用,指定卡状态查询结果 输入参数 : CardStatus cardStatus指定卡状态 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2009年9月

温馨提示

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

评论

0/150

提交评论