【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…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...

