C语言停车场管理实验报告_第1页
C语言停车场管理实验报告_第2页
C语言停车场管理实验报告_第3页
C语言停车场管理实验报告_第4页
C语言停车场管理实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。功能描述以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现系统设计及实现1.头文件及宏定义#include<conio.h>#include<malloc.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>#defineClearScreen()system("cls")//清空当前屏幕#definesetcolor()system("color2f")//设置背景前景颜色#definePause(szPrompt)printf("%s",szPrompt),getch()2.时间和汽车信息结构体的定义(部分代码)typedefstructcarinformation//车辆信息{charszRegistrationMark[64];//车牌号charszArrivalTime[16];//到达时间charszEntranceTime[16];//进入停车场(开始计费)时间charszDepartureTime[16];//离开时间}TCARINFORMATION,*LPTCARINFORMATION;3.栈和队列的定义(部分代码)typedefstructcarqueue//链队{LPTCARNODElpHead;//头结点LPTCARNODElpRear;//指向当前队尾的指针intnEffectiveSize;//当前队中元素个数}TCARQUEUE,*LPTCARQUEUE;4.栈和队列的初始化(部分代码)voidInitQueue(LPTCARQUEUE&lpCarQueue){lpCarQueue=(LPTCARQUEUE)malloc(sizeof(TCARQUEUE));lpCarQueue->lpHead=(LPTCARNODE)malloc(sizeof(TCARNODE));lpCarQueue->lpHead->lpNext=NULL;lpCarQueue->lpRear=lpCarQueue->lpHead;lpCarQueue->nEffectiveSize=0;}实现过程1.开始界面:输入车库容量2.输入车辆到达信息3.当车库停满车时临时停到便道上不收车费4.车辆离开后车库有车位便道上的车进入车库并显示离去车的收费记录5.显示车库及便道信息6.停止输入显示制作者信息及退出程序实训心得通过这次实训我对课本上的理论知识有了更深层次的了解,可能在仅一周的时间内学到的东西有限,不过却也是受益非浅,实训本来就是对平常所学的理论知识通过具体的实现表示出来是在完成理论课程学习之后安排的综合实践训练,任何一个优秀的程序员都是从实践中获得经验和教训的。经过仅仅一周的实训从总体上说收获是很不错的!首先代码的编写能力明显提高,有了想法基本都能顺利表达出来;再者就是数据结构的选择使用能力也有了很大的提高!虽然,平时的实验课我们也有用各种数据做题,但那些都是很明确的该做什么操作,存什么,我们的发挥空间不大一般照做就行,然而这次实习我们却是在自主的选择判断,这本身就是一个很大的提高!但是还是很多的知识不了解,不过收获真的很多,但是最大的收获可能就是对编程的兴趣吧,在一次次的改掉错误,一次次的完成想要的效果后,越写越有感觉,越写越有成就感!当然还收获了无知,更确切的说是自知,原来我们现在什么也不算,还有很多有用的知识等着我们去学习!附录(代码)#include<conio.h>#include<malloc.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>//清空当前屏幕#defineClearScreen()system("cls")//设置背景前景颜色#definesetcolor()system("color2f")//显示字符串szPrompt并等待用户按下任意键#definePause(szPrompt)printf("%s",szPrompt),getch()typedefstructcarinformation//车辆信息{charszRegistrationMark[64];//车牌号charszArrivalTime[16];//到达时间charszEntranceTime[16];//进入停车场(开始计费)时间charszDepartureTime[16];//离开时间}TCARINFORMATION,*LPTCARINFORMATION;typedefstructcarstack{LPTCARINFORMATIONlpCarInformation;//车辆信息intnTop;//栈顶元素下标intnStackSize;//栈容量}TCARSTACK,*LPTCARSTACK;//初始化栈lpCarStack,将其容量设置为nSizevoidInitStack(LPTCARSTACK&lpCarStack,intnSize){lpCarStack=(LPTCARSTACK)malloc(sizeof(TCARSTACK));lpCarStack->lpCarInformation=(LPTCARINFORMATION)malloc(nSize*sizeof(TCARINFORMATION));lpCarStack->nTop=-1;lpCarStack->nStackSize=nSize;}//车辆信息carinfo入栈lpCarStackvoidPush(LPTCARSTACK&lpCarStack,TCARINFORMATIONcarinfo){lpCarStack->nTop++;lpCarStack->lpCarInformation[lpCarStack->nTop]=carinfo;}//车辆信息从栈lpCarStack中弹出并存入carinfovoidPop(LPTCARSTACK&lpCarStack,TCARINFORMATION&carinfo){carinfo=lpCarStack->lpCarInformation[lpCarStack->nTop];lpCarStack->nTop--;}//若栈lpCarstack空,返回TRUE;否则,返回FALSEBOOLIsStackEmpty(LPTCARSTACKlpCarStack){returnlpCarStack->nTop==-1;}//若栈lpStackFull满,返回TRUE;否则,返回FALSEBOOLIsStackFull(LPTCARSTACKlpCarStack){returnlpCarStack->nTop==(lpCarStack->nStackSize-1);}//销毁栈lpCarStack,将指针lpCarStack置为NULLvoidDestroyStack(LPTCARSTACK&lpCarStack){free(lpCarStack->lpCarInformation);free(lpCarStack);lpCarStack=NULL;}typedefstructcarnode//链队结点信息{TCARINFORMATIONcarinfo;//车辆信息structcarnode*lpNext;//指向下一个元素的指针}TCARNODE,*LPTCARNODE;typedefstructcarqueue//链队{LPTCARNODElpHead;//头结点LPTCARNODElpRear;//指向当前队尾的指针intnEffectiveSize;//当前队中元素个数}TCARQUEUE,*LPTCARQUEUE;//初始化链队lpCarQueuevoidInitQueue(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入队lpCarQueuevoidEnQueue(LPTCARQUEUE&lpCarQueue,TCARINFORMATIONcarinfo){LPTCARNODElpCarNode=(LPTCARNODE)malloc(sizeof(carnode));lpCarNode->carinfo=carinfo;lpCarNode->lpNext=NULL;lpCarQueue->lpRear->lpNext=lpCarNode;lpCarQueue->lpRear=lpCarQueue->lpRear->lpNext;lpCarQueue->nEffectiveSize++;}//队头元素从链队lpCarQueue中出队并存入carinfovoidDeQueue(LPTCARQUEUE&lpCarQueue,TCARINFORMATION&carinfo){LPTCARNODElpTemp=lpCarQueue->lpHead->lpNext;carinfo=lpTemp->carinfo;lpCarQueue->lpHead->lpNext=lpTemp->lpNext;free(lpTemp);lpCarQueue->nEffectiveSize--;}//若链队lpCarQueue为空,返回TRUE;否则,返回FALSEBOOLIsQueueEmpty(LPTCARQUEUElpCarQueue){returnlpCarQueue->nEffectiveSize==0;}//销毁链队lpCarQueuevoidDestroyQueue(LPTCARQUEUE&lpCarQueue){LPTCARNODElpNextCarNode=NULL;for(LPTCARNODElpCarNode=lpCarQueue->lpHead;lpCarNode!=NULL;lpCarNode=lpNextCarNode){lpNextCarNode=lpCarNode->lpNext;free(lpCarNode);}free(lpCarQueue);lpCarQueue=NULL;}//将字符串时间格式转换为数字(分钟)格式,例如12:36将被转换为756(12*60+36)intConvertTimeFormat(char*lpTime){intnHour=0;intnMinute=0;sscanf(lpTime,"%d:%d",&nHour,&nMinute);returnnHour*60+nMinute;}//根据在停车场内的停留时间nContinuanceMinutes(分钟)计算费用doubleCalculateExpense(intnContinuanceMinutes){returnnContinuanceMinutes*(5.0/60);}intmain(void){setcolor();intnParkCapability=0;//停车场容量putchar('\n');printf("请输入停车场容量:");scanf("%d",&nParkCapability);LPTCARSTACKlpCarStack=NULL;//停车场,用栈模拟豫InitStack(lpCarStack,nParkCapability);LPTCARQUEUElpCarQueue=NULL;//便道,用链队模拟InitQueue(lpCarQueue);charcCommandType=NULL;//命令类型charszUserInput[128]={NULL};//用户输入do{ClearScreen();setcolor();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("--------------------");charszCarInformation[128]={NULL};sscanf(szUserInput,//将命令类型与车辆信息分开存放"%c,%s",&cCommandType,//用户输入的前半部分,即命令类型szCarInformation//用户输入的后半部分,即车辆信息);char*lpCommaLocation=NULL;//车辆信息字符串中的逗号位置for(lpCommaLocation=szCarInformation;*lpCommaLocation!='\0';lpCommaLocation++){if(*lpCommaLocation==','){break;}}*lpCommaLocation='\0';TCARINFORMATIONcarinfo={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否");}}elseif(cCommandType=='D'){strcpy(carinfo.szDepartureTime,lpCommaLocation+1);LPTCARSTACKlpTempCarStack=NULL;InitStack(lpTempCarStack,nParkCapability);TCARINFORMATIONcarinfoOut={NULL};BOOLbIsCarFound=FALSE;while(FALSE==IsStackEmpty(lpCarStack)){Pop(lpCarStack,carinfoOut);if(0!=strcmp(carinfoOut.szRegistrationMark,carinfo.szRegistrationMark)){Push(lpTempCarStack,carinfoOut);}else{bIsCarFound=TRUE;break;}}while(FALSE==IsStackEmpty(lpTempCarStack)){TCARINFORMATIONtempcarinfo={NULL};Pop(lpTempCarStack,tempcarinfo);Push(lpCarStack,tempcarinfo);}if(FALSE==bIsCarFound){printf("车牌号为%s的车未进入停车场.\n",carinfo.szRegistrationMark);Pause("--------------------\n按任意键输入下一条信息...\n");continue;}strcpy(carinfoOut.szDepartureTime,carinfo.szDepartureTime);intnEntranceTime=ConvertTimeFormat(carinfoOut.szEntranceTime);intnDepartureTime=ConvertTimeFormat(carinfoOut.szDepartureTime);intnContinuanceMinutes=nDepartureTime-nEntranceTime;printf("计费时段:\t%s-%s(共%d分钟)\n",carinfoOut.szEntranceTime,carinfoOut.szDepartureTime,nContinuanceMinutes);doublerExpense=CalculateExpense(nContinuanceMinutes);printf("应交纳的费用:\t%.1lf元\n",rExpense);if(FALSE==IsQueueEmpty(lpCarQueue)){TCARINFORMATIONtempcarinfo={NULL};DeQueue(lpCarQueue,tempcarinfo);strcpy(tempcarinfo.szEntranceTime,carinfoOut.szDepartureTime);Push(lpCarStack,tempcarinfo);puts("--------------------");printf("停放在便道的第1个车位,车牌号为%s的车已进入停车场\n",tempcarinfo.szRegistrationMark);}}elseif(cCommandType=='E'){puts("********************");puts("姓名:肖熊\n");puts("学号:200813080245\n");puts("********************");break;}elseif(cCommandType=='O'){ClearScreen();

温馨提示

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

评论

0/150

提交评论