为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言停车场管理系统课程设计

2019-01-16 21页 doc 54KB 112阅读

用户头像

is_044822

暂无简介

举报
C语言停车场管理系统课程设计 课  程  设  计 课程设计名称: 课程设计      专 业 班 级 :                学 生 姓 名 :                学      号 :                指 导 教 师 :               课程设计时间:                目  录 1 需求分析 .............................................................................................3 ...
C语言停车场管理系统课程设计
课  程  设  计 课程设计名称: 课程设计      专 业 班 级 :                学 生 姓 名 :                学      号 :                指 导 教 师 :               课程设计时间:                目  录 1 需求分析 .............................................................................................3 2 概要设计 ..........................................................................................3 3详细设计 .............................................................................................4 4 运行环境 ............................................................................................6 5开发环境 .............................................................................................6 6 程序设计 .............................................................................................6 7 调试分析 ...........................................................................................11 8 测试结果 ...........................................................................................19 9参考文献 .............................................................................................22 10体会 ........................................................................................23 11成绩评价表 ....................................................................................24       计算机应用技术 专业课程设计任务书 学生姓名   专业班级   学号   目 停车场管理系统 课题性质   课题来源   指导教师   同组姓名   主要内容 学习掌握并熟练运用C语言进行程序设计; 针对具体应用问题,选择、设计和实现合适的抽象数据类型; 进行简单的需求分析,给出设计。 任务要求 综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。 完成需求分析,报告中对关键部分给出图表说明。要求格式,工作量饱满。 参考文献 《数据结构(C语言版)》严蔚敏 清华大学出版社 《C语言程序设计》(第三版)谭浩强 清华大学出版社 审查意见 指导教师签字: 教研室主任签字: 年 月 日                 一、需求分析 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。 设计要求: 1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 2.从终端读入汽车到达或离去的数据,每组数据包括三项: (1)是“到达”还是“离开”; (2)汽车牌照号码; (3)“到达”或“离开”的时刻。 3.与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。 二、概要设计 1.数据结构说明 (1)用到两个堆栈:一个为车场栈;另一个为临时栈temp typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车场*/ (2)一个队列结构,存储便道车辆信息: typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ 2.算法说明 (1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示            图1 (2)以模块为单位分析算法 1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 图2  2.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. “显示”模块:显示模块有两个显示选项,即:车场与便道。如图4。 图4 3.运行环境 1) 软件环境 操作系统:Windows7 2) 硬件环境 处理器:Intel Pentium 166MX 或更高 内存:32MB以上 硬盘空间:1GB以上 显卡:SVGA 显示适配 4 开发工具和编程语言 Microsoft visual C++ C语言 5 详细设计 #include #include #include #include #include // 清空当前屏幕 #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 中弹出并存入 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 * ( 5.0 / 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( carinfo.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", lpCarStack->nTop + 1 ); printf( "车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf( "进入时间:\t%s\n", carinfo.szEntranceTime ); puts( "是否收费:\t是" ); } else { EnQueue( lpCarQueue, carinfo ); printf( "停车场已满,已停放在便道的第 %d 个车位\n", lpCarQueue->nEffectiveSize ); printf( "车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf( "停放时间:\t%s\n", carinfo.szArrivalTime ); puts( "是否收费:\t否" ); } } else if ( cCommandType == 'D' ) { strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 ); LPTCARSTACK lpTempCarStack = NULL;
/
本文档为【C语言停车场管理系统课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索