当前位置: 首页 > news >正文

【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)

采用循环队列模拟便道。数组存放等待车辆,frontrear 分别为队头和队尾指针。
代码如下:

#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 初始化队列

初始化队列时,将 frontrear 都设置为 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 车辆离开处理模块

当车辆离开时,需要从停车场中找到目标车辆,因此需要使用一个临时栈辅助:

  1. 从停车场栈中依次弹出车辆,直到找到目标车辆。
  2. 找到车辆后设置离开时间,并计算停车持续时间及费用。
  3. 将临时栈中暂时移出的车辆重新推入停车场,以保持原有顺序。
  4. 如果便道有等待车辆,则将便道队首的车辆进入停车场,并更新其到达时间为当前离开的时间。
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开发环境 &#x1f9…...

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&#xf…...

企业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 结果这是最终效果(部分): ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6cf6c3e3c821446a84ae542bcc2652d4.png) 前言 在python.tkinter设计标记语言(转译2-html)中提到了将Ti…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

软件工程 期末复习

瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

表单设计器拖拽对象时添加属性

背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

当下AI智能硬件方案浅谈

背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...