停车场管理系统C语言实现
- 格式:docx
- 大小:30.43 KB
- 文档页数:13
停车场管理系统1题目要求设有一个可以停放n 辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n 辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车站。
停车站内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车站为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
【基本要求】要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场是的停车时间及它应该交的费用。
2需求分析根据题目要求,因为停车场是一个单条的序列,可以用结构体实现;在程序中,需要知道每辆来车的具体停放位置,应提供提示、查找、标记工作。
车辆离开要计时计费。
另外,每天开始时,停车场要初始化。
3总体设计这个系统可以分为:初始化、有车进入、有车离开、退出四个模块。
4详细设计main()函数体内包含了界面选则部分menu(),并单独抽出来作为一个独立函数,目的在于系统执行每部分模块后能够方便返回到系统界面。
即main()函数写为 如下:void main()/*主函数*/ { menu();/*菜单函数*/ }菜单函数: void menu() { int n,w; do { puts("\t\t**************MENU**************\n\n"); puts("\t\t\t 1.初始化"); puts("\t\t\t 2.有车进入"); puts("\t\t\t 3.有车离开"); puts("\t\t\t 4.退出"); puts("\n\n\t\t*********************************\n"); printf("Please choice your number(1-4): [ ]\b\b"); scanf("%d",&n); if(n<1||n>4) /*对选择的数字作判断*/ { w=1; getchar(); } else w=0; }while(w==1); switch(n) { case 1:chushi();break; /*初始化函数*/ case 2:jinru();break; /*车辆进入函数*/case 3:likai();break;/*车辆离开函数*/case 4:exit(0);/*退出*/}}初始化模块设计:【需求分析】该模块是将每一天开始的停车场内和便道车位清零。
C语言智能停车系统控制和优化停车场管理智能停车系统是当前停车场管理的关键课题之一,而C语言作为一种广泛应用于嵌入式系统开发的编程语言,可以为智能停车系统提供稳定和高效的控制。
本文将探讨C语言在智能停车系统控制和优化停车场管理中的应用。
一、智能停车系统的需求分析智能停车系统的目标是提高停车场的利用率和运行效率,为车主和管理者提供更加便捷的停车体验。
在进行系统设计和编程之前,我们需要对智能停车系统的需求进行详细的分析和理解。
1.1 车位管理智能停车系统需要能够准确地判断车位的空闲和占用情况,同时具备对车位进行分配和释放的能力。
这需要通过传感器和控制器实现硬件和软件的有效配合。
1.2 车辆识别为了确保车主的正常使用,智能停车系统需要能够准确地识别车辆的相关信息,例如车牌号码、车型和颜色等。
这可以通过图像识别和车载设备配合实现。
1.3 支付结算智能停车系统可以通过与车主的手机或信用卡绑定,实现电子支付和自动结算。
这要求系统具备安全可靠的数据传输和存储机制。
二、C语言智能停车系统控制原理在进行智能停车系统编程前,我们首先要理解系统的工作原理和流程。
下面将介绍一种基于C语言的智能停车系统控制框架。
2.1 硬件连接与初始化使用C语言开发智能停车系统时,首先要初始化所使用的硬件设备,例如传感器、摄像头和控制器等。
这需要编写相关的驱动程序和初始化函数。
2.2 车位管理通过编程实现对每个车位状态的监测和控制,以确定车位的空闲和占用情况。
当有车辆进入或离开停车场时,系统应能及时进行更新和响应。
2.3 车辆识别与信息存储对于每辆车辆的识别信息,可以采用数据库或文件的形式进行存储。
通过编程实现车牌等信息的提取和比对,以确保车主信息的准确和安全。
2.4 支付结算与报表生成智能停车系统应具备支付和结算功能。
编程通过与第三方支付平台或信用卡系统进行接口对接,实现车主账号扣费和生成支付报表等。
三、C语言优化停车场管理除了实现智能停车系统的基本功能外,我们还可以通过C语言编程优化停车场管理,提高系统的效率和用户体验。
Xxxxx大学xxxxxxxxxxx系20xx-20xx学年第一学期《C程序设计》课程设计题目名称:停车场管理系统设计姓名:学号:班级:指导教师:编写日期: 20 年1月5日—20 年1月31日成绩:目录(一)需求分析 (3)1-1停车 (3)1-2取车 (3)1-3功能的选择 (3)(二)总体设计(程序设计组成框图) (3)2-1停车模块 (3)2-2取车模块 (3)2-3车辆信息浏览模块 (4)2-4程序设计组成框图 (4)(三)详细设计 (4)3-1停车场分析 (4)3-2停车操作 (4)3-3收费管理(取车) (5)3-4车辆信息 (5)3-5退出系统 (5)(四)程序运行结果测试与分析 (5)(五)结论与心得 (7)(六)参考文献 (7)(七)致谢 (8)附录: (8)(一)需求分析1-1停车车辆信息要用文件存储,因而要提供文件的输入输出操作。
1-2取车当车离开时,要删除文件中该车的信息,因而要提供文件的删除操作。
1-3功能的选择提供现实操作和用键盘式菜单实现功能选择。
(二)总体设计(程序设计组成框图)2-1停车模块对车辆信息赋值,分配前检查车位使用情况(按行查找park 数组,元素为0 表示车位为空,则允许分配)。
把新添加的车辆信息以追加的方式写入汽车信息文件,并更改汽车信息文件中其他汽车信息的停车时间(停车时间加5)。
2-2取车模块计算费用(停车费用=停车时间*0.2 元),从文件中删除该车信息。
并将该车位对应的二位数组变量设为0,表示该车位可用。
输出提示信息:是否输出停车费用总计?(Y/N)如果选择Y,则输出停车费用,否则回到上级菜单。
2-3车辆信息浏览模块输出车辆信息文件中的记录。
另外,用户按Esc 键退出系统。
2-4程序设计组成框图(三)详细设计3-1停车场分析有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层。
( 停车场可用一个二维数组实现, 每个数组元素存放一个车牌号 ) 假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5 . 即先将这四辆车的信息存入文件”car.dat”中。
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
功能描述以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表实现系统设计及实现1.头文件及宏定义#include <conio.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <windows.h>#define ClearScreen() system( "cls" ) // 清空当前屏幕#define setcolor() system("color 2f")//设置背景前景颜色#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()2.时间和汽车信息结构体的定义(部分代码)typedef struct carinformation // 车辆信息{char szRegistrationMark[64]; // 车牌号char szArrivalTime[16]; // 到达时间char szEntranceTime[16]; // 进入停车场(开始计费)时间char szDepartureTime[16]; // 离开时间} TCARINFORMATION, *LPTCARINFORMATION;3.栈和队列的定义(部分代码)typedef struct carqueue // 链队{LPTCARNODE lpHead; // 头结点LPTCARNODE lpRear; // 指向当前队尾的指针int nEffectiveSize; // 当前队中元素个数} TCARQUEUE, *LPTCARQUEUE;4.栈和队列的初始化(部分代码)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;}实现过程1.开始界面:输入车库容量2.输入车辆到达信息3.当车库停满车时临时停到便道上不收车费4.车辆离开后车库有车位便道上的车进入车库并显示离去车的收费记录5.显示车库及便道信息6.停止输入显示制作者信息及退出程序实训心得通过这次实训我对课本上的理论知识有了更深层次的了解,可能在仅一周的时间内学到的东西有限,不过却也是受益非浅,实训本来就是对平常所学的理论知识通过具体的实现表示出来是在完成理论课程学习之后安排的综合实践训练,任何一个优秀的程序员都是从实践中获得经验和教训的。
C++停车场管理系统简单代码实现 #include #include #include #include #define MAX 5 /*车库容量*/ #define price 0.01 /*每车每分钟费用*/ typedef struct time { int hour; int min; }Time; /*时间结点*/ typedef struct node { char num[10]; Time reach; Time leave; }CarNode; /*车辆信息结点*/ typedef struct NODE { CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车站*/ typedef struct car { CarNode *data; struct car *next; }QueueNode; typedef struct Node { QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟通道*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void main()
{ system("color 00f"); SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) { cout<<" 欢迎光临 "
C语言课程设计报告目录一、题目要求,需求分析二、总体设计思路与功能模块划分三、程序设计四、程序运行测试五、总结前言计算机科学技术的发展,不仅极大地促进了整个科学技术的发展,而且明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在全国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
如今,高等教育的计算机教育发展十分迅速。
十多年前,只有部分理工科专业开设计算机课程。
今天,几乎所有高校的所有专业都开设了程度不同的计算机课程。
人们已经认识到,计算机知识已成为当代知识分子知识结构中不可缺少的重要组成部分。
而除了掌握计算机的基础知识和操作的基本能力外,掌握一门高级编程语言,并可以熟练运用它,已成为当代大学生综合能力必要组成。
计算机技术发展如此迅猛,计算机应用如此广泛,需要学习的东西愈来愈多,而我们的总学时是有限的。
一般来说,计算机课程学习可以分为两部分:一部分是理论课程学习,一部分是上机应用实习。
根据我们专业的性质和要求,则应侧重于上机操作运用。
为此,学校特意在本学期最后安排了32个学时的上机实习。
现将一星期的实习内容及结果分析分列如下:一、题目要求:27.停车场管理21、有一个两层的停车场,每层有6个车位,当第一层车停满后才允许使用第二层,(停车场可用一个二维数组实现,每个数组元素存放一个车牌号)每辆车的信息包括车牌号,层号,车位号,停车时间共4项,其中停车时间按分钟计算。
2、假设停车场初始状态为第一层已经停有4辆车,其车位号依次为1-4,停车时间依次为20,15,10,5。
即先将这四辆车的信息存入文件“car.dat"中(数组的对应元素也要进行赋值)。
3、停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添加文件"car.dat"中,并将在此之前的所有车的停车时间加5。
中国地质大学(武汉)设计名称:班级序号:姓名:学号:指导老师:C语言程序设计报告前言设计目的:通过设计一个停车场管理系统,进一步消化和巩固已学过的C 语言程序设计基础理论,学习和实践程序设计的各种技能,利用C 语言来设计各种应用程序和管理系统,为社会提供各种现代化的管理工具,同时也掌握与数组有关的算法、函数的调用、结构体类型变量的定义和使用;文件打开、关闭、读、写等文件操作函数的使用,提高实际运用能力。
设计内容题目要求:27题:停车场管理2内容:1.有一个两层的停车场,每层有6个车位,当第一层车位停满后才允许使用第二层(停车场可用一个二维数组实现,每个数组元素存放一个车牌号)每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算。
2.假设停车场初始状态为第一层已经有四辆车,其车位号依次为1-4,停车时间依次为20,15,10,5。
即先将这四辆车的信息存入文件“car.dat”中(数组的对应元素也要进行赋值)3.停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空位则必须停在第一层),停车时间设为5,最后将新停入的汽车的信息添加文件“car.dat”中,并将在此之前的停车时间加5。
(此题简化时间的处理:当有一辆车进入时才对别的车加时间5分钟)4.收费管理(取车):当有车开走时,输入其车牌号,先按其停车时间计算费用,每5分钟2毛钱。
同时从文件“car.dat”k 删除该车的信息,并将该车对应的车位设置为可使用状态(即二维数组清零)。
按用户的选择来判断是否要输出停车收费的总计。
5.输出停车场中全部车辆的信息。
6.退出系统。
需求分析车辆信息要用文件存储,提供文件的输入输出操作;当车开走时要删除文件中该车的信息,因而要提供文件的删除操作;另外还要用键盘式菜单实现功能选择。
总体设计整个管理系统可设计为停车模块、取车模块、车辆信息浏览模块。
#include<stdio.h>#include<stdlib.h>#define stacksize 2 //车站//容量///////////////////////////////////////////////////////typedef struct Snode{int number;float int_time[2];float bian_time[2];}record;typedef struct {record *base;record *top;int size;}Stack;/////////////////////////////////////////////////////typedef struct Qnode{int number;float int_time[2];struct Qnode *next;}Qnode,*Queue;typedef struct {Queue front;Queue rear;}Linkqueue;void xunhuan(Stack L,Linkqueue Q);void jixu(Stack L,Linkqueue Q);//////////////////////////////////////////////////////////////////////////////////////////////////////////void InitStack(Stack &L) //堆栈操作{L.base=(record*)malloc(sizeof(Snode)*stacksize);if(!L.base)exit(0);L.top=L.base;L.size=stacksize;}/////////////////////////////////////////////////////void input(Stack &L,record h){*L.top++=h;}///////////////////////////////////////////////////Snode output(Stack &L,record &e){e=*--L.top;return e;}int Stackman(Stack L){if(L.top-L.base==L.size)return 0;elsereturn 1;}int StackEmpty(Stack L){if(L.base==L.top)return 0;elsereturn 1;}////////////////////////////////////////////////////////////////////////////////////////////////////void Initque(Linkqueue &Q) //队列操作{Q.front=Q.rear=(Queue)malloc(sizeof(Qnode));if(!Q.front)exit(0);Q.front->next=NULL;}//////////////////////////////////////////////////void enqueue(Linkqueue &Q,int number,float time[]){Queue q;printf("停车场已满,请将车辆停入便道!\n");q=(Queue)malloc(sizeof(Qnode));q->int_time[0]=time[0];q->int_time[1]=time[1];q->number=number;q->next=NULL;Q.rear->next=q;Q.rear=q;}///////////////////////////////////////////////////void outqueue(Linkqueue &Q,Queue &e) //此处有点问题??????????????{// Qnode *q;// q=(Queue)malloc(sizeof(Qnode));e=Q.front->next;// Q.front->next=q->next;//delete q;Q.front->next=Q.front->next->next;if(Q.rear==e){Q.front=Q.rear;// Q.front=NULL;}}int QEmpty(Linkqueue Q){if(Q.rear==Q.front)return 0;elsereturn 1;}//////////////////////////////////////////////////// //停车场管理操作////////////////////////////////////////////////////void jixu(Stack L,Linkqueue Q){int n;fflush(stdin);scanf("%d",&n);switch(n){case 1:printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");xunhuan(L,Q);break;case 2:printf("****************************退出管理系统*****************************\n");default:printf("\n输入错误,请重新输入: ");jixu(L,Q);break;}}void jiaofei(float time[],float time1[],float time2[]) //缴费操作{float data1,data2;double money;if(time2[0]!=0&&time2[1]!=0)data2=(time1[0]-time2[0]-1)*60+60-time2[1]+time1[1];elsedata2=0;data1=(time[0]-time1[0]-1)*60+60-time1[1]+time[1];// printf("进入车场时间%f,退出车场时间%f\n",time1[1],time[1]);printf("你的停车时间为%lf小时,在便道停留时间%f小时\n",data1/60,data2/60);money=data1/60*5.0+data2/60*2.0;printf("请交纳%lf元\n",money);/* if(data1<=60.0)printf("请交纳5元。
算法与数据结构课程设计题目:停车场管理专业班级:软件四班姓名:学号:指导教师:成绩:______________目录一、题目及要求 (2)二、题目分析 (3)三、数据结构说明 (4)四、各函数算法分析 (5)(1)主函数 (5)(2)车辆到达函数 (7)(3)车辆离开函数 (8)(4)列表显示函数 (10)五、程序测试 (14)(1)测试信息对错误的处理 (14)(2)列表显示 (15)(3)同时输出等待的提示作息 (16)(4)计算它们的应交费用 (17)六、课程设计感悟与收获 (18)七、源代码 (19)八、参考文献 (25)一、题目及要求[要求]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆国就进入停车场。
停车场内如有某辆车要走,在它之后进来的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且其他在便道上等待的车辆的次序不变。
编制一程序模拟停车场管理。
[提示]汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去时刻)。
例如:(’A’,1,5)表示1号牌照车在5这个时刻到达,而(’D’,5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为(’E’,0,0)时结束。
基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交的费用和它在停车场内停留的时间。
根据题目要求,停车场可以用一个长度为n的堆栈来模拟。
由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
c语言课程设计主题停车管理系统主题停车管理系统教官颜东学生专业电子信息工程教学单位物理系(盖章)目录1设计能力和设计要求1.1系统功能简介1.2系统运行环境2功能划分,模块详细说明3程序流程图4操作和操作说明4.1系统的运行4.2操作说明摘要5......5......6......7......8......9 (9)附件:源程序列表1设计能力和设计要求1.1系统功能介绍⏹该系统具有简洁的菜单界面,用户通过输入简单的选项即可完成相应的工作。
⏹用户可以选择1、2、3、4进行相应的操作,统一查看,统一输出。
⏹这个停车场管理系统(1)停车场为两层,每层6个车位。
只有一楼住满了,二楼才能用。
(停车场可以用二维数组实现,每个数组元素存储一个车牌号。
)每辆车的来信(2)假设停车场的初始状态是一层停了4辆车,车位为1-4个,停车时间为20、15、10、5。
即这四辆车的信息会先存储在文件“car.dat”中(数组的对应元素也会被赋值)。
(3)停车操作:当一辆车进入停车场时,先输入其车牌号,然后分配给它一个楼层号和一个车位号(分配前检查车位的使用情况,如果一楼空着就停在一楼),停车时间设置为5。
最后,将新停放的汽车的信息添加到文件“car.dat”中,在此之前所有汽车的停放时间加5。
(4)收费管理(取车):汽车离开时,输入其车牌号,先按其停车时间计算费用,每5分钟0.2元。
(设置一个变量可以节省停车费),同时从文件“car.dat”中删除该车的信息,将该车对应的车位设置为可用状态(即二维数组的对应元素被重置)。
根据用户的选择,判断是否输出停车费。
(5)输出停车场所有车辆的信息。
(6)退出系统。
⏹1.2系统运行环境⏹运行在C++6.0,对硬件基本没有要求。
现在,大多数计算机系统都可以运行这个系统。
4系统的操作和描述4.1系统的操作系统初始运行时,会显示如图4-1所示的输入界面,用户可以根据提示做出相应的选择,完成系统提供的各种功能。
一.问题描述1.实验题目:设停车场是一个可停放n 辆汽车的狭长通道,且只有一个大门可供汽车进出;汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列大门在最南端,最先到达的第一辆车停放在车场的最北端;若停车场内已经停满n辆车,那么后来的车只能在门外的便道上等候;一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用;试为停车场编制按上述要求进行管理的模拟程序;要求:根据各结点的信息,调用相应的函数或者语句,将结点入栈入队,出栈或者出队;二.需求分析1.程序所能达到的基本可能:程序以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理;栈以顺序结构实现,队列以链表结构实现;同时另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车;输入数据按到达或离去的时刻有序;当输入数据包括数据项为汽车的“到达”‘A’表示信息,汽车标识牌照号以及到达时刻时,应输出汽车在停车场内或者便道上的停车位置;当输入数据包括数据项为汽车的“离去”‘D’表示信息,汽车标识牌照号以及离去时刻时,应输出汽车在停车场停留的时间和应缴纳的费用便道上停留的时间不收费;当输入数据项为‘P’,0,0时,应输出停车场的车数;当输入数据项为‘W’, 0, 0时,应输出候车场车数;当输入数据项为‘E’, 0, 0,退出程序;若输入数据项不是以上所述,就输出"ERROR";2.输入输出形式及输入值范围:程序运行后进入循环,显示提示信息:“Please input the state,number and time of the car:”,提示用户输入车辆信息“到达”或者“离开”,车牌编号,到达或者离开的时间;若车辆信息为“到达”,车辆信息开始进栈模拟停车场,当栈满,会显示栈满信息:“The parking place is full”,同时车辆进队列模拟停车场旁便道,并显示该进入便道车辆的车牌编号,让用户知道该车的具体位置;若车辆信息为“离开”,会显示该车进入停车场的时间以及相应的停车费用,若该车较部分车早进停车场,这部分车需先退出停车场,暂时进入一个新栈为其让道,会显示进入新栈的车辆的车牌编号及其入停车场的时间,当待离开车离开停车场后,这部分车会重新进入停车场,同时便道上的第一辆车进入停车场;若输入‘P ’,0,0,会显示停车场的车数;若输入‘W ’,0,0,会显示便道上的车数;若输入‘E ’,0,0,程序会跳出循环,同时程序结束;若输入为其他字母,程序会显示“ERROR ”报错;若便道上没有车辆停靠,会显示便道为空的信息:用户每输入一组数据,程序就会根据相应输入给出输出;输入值第一个必须为字母,后两个为数字;3.测试数据要求:用户输入字母时,输入大写或小写,都可以被该程序识别,正常运行;但要求用户输入数据时,三个数据项之间必须用逗号相分隔开;三.概要设计为了实现上述功能,该程序以栈模拟停车场以及临时停放为给要离去的汽车让路而从停车场退出来的汽车的场地,以队列模拟车场外的便道,因此需要栈和队列这两个抽象数据类型;1.栈抽象数据类型定义:ADT SqStack{数据对象:D={char d c b a d c b a i i i i i i i i ∈∈∈∈int,int,int,|,,,, i=1,2,3....,n,n 0≥}数据关系:R={i i i d b a ,,|∈i i i d b a ,,D,∈i i i d b a ,,struct car};基本操作:Judge_Outputs,q,r ;列抽象数据类型定义:ADT LinkQueue{数据对象:D={∈i i i i a c b a |,,Qnode ,∈i b Qnode,int ∈i c ,i=1,2,3....,n,n 0≥};数据关系:R=φ;基本操作:Judge_Outputs,q,r;要算法流程图:I.Judge_Output算法流程图:II.A_cars算法流程图:III.D_cars算法流程图:4.本程序保护模块:主函数模块栈单元模块:实现栈的抽象数据类型队列单元模块:实现队列的抽象数据类型调用关系:四.详细设计1.相关头文件库的调用说明:include<>include<>define MAXSIZE 14define n 2define fee 102.元素类型、结点类型和结点指针类型:struct car{ char bb;int num;int time;};struct rangweicar{int num;int time;};typedef struct stackk{struct rangweicar HMAXSIZE;int topp;}SqStackk;define QNODE struct QnodeQNODE { int data;QNODE next;};3.栈类型和队列类型:typedef struct stack{struct car Gn;int top;}SqStack;typedef struct linkqueue{QNODE front,rear;int geshu;}LinkQueue;b=='E'||r.bb=='e'printf"STOP\n";else ifr.bb=='P'||r.bb=='p'printf"The number of parking cars is %d\n",s->top+1; else ifr.bb=='W'||r.bb=='w'printf"The number of waiting cars is %d\n",q->geshu; else ifr.bb=='A'||r.bb=='a'A_carss,q,r;else ifr.bb=='D'||r.bb=='d'D_carss,q,r;elseprintf"ERROR\n";}A_carsSqStack s,LinkQueue q,struct car a {QNODE t;ifs->top=n-1{s->top++;s->Gs->top.bb=;s->Gs->top.num=;s->Gs->top.time=;}else{printf"The parking place is full\n";t=QNODE mallocsizeofQNODE;t->data=;t->next=NULL;q->rear->next=t;q->rear=t;printf"the number of the car in the access road is:%d\n",q->rear->data;q->geshu++;}}int D_carsSqStack s,LinkQueue q,struct car d{int i,j,l;float x,y;QNODE p;SqStackk k;if==s->Gs->top.num{x=s->Gs->top.time;y=feex;printf"The time is %.2f hours,the fee is %.2f yuan\n",x,y;ifq->geshu==0{printf"The queue is empty\n";return 0;}else{p=q->front->next;q->front->next=p->next;s->Gs->top.num=p->data;s->Gs->top.time=;freep;q->geshu--;ifq->front->next==NULLq->rear=q->front;return 1;}}else{fori=0;i<s->top;i++{ifs->Gi.num= continue;else break;}ifi>=s->top{printf"ERROR\n";return -1;}x=s->Gi.time;y=feex;printf"The time is %.2f hours,the fee is %.2f yuan\n",x,y; k=SqStackk mallocsizeofSqStackk;k->topp=-1;forj=s->top;j>i;j--{k->topp++; k->Hk->topp.num=s->Gj.num;k->Hk->topp.time=s->Gj.time;s->top--;}forl=0;l<=k->topp;l++{printf"the informationnumber and time in the new stack is:\n"; printf"%d,%d\n",k->Hl.num,k->Hl.time;}s->top--;whilek->topp>=0{s->top++;s->Gs->top.bb='A';s->Gs->top.num=k->Hk->topp.num;s->Gs->top.time=k->Hk->topp.time;k->topp--;}ifq->geshu==0{printf"The access road is empty\n";return 2;}else{s->top++;p=q->front->next;q->front->next=p->next;s->Gs->top.num=p->data;s->Gs->top.time=;freep;q->geshu--;ifq->front->next==NULLq->rear=q->front;return 3;}}}4.主函数的伪码:main{SqStack s;LinkQueue q;QNODE p;struct car aaMAXSIZE;int i;s=SqStack mallocsizeofSqStack;s->top=-1;q=LinkQueue mallocsizeofLinkQueue;p=QNODE mallocsizeofQNODE;p->next=NULL;q->front=q->rear=p;q->geshu=0;printf"\n";printf" \n";printf" 停车场管理系统\n";printf" \n";printf"\n";fori=0;i<MAXSIZE;i++{printf"Please input the state,number and time of the car:\n";scanf"%c,%d,%d",&aai.bb,&aai.num,&aai.time;getchar;Judge_Outputs,q,&aai;ifaai.bb=='E'||aai.bb=='e' break;}}5.函数调用关系:五.测试分析:1.出现问题及解决办法:该程序是四个程序调试中最顺利的一个,只在一个地方上出了问题,就是输入字符时由于回车键也是字符,回车键总会被读入,导致经常输出“ERROR”;后来找到原因后在scanf函数后紧接着加了一个getchar;语句后就恢复了正常;2.方法优缺点分析:优点:用栈和队列来模拟停车场让整个问题显得简单,易于实现;缺点:栈和队列这两个数学模型用在停车场管理上还是有失妥当的,现实中停车场出口入口不可能为同一处,不可能当一辆车要离开,在它后面进来的车必须为它让路,因此无法用栈的“后进先出”原则来模拟;而且没有考虑便道上的车在等待过程中可以中途开走等情况,而这些都无法用队列的“先进先出”原则来模拟;3.主要算法的时间和空间复杂度分析:1由于算法Judge_Output函数根据判断条件,每次只选择一个程序段执行,所以其时间复杂度是O1;2由于算法A_cars函数根据判断条件,将数据入栈或入队列,所以其时间复杂度也是O1;3由于算法D_cars函数在出栈数据不在最顶端时需将n个数据先出该栈,再入新栈,再回旧栈的操作,故其时间复杂度是On;4所有算法的空间复杂度都是O1;六.使用说明程序运行后用户根据提示一次输入车辆的状态信息,车牌编号,时间,程序会根据车辆的状态信息调用相应的函数,并输出用户想得到的信息;七.调试结果输入数据:‘A’,1,5,‘A’,2,10,‘D’,1,15,‘A’,3, 20,‘A’,4,25,‘A’,5,30,‘D’,2,35,‘D’,4,40,‘P’,0,0,‘W’,0,0,‘F’,0,0,‘E’,0,0;输出数据:1号车停放时间为10小时,收费100元;2号车停放时间为25小时,收费250元;4号车停放5小时,收费50元;此时停车场有两辆车,便道上无车;若停车场已满,则会显示停车场已满的信息;若便道上无车等待停车,会显示便道上无车的信息;若中途有车离开,需其后的车让道,会显示进入临时停车场的车辆的信息;若输入‘F’,0,0,输出“ERROR”;若输入‘E’,0,0,程序结束;运行结果截屏:八.附录源程序文件清单:include<> /调用的头文件库声明/include<>define MAXSIZE 14define n 2define fee 10struct car /用该结构体来存放车的状态,编号和时间信息/ { char bb;int num;int time;};typedef struct stack /用该栈来模拟停车场/{struct car Gn;int top;}SqStack;struct rangweicar /用该结构体来存放临时让出的车辆的编号以及时间信息/ {int num;int time;};typedef struct stack /用该栈来模拟临时让出的车辆的停靠场地/ {struct rangweicar HMAXSIZE;int topp;}SqStackk;define QNODE struct QnodeQNODE { int data; /链队结点的类型/QNODE next;};typedef struct linkqueue /用该链队来模拟便道/{QNODE front,rear;int geshu;}LinkQueue;void Judge_OutputSqStack s,LinkQueue q,struct car r /该算法通过传递来的车辆信息调{ 用相关函数实现操作/ ifr.bb=='E'||r.bb=='e' /若车辆状态为‘E’,终止程序/printf"STOP\n";else ifr.bb=='P'||r.bb=='p' /若车辆状态为‘P’,输出停车场车辆数/ printf"The number of parking cars is %d\n",s->top+1;else ifr.bb=='W'||r.bb=='w' /若车辆状态为‘W’,输出便道车辆数/ printf"The number of waiting cars is %d\n",q->geshu;else ifr.bb=='A'||r.bb=='a' /若车辆状态为‘A’,调用A_cars函数/A_carss,q,r;else ifr.bb=='D'||r.bb=='d' /若车辆状态为‘D’,调用D_cars函数/D_carss,q,r;elseprintf"ERROR\n"; /若车辆状态为其他字母,报错/}A_carsSqStack s,LinkQueue q,struct car a /该算法实现对车辆状态为到达的车辆的操{QNODE t; 作/ifs->top=n-1 /若停车场还没有满,则车进停车场,并存入车辆的状态,车牌编{s->top++; 号和到达时间信息/s->Gs->top.bb=;s->Gs->top.num=;s->Gs->top.time=;}else{printf"The parking place is full\n"; /若停车场已满,车进便道,并显示该车的车牌编t=QNODE mallocsizeofQNODE; 号,同时记录便道车辆数目/t->data=;t->next=NULL;q->rear->next=t;q->rear=t;printf"the number of the car in the access road is:%d\n",q->rear->data;q->geshu++;}}int D_carsSqStack s,LinkQueue q,struct car d /该算法实现车辆状态为离开的车{int i,j,l; 辆的操作/float x,y;QNODE p;SqStackk k;if==s->Gs->top.num /若待离开车为最后进停车场的车的情况/{x=s->Gs->top.time;y=feex; /直接计算停车时间,费用并离去/printf"The time is %.2f hours,the fee is %.2f yuan\n",x,y;ifq->geshu==0 /若便道上无车,函数返回/{printf"The queue is empty\n";return 0;}Else /若便道上有车,第一辆车进停车场/{p=q->front->next;q->front->next=p->next;s->Gs->top.num=p->data; /并存入其车牌编号及进停车场的时间/s->Gs->top.time=;freep;q->geshu--;ifq->front->next==NULLq->rear=q->front; /若此时便道上无车,返回1/return 1;}}Else /待离开的车不是最后进停车场的那辆车的情况/ {fori=0;i<s->top;i++ /先找到待离开车在停车场中的位置/ {ifs->Gi.num= continue;else break;}ifi>=s->top{printf"ERROR\n";return -1;}x=s->Gi.time; /计算待离开车的停车时间并计算费用/y=feex;printf"The time is %.2f hours,the fee is %.2f yuan\n",x,y;k=SqStackk mallocsizeofSqStackk; /设立一个新栈临时停放为该车离开而让k->topp=-1; 路的车辆/forj=s->top;j>i;j--{k->topp++; k->Hk->topp.num=s->Gj.num;k->Hk->topp.time=s->Gj.time;s->top--;}forl=0;l<=k->topp;l++{printf"the informationnumber and time in the new stack is:\n";printf"%d,%d\n",k->Hl.num,k->Hl.time;} /显示在新栈中的车辆信息/ s->top--;whilek->topp>=0 /将新栈中的车重新开入停车场中/{s->top++;s->Gs->top.bb='A';s->Gs->top.num=k->Hk->topp.num;s->Gs->top.time=k->Hk->topp.time;k->topp--;}ifq->geshu==0 /若便道上无车,则返回2,无车开入停车场中/ {printf"The access road is empty\n";return 2;}Else /若便道上有车,则第一辆车开入停车场中/{s->top++;p=q->front->next;q->front->next=p->next;s->Gs->top.num=p->data;s->Gs->top.time=;freep;q->geshu--;ifq->front->next==NULLq->rear=q->front;return 3;}}}main{SqStack s;LinkQueue q;QNODE p;struct car aaMAXSIZE;int i;s=SqStack mallocsizeofSqStack; /对停车场初始化/s->top=-1;q=LinkQueue mallocsizeofLinkQueue;p=QNODE mallocsizeofQNODE; /对便道初始化/p->next=NULL;q->front=q->rear=p;q->geshu=0;printf"\n";printf" \n";printf" 停车场管理系统\n";printf" \n";printf"\n";fori=0;i<MAXSIZE;i++ /输入车辆信息/ {printf"Please input the state,number and time of the car:\n"; scanf"%c,%d,%d",&aai.bb,&aai.num,&aai.time; getchar;Judge_Outputs,q,&aai;ifaai.bb=='E' break;}}。