用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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一个配置linux服务的网站

该网站的各种linux服务的配置都是基于CentOS系统的 基本上各种linux服务都有了 http://www.server-world.info/en/转载于:https://www.cnblogs.com/Skyar/p/3582389.html

mariadb数据库增删改查

1.常用数据类型 1&#xff09;整数:int, bit 2&#xff09;小数:decimal    #decimal(5,2)表示共有五位数&#xff0c;保留两位小数 3&#xff09;字符串:varchar, char   4&#xff09;日期时间:date, time, datetime 5&#xff09;枚举类型(enu…

为什么你工作努力却没有起色?

成为职场达人&#xff0c;未必要经常挑灯夜战。相反&#xff0c;注意到下面几条&#xff0c;会让你少走弯路。 1&#xff09;成长的机会永远比眼前的待遇重要——做重要的事比多拿钱重要。 我知道在水木bbs上的worklife版本&#xff0c;每天都在上演的就是比较自己的第一个o…

《 Spring 实战 》(第4版) 读书笔记 (未完结,更新中...)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Pxx 表示在书的第 xx 页。 Spring 框架的核心是 Spring 容器。 1. (P7.) 构造器注入是依赖注入的方式之一。 紧耦合&#xff1a;在 …

数据结构排序法之希尔排序法(Shell Sort)

希尔排序&#xff0c;也叫递减增量排序&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是不稳定的排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 1、插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0c;即可以达…

Windows To Ghost系统封装之必备软件集 - 好压

好压压缩软件&#xff08;HaoZip&#xff09;是强大的压缩文件管理器&#xff0c;是完全免费的新一代压缩软件&#xff0c;相比其它压缩软件系统资源占用更少&#xff0c;有更好的兼容性&#xff0c;压缩率比较高。 它提供了对ZIP、7Z和TAR文件的完整支持&#xff0c;能解压RAR…

js 弹窗并定时关闭

1. $(input).click(function() {prompt(点击成功, 2000) })function prompt(newName, time, fn) {var $div $(<div></div>);$div.css({position: fixed,top: 0,left: 0,width: 100%,height: 100%,z-index: 200,background-color: rgba(0,0,0,0.4),// background-c…

数据结构排序法之插入法

插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌。 对于未排序数据(右手抓到的牌)&#xff0c;在已排序序列(左手已经排好序的手牌)中从后向前扫描&#xff0c;找到相应位置并插入。 插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即…

XSLT学习笔记

1. 样式声明&#xff1a;<xsl:stylesheet>或<xsl:transform> 2. XSLT常用元素&#xff1a; 2.1 <xsl:template>&#xff1a;创建模板 Match属性的作用是使模板和XML元素相关联 e.g.:<xsl:template match"\">......</xsl:template&g…

职场:人生从没有最佳时机!一个离职客服人员的领悟

每个人都有感到失落迷惘的时候。 人生用专制又霸道的方式运行着&#xff0c;每当我们心想一切尘埃落定、生活稳固的时候&#xff0c;生活总爱给我们惊喜&#xff0c;粉碎我们短暂的安逸&#xff0c;让我们不得不重新思考。 「我走对路了吗?」 「我能够赚更多钱、爬到更高的地位…

VS Code 的常用快捷键

VS Code 的常用快捷键和插件 一、vs code 的常用快捷键 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、注释&#xff1a; a) 单行注释&#xff1a;[ctrlk,ctrlc] 或 ctrl/ b) 取消…

vue-axios interceptors

import axios from axios import cookie from js-cookie const options {baseURL: window.location.protocol process.env.BASE_API,headers: {},timeout: 20000 } const fetch axios.create(options)// request拦截器 fetch.interceptors.request.use(config > {if (coo…

数据结构排序法之鸡尾酒排序法he快速排序法

鸡尾酒排序&#xff0c;也叫定向冒泡排序&#xff0c;是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低&#xff0c;而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能。 // 两两互换 void swap (int* a, int i, …

VSCode 多开、环境对比

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 多开&#xff1a; 第一种&#xff1a;win10的开始菜单&#xff0c;在vscode图标右键选择“新开窗口”&#xff0c;这样就多了一个vscode…

前言_工作两年自我感触

17年大学毕业&#xff0c;到今天整整工作两年&#xff0c;从前端到数据分析&#xff0c;从上家公司&#xff08;简称A&#xff09;到现公司&#xff0c;想趁着今天是参加工作两年的纪念日&#xff0c;回忆过往&#xff0c;结合现状有感而发。 刚毕业的时候&#xff0c;啥都学&a…

数据结构排序法之堆排序he归并排序

堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构&#xff0c;并同时满足堆性质&#xff1a;即子结点的键值或索引总是小于&#xff08;或者大于&#xff09;它的父节点。 堆排序的时间&#xff0c;主要由建…

超详细设置 Idea 类注释模板和方法注释模板

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 网上找了一下&#xff0c;没有很详细且正确介绍Idea配置注释模板的&#xff0c;于是结合多篇文章自己琢磨整理出如下。 设置类注释模板…

手动创建两个文本文件text1.txt和text2.txt,按要求创建text3.txt

实现在text1.txt和text2.txt文件中除去首行和末尾对应的数据&#xff0c;要求三个文本内容如下&#xff1a; text1 text2 text3begin begin begin10 11 12 15 16 17 …

感情

团结 共患难的感情转载于:https://www.cnblogs.com/yyjh/p/11139749.html

谁抢走了中国男人的老婆?

“老夫少妻”、“包二奶”、“洋媳妇”、“单身贵族”、“丁克家庭”都是当今最时髦的词汇。这看似“你情我愿”的现象背后竟隐藏着巨大隐患! 目前中国男女比例是119&#xff1a;100&#xff0c;某些地区已达130&#xff1a;100;中国将有5百万以上光棍&#xff0c;这对中国社会…