用C语言实现简单的停车场管理
这个程序是利用栈和循环队列实现的,自己得先处理好逻辑关系就好了。由于题目没有要求,这个程序就没加重复判断,比如一辆车已经停在车位上或者便道上,再来一辆就判断不了了。关于栈,就是先进后出的思想,队列就是先进先出的思想。这个程序自己没用链栈和链队列做,因为感觉比较耗时。不过栈和队列的运用大多数都是用数组,先掌握好数组的表示再用链表写上手也很快。
**项目要求:**停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后依次进入。汽车离开时按停放时间收费。
基本功能要求:
1)建立三个数据结构分别是:停放队列,让路栈,等候队列
2)输入数据模拟管理过程,数据(入或出,车号)。
头文件: PLot.h
//
// Created by PC-Saw on 2018/12/17.
//#ifndef __PLOT_H__
#define __PLOT_H__#define Price 1 // 单价可以自己定义n
#define MAX_STOP 10
#define MAX_PAVE 10#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <time.h> // 包含时间函数的头文件
#include <string.h>// 汽车信息
typedef struct
{int timeIn; // 进入停车场时间int timeOut; // 离开停车场时间char plate[10];// 汽车牌照号码,定义一个字符指针类型
}Car;// 停放栈(用于停放车辆)
typedef struct
{Car Stop[MAX_STOP]; // 用于停放车辆的栈int top; // 标记栈顶位置
}Stopping;// 等候队列
typedef struct
{int count; // 用来指示队中的数据个数Car Pave[MAX_PAVE]; // 等候停车的队列int front, rear; // 标记队头和队尾位置
}Pavement;// 让路栈
typedef struct
{Car Help[MAX_STOP]; // 用于让路的队列int top; // 标记站定位置
}Buffer;Stopping s;
Pavement p;
Buffer b;
Car c;
char C[10];void stop_to_pave(); // 车停入便道
void car_come (); // 车停入停车位
void stop_to_buff(); // 车进入让路栈
void car_leave (); // 车离开
void welcome (); // 主界面函数
void Display (); // 显示车辆信息#endif //__PLOT_H__
源文件 PLot.c
//
// Created by PC-Saw on 2018/12/17.
//#include "PLot.h"void stop_to_pave() // 车停入便道
{// 判断队满if (p.count > 0 && (p.front == (p.rear + 1) % MAX_PAVE)){printf ("便道已满,请下次再来\n");}else{strcpy(p.Pave[p.rear].plate, C); // 车进入便道p.rear = (p.rear + 1) % MAX_PAVE; // 队尾指示器加1p.count++; // 计数器加1printf ("牌照为%s的汽车停入便道上的%d的位置\n", C, p.rear);}
}void car_come() // 车停入停车位
{printf ("请输入即将停车的车牌号:"); // 输入车牌号scanf ("%s", &C);if (s.top >= MAX_STOP - 1) // 如果停车位已满,停入便道{stop_to_pave(); // 停入便道}else{s.top++; // 停车位栈顶指针加1time_t t1;long int t = time(&t1); // 记录进入停车场的时间char* t2;t2 = ctime (&t1); // 将当前时间转换为字符串s.Stop[s.top].timeIn = t;strcpy(s.Stop[s.top].plate, C); // 将车牌号登记printf ("牌照为%s的汽车停入停车位的%d车位, 当前时间:%s\n", C, s.top + 1, t2);}return ;
}void stop_to_buff() // 车进入让路栈
{// 停车位栈压入临时栈,为需要出栈的车辆让出道while (s.top >= 0){if (0 == strcmp(s.Stop[s.top].plate, C)){break;}// 让出的车进入让路栈strcpy(b.Help[b.top++].plate, s.Stop[s.top].plate);printf ("牌照为%s的汽车暂时退出停车场\n", s.Stop[s.top--].plate);}// 如果停车位中的车都让了道,说明停车位中无车辆需要出行if (s.top < 0){printf ("停车位上无此车消息\n");}else{printf ("牌照为%s的汽车从停车场开走\n", s.Stop[s.top].plate);time_t t1;long int t = time (&t1);c.timeOut = t; // 标记离开停车场的时间char* t2;t2 = ctime (&t1); // 获取当前时间printf ("离开时间%s\n需付%ld元\n", t2, Price * (c.timeOut - s.Stop[s.top].timeIn));s.top--;}// 将让路栈中的车辆信息压入停车位栈while (b.top > 0){strcpy(s.Stop[++s.top].plate, b.Help[--b.top].plate);printf ("牌照为%s的汽车停回停车位%d车位\n", b.Help[b.top].plate, s.top);}// 从便道中 -> 停车位while (s.top < MAX_STOP-1){if (0 == p.count) // 判断队列是否为空{break;} // 不为空,将便道中优先级高的车停入停车位else{strcpy(s.Stop[++s.top].plate, p.Pave[p.front].plate);printf ("牌照为%s的汽车从便道中进入停车位的%d车位\n", p.Pave[p.front].plate, s.top);p.front = (p.front + 1) % MAX_PAVE;p.count--;}}
}void car_leave() // 车离开
{printf ("请输入即将离开的车牌号:\n");scanf ("%s", &C);if (s.top < 0) // 判断停车位是否有车辆信息{printf ("车位已空,无车辆信息!\n");}else{stop_to_buff();}
}void Display()
{int i = s.top;if (-1 == i){printf ("停车场为空\n");}time_t t1;long int t = time(&t1); // 标记显示时的时间printf ("\t车牌号\t\t\t停放时间\t\t当前所需支付金额\n");while (i != -1){printf ("\t%s\t\t%d秒\t\t\t%d元\n", s.Stop[i].plate, t - s.Stop[i].timeIn, Price * (t - s.Stop[i].timeIn) / 10);i--;}
}void welcome()
{printf ("\t*******************目前停车场状况***********************\n");printf ("\t停车场共有%d个车位,当前停车场共有%d辆车,等候区共有%d辆车\n", MAX_STOP, s.top+1, (p.rear + MAX_PAVE - p.front)% MAX_PAVE);printf ("\t********************************************************\n");printf ("\t---------------Welcome to our Car Parking---------------\n");printf ("\t* 1.Parking *\n");printf ("\t* 2.leaving *\n");printf ("\t* 3.situation *\n");printf ("\t* 4.exit *\n");printf ("\t--------------------------------------------------------\n");
}
主函数 main.c
/**********************************************************
问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,
汽车按到达的先后次序停放。若车场满了,车要在门外的便道上等候
,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由
于通道窄,在它后面的车要先退出,待它走后依次进入。汽车离开
时按停放时间收费。
基本功能要求:1)建立三个数据结构分别是:停放队列,让路栈,等候队列2)输入数据模拟管理过程,数据(入或出,车号)。
***********************************************************/
#include "PLot.h"int main()
{// 初始化s.top = -1;b.top = 0;p.rear = 0;p.count = 0;p.front = 0;while(1){//system("clear");welcome();int i, cho;scanf ("%d", &i);if (1 == i) car_come();if (2 == i) car_leave();if (3 == i) Display();if (4 == i) break;printf ("返回请输入1\n");scanf ("%d", &cho);if (1 == cho){continue;}else{printf ("您的输入有误,请重新输入\n");scanf ("%d", &cho);continue;}}return 0;
}
用C语言实现简单的停车场管理相关推荐
- C语言课程设计之停车场管理问题
C语言课程设计之停车场管理问题 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第 ...
- C语言数据结构课程设计-停车场管理
停车场管理 1.课程设计目的 2. 课程设计内容和要求 2.1问题描述: 2.2设计要求: 3.课程设计总体方案及分析 3.1问题分析 3.2 概要设计 3.3 测试结果 4. 课程设计总结 5. 附 ...
- C语言实现简单的内存管理机制
在C类型程序中,栈内存比较珍贵,大部分用在局部或者类成员(因为稀少- 不适合长时间占用一块栈内存),对于大量数据一般使用堆来分配.重复用堆分配有一个显著的缺点就是容易造成外部碎片,在这种情况下系统内存 ...
- C语言实现简单的停车场管理系统
问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢 ...
- 数据结构——C语言编写简单的停车场管理系统(栈和链队实现)
1.问题描述 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端.最先到达的第一辆车停放在车场的最北端),若车场 ...
- c++简单的停车场管理计费系统
简单的一个停车场管理系统 // An highlighted block var foo = 'bar'; #include<iostream> #include<cstdlib&g ...
- 初试C语言编程——简单的书店管理
简介:在刚学习完数据结构后,自己按想法做的一个书店管理系统,使用I\O接口操作以及链式数据存储. 自定义头文件 #ifndef _FUN_H #define _FUN_H//头文件 #include ...
- 停车场管理系统C语言作业,c语言课程设计报告停车场管理系统
c语言课程设计报告停车场管理系统 C 语言课程设计报告 --停车场管理 1 班 级: 192102 学 号: 20101003907 姓 名: 聂 彪 指导教师: 张冬梅 时 间: 2011 年 6 ...
- 简单利用C语言 解决停车场管理问题
简单利用C语言 解决停车场管理问题 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车 ...
最新文章
- Linux主机驱动与外设驱动分离思想
- leetcode 8. 字符串转换整数 (atoi)
- iOS之深入解析dyld与ObjC关联的底层原理
- 既然参与,那就做好,我相信我们是最棒的!!!
- Php循环函数嵌套javascript,JS循环嵌套问题?
- 词汇的积累与遣词造句 —— 准确的表达、新鲜的词汇
- asp.net中后台javaScrip的使用
- win10系统 安装modelsim64位的无法生成license文件的解决办法
- layerDate 时间插件
- 厦门大学计算机保研学校,厦门大学计算机科学系(专业学位)计算机技术保研
- HOJ 12814 SIRO Challenge (状态压缩DP)
- linux nano编译器_Nano 编辑器可以做些什么?
- 2021肇庆各中学高考成绩查询入口,2021高考即将来袭!肇庆各学校的同学们准备好了吗?...
- RFID标签的基础知识(3)--了解芯片(之超高频标签芯片篇)
- VS开发Qt应用时遇到“找不到VCRUNTIME140D_APP.dIl,无法继续执行代码”的错误
- DISM 修复 Win10
- app审核被拒:App Tracking Transparency permission request when reviewed on iOS 15.0
- java 语言是跨平台的吗_java语言的跨平台特点是由什么保证的?有什么用吗?
- 用VBA做一个儿童识字,数字考察游戏(持续更新中)
- python函数五要素_python之基础篇(二)
热门文章
- c++查询当前文件夹下文件数目_python3自动化小工具--删除某个文件夹xx后缀文件...
- c程序语言习题解答对编程有帮助吗,给C语言编程初学者的10个学习建议,助你学习事半功倍,不要错过...
- leetcode1721. 交换链表中的节点
- leetcode1033. 移动石子直到连续
- map类的erase方法的在Linux与Windows中的差异
- 《Python Cookbook 3rd》笔记(3.13):计算最后一个周五的日期
- 《深入理解JVM.2nd》笔记(二):Java内存区域与内存溢出异常
- js 用下标获取map值_js map方法处理返回数据,获取指定数据简写方法
- 密码学专题 序列号文件
- 贡献开源项目没那么简单,你要负责到底