C语言实现停车管理系统

本题为大家分享了C语言实现停车管理系统的具体代码,供大家参考,具体内容如下

设计题目

设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。

需求分析

由于停车场只有一个大门,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,先进停车场的后退出,后进车场的先退出,符合栈的“后进先出,先进后出”的操作特点,因此,可以用一个栈来模拟停车场。而当停车场满后,继续来到的其它车辆只能停在便道上,根据便道停车的特点,先排队的车辆先离开便道进入停车场,符合队列的“先进先出,后进后出”的操作特点,因此,可以用一个队列来模拟便道。排在停车场中间的车辆可以提出离开停车场,并且停车场内在要离开的车辆之后到达的车辆都必须先离开停车场为它让路,然后这些车辆依原来到达停车场的次序进入停车场,因此在前面已设的一个栈和一个队列的基础上,还需要有一个地方保存为了让路离开停车场的车辆,由于先退出停车场的后进入停车场,所以很显然保存让路车辆的场地也应该用一个栈来模拟。因此,本题求解过程中需用到两个栈和一个队列。栈以顺序结构实现,队列以链表结构实现。

程序代码

#include
#include<stdlib.h>
#include<stdio.h>
#include
#define MAXSIZE 5
#define price 0.01
#pragma warning(disable: 4996)
using namespace std;

typedef struct time {
  int hour;
  int min;
  }Time;/时间结点/
typedef struct carnews {
  char num[10];
  Time reach;
  Time leave;
 }CarNode;/车辆信息结点/
typedef struct NODE {
  CarNode* stack[MAXSIZE + 1];
  int top; //栈可用的最大容量
 }SeqStackCar;/模拟停车场/
typedef struct car {
  CarNode* data;
  struct car* next;
}QueueNode; //模拟车进入便道,便道的车进入停车场
typedef struct Node {
  QueueNode* head; //头指针
  QueueNode* rear; //尾指针
}LinkQueueCar;/模拟便道/
 void InitStack(SeqStackCar*); //创建空栈
 int InitQueue(LinkQueueCar*); //创建空队列
 int Arrival(SeqStackCar*, LinkQueueCar*); //车辆到达
 void Leave(SeqStackCar*, SeqStackCar*, LinkQueueCar*); //车辆离开
 void PRINT(CarNode*, int); //输出离开车辆的信息清单
 void List(SeqStackCar, LinkQueueCar); //对所用到的函数作提前声明
   int main() {
    SeqStackCar Enter, Temp;
    LinkQueueCar Wait;
  int ch;
  InitStack(&Enter);//初始化车站
  InitStack(&Temp);//初始化让路的临时栈
  InitQueue(&Wait);//初始化通道
while (1) {
cout << "@欢迎使用本停车管理系统@" << endl;
cout << “----------------------------------------------------------------” << endl;
cout << " # # 1.车辆到达 # # " << endl;
cout << " # # 2.车辆离开 # # " << endl;
cout << " # # 3.列表显示 # # " << endl;
cout << " # # 4.退出系统 # # " << endl;
cout << “----------------------------------------------------------------” << endl;
cout << “!说明:请注意正确输入时间,在输入‘时'后,按‘ENTER'或者‘空格',再输入‘分'。不要为非数字” << endl;
cout << “请输入所需要的服务!(1-4).” << endl;//进入系统的目录显示
while (1) {
cin >> ch;
if (ch >= 1 && ch <= 4)break;
else cout << “输入错误!请选择:(1-4).” << endl;
}
switch (ch) {
  case 1:Arrival(&Enter, &Wait); break;//车辆到达
  case 2:Leave(&Enter, &Temp, &Wait); break;//车辆离开
  case 3:List(Enter, Wait); break;//列表显示信息
  case 4:exit(0);//退出主程序
  default:break;
  }
 }
}
void InitStack(SeqStackCar s) {//初始化栈
  int i; //停车数量
  s->top = 0; //栈顶元素置为0
  for (i = 0; i <= MAXSIZE; i++)
  s->stack[s->top] = NULL;
}
 int InitQueue(LinkQueueCar Q) {//初始化便道
  Q->head = (QueueNode*)malloc(sizeof(QueueNode)); //malloc函数为动态分配空间
  if (Q->head != NULL) {
  Q->head->next = NULL;
  Q->rear = Q->head; //头尾指针置为相等,队列为空
  return(1);
}
else return(-1);
}
  int Arrival(SeqStackCar* Enter, LinkQueueCar* W) {//车辆到达
  CarNode* p;
  QueueNode* t;
  p = (CarNode*)malloc(sizeof(CarNode));//malloc函数为动态分配空间
  flushall();//清除所有的缓存区
  cout << “请输入车牌号(例如:AB123):” << endl;
  cin >> p->num;
  if (Enter->top < MAXSIZE)//车场未满,车进车场
{
  Enter->top++;
  cout << “车辆在车场第” << Enter->top << “位置!” << endl;
  cout << “请输入到达时间:(小时:分钟)” << endl;
  cin >> p->reach.hour;
  while (p->reach.hour < 0 || p->reach.hour>23) {//控制时间格式正确
  cout << “输入错误!” << endl;
  cout << “请重新输入到达时间的时(0-23)!” << endl;
  cin >> p->reach.hour;
}
  cin >> p->reach.min;
  while (p->reach.min < 0 || p->reach.min>59) {//控制分钟格式正确
  cout << “输入错误!” << endl;
  cout << “请重新输入到达时间的分(0-59)!” << endl;
  cin >> p->reach.min;
}
Enter->stack[Enter->top] = p;
return(1);
}
else//车场已满,车进便道
{
cout << “车场已满,请在便道等待!” << endl;
t = (QueueNode*)malloc(sizeof(QueueNode));
t->data = p;
t->next = NULL;
W->rear->next = t;
W->rear = t;
return(1);
}
}
void Leave(SeqStackCar* Enter, SeqStackCar* Temp, LinkQueueCar* W) {//车辆离开
int room;
CarNode* p;
QueueNode* q;
//判断车场内是否有车
if (Enter->top > 0)//有车
{
while (1) {//输入离开车辆的信息
cout << “请输入车在车场的位置1–” << Enter->top << “:”;
cin >> room;
if (room >= 1 && room <= Enter->top)break;
}
while (Enter->top > room) {//车辆离开
Temp->top++;//临时通道栈顶指针
Temp->stack[Temp->top] = Enter->stack[Enter->top];
Enter->stack[Enter->top] = NULL;
Enter->top–;
}
p = Enter->stack[Enter->top];
Enter->stack[Enter->top] = NULL;
Enter->top–;
while (Temp->top >= 1) {//判断临时通道上是否有车
Enter->top++;
Enter->stack[Enter->top] = Temp->stack[Temp->top];
Temp->stack[Temp->top] = NULL;
Temp->top–;
}
PRINT(p, room);
if ((W->head != W->rear) && Enter->top < MAXSIZE) {//车站是未满
//便道的车辆进入车场
q = W->head->next;
p = q->data;//p指向链队头
Enter->top++;
cout << “便道的” << p->num << “号车进入车场第” << Enter->top << “位置!” << endl;
cout << “请输入现在的时间(小时:分钟):” << endl;
cin >> p->reach.hour;
if (p->reach.hour < 0 || p->reach.hour>23) {
cout << “输入错误!” << endl;
cout << “请重新输入到达时间的时(0-23):” << endl;
cin >> p->reach.hour;
}
cin >> p->reach.min;
if (p->reach.min < 0 || p->reach.min>59) {
cout << “输入错误!” << endl;
cout << “请重新输入到达时间的分(0-59):” << endl;
cin >> p->reach.min;
}
Enter->stack[Enter->top] = p;
W->head->next = q->next;
if (q == W->rear)W->rear = W->head;
free(q);//释放q地址
}
else cout << “便道里没有车!” << endl;//便道没车
}
else cout << “车场里没有车!” << endl;//车场没车
}
void PRINT(CarNode* p, int room) {//输出离开车辆的信息清单
int A1, A2, B1, B2;
cout << “请输入离开的时间:(小时:分钟)” << endl;
cin >> p->leave.hour;
while (p->leave.hour < 0 || p->leave.hour>23) {
cout << “输入错误!” << endl;
cout << “请重新输入离开的时间的时(0-23):” << endl;
cin >> p->leave.hour;
B1 = p->leave.hour;
}
cin >> p->leave.min;
if (p->leave.min < 0 || p->leave.min>59) {
cout << “输入错误!” << endl;
cout << “请重新输入离开的时间的分(0-59):” << endl;
cin >> p->leave.min;
}
cout << endl << “离开车辆的车牌号为:” << endl;
puts(p->num);
cout << “其到达的时间为:” << p->reach.hour << “:” << p->reach.min << endl;
cout << “其离开的时间为:” << p->leave.hour << “:” << p->leave.min << endl;
A1 = p->reach.hour;
A2 = p->reach.min;
B1 = p->leave.hour;
B2 = p->leave.min;
cout << “应交费用为:” << (((B1 - A1) * 60 + (B2 - A2)) + 1440) % 1440 * price << “元!” << endl;
}
void List1(SeqStackCar* S) {//列表显示车场信息
cout << “您选择的是车场停车情况!” << endl;
int i;
if (S->top > 0) {//判断车站内是否有车
cout << “位置 到达时间 车牌号” << endl;
for (i = 1; i <= S->top; i++) {
cout << " " << i << " " << S->stack[i]->reach.hour << “:” << S->stack[i]->reach.min << " " << S->stack[i]->num << endl;
}
}
else cout << “车场里没有车!” << endl;
}
void List2(LinkQueueCar* W) {//列表显示便道信息
cout << “您选择的是便道停车情况!” << endl;
int j = 1;
QueueNode* p;
p = W->head->next;
if (W->head != W->rear) {//判断通道上是否有车
cout << “等待车辆的车牌号码为:” << endl;
while (p != NULL) {
cout << j;
puts(p->data->num);
cout << j << " " << p->data->num << endl;
p = p->next;
j++;
}
}
else cout << “便道里没有车!”;
}
void List(SeqStackCar S, LinkQueueCar W) {//列表界面
int flag, tag; //列表和标签
flag = 1;
while (flag) {//列表显示循环控制
 cout << “请选择您要显示的信息!(1-3):” << endl;
 cout << “#——1.车场——#” << endl;
 cout << “#——2.便道——#” << endl;
 cout << “#——3.返回——#” << endl;
while (1) {
 cin >> tag;
 if (tag >= 1 || tag <= 3)break;
 else cout << “输入错误!请选择(1-3):” << endl;
}
switch (tag) {
  case 1:List1(&S); break;//列表显示车场信息
  case 2:List2(&W); break;//列表显示便道信息
  case 3:flag = 0; break;
 default:break;
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言版停车位管理系统

    本文实例为大家分享了C语言实现停车位管理系统的具体代码,供大家参考,具体内容如下 简单功能介绍 1.录入车辆信息2.查找车辆信息3.删除车辆信息4.修改车辆信息5.查找区域车辆信息6.排序(按照车主姓名排序)7.展示所有车辆信息8.将录入的数据保存在文件中9.将文件中的数据读出 算法构造 链表的增删改查 结构体的定义 typedef struct Parking {     char name[20];        //车主姓名     char carname[10];     //车牌号

  • C语言实现简单停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 /*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放.若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入.当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入.汽车

  • C语言源码实现停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 题目要求: 刚开始在Codeblocks下用C语言写的,但是用指针传递参数的时候总是出问题.后来就用C++,但是调用了C的输入输出和文件操作的头文件,所以代码都是C的 main.cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <windows.h> #include <ctime>

  • C语言实现简单的停车场管理系统

    本文实例为大家分享了C语言实现简单停车场管理系统的具体代码,供大家参考,具体内容如下 1.问题描述 1)有一个两层的停车场,每层有6个车位,当第一层车位停满后才允 许使用第二层(停车场可用一个二维数组实现),每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算:2)假设停车场初始状态为第一层空.第二层已经有四辆车,其车位号依次为第二层的1-4号,停车时间依次为20,15,10,5:3)停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先

  • C语言实现简易停车场管理系统

    本文实例为大家分享了C语言实现停车场管理系统的具体代码,供大家参考,具体内容如下 问题描述: 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,

  • C语言实现游戏VIP停车场管理系统

    在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程. 我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试). 功能要求如下: 程序如下: /*************************************************************************** 项目要求 游戏VIP停车场 问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放 在等候区.若

  • C语言实现停车场管理系统

    问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢的车要先退出,待它走后再依次进入.汽车离开时按停放时间收费. 基本功能要求: (1)建立三个数据结构分别是:停放队列.让路栈.等候队列. (2)输入数据模拟管理过程,数据(入或出,车号). 停车管理系统是C语言中队列和栈比较简单的应用,需要注意的是停车队列.等候队列.让路栈结构体的构建.在写代码时,

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • C语言实现停车管理系统

    本题为大家分享了C语言实现停车管理系统的具体代码,供大家参考,具体内容如下 设计题目 设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每

  • C语言学生成绩管理系统小设计

    本文实例为大家分享了C语言学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.本设计涉及的重要C语言知识有: 1.单链表的各种操作 2.文件流的操作 3.单链表的排序 二.本设计主要以下几个模块组成 1.学生成绩添加模块 2.学生成绩删除模块 3.学生成绩修改模块 4.学生成绩检索模块 5.学生成绩显示模块(包括成绩排序) 6.学生成绩保存模块 效果图: 本设计大概5.6百行代码左右,通过这个设计,本人感觉C语言熟练了很多, 希望能对像我一样的C语言菜鸟同学会有点帮助,废话少说,咱们上代码

  • C语言学生成绩管理系统课程设计

    学生成绩管理系统是比较适合初学者的.它涵盖了c语言几乎知识.对于学了c语言的人,把这个课程设计搞好(当然自己能设计出来是要有很好的基础).不管自己能不能够完成,最重要的是能弄懂.参考其他资料,试着自己编写是不错的选择.这个课程设计也是我参照资料,自己编写的.自己适当地增加了一些功能.不过,编的不够那么专业吧. #include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 char* cl

  • C语言实现图书管理系统

    目前为止跟着学校进度学习C语言大概半年左右,基础学习只学到了指针,学得非常浅.说实话,起初对C语言的印象---只是一个学习计算机语言的敲门砖,对具体C语言如何应用等,非常迷茫.直到大一下半学期的高级语言设计课程之后,试过dos运行的图形化界面的完整小程序,才发现C语言的魅力. ok,废话不多说了,下面是我第二节课的作品----C语言的图书管理系统.一个简单的小程序.并非纯原创,是基于网络搜索到的"学生管理系统"改编而成的.通过直接浏览.修改一个完整的代码,我的收获颇丰.我认为这样比枯燥

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统做了好长时间的,里面有点小问题,希望大佬找到并帮忙改改,注意输入密码三次错误会自动注销用户,密码123456 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct student { char xuehao[100];//输入学号 char name[100];//输入姓名 char sex[100];//输入性别 int

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • Python简易版停车管理系统

    本文实例为大家分享了Python简易版停车管理系统的具体代码,供大家参考,具体内容如下 import time # 最大停车数 max_car = 100 # 当前停车数,初始为0 cur_car = 0 # 当前停车列表,初始设置为空 car_list = [] time.asctime() class car(object): """定义一个车类包括 车主人名 车牌 开始停放时间""" def __init__(self, plate_num

  • python实现停车管理系统

    Python停车管理系统可实现车辆入库,按车牌号或者车型查询车辆,修改车辆信息,车辆出库时实现计费,按车型统计车辆数和显示全部车辆信息的功能 (1)定义车辆类,属性有车牌号.颜色.车型(小汽车.小卡.中卡和大卡).到达的时间和离开的时间等信息和相关的对属性做操作的行为. (2)定义一个管理类,完成对停车场的管理.停车场的具体要求:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出. 汽车在停车场内按门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入:每辆停放在车场的车

随机推荐