用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,一经查实,立即删除!

相关文章

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

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

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…

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

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

水调歌头·中秋

转载于:https://www.cnblogs.com/divineka/archive/2004/09/04/39560.html

代码面试最常用的10大算法

摘要&#xff1a;面试也是一门学问&#xff0c;在面试之前做好充分的准备则是成功的必须条件&#xff0c;而程序员在代码面试时&#xff0c;常会遇到编写算法的相关问题&#xff0c;比如排序、二叉树遍历等等。 在程序员的职业生涯中&#xff0c;算法亦算是一门基础课程&#…

IDEA 2018 集成 MyBatis Generator 插件 详解、代码生成

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、修改maven的pom文件 只需要将如下依赖添加到pom.xml文件中即可。&#xff08;注意此处是以plugin的方式&#xff0c;放在<plugins…

MongoDB监控及报警

转载请注明出处&#xff1a;https://www.cnblogs.com/shining5/p/11142357.html MongoDB监控及报警 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库&#xff0c;其使用go语言开发。基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提…

浅谈三种特殊进程:孤儿进程,僵尸进程和守护进程

昨天学了进程控制&#xff0c;就这三种特殊的进程研究了一下&#xff0c;其中也借鉴了一些前人总计的经验。 1、孤儿进程 如果父进程先退出,子进程还没退出那么子进程将被 托孤给init进程,这里子进程的父进程就是init进程(1号进程).其实还是很好理解的。 // 父进程先子进程退…

设计师为什么要学编程,开发者为什么要学设计?

摘要&#xff1a;设计师和开发者目前正处于互联网的两端&#xff0c;看着彼此做不同的工作。如果他们能互相学习对方的技术&#xff0c;那么会协作得更好。 很多开发者认为&#xff0c;设计师应该学会如何编写代码&#xff0c;这一点是真的&#xff1a;通过学习&#xff0c;设计…

git 查看远程仓库地址

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 就一个命令&#xff1a; git remote -v 如下&#xff1a;

tensorflow之tf.train.exponential_decay()指数衰减法

exponential_decay(learning_rate, global_steps, decay_steps, decay_rate, staircaseFalse, nameNone) 使用方式&#xff1a; tf.tf.train.exponential_decay() 例子&#xff1a; tf.train.exponential_decay(self.config.e_lr, self.e_global_steps&#xff0c;self.config…

wait( )和 waitpid( )

进程一旦调用了wait&#xff0c;就立即阻塞自己&#xff0c;由wait自动分析是否当前进程的某个子进程已经退出&#xff0c;如果让它找到了这样一个已经变成僵尸的子进程&#xff0c;wait就会收集这个子进程的信息&#xff0c;并把它彻底销毁后返回&#xff1b;如果没有找到这样…

在 vscode 中使用 Git :拉取、提交、克隆

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS&#xff1a;转载此文后&#xff0c;网友在评论中提到还有其它方法&#xff0c;不过目前个人尚在研究中&#xff0c;有兴趣的朋友们也可…

vscode 配置 git (配置、暂存、推送、拉取、免密)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 vscode 中对 git 进行了集成&#xff0c;很多操作只需点击就能操作&#xff0c;无需写一些 git 指令。 不过这就需要你对 vscode 进行配…

处理bugs心法

1. 前提 第一层&#xff1a;遇到异常首先必须告诉自己&#xff0c;冷静&#xff0c;不要慌。&#xff08;一看到Bug就心慌&#xff0c;那么武功就施展不了了&#xff09; 2. 入门级 第二层&#xff1a;遇到Bug&#xff0c;第一潜意识看输出异常的信息的&#xff08;控制台输出&…

解决 VS Code 保存时候自动格式化

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 不知道从哪个版本起&#xff0c;VS code 保存会自动格式化。 以前都是altshiftF格式化的&#xff0c;现在一保存就格式化&#xff0c;而…

12种食物最养男人 10种食物最养女人 太值得收藏了

据统计&#xff0c;男性10大死因中有4项与饮食有关&#xff0c;包括癌症、脑血管疾病、心脏病和糖尿病。以下12种食品对男性健康有益&#xff0c;建议男性多多摄取。 男人需要的十种养生食物 No.1西红柿 西红柿的酸味能促进胃液分泌&#xff0c;帮助消化蛋白质等&#xff…

ES 基础

1. ES 基础一网打尽 1.1 ES定义 ESelaticsearch简写&#xff0c; Elasticsearch是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。 Elasticsear…

为什么 那么多 前端开发者都想学 Vue.js

根据JavaScript 2017 前端库状况调查 Vue.js是开发者最想学的前端库。我在这里说明一下我为什么认为这也是和你一起通过使用 Vue 构建一个简单的 App 应用程序的原因。 我最近曾与 Evan You&#xff0c;Chris Fritz&#xff0c;Sarah Drasner&#xff0c;和 Adam Jahr 做了一个…

进程间通信之管道通信

两个程序之间传递数据的一种简单方法是使用popen和pclose。 #include <stdio.h> FILE *popen(const char *command, const char *type); int pclose(FILE *stream); popen函数允许一个程序将另一个程序作为新进程来启动&#xff0c;并可以传递数据给它或者通过它接收数据…