《(完整)C语言停车场管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《(完整)C语言停车场管理系统课程设计.docx(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计课程设计名称:课程设计专业班级:学生姓名:学 号:指导教师:课程设计时间:IpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK );IpCarStacklpCarInformation =(LPTCARINFORMATION ) malloc(nSize * sizeof ( TCARINFORMATION );IpCarStacknTop = -1 ;IpCarStack-) nStackSize = nSize ;)/ 车辆信息 carinfo 入栈 IpCarStackvoid Push ( LPTCARSTACK &Ip
2、CarStack , TCARINFORMATION carinfo ) (IpCarStack-) nTop+;IpCarStacklpCarInformation IpCarStack nTop = carinfo ; )/车辆信息从栈IpCarStack中弹出并存入carinfovoid Pop( LPTCARSTACK StlpCarStack, TCARINFORMATION &carinfo ) (carinfo = IpCarStack-) IpCarlnformation IpCarStack一nTop ;IpCarStack-) nTop;/若栈IpCarstack空,返回T
3、RUE ;否则,返回FALSEBOOL IsStackEmpty ( LPTCARSTACK IpCarStack )(return IpCarStacknTop = 1;)/ 若栈 IpStackFull 返回 TRUE ;否则,返回 FALSEBOOLIsStackFull( LPTCARSTACK IpCarStack)(return IpCarStack-) nTop = (IpCarStack-nStackSize 1 );)/ 销毁栈 IpCarStack,将指针 IpCarStack 置为 NULLvoid DestroyStack ( LPTCARSTACK &lpCarSta
4、ck )(free ( IpCarStack-lpCarInformation );free ( IpCarStack);IpCarStack = NULL ;) typedef struct carnode / 链队结点信息TCARINFORMATION carinfo; / 车辆信息struct carnode *lpNext;/指向下一个元素的指针 TCARNODE, *LPTCARNODE;typedef struct carqueue / 链队(LPTCARNODE IpHead ;/ 头结点LPTCARNODE IpRear;/指向当前队尾的指针int nEffectivesize
5、 ;/当前队中元素个数 TCARQUEUE , * LPTCARQUEUE;/初始化链队IpCarQueuevoid InitQueue ( LPTCARQUEUE &lpCarQueue )(IpCarQueue = ( LPTCARQUEUE ) malloc( sizeof ( TCARQUEUE );IpCarQueue-) IpHead = ( LPTCARNODE ) malloc( sizeof( TCARNODE );IpCarQueue-IpHead-) IpNext = NULL;IpCarQueuelpRear = IpCarQueue-IpHead ;IpCarQueu
6、e一nEffectiveSize = 0;)void EnQueue ( LPTCARQUEUE &lpCarQueue , TCARINFORMATION carinfo )LPTCARNODE IpCarNode = ( LPTCARNODE ) malloc ( sizeof ( carnode );IpCarNode-) carinfo = carinfo;IpCarNodelpNext = NULL ;lpCarQueue-lpRearlpNext = IpCarNode ;IpCarQueue-) IpRear = IpCarQueue-) IpRear-) IpNext;IpCa
7、rQueuenEffectiveSize+ ;)/队头元素从链队IpCarQueue中出队并存入carinfovoid DeQueue ( LPTCARQUEUE &lpCarQueue, TCARINFORMATION &carinfo )LPTCARNODE IpTemp = IpCarQueue-lpHead一lpNext;carinfo = IpTemp carinfo;IpCarQueuelpHeadlpNext = IpTempIpNext;free( IpTemp);IpCarQueue-nEffectiveSize;)/若链队IpCarQueue为空返回TRUE ;否则,返回F
8、ALSEBOOL IsQueueEmpty ( LPTCARQUEUE IpCarQueue )return IpCarQueuenEffectiveSize = 0 ;)/销毁链队IpCarQueuevoid DestroyQueue ( LPTCARQUEUE &IpCarQueue )(LPTCARNODE IpNextCarNode = NULL;for ( LPTCARNODE IpCarNode = IpCarQueue-) IpHead; IpCarNode ! = NULL ; IpCarNode =IpNextCarNode )(IpNextCarNode = IpCarNo
9、deIpNext;free ( IpCarNode);)free( IpCarQueue);IpCarQueue = NULL;)/将字符串时间格式转换为数字(分钟)格式,例如12:36将被转换为756 ( 12 * 60 + 36 )int ConvertTimeFormat( char *lpTime )(int nHour = 0;int nMinute = 0;sscanf ( IpTime, %d : %d , &nHour, &nMinute);return nHour * 60 + nMinute ;)/根据在停车场内的停留时间nContinuanceMinutes (分钟)计算
10、费用 double CalculateExpense( int nContinuanceMinutes )(return nContinuanceMinutes * ( 5O 0/60 );)int main( void )(int nParkCapability = 0 ;停车场容量putchar (;p ri ntf (请输入停车场容量:);scant ( %d” , &nParkCapability);LPTCARSTACK IpCarStack = NULL; / 停车场,用栈模拟InitStack( IpCarStack , nParkCapability );LPTCARQUEUE
11、 IpCarQueue = NULL; / 便道,用链队模拟char cCommandType = NULL; / 命令类型char szllserlnput128 = NULL ; 用户输入 do(ClearScreen ();putchar (,n );puts ( );puts(命令类型r );puts ( H A 车辆到达);puts( HD 车辆离开);puts ( H E -停止输入);puts( O 显示当前停车场和便道使用情况);putchar(znl);puts (例 r );puts ( ”A,冀 A1234,14 : 26 );puts ( D,冀A1234,16 : 5
12、r );puts( E);puts(H On);putchar( nz );printf (请输入命令:);scanf( %s , szllserlnput);puts ( -/);char szCarlnformation 128 = NULL;sscanf ( szllserlnput, /将命令类型与车辆信息分开存放c , %s,&cCommandType /用户输入的前半部分,即命令类型szCarlnformation /用户输入的后半部分,即车辆信息 );char *lpCommaLocation = NULL ; /车辆信息字符串中的逗号位置for ( IpCommaLocatio
13、n = szCarlnformation ; *lpCommaLocation != 0; lpCommaLocation + + ) (if ( *IpCommaLocation =二,1 )(break;)* IpCommaLocation =0;TCARINFORMATION carinfo = NULL ; 存储本次用户输入的车辆信息strcpy ( carinfOo szRegistrationMark, szCarlnformation );if ( cCommandType = A ) strcpy( carinfo.szArrivalTime, IpCommaLocation
14、+ 1 );if ( FALSE = IsStackFull ( IpCarStack )strcpy( carinfo.szEntranceTime, carinfoo szArrivalTime );Push ( IpCarStack, carinfo );printf( H已进入停车场第%d个车位n”,IpCarStacknTop + 1);printf (车牌号:tt%sn/z carinfoo szRegistrationMark );print* 进入时间:t%sn,carinfoo szEntranceTime );puts (是否收费:t是);)else(EnQueue ( I
15、pCarQueue , carinfo );printf(停车场已满,已停放在便道的第%d个车位n,IpCarQueue-nEffectiveSize);printf(车牌号:tt%srT , carinfo.szRegistrationMark );printf ( 停放时间:t%sn,carinfo.szArrivalTime );puts (是否收费:t否);)else if ( cCommandType = Dz )strcpy ( carinfOo szDepartureTime , IpCommaLocation + 1);LPTCARSTACK IpTempCarStack =
16、NULL ;InitStack ( IpTempCarStack, nParkCapability );TCARINFORMATION carinfoOut = NULL ;BOOL blsCarFound = FALSE;while ( FALSE = IsStackEmpty( IpCarStack )(Pop( IpCarStack, carinfoOut );if ( 0 != strcmp( carinfoOut.szRegistrationMark , carinfo.szRegistrationMark )(Push ( IpTempCarStack , carinfoOut )
17、;)else(blsCarFound = TRUE ;break;)while ( FALSE = IsStackEmpty( IpTempCarStack )需求分析O.O.OO.O O O O 。30 0 *0 0 0 * j概要设计3详细设计久o o o O 6程序设计.0 0 0 0 0 0 .0TCARINFORMATION tempcarinfo = NULL ;Pop ( IpTempCarStack z tempcarinfo );Push( lpCarStackf tempcarinfo ); )if ( FALSE 二二 blsCarFound ) (printf (车牌号
18、为 %s 的车未进入停车场.n,carinfoo szRegistrationMark);Pause ( n按任意键输入下一条信息。.n);continue ; )strcpy ( carinfoOuto szDepartureTime , carinfo.szDepartureTime );int nEntranceTime = ConvertTimeFormat ( carinfoOut.szEntranceTime );int nDepartureTime = ConvertTimeFormat ( carinfoOut.szDepartureTime );int nContinuanc
19、eMinutes = nDepartureTime nEntranceTime;printf (计费时段:t%s - %s (共 d 分钟)n,carinfoOuto szEntranceTime ,carinfoOut.szDepartureTime, nContinuanceMinutes);double rExpense = CalculateExpense ( nContinuanceMinutes );printf( H应交纳的费用:t%.llf 元n,rExpense);if ( FALSE = IsQueueEmpty( IpCarQueue )TCARINFORMATION t
20、empcarinfo = NULL ;DeQueue( IpCarQueue , tempcarinfo );strcpy( tempcarinfo.szEntranceTime , carinfoOut.szDepartureTime );Push ( IpCarStack, tempcarinfo );puts(n );printf (停放在便道的第1个车位,车牌号为%s的车已进入停车场n, tempcarinfoo szRegistrationMark);)else if ( cCommandType = T7 ));puts( ” * * * * * * * * * * * * * *
21、”puts(陈赛Build20090507nn);puts (* * * * * *break;)else if ( cCommandType = = O )(ClearScreenO;putchar(z n);puts ( 11 停车场使用情况n“);puts ( 车位M车牌号t倒达时间t 进入(开始计费)时间nH);for ( int i = 0; i IpCarlnformation i szEntranceTime);)putchar ( n );putchar (,n);putchar ( rY );puts( %更道使用情况n);puts (车位t车牌号t倒达时间t进入(开始计费)
22、时间n);int nNum = 0 ;for ( LPTCARNODE IpCarNode = IpCarQueuelpHead一lpNext;IpCarNode != NULL; IpCarNode = IpCarNodeIpNext )(nNum + +;printf( %dt%stt%stt%sn/nNum ,IpCarNodecarinfo.szRegistrationMark ,IpCarNodecarinfoo szArrivalTime ,7调试分析11果19o o O 22o O O 10心得体会o o O O O O O O O O O O O O O O O O O23O
23、O O O O 24 0 o o 1 1成绩评价表.。.O算机迪睦专业课程设计任务书学生姓名专业班级学号题目停车场管理系统课题性质课题来源指导教师同组姓名主要内容学习掌握并熟练运用C语言进行程序设计;针对具体应用问题,选择、设计和实现合适的抽象数据类型;进行简单的需求分析,给出设计方案。任务要求综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到 培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用 软件奠定基础,达到软件建的综合性基础训练的目的。完成需求分析报告才艮告中对关键部分给出图表说明。要求格式规范,工作 量饱满。参考文献数据结构(C语言版)严蔚敏 清华大学出版社C
24、语言程序设计(第三版)谭浩强 清华大学出版社审查意见指导教师签字:教研室主任签字:年月 日一、需求分析设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.在停车场内,汽车 按到达的先后次序,由北向南依次排列(假设大门在最南端X若停车场内已停满n辆车,则后 来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某 辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车 辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时 间不收费)。设计要求:1 .模拟上述管理过程.要求以顺序栈模拟停车场,以链
25、队列模拟便道。2 .从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达还是离开;(2)汽车牌照号码;(3 )“到达或离开的时刻.3 .与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上 的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。二、概要设计1 .数据结构说明(1)用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODECarNode * stack MAX+1 ;int top; SeqStackCar; /* 模拟车场*/(2) 一个队列结构,存储便道车辆信息:typedef struct No
26、de QueueNode *head ;QueueNode *rear;LinkQueueCar; /*模拟便道 * /(1)功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示(2)以模块为单位分析算法L 到达模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2O(车辆到达二停车场是否满二是否 ,进入停车场进入便道 ,(结束)2.离开模块:离开时,当车库为空时才是示没有车,结束;否则车辆离开。如图3。3. 显示模块:显示模块有两个显示选项,即:车场与便道。如图4.图43O运行环境i)软件环境操作系统:Windows72)硬件环境处理器:Int
27、el Pentium 166MX或更高内存:32MB以上硬盘空间:1GB以上显卡:SVGA显示适配4开发工具和编程语言Micros。代 visual C+ +C语言5详细设计#include (conio.h)#include malloco h)#include (stdioo h)#include #include windows0 h)/清空当前屏幕# define ClearScreen () system(n cls )/显示字符串szPrompt并等待用户按下任意键#define Pause( szPrompt) printf( %s,/ szPrompt ), getch()ty
28、pedef struct carinformation / 车辆信息(char szRegistrationMark64 ;/ 车牌号char szArrivalTime16; / 到达时间char szEntranceTime16 ;/进入停车场(开始计费)时间char szDepartureTime 16 ;/ 离开时间 TCARINFORMATION , * LPTCARINFORMATION ;typedef struct carstack(LPTCARINFORMATION IpCarlnformation; / 车辆信息int nTop; /栈顶元素下标int nStackSize ;/ 栈容量 TCARSTACK, * LPTCARSTACK ;/初始化栈IpCarStack,将其容量设置为nSizevoid InitStack( LPTCARSTACK &lpCarStackz int nSize )