C++程序-停车场
- 格式:doc
- 大小:52.00 KB
- 文档页数:7
c语言中停车场收费金额计算代码停车场收费金额计算是一个常见的问题,特别是在城市中心或商业区,停车场的收费是必不可少的。
而在实际生活中,为了准确计算收费金额,我们通常会使用C语言来编写相关的程序。
在C语言中,我们可以使用变量、运算符和控制语句来实现停车场收费金额的计算。
首先,我们需要定义一些变量来存储相关的信息,比如停车时长、收费标准等。
然后,我们可以使用运算符来进行计算,最后通过控制语句来输出计算结果。
在停车场收费计算中,关键的因素之一是停车时长。
通常情况下,我们会根据停车时长来确定收费金额。
假设停车场的收费标准是每小时5元,那么我们可以根据停车时长来计算收费金额。
我们需要定义一个变量来存储停车时长,假设我们将其命名为"parkingTime"。
然后,我们可以使用C语言中的运算符来计算停车时长对应的收费金额。
具体的计算公式是:收费金额= 停车时长* 单价。
根据我们的假设,单价为5元,所以我们可以将公式修改为:收费金额 = 停车时长 * 5。
在C语言中,乘法运算可以使用"*"符号来表示。
接下来,我们可以使用控制语句来输出计算结果。
在C语言中,我们可以使用printf函数来输出结果。
假设我们将输出的内容命名为"totalAmount",那么我们可以使用以下代码来实现输出功能:```cprintf("停车时长:%d小时\n", parkingTime);printf("收费金额:%d元\n", totalAmount);```在上述代码中,%d是C语言中的格式控制符,用于输出整数类型的变量。
通过使用格式控制符,我们可以将变量的值嵌入到输出的字符串中,从而实现输出功能。
除了停车时长,停车场还可能根据其他因素来确定收费金额,比如停车场类型、停车场位置等。
在实际应用中,我们可以根据具体需求来扩展代码,以实现更加复杂的收费计算功能。
目录1 引言12 概述23 系统总体方案设计 ---------------------------------------------------- 33.1 主电路的设计43.2 控制电路的设计43.2.1 PLC概述43.2.2 PLC选型63.2.3系统变量定义及分配表83.2.4系统接线图设计-------------------------------------------- 94 控制系统设计124.1控制程序流程图设计124.2控制程序设计思路125 系统调试及结果分析155.1 系统调试及解决的问题----------------------------------------- 155.2 结果分析--------------------------------------------------------- 15 完毕语--------------------------------------------------------------------- 16 参考文献17附录一: 梯形图19附录一: 程序指令201 引言随着进口汽车大量涌入和国内汽车工业的不断开展,大中城市的汽车数量剧增,从而引发了停车管理问题。
近几年,我国的停车场管理技术不断完善,计算机技术、通信技术、网络技术的开展又使停车场管理的系统功能得以提高。
现在小区停车场管理系统重点要做到准确指示车辆进出,车辆进入时给与司机准确的车位数量与具体位置,车辆进入后,记录车辆数量,车辆离开时,减少车辆数量。
车辆进出指示可完全由PLC作为中央控制来处理,停车场空位指示可利用价格较不高的数码管显示。
停车场车位管理系统,它由固定在停车场中的管理控制器、埋设在车位处的电动车位锁及移动控制器相互连接构成;管理控制器包括传感器接收模块、逻辑控制电路及驱动控制电路;电动车位锁的电源端与驱动控制电路的电源输出端连接;移动控制器中设有数据读写控制电路、无线遥控发射模块及电池,该无线遥控发射模块通过移动控制器外部设置的遥控天线与管理控制器的接收天线进展无线信号连接,具有极大的实用价值。
c语言练习题1停车场收费问题一个停车场的标准收费是3小时之内收5元,超过3小时,每增加1小时加收2元;如果时间不是整数,按比例收取,例如:如果输入为3.6小时,则费用为5+(3.6-3)某2=6.2元。
最高收费为40元。
假设任何车辆的停车时间都不超过24小时。
编写程序,计算每辆车的停车费。
(注意输出结果小数点后保留两位)输入#includeintmain(){doublem,某;printf(\输入停车时间某:\canf(\if(某<=24){if(某<3.0){m=5.0;printf(\eleif(某>3.0){m=5.0+2.0某(某-3.0);if(m<=40)printf(\}eleprintf(\输出停车费用40元\\n\return0;2.#includeintmain(){double某,m;printf(\输入停车时间(某):\canf(\if(某<=24){if(某<=3.0)printf(\停车费用5元\\n\if(某>3)m=5.0+2.0某(某-3.0);if(m<=40)printf(\eleprintf(\停车费用40元\\n\}}2计算细菌数量一种细菌的繁殖速度是每天成倍增长。
例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。
现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。
3计算邮资计算邮资:用户输入:邮件的重量,以及是否加快计算规则:重量在1克以内(包括1克),基本费0.8元。
超过1克的部分,按照0.5元/克的比例加收超重费。
如果用户选择加快,多收2元。
#includeuingnamepacetd;intmain(){double某,um;chare某p;while(cin>>某>>e某p){if(某<=1&&e某p=='n')um=0.8;if(某<=1&&e某p=='y')um=2.8;if(某>1&&e某p=='n')um=0.8+(某-1)某0.5;if(某>1&&e某p=='y')um=0.8+(某-1)某0.5+2;cout<return0;}#includeuingnamepacetd;intmain(){int某,y;//变量定义,此处假设需要定义两个变量,均定义为整型while(cin>>某>>y){你对一组输入的一次处理过程代码}return0;}C:#includeuingnamepacetd;intmain(){int某,y;//变量定义,此处假设需要定义两个变量,均定义为整型while(canf(%某%y\{你对一组输入的一次处理过程代码}return0;}注意:考虑以下几点,然后直接套用模版就行了:i)变量定义。
算法与数据结构课程设计题目:停车场管理专业班级:软件四班姓名:学号:指导教师:成绩:______________目录一、题目及要求 (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的堆栈来模拟。
由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
2022-2023学年粤教版(2019)必修2高一(下)综合信息技术试卷1. 2020年底,工信部特地为了老年人公布了首批适老化和无障碍改造App名单。
“适老版”的App的推出,是为了减少信息系统局限性中的( )A. 对外部环境有依赖性B. 本身具有安全隐患C. 由于技术门槛可能加剧数字鸿沟D. 数字化与网络化不够全面2. CNNIC发布的第48次《中国互联网络发展状况统计报告》显示网络直播与“吃住行游购娱”紧密结合,展现出了一种新的生活方式,这主要体现的信息社会特征是( )A. 数字生活B. 信息经济C. 在线政府D. 网络社会3. 下列关于信息系统和信息社会的说法,不正确的是( )A. 信息系统缩写APPB. 信息系统是人机交互系统C. 在信息系统中,数据一般存储在数据库里D. 信息社会指数越高表明信息社会发展水平越高4. Adobe Photoshop 属于( )A. 系统软件B. 杀毒软件C. 应用软件D. 教学软件5. 下列属于搭建信息系统的前期准备过程的是( )A. 需求分析→可行性分析→硬件选择→系统测试设计→详细设计B. 需求分析→可行性分析→开发模式选择→概要设计→详细设计C. 数据收集和输入→程序设计→硬件选择→详细设计→数据查询设计D. 数据收集和输入→数据存储→数据传输→数据加工处理→数据查询设计6. 共享单车大大方便了市民的出行,如图是共享单车系统的示意图,依据此图下列说法的正确的是( )A. 因无人监管,用户可以随意停车而不会被发现B. 在偏僻的地方为便于自己再次租车,可以用链条锁将车锁上C. 因没有管理员值班收费,用户可以偷逃费用而不被发现D. 用户可以通过软件实时了解周边的租车情况7. 下列关于信息社会的说法,不正确的是( )A. 信息社会是以人为本的B. 信息社会是可持续发展的C. 信息社会是以信息和知识作为重要资源的D. 信息社会最重要的竞争是高科技技术8. 在物流快递行业中,收件员使用移动智能终端,通过扫描快件条码的方式,将运单信息通过模块直接传输到后台服务器,同时可实现相关业务信息的查询等功能。
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所示的输入界面,用户可以根据提示做出相应的选择,完成系统提供的各种功能。
精品资料C-T P A T执行(z híxín g)标准........................................海关商贸反恐怖计划(C-T P A T)执行标准一、集装箱保安(Container Security)1、总则:工厂必须有完整的集装箱使用管理程序;所有运载往美国的集装箱必须有保安功能较好的封条并符合现有的PAS ISO 17712高度安全的封条标准;集装箱内不允许装载未经授权的物料;非授权人员不可进入集装箱内。
2、集装箱的检查:工厂必须制定完整的空柜检验程序,以确保货柜的完整性;确保使用的集装箱或拖车的结构密实并且状态良好;检查过程需包括以下几方面如柜头、左面、右面、顶部、底部、内/外门(柜门须有合法的锁闭装置)和外底盘;检验人员应在集装箱的检验单上签名确认。
3、集装箱的封条:工厂须制定封条监管和使用的程序含不正确使用和遗失处理;管理部门须指派专人负责封条的监管工作;封条号码应准确无误地记录在运输单上。
4、集装箱的储存:集装箱必须储存在安全区域防止未经授权和非法操作;工厂须制定有效的报告和制止未经授权进入的程序文件。
二、物理保安(Physical Security)1、围栏:在货物堆放及储存的区域周围应建有围栏;围栏内外应清除杂物如树木、植物等,以保证保安人员的视线无遮挡物,防止有人躲藏或爬入而无法及时发现;工厂应定期对围栏进行检查,以确保围栏完整无损。
2、进出口:车辆及人员进入的大门必须有登记记录或监控措施;对进出的司机须验证其身份或驾驶证;正常的出入口数量应控制在最少的范围内。
3、停车场:访客及私人的车辆禁止停在接近货物堆放或储存的区域尤其货物装卸的区域。
4、建筑物结构:所有建筑物的结构应能防止非法闯入和防止从外面进入。
工厂应定期组织人员对建筑物进行检查和维修,确保其完好无损。
5、锁闭装置和钥匙保管:所有窗户、大门和围栏必须有足够数量的锁闭装置;管理层或保安人员必须保管所有的锁和钥匙,确保锁和钥匙的使用及保管过程是安全的。
停车场问题完整C程序代码1)内容:设停车场是一个可停放n 辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的在最北端),若停车场内已经停满n辆车,那么后来的车只能在场外等候,一旦有车开走,则等候在第一位的车即可开入(这是一个队列设长度为m);当停车场内某辆车需要开出,则在它之后的车辆必须给它让道,当这辆车驶出停车场后,其他车辆按序入栈。
每辆车按时间收费。
2)要求:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。
每一组输入数据包括三个数据:汽车的“到达”(’A’表示)或“离去”(’D’表示)信息,汽车标识(牌照号)以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上不收费)。
栈以顺序结构实现,队列以链表结构实现。
#include<stdio.h>#include<stdlib.h>#define pmax 3 //定义停车场的最大容车量为3#define price 2 //停车单价为2static int flag=0; //全局变量,用来记录停车场车的数量struct parkcar //定义车辆的结构体{long num;int time;struct parkcar*next;}*head,*rear;struct parkcar pc[pmax]; //创建停车场的结构体数组struct parkcar tc[pmax]; //创建用来缓存停车场出来的车辆的结构体数组struct parkcar *inqueue(long carnum,int atime); //声明入队列函数,让车辆进入候车区void arrive(void); //声明到达函数void leave(void); //声明离开函数void display_P(void); //声明显示停车场车辆信息的函数void display_W(void); //声明显示侯车区车辆信息的函数int main(){head=NULL; //初始化队列头指针和尾指针rear=NULL;int state=0;printf("\t======Parkcar Menu======\n"); //输出停车菜单printf("\t price:2\n");printf("\tinput state\n"); //通过先输入状态(如A),后执行相应函数printf("\t A arrive\n");printf("\t D leave\n");printf("\t P display park_car\n");printf("\t W display wait_car\n");printf("\t E quit\n");do{printf("input:\n");scanf("%c",&state);fflush(stdin);switch(state) //通过先输入状态(如A),后执行相应函数{case 'A':arrive();break;case 'D':if(pc[flag-1].num==NULL) //如果停车场为空则输出为空printf("Park is empty!\n");elseleave();break;case 'P':display_P();break;case 'W':display_W();break;case 'E':break;default:printf("error message,input again!\n");}}while(state!='E'); //当输入E 则退出return 0;}void arrive(void){ long carnum;int atime;printf("please input carnumber and arrive time!\n");scanf("%ld %d",&carnum,&atime);fflush(stdin);if(flag!=pmax) //如果停车场未满,则入停车场{pc[flag].num=carnum;pc[flag].time=atime;++flag;}else{inqueue(carnum,atime); //否则进候车区}}struct parkcar *inqueue(long carnum,int atime) //以尾插法建立候车区的队列链表{struct parkcar*p;p=(struct parkcar*)malloc(sizeof(struct parkcar));p->num=carnum;p->time=atime;if(head==NULL)head=p;else rear->next=p;rear=p;rear->next =NULL;return head;}void leave(void){long carnum;int ltime,dtime; //离开时间,停车时间int save=0;int i=1,flag0;flag0=flag; //flag0用来存储刚调用离开函数时flag的值struct parkcar*p;printf("please input carnumber and leave time!\n");scanf("%ld %d",&carnum,<ime);fflush(stdin);while(pc[flag-1].num !=carnum) //从栈顶往下找要离开的那辆车{tc[save].num=pc[flag-1].num;tc[save].time =pc[flag-1].time ;tc[save].next =pc[flag-1].next ;if(flag==1&&pc[0].num !=carnum) //如果找到栈底都没有这辆车,则返回,并将存储着刚调用离开函数时flag的值,即flag0重新{ //赋值给flag,避免在没有车辆离开的情况下对全局变量flag进行修改而导致错误printf("This car is not founded!\n");flag=flag0;return;}flag--;save++;}dtime=ltime-pc[flag-1].time ; //停车时间的计算if(dtime<0)//如果输入的离开时间小于到达时间则重新输入离开时间{printf("The leave time is illegal,please input the leave time again\n");scanf("%d",<ime);fflush(stdin);dtime=ltime-pc[flag-1].time ;}printf("\tpark time:%d\n",dtime);printf("\tcost: %d\n",dtime*price); //输出停车时间和费用while(save!=0) //当车辆离开后,将缓存栈里的车回到停车场{if(i--)flag--; //因为执行完上一个while循环后flag少执行了一次减一操作,通过控制i来让flag在这个循环里只减一次。
#include <stdio.h>#include <string.h>#include<stdlib.h># define SMAX 2# define QMAX 25typedef struct {char num[20];int reachtime;}carinfo;//车的数据元素类型,num[20]代表车牌号码,reachtime代表车辆到达的时间typedef struct /*栈*/{ carinfo stack[SMAX+1];int top;//栈顶指针}seqstack;typedef struct squeue /*队列*/{carinfo queue[QMAX+1];int front,rear;//front为头指针,rear为尾指针}seqqueue;void initstack(seqstack *s)//栈s的初始化{s->top=-1;//把栈顶置为-1}int stackempty(seqstack *s)//判断栈s是否为空,栈空返回1,否则返回0{if(s->top==-1)//判断栈顶指针top是否为-1return 1;//当栈为空时,返回1,否则,返回0elsereturn 0;}int pushstack(seqstack *s,carinfo x) //将元素x插入栈s中,插入成功返回1,否则返回0 {if(s->top>=SMAX)//在元素进栈前,判断是否栈已满{return 0;}else{s->top++; //修改栈顶指针s->stack[s->top]=x;//元素x进栈return 1;}}int popstack(seqstack *s,carinfo *x) //删除栈s中的队首元素,并将该值赋值给x,删除成功返回1,否则返回0{if(s->top==-1) //元素出栈时,判断栈是否为空{return 0;}else{*x=s->stack[s->top];//将出栈的元素给xs->top--; //将栈顶指针减1,修改栈顶指针,即出栈return 1;}}int getcar(seqstack *s,carinfo x) /*取车*/{int a,b,money,v,h;carinfo m,n;seqstack k; //输入临时栈initstack(&k); //对临时栈进行初始化a=0;while((!stackempty(s)) && a==0){popstack(s,&n);if(strcmp(x.num,n.num)==0) //判断车牌号字符串是否匹配{printf("请输入取车时间");//如果匹配则输入取车时间scanf("%d",&v);/*printf("请输入存车天数");scanf("%d",&h);*/money=((v-n.reachtime)+h*24)*5; //并计算收费printf("车辆已经取出,收费%d\n",money);printf("——————欢迎光临——————\n\n\n");while(!stackempty(&k))//将存放在临时栈中的元神存入原始栈,也就是将车辆存入车库{popstack(&k,&m);pushstack(s,m);}a=1;}else //如果不匹配,则将出栈的车辆放入临时栈{k.top++;k.stack[k.top]=x;}}if(stackempty(s)) //如果车库为空,即没有找到匹配的车辆,则要寻找的车辆不存在{printf("车辆不存在");while(!stackempty(&k)){popstack(&k,&m);pushstack(s,m);}}}void initqueue(seqqueue *q)//队列q初始化{q->front=q->rear=-1; //队头指针和队尾指针分别置为-1}int queueempty(seqqueue *q)//判断队列q是否为空,队空返回1,否则返回0{if(q->front==q->rear)//判断头指针,尾指针是否相等return 1;elsereturn 0;}int enqueue(seqqueue *q,carinfo x)//将元素x插入队列q中,插入成功返回1,否则返回0 {if(q->rear==QMAX) //在元素进队前,判断是否队列已满return 0;q->rear=q->rear+1; //队尾指针向后移动一个位置q->queue[q->rear]=x;//在队尾插入元素xreturn 1;}int delqueue(seqqueue *q,carinfo *x)//删除顺序队列q中的队首元素,并将该值赋值给x,删除成功返回1,否则返回0{if(q->front==q->rear) //在删除元素之前,判断队列是否为空return 0;else{q->front=q->front+1; //将队头指针向后移动一个位置*x=q->queue[q->front];//将要删除的元素赋值给xreturn 1;}}void main(){ int h,n,c,d;int m;carinfo a,b,x;seqqueue i; //输入栈,即车库seqstack l; //输入队列,即便道initstack(&l); //对栈进行初始化initqueue(&i); //对队列进行初始化d=1;while(1){printf("请输入车辆执行状态,1为进场停车,2为取车:"); //输入要执行的操作while (1){scanf("%d",&m);if(m==1 || m==2) break; //判断输入是否正确else printf("\n 输入有误,请重新选择:1或2:");}if(m==1) //如果输入为1,则进行入车库操作{printf("请输入车辆号码:");scanf("%s",&a.num); //输入车牌号printf("请输入进车库时间(请将时间取整):"); //输入进车时间scanf("%d",&a.reachtime);h=pushstack(&l,a); //进栈,即进入车库if(h==0) //判断车库是否已满{printf("车库已满\n");enqueue(&i,a); //如果满,则入队,即进入便道n=i.rear-i.front;printf("车辆已入便道%d位置\n\n\n",n);}elseprintf("车辆%s已存入车库\n\n\n",a.num);}else //如果输入为2,则进行取车操作{printf("请输入要取得车辆号:");scanf("%s",&x.num); //输入车牌号getcar(&l,x); //调用getcar函数,进行取车操作while(!queueempty(&i)&&d==1)//取车之后,判断是否需要将便道中的车入库{if(l.top>=2) //如果车库是满的,则不操作d=3;else{delqueue(&i,&b); //否则,将便道中的车出队,并入栈,进车库pushstack(&l,b);printf("车辆%s已从便道进入车库\n",b.num);}}}}}。
#include <conio.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <windows.h>#define M 5// 清空当前屏幕#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]; // 离开时间} TCARINFORMA TION, *LPTCARINFORMATION;typedef struct carstack{LPTCARINFORMATION lpCarInformation; // 车辆信息int nTop; // 栈顶元素下标int nStackSize; // 栈容量} TCARSTACK, *LPTCARSTACK;// 初始化栈lpCarStack, 将其容量设置为nSizevoid InitStack( LPTCARSTACK &lpCarStack, int nSize ){lpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ) ); lpCarStack->lpCarInformation = ( LPTCARINFORMA TION ) malloc( nSize * sizeof ( TCARINFORMATION ));lpCarStack->nTop = -1;lpCarStack->nStackSize = nSize;}// 车辆信息carinfo 入栈lpCarStackvoid Push( LPTCARSTACK &lpCarStack, TCARINFORMATION carinfo ) {lpCarStack->nTop++;lpCarStack->lpCarInformation[lpCarStack->nTop] = carinfo;}// 车辆信息从栈lpCarStack 中弹出并存入carinfovoid Pop( LPTCARSTACK &lpCarStack, TCARINFORMATION &carinfo ) {carinfo = lpCarStack->lpCarInformation[lpCarStack->nTop];lpCarStack->nTop--;}// 若栈lpCarstack 空,返回TRUE;否则,返回FALSEBOOL IsStackEmpty( LPTCARSTACK lpCarStack ){return lpCarStack->nTop == -1;}// 若栈lpStackFull 满,返回TRUE;否则,返回FALSEBOOL IsStackFull( LPTCARSTACK lpCarStack ){return lpCarStack->nTop == ( lpCarStack->nStackSize - 1 );}// 销毁栈lpCarStack,将指针lpCarStack 置为NULLvoid DestroyStack( LPTCARSTACK &lpCarStack ){free( lpCarStack->lpCarInformation );free( lpCarStack );lpCarStack = NULL;}typedef struct carnode // 链队结点信息{TCARINFORMA TION carinfo; // 车辆信息struct carnode *lpNext; // 指向下一个元素的指针} TCARNODE, *LPTCARNODE;typedef struct carqueue // 链队{LPTCARNODE lpHead; // 头结点LPTCARNODE lpRear; // 指向当前队尾的指针int nEffectiveSize; // 当前队中元素个数} TCARQUEUE, *LPTCARQUEUE;// 初始化链队lpCarQueuevoid 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 入队lpCarQueuevoid EnQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMA TION 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 中出队并存入carinfovoid DeQueue( LPTCARQUEUE &lpCarQueue, TCARINFORMA TION &carinfo ){LPTCARNODE lpTemp = lpCarQueue->lpHead->lpNext;carinfo = lpTemp->carinfo;lpCarQueue->lpHead->lpNext = lpTemp->lpNext;free( lpTemp );lpCarQueue->nEffectiveSize--;}// 若链队lpCarQueue 为空,返回TRUE;否则,返回FALSEBOOL IsQueueEmpty( LPTCARQUEUE lpCarQueue ){return lpCarQueue->nEffectiveSize == 0;}// 销毁链队lpCarQueuevoid 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 n = 0; // 停车场容量char szEntranceTime[43];char szRegistrationMark[70];putchar( '\n' );printf("\t\t===========欢迎你进入停车场管理系统===========\n");printf( "请输入停车场容量:" );scanf( "%d", &n );LPTCARSTACK lpCarStack = NULL; // 停车场,用栈模拟InitStack( lpCarStack, n );LPTCARQUEUE lpCarQueue = NULL; // 便道,用链队模拟InitQueue( lpCarQueue );char cCommandType = NULL; // 命令类型char User[128] = { NULL }; // 用户输入do{ClearScreen();putchar( '\n' );puts( "--------------------" );puts( "[命令类型]" );puts( "A - 车辆到达" );puts( "D - 车辆离开" );puts( "E - 停止输入" );puts( "O - 显示当前停车场和便道使用情况" );putchar( '\n' );printf( "请输入命令:" );scanf( "%s", User );puts( "--------------------" );char szCarInformation[128] = { NULL };sscanf( User, // 将命令类型与车辆信息分开存放"%c,%s",&cCommandType, // 用户输入的前半部分,即命令类型szCarInformation // 用户输入的后半部分,即车辆信息);char *lpCommaLocation = NULL; // 车辆信息字符串中的逗号位置for ( lpCommaLocation = szCarInformation; *lpCommaLocation != '\0'; lpCommaLocation++ ) {if ( *lpCommaLocation == ',' ){break;}}*lpCommaLocation = '\0';TCARINFORMA TION carinfo = { NULL }; // 存储本次用户输入的车辆信息strcpy( carinfo.szRegistrationMark, szCarInformation );if ( cCommandType == 'A' ){strcpy( carinfo.szArrivalTime, lpCommaLocation + 1 );puts("请输入车牌号:");scanf("%s",&szRegistrationMark);puts("请输入车的进入时间:");scanf("%s",&szEntranceTime);if ( FALSE == IsStackFull( lpCarStack ) ){strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime );Push( lpCarStack, carinfo );printf( "已进入停车场第%d 个车位\n",lpCarStack->nTop + 1);printf( "车牌号:\t\t%s\n",szRegistrationMark );printf( "进入时间:\t%s\n",szEntranceTime );puts( "是否收费:\t是" );}else{EnQueue( lpCarQueue, carinfo );printf( "停车场已满,已停放在便道的第%d 个车位\n",lpCarQueue->nEffectiveSize);printf( "车牌号:\t\t%s\n", szRegistrationMark );printf( "停放时间:\t%s\n", szEntranceTime );puts( "是否收费:\t否" );}}else if ( cCommandType == 'D' ){strcpy( carinfo.szDepartureTime, lpCommaLocation + 1 );LPTCARSTACK lpTempCarStack = NULL;InitStack( lpTempCarStack, n );TCARINFORMA TION carinfoOut = { NULL };BOOL bIsCarFound = 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 ) ){TCARINFORMATION tempcarinfo = { NULL };Pop( lpTempCarStack, tempcarinfo );Push( lpCarStack, tempcarinfo );}if ( FALSE == bIsCarFound ){printf( "车牌号为%s 的车未进入停车场.\n", carinfo.szRegistrationMark );Pause( "--------------------\n按任意键输入下一条信息...\n" );continue;}char szRegistrationMark1[48];strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime );int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime );int nDepartureTime = ConvertTimeFormat( carinfoOut.szDepartureTime );puts("请输入车牌号:");scanf("%s",&szRegistrationMark1);printf("请输入停留的时间:");scanf("%d",&nDepartureTime);int nContinuanceMinutes = nDepartureTime - nEntranceTime;printf( "计费时段:共%d 分钟\n",nContinuanceMinutes);double rExpense = CalculateExpense( nContinuanceMinutes );printf( "应交纳的费用:\t%.11f 元\n", rExpense*M );if ( FALSE == IsQueueEmpty( lpCarQueue ) ){TCARINFORMATION tempcarinfo = { NULL };DeQueue( lpCarQueue, tempcarinfo );strcpy( tempcarinfo.szEntranceTime, carinfoOut.szDepartureTime );Push( lpCarStack, tempcarinfo );puts( "--------------------" );printf( "停放在便道的第1 个车位,车牌号为%s 的车已进入停车场\n", szRegistrationMark);}else if ( cCommandType == 'E' ){puts( "********************" );break;}else if ( cCommandType == 'O' ){ClearScreen();putchar( '\n' );puts( "[停车场使用情况]\n" );int i = lpCarStack->nTop+1;printf( "停车场有%d辆车\n",i );putchar( '\n' );putchar( '\n' );putchar( '\n' );puts( "[便道使用情况]\n" );int nNum = 0;for ( LPTCARNODE lpCarNode = lpCarQueue->lpHead->lpNext;lpCarNode != NULL; lpCarNode = lpCarNode->lpNext )nNum++;printf( "便道上有%d辆车",nNum);putchar( '\n' );}else{puts( "输入信息有误.第一个字符只能为'A' 或'D' 或'E' 或'O' (区分大小写)." );}Pause( "--------------------\n按任意键输入下一条信息.\n" );} while ( TRUE );DestroyStack( lpCarStack );DestroyQueue( lpCarQueue );Pause( "\n按任意键退出程序...\n" );return 0;}。