【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】
👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
系列文章目录
目录
- 系列文章目录
- 一、设计要求
- 二、设计思路
- 1. 总体设计思路
- 2. 数据结构设计
- 2.1 定义车结构体(Car)
- 2.2 定义停车场结构体(Stack)
- 2.3 定义便道结构体(Queue)
- 3. 模块说明与代码
- 3.1 初始化模块
- 3.1.1 初始化栈
- 3.1.2 初始化队列
- 3.2 判满/判空操作
- 3.2.1 栈的判满与判空
- 3.2.2 队列的判满与判空
- 3.3 基本数据操作
- 3.3.1 栈操作:入栈与出栈
- 3.3.2 队列操作:入队与出队
- 3.4 车辆到达处理模块
- 3.5 车辆离开处理模块
- 3.6 菜单与主函数
- 3.6.1 显示菜单
- 3.6.2 主函数
- 三、可视化分析
一、设计要求
一、停车场管理系统的设计与实现
1设计要求
1.1问题描述(任务)
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
1.2基本功能60~70分
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
1.3建议拓展的功能20分
①系统功能以菜单方式显示
②车辆编号为字符型
③设置屏幕字体颜色
④单位时间收费值可以修改

二、设计思路
1. 总体设计思路
本系统模拟车辆进入停车场和在便道等待的管理情况,主要思想包括:
-
数据结构选择
- 用栈(Stack)来模拟停车场。停车场遵循先进后出(LIFO)原则,当车离开时,需要将后进车辆先弹出,才能找到目标车辆,然后再将中间车辆重新入栈。
- 用循环队列(Queue)来模拟便道的等待队列。便道按照先进先出(FIFO)管理,等待车辆可以依次进入停车场。
-
基本操作
- 车辆到达:当车辆到达系统时,若停车场未满,则直接进入停车场;否则,车辆进入便道等待。
- 车辆离开:车辆在离开停车场时,需要先从停车场中找到目标车辆,计算费用,并将临时存放的非目标车辆依次恢复入栈。同时,便道队列中的第一辆车会进入停车场。
- 收费设置:系统支持修改每单位时间的收费标准。
-
菜单驱动
系统通过文本菜单与用户交互,用户可选择车辆到达、车辆离开、修改收费值及退出系统。
2. 数据结构设计
2.1 定义车结构体(Car)
车的基本信息包括车牌号、到达时间和离开时间。
代码如下:
typedef struct {char id[10]; // 车牌号int arrive_time; // 到达时间int leave_time; // 离开时间
} Car;
2.2 定义停车场结构体(Stack)
使用栈结构模拟停车场,数组保存车信息,top 表示栈顶指针。
代码如下:
#define MAX_CAR 10 // 定义停车场最大车位数typedef struct {Car cars[MAX_CAR];int top;
} Stack;

2.3 定义便道结构体(Queue)
采用循环队列模拟便道。数组存放等待车辆,front、rear 分别为队头和队尾指针。
代码如下:
#define MAX_WAIT 10 // 定义便道最大等待车位数typedef struct {Car cars[MAX_WAIT];int front;int rear;
} Queue;
3. 模块说明与代码
3.1 初始化模块
3.1.1 初始化栈
初始化时将 top 设为 -1,表示栈为空。
void initStack(Stack *s) {s->top = -1;
}
3.1.2 初始化队列
初始化队列时,将 front 和 rear 都设置为 0。
void initQueue(Queue *q) {q->front = q->rear = 0;
}
3.2 判满/判空操作
3.2.1 栈的判满与判空
- 栈满判断:当
top达到MAX_CAR - 1时,表示停车场已满 - 栈空判断:
top的值为 -1 时表示停车场为空
int isStackFull(Stack *s) {return s->top == MAX_CAR - 1;
}int isStackEmpty(Stack *s) {return s->top == -1;
}
3.2.2 队列的判满与判空
- 队列满判断:利用循环队列,当
(rear + 1) % MAX_WAIT == front时,队列满 - 队列空判断:当
rear == front时,队列为空
int isQueueFull(Queue *q) {return (q->rear + 1) % MAX_WAIT == q->front;
}int isQueueEmpty(Queue *q) {return q->rear == q->front;
}

3.3 基本数据操作
3.3.1 栈操作:入栈与出栈
- 入栈:在栈不满时,将车辆数据存入数组并更新
top - 出栈:在栈不空时,从栈顶弹出车辆数据,并将
top减 1
void pushStack(Stack *s, Car car) {if (isStackFull(s)) {printf("停车场已满\n");return;}s->cars[++s->top] = car;
}Car popStack(Stack *s) {if (isStackEmpty(s)) {printf("停车场为空\n");Car empty_car = {"", -1, -1};return empty_car;}return s->cars[s->top--];
}
3.3.2 队列操作:入队与出队
- 入队:在队列未满时,将车辆添加到
rear处,并更新队尾 - 出队:在队列非空时,从
front处取出车辆,并更新队头
void enqueue(Queue *q, Car car) {if (isQueueFull(q)) {printf("便道已满\n");return;}q->cars[q->rear] = car;q->rear = (q->rear + 1) % MAX_WAIT;
}// 此处省略20行代码}Car car = q->cars[q->front];q->front = (q->front + 1) % MAX_WAIT;return car;
}

3.4 车辆到达处理模块
当车辆到达时,首先构造车辆记录(包括车牌、到达时间及初始化离开时间),然后判断停车场是否有空位:
- 如果停车场满,则将车辆加入便道队列;
- 否则直接入栈到停车场。
void carArrival(Stack *parking, Queue *waiting, char *id, int time) {Car car;strcpy(car.id, id); // 设置车牌号car.arrive_time = time; // 设置到达时间car.leave_time = -1; // 初始化离开时间if (isStackFull(parking)) {enqueue(waiting, car); // 停车场满,将车加入便道printf("车牌号%s的车停在便道上\n", id);} else {pushStack(parking, car); // 停车场未满,将车推入停车场printf("车牌号%s的车停在停车场内\n", id);}
}
3.5 车辆离开处理模块
当车辆离开时,需要从停车场中找到目标车辆,因此需要使用一个临时栈辅助:
- 从停车场栈中依次弹出车辆,直到找到目标车辆。
- 找到车辆后设置离开时间,并计算停车持续时间及费用。
- 将临时栈中暂时移出的车辆重新推入停车场,以保持原有顺序。
- 如果便道有等待车辆,则将便道队首的车辆进入停车场,并更新其到达时间为当前离开的时间。
void carDeparture(Stack *parking, Queue *waiting, char *id, int time, int fee_per_unit) {Stack temp_stack;initStack(&temp_stack); // 初始化临时栈Car car;int found = 0;// 从停车场中寻找要离开的车while (!isStackEmpty(parking)) {car = popStack(parking);if (strcmp(car.id, id) == 0) {found = 1;car.leave_time = time; // 设置离开时间break;// 此处省略20行代码printf("车牌号%s的车从便道进入停车场\n", next_car.id);}}
}
3.6 菜单与主函数
3.6.1 显示菜单
菜单函数将显示系统支持的操作选项,包括车辆到达、离开、修改收费值以及退出系统。
void displayMenu() {printf("\n停车场管理系统\n");printf("1. 车辆到达\n");printf("2. 车辆离开\n");printf("3. 修改收费值\n");printf("4. 退出系统\n");printf("请选择操作: ");
}
3.6.2 主函数
在 main() 函数中,首先初始化停车场和便道数据结构,然后进入菜单循环,根据用户选择调用相应模块,最后程序退出。
int main() {Stack parking;Queue waiting;initStack(&parking); // 初始化停车场栈initQueue(&waiting); // 初始化便道队列int fee_per_unit = 2; // 每单位时间收费值int choice;char id[10];int time;// 主循环:显示菜单并处理用户选择while (1) {displayMenu();scanf("%d", &choice);switch (choice) {case 1:printf("请输入车牌号: ");scanf("%s", id); // 输入车牌号printf("请输入到达时间: ");// 此处省略20行代码default:printf("无效的选择,请重新输入\n");}}return 0;
}

三、可视化分析




相关文章:
【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求二、设…...
在Autonomous DB中创建训练数据集
在Autonomous DB中创建训练数据集 概述背景步骤解析1. 定义公司术语表2. 使用SQL将数据转换为JSON格式3. 使用SPool命令将SQL查询结果输出为JSON文件4. 查看生成的JSON文件 结果示例结论 概述 在机器学习中,构建高质量的训练数据集是模型成功的关键,尤其…...
Adapting to Length Shift: FlexiLength Network for Trajectory Prediction
概要 轨迹预测在各种应用中发挥着重要作用,包括自动驾驶、机器人技术和场景理解。现有方法通常采用标准化的输入时长,集中于开发紧凑神经网络,以提高在公共数据集上的预测精度。然而,当这些模型在不同观测长度下进行评估时&#…...
张量循环运算:内存溢出原因及解决
写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 内存溢出解决方法致谢 内存溢出 使用AlexNet遍历大量图像进行指标运算(LP…...
【Qt】:概述(下载安装、认识 QT Creator)
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 介绍 🦋 什么是 QT🦋 QT 发展史🦋 Qt版本🦋 QT 优点 一:🔥 搭建Qt开发环境 ǹ…...
11、《Web开发性能优化:静态资源处理与缓存控制深度解析》
Web开发性能优化:静态资源处理与缓存控制深度解析 一、性能优化的核心战场:静态资源处理 现代Web应用静态资源体积占比普遍超过70%,以典型Vue项目为例: dist/ ├─ css/ # 38% 体积 ├─ js/ # 45% 体积 └─ img…...
【Linux】多线程 -> 从线程概念到线程控制
线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼…...
用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。
要实现Ubuntu中自己开发的Python程序自动升级,可以通过以下几种方式: 1. 使用 Git 仓库 定时任务 如果你的Python程序托管在Git仓库中,可以通过定时拉取最新代码来实现自动升级。 步骤: 确保Python程序在Git仓库中。在Ubuntu上…...
java处理pgsql的text[]类型数据问题
背景 公司要求使用磐维数据库,于是去了解了这个是基于PostgreSQL构建的,在使用时有场景一条图片数据中可以投放到不同的页面,由于简化设计就放在数组中,于是使用了text[]类型存储;表结构 #这是一个简化版表结构&…...
LeetCode 热门100题-字母异位词分组
2.字母异位词分组 题目描述: 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan&q…...
耐张线夹压接图片智能识别
目录 一、图片压接部位定位1、图像准备2、人工标注3、训练4、推理5、UI界面 压接状态智能识别 一、图片压接部位定位 ,往往X射线照片是一个大图,进行图片压接部位定位目的是先找到需识别的部位,再进行识别时可排除其他图像部位的干扰&#x…...
ADC 的音频实验,无线收发模块( nRF24L01)
nRF24L01 采用 QFN20 封装,有 20 个引脚,以下是各引脚的详细介绍: 1. 电源引脚 ◦ VDD:电源输入端,一般接 3V 电源,为芯片提供工作电压,供电电压范围为 1.9V~3.6V。 ◦ VSS…...
企业SSL 证书管理指南
文章从以下几个部分展开 SSL证书的用途和使用场景SSL证书的申请类型和实现方式SSL证书的管理SSL证书的续签 一、SSL 证书的用途和使用场景 1.1 为什么要使用 SSL 证书? 1. 数据安全 🛡️- 在 HTTP 传输中,TCP 包可以被截获,攻…...
Python Pandas(7):Pandas 数据清洗
数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。数据清洗与预处理的常见步骤: 缺失值处理:识别并…...
南京观海微电子----整流滤波电路实用
01 变压电路 通常直流稳压电源使用电源变压器来改变输入到后级电路的电压。电源变压器由初级绕组、次级绕组和铁芯组成。初级绕组用来输入电源交流电压,次级绕组输出所需要的交流电压。通俗的说,电源变压器是一种电→磁→电转换器件。即初级的交流电转化…...
【python】向Jira测试计划下,附件中增加html测试报告
【python】连接Jira获取token以及jira对象 # 往 jira 测试计划下面,上传测试结果html def put_jira_file(plain_id):# 配置连接jiraconn ConnJira()jira conn.jira_login()[2]path jira.issue(O45- plain_id)attachments_dir os.path.abspath(..) \\test_API…...
探索ChatGPT背后的前端黑科技
由于图片和格式解析问题,可前往 阅读原文 在人工智能与互联网技术飞速发展的今天,像ChatGPT这样的智能对话系统已经成为科技领域的焦点。它不仅能够进行自然流畅的对话,还能以多种格式展示内容,为用户带来高效且丰富的交互体验。然…...
Agents Go Deep 智能体深入探索
Agents Go Deep 智能体深入探索 核心事件 OpenAI发布了一款先进的智能体“深度研究”,它能借助网络搜索和推理生成研究报告。 最新进展 功能特性:该智能体依据数百个在线资源生成详细报告,目前仅支持文本输出,不过很快会增加对图…...
DeepSeek全生态接入指南:官方通道+三大云平台
DeepSeek全生态接入指南:官方通道三大云平台 一、官方资源入口 1.1 核心交互平台 🖥️ DeepSeek官网: https://chat.deepseek.com/ (体验最新对话模型能力) 二、客户端工具 OllamaChatboxCherry StudioAnythingLLM …...
c++TinML转html
cTinML转html 前言解析解释转译html类定义开头html 结果这是最终效果(部分):  前言 在python.tkinter设计标记语言(转译2-html)中提到了将Ti…...
Scroll Reverser终极指南:5分钟解决macOS多设备滚动方向混乱问题
Scroll Reverser终极指南:5分钟解决macOS多设备滚动方向混乱问题 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否经常在MacBook触控板和鼠标之间切换ÿ…...
不只是安装!用Docker一键搞定OpenVSLAM开发环境,顺便聊聊它的Web查看器怎么用
从零构建OpenVSLAM容器化开发环境:Web可视化与高效调试实战 在视觉SLAM研究领域,环境配置往往是阻碍开发者快速上手的首要障碍。不同版本的依赖库冲突、系统环境差异导致的运行失败,这些问题消耗了研究者大量本该用于算法创新的宝贵时间。本…...
AI大会停车难?2026官方未公开的预约分流机制(附内测版停车码申领通道)
更多请点击: https://intelliparadigm.com 第一章:2026年AI技术大会停车指引 为保障2026年AI技术大会(Shanghai AI Summit 2026)参会者高效、安全抵达主会场,主办方联合浦东智能交通调度中心部署了新一代AI泊车引导系…...
LinkSwift:免费获取网盘直链的终极解决方案
LinkSwift:免费获取网盘直链的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷…...
如何彻底解决IDM试用期限制:3步快速重置完整指南
如何彻底解决IDM试用期限制:3步快速重置完整指南 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 还在为Internet Download Manager(IDM)的30天试用…...
5分钟快速上手:ComfyUI ControlNet预处理器终极指南
5分钟快速上手:ComfyUI ControlNet预处理器终极指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成完全按照你的想法来吗&am…...
Torch-Pruning:基于DepGraph的PyTorch结构化模型剪枝实战指南
1. 项目概述与核心价值 如果你正在为部署一个庞大的深度学习模型而发愁,看着动辄几十上百亿的参数和令人咋舌的算力需求感到束手无策,那么“模型剪枝”这项技术很可能就是你一直在寻找的解决方案。简单来说,模型剪枝就像给一棵枝繁叶茂的大树…...
终极免费网盘直链下载助手:一键获取九大网盘真实下载地址,告别龟速下载!
终极免费网盘直链下载助手:一键获取九大网盘真实下载地址,告别龟速下载! 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百…...
3分钟快速上手MOOTDX:Python量化投资的数据利器
3分钟快速上手MOOTDX:Python量化投资的数据利器 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一个强大的Python通达信数据接口库,专为量化投资和金融数据分析而设…...
从阶跃到ReLU:用Python和Matplotlib手把手画一遍,彻底搞懂激活函数怎么选
从阶跃到ReLU:用Python和Matplotlib手把手画一遍,彻底搞懂激活函数怎么选 神经网络中的激活函数就像交通信号灯,决定信息是否能够继续向前传递。对于初学者来说,面对各种数学公式往往感到抽象难懂。本文将通过Python代码和可视化图…...

