停车场管理系统(C语言顺序栈+链栈+链队列)

这篇具有很好参考价值的文章主要介绍了停车场管理系统(C语言顺序栈+链栈+链队列)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

1.根据停车场管理系统的要求,利用结构化程序设计方法以及C的编程思想来完成系统的设计,使用数据结构中的栈、队列进行分析;

2.按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现;

3.通过对参考代码的运行与调试,并且对以核心功能模块代码进行注释,真正掌握算法的思路与实现步骤。

二、实验内容

1.设计系统主界面,要求选择菜单对应数字进入相应功能:

2.要求对以下各个功能模块进行算法设计;

(1)车辆到达模块;

(2)车辆离开模块;

(3)列表显示模块;


Dec C++和VS编译器创建项目都要创建C++项目:
 VS:VS2019如何创建C++项目?_Gemini-zero的博客-CSDN博客_vs2019怎么创建c++项目打开VS2019,选择空项目后,点击下一步(如果没有找到空项目,说明你下载的时候没勾选C++模块)输入项目名,更改项目存放路径后,选择下一步选择C++文件,修改程序名称,点击添加找到“解决方案资源管理器”,右键点击源文件,选择添加新建项此时可以开始编写C++程序了...https://blog.csdn.net/qq_44364832/article/details/105820626Dec c++: https://jingyan.baidu.com/article/fd8044fae80db55031137a07.htmlhttps://jingyan.baidu.com/article/fd8044fae80db55031137a07.html


这是我的vs框架

停车场管理系统(C语言顺序栈+链栈+链队列)


1、车辆到达模块流程图:

停车场管理系统(C语言顺序栈+链栈+链队列)

2、车辆离开模块流程图:

停车场管理系统(C语言顺序栈+链栈+链队列)


 功能截图:

停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)

 停车场管理系统(C语言顺序栈+链栈+链队列)


 创建头文件 struct.h 定义数据类型和存储结构

#pragma once

#ifndef __STRUCT_H__
#define __STRUCT_H__

#define MAX 3 //车位数
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define Xtime 30 //30分钟Xprice块钱
#define Xprice 1 //Xtime分钟一块钱
#define Etime 0 //前5分钟免费
typedef int Status;

// 车辆信息
typedef struct {
	char num[10];  	// 车牌 
	long reach;   	// 车辆到达时间 
	long leave;   	// 车辆离开时间 
}Car;

// 车辆顺序栈:停车场Enter和临时停车Temp 
typedef struct {
	Car* top;
	Car* base;
	int stacksize;//栈可用的最大容量
}SqStack;

//链栈(临时)
typedef struct StackNode {
	Car data;
	struct StackNode* next;
}StackNode,*LinkStack;

// 便道停车wait队列的结点 
typedef struct QNode {
	Car data;
	QNode* next;
}QNode, * QueuePtr;

// 便道停车链式队列 
typedef struct {
	QueuePtr front; //队头指针
	QueuePtr rear; //队尾指针
}LinkQueue;

#endif

创建 function_declare.h 头文件把所有的方法函数声明

#pragma once

#ifndef __FUNCTION_H__
#define __FUNCTION_H__

void SelectAll(SqStack S, LinkQueue Q);//查看车库

Status InitTempStack(LinkStack& TempStack); //初始化临时栈
Status InitStack(SqStack & S);		// 初始化车辆栈
Status Push(SqStack& S, Car e);	// 车辆进栈
Status Pop(SqStack& S, Car& e, LinkStack& TempStack);	// 车辆出栈
Car GetTop(SqStack& S);	// 取栈顶元素
int StackEmpty(SqStack S);	// 车辆栈判空
int StackFull(SqStack S, Car e);	// 车辆栈判满

Status InitQueue(LinkQueue & Q);		// 初始化车辆链式队列
Status EnQueue(LinkQueue& Q, Car e);	// 车辆入队
Car DeQueue(LinkQueue& Q); 	// 车辆出队
Car GetHead(LinkQueue Q); 	// 取链队的对头元素
int QueueEmpty(LinkQueue Q); 	// 车辆队列判空

#endif

创建 caroperation.cpp 源文件编写系统的功能

#include <string.h>
#include<stdlib.h>
#include <stdio.h>
#include<time.h>
#include "struct.h"

//时间换算(传入秒)
void TimeExpress(int time) {
    int min;
    int hour;
    int sec;
    if (time < 60) {
        printf("停车时长: %d 秒\n", time);
    }
    else if (time < 3600) {
        min = time / 60;
        sec = time % 60;
        if (time % 60 == 0) {
            printf("停车时长: %d 分钟\n", min);
        }
        else {
            printf("停车时长: %d 分钟 % d 秒\n", min , sec);
        }
    }
    else {
        min = time / 60;
        sec = time % 60;
        hour = min / 60;
        min %= 60;
        if (sec == 0 && min == 0) {
            printf("停车时长: %d 小时\n", hour);
        }
        else if(sec != 0 && min == 0){
            printf("停车时长: %d 小时 0 分钟 %d 秒\n", hour,sec);
        }
        else if (sec == 0 && min != 0) {
            printf("停车时长: %d 小时 %d 分钟\n", hour, min);
        }
        else if (sec != 0 && min != 0) {
            printf("停车时长: %d 小时 %d 分钟 %d 秒\n", hour,min, sec);
        }
    }
}

//前Etime分钟免费,费用Xtime分钟Xprice块钱,不到Xtime分钟按Xtime分钟算
//传入的time单位为分钟
int price(int time) {
    int price;
    if (time <= Etime)return 0;
    else {
        price = time / Xtime;
        if (time % Xtime != 0)price++;
        return price;
    }
}

// 车辆栈判空
int StackEmpty(SqStack S) {
    if (S.top == S.base) {
        printf("当前车库没有车辆!\n\a");
        return ERROR;
    }
    else {
        return OK;
    }
}

//查看车库
void SelectAll(SqStack S, LinkQueue Q) {
    if (StackEmpty(S)) {
        QueuePtr q=Q.front;
        printf("========车库========\n");
        while (S.top != S.base)
        {
            S.top--;
            printf("|%s|\n", S.top->num);
        }
        printf("=======等待区=======\n");
        printf("-------------------------\n");
        if (q == Q.rear) {
            printf("暂无车辆等待...");
        }
        else {
            while (q != Q.rear) {
                q = q->next;
                printf("%s ",q->data.num);
            }
        }
        printf("\n-------------------------\n");
    }
}

// 初始化车辆栈
Status InitStack(SqStack& S) {
    S.base = new Car[MAX];
    if (!S.base)exit(OVERFLOW);
    S.top = S.base;
    S.stacksize = MAX;
    return OK;
}

//初始化临时栈
Status InitTempStack(LinkStack &TempStack) {
    TempStack = NULL;
    return OK;
}

// 车辆栈判满
int StackFull(SqStack S,Car e) {
    if (S.top - S.base == MAX) {
        //printf("车库满了!\a\n");
        printf("车位已满 ==> 车牌号 %s 进入等待区!\a\n", e.num);
        return ERROR;
    }
    else {
        return OK;
    }
}

// 车辆进栈
Status Push(SqStack& S, Car e) {
    
    if (StackFull(S,e)) {
        *S.top++ = e;
        printf("车牌号 %s 成功进库!\n",e.num);
        printf("车位剩余:%d \n", --S.stacksize);
        return OK;
    }
    //等待队列 
    return ERROR;
}

// 取栈顶元素
Car GetTop(SqStack& S) {
    return *--S.top;
}

//判断有没有该车辆
Status Find(SqStack S,Car e) {
    while (S.top != S.base)
    {
        S.top--;
        if (!strcmp(S.top->num, e.num)) {
            return OK;
        }
    }
    return ERROR;
}

// 链栈入栈(临时)
Status TempPush(LinkStack& TempStack,Car e) {
    LinkStack p = new StackNode;
    p->data = e;
    p->next = TempStack;
    TempStack = p;
    return OK;
}

// 链栈出栈(临时)
Car TempPop(LinkStack& TempStack) {
    /*if (TempStack == NULL) {
        printf("临时栈空\a\n");
        return ERROR;
    }*/
    LinkStack p;
    Car tempData;
    tempData = TempStack->data;
    p = TempStack;
    TempStack = TempStack->next;
    delete(p);
    return tempData;
}

// 车辆出栈
Status Pop(SqStack& S, Car& e, LinkStack& TempStack) {
    //是否空栈
    if (StackEmpty(S)) { 
        //判断有没有该车
        if (!Find(S,e)) {
            printf("该车不在车库中!\a\n");
            return ERROR;
        }
        Car temp;
        while (true)
        {
            temp = GetTop(S);
            if (!strcmp(temp.num, e.num)) {
                printf("车牌号 %s 成功出库!\n", e.num);
                //时间(出库时间)
                e.leave = time(NULL);
                //计费(传入分钟单位)
                int pay=price((e.leave - e.reach)/60);
                //出临时栈&进原栈(给车让位进另一个栈又出栈进回原栈)
                while (TempStack != NULL) {
                    *S.top++ = TempPop(TempStack);
                }
                //时间换算并输出时间
                TimeExpress(e.leave - e.reach);
                printf("请缴费 %d 元\n", pay);
                printf("车位剩余:%d \n", ++S.stacksize);
                return OK;
            }
            //进栈(让位的车进临时栈)
            TempPush(TempStack, temp);
        }
    }
    return ERROR;
}

// 初始化车辆链式队列
Status InitQueue(LinkQueue& Q) {
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if (!Q.front)return ERROR;
    else {
        Q.front->next = NULL;
        return OK;
    }
}

// 车辆队列判空
int QueueEmpty(LinkQueue Q) {
    if (Q.front == Q.rear) {
        //printf("队空!\n\a");
        return ERROR;
    }return OK;
}

// 取链队的对头元素
Car GetHead(LinkQueue Q) {
    return Q.front->next->data;
}

// 车辆入队
Status EnQueue(LinkQueue& Q, Car e) {
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if (!p) {
        printf("程序发生不可逆的错误,请联系管理员!\n\a");
        //printf("入队失败!\a\n");
        return ERROR;
    }
    else {
        p->data = e;
        p->next = NULL;
        Q.rear->next = p;
        Q.rear = p;
        return OK;
    }
}

// 车辆出队
Car DeQueue(LinkQueue& Q) {
    QueueEmpty(Q);
    Car HeadCar=GetHead(Q);
    QueuePtr p;
    p = Q.front->next;
    Q.front->next = p->next;
    if (Q.rear == p)Q.rear = Q.front;
    free(p);
    return HeadCar;
}

创建主函数 main.cpp 源文件编写界面并执行程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"struct.h"
#include"function_declare.h"

int main() {
	SqStack S;
	LinkStack TempStack;
	LinkQueue Q;
	Car ReadyCar;
	Car e;
	int item;

	//栈初始化
	if (!InitStack(S)) {
		printf("程序发生不可逆的错误,请联系管理员!\n\a");
		return ERROR;
		system("pause");
	}
	//临时栈初始化
	InitTempStack(TempStack);
	//队列初始化
	if (!InitQueue(Q)) {
		printf("程序发生不可逆的错误,请联系管理员!\n\a");
		return ERROR;
		system("pause");
	}
	
	MARK:
	while (1) {
		printf("*****欢迎使用停车场系统*****\n");
		printf("①车辆到达模块\n");
		printf("②车辆离开模块\n");
		printf("③列表显示模块\n");
		printf("④极致可视化\n");
		printf("⑤退出\n");
		printf("请选择功能: ");
		scanf("%d", &item);
		printf("-----------------\n");
		switch (item)
		{

		case 1: {
			printf("车牌号为:");
			getchar();
			scanf("%s", &e.num);
			//时间计费(入库开始时间)
			e.reach = time(NULL);
			if (!Push(S,e)) {
				EnQueue(Q,e);
			}
			printf("\n\n");
			break;
		}
		case 2: {
			printf("输入要出库的车牌号:");
			getchar();
			scanf("%s", &e.num);
			if (Pop(S, e, TempStack)) {
				if (QueueEmpty(Q)) {
					//出队进栈
					ReadyCar = DeQueue(Q);
					ReadyCar.reach = time(NULL);
					Push(S, ReadyCar);
				}
			}
			printf("\n\n");
			break;
		}
		case 3: {
			SelectAll(S,Q);
			printf("\n\n");
			break;
		}
		case 4: {
			system("cls");
			while (1) {
				printf("*****极致可视化模式*****\n");
				printf("①车辆到达模块\n");
				printf("②车辆离开模块\n");
				printf("③列表显示模块\n");
				printf("④退出极致可视化模式\n");
				printf("请选择功能: ");
				scanf("%d", &item);
				printf("-----------------\n");
				switch (item)
				{

				case 1: {
					printf("车牌号为:");
					getchar();
					scanf("%s", &e.num);
					system("cls");
					//时间计费(入库开始时间)
					e.reach = time(NULL);
					if (!Push(S, e)) {
						EnQueue(Q, e);
					}
					printf("\n");
					SelectAll(S, Q);
					break;
				}
				case 2: {
					printf("输入要出库的车牌号:");
					getchar();
					scanf("%s", &e.num);
					system("cls");
					if (Pop(S, e, TempStack)) {
						if (QueueEmpty(Q)) {
							//出队进栈
							ReadyCar = DeQueue(Q);
							ReadyCar.reach = time(NULL);
							Push(S, ReadyCar);
						}
					}
					printf("\n");
					SelectAll(S, Q);
					break;
				}
				case 3: {
					system("cls");
					SelectAll(S, Q);
					printf("\n\n");
					break;
				}
				case 4:
					system("cls");
					goto MARK;
					break;
				default:printf("错误:输入正确的功能序号!\a\n");
					break;
				}
			}
			break;
		}
		case 5:
			return 0;
			system("pause");
		default:printf("错误:输入正确的功能序号!\a\n");
			break;
		}
	}
	return 0;
}

资源:

停车场管理系统(C语言顺序栈+链栈+链队列)-C++文档类资源-CSDN下载停车场管理系统(C语言车库顺序栈+临时栈链栈+排队车道链队列)更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_55797565/85183518文章来源地址https://www.toymoban.com/news/detail-474173.html


如果有用的话可以给一个小赞吗🤭

到了这里,关于停车场管理系统(C语言顺序栈+链栈+链队列)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 停车场管理系统

    开发   以下为停车场管理系统的代码:   首先定义Car类,记录车辆信息:   ```java public class Car {     private String plateNumber;  // 车牌号     private long enterTime;  // 进入停车场时间     private long exitTime;  // 离开停车场时间       public Car(String plateNumber, long enterTime) {      

    2024年02月09日
    浏览(31)
  • 停车场管理系统(C++)

    大二写的肯定会有很多很多很多缺点~希望大佬们能指出~给大家提供一个可以改的一个小东西,改成其他的什么什么也是可以的~有bug在评论区里说一下~952行~基本重要的都有注释~ 本“项目”实现了: 1.大中小车型分类 2.进场候车道 3.时间的自动提取 4.车牌的判定 5.查询、进车

    2024年01月16日
    浏览(36)
  • C#停车场管理系统

    现如今随着经济的发展, 私家车越来越多, 系统管理停车场变得尤为重要。所以我写了这个系统用来系统化的管理停车场的车辆的停入、驶出和计费,停车位的使用情况,停车证件的信息管理以及工作员工的信息管理,使得停车场的管理可以变的更加的方便快捷和人性化。

    2024年02月07日
    浏览(36)
  • 基于python的停车场管理系统的设计与实现/智能停车管理系统

    车位信息 是 停车场供应用户 必不可少的一个部分。在 停车场发展 的整个过程中, 车位信息 担负着最重要的角色。为满足如今日益复杂的管理需求,各类 系统管理 程序也在不断改进。本课题所设计的 停车场管理系统 , 使用 Django 框架 , Python语言 进行开发,它的优点代

    2024年02月10日
    浏览(31)
  • 数据结构停车场管理系统设计

    数据结构与算法分析课程设计之数据结构停车场管理系统设计。主要应用到数据结构中的栈与队列。运用到的编程语言为C++。 目录 一  设计要求  二 思路分析 三 设计流程 先附上完整代码: 运行结果图: 1.1 问题描述 :设停车场是一个可停放n辆车的狭长通道,且只有一个

    2024年02月04日
    浏览(30)
  • 用JAVA实现停车场管理系统

    该程序使用ArrayList存储停车记录,并通过switch-case语句实现菜单选择功能。主要功能包括: 停车:输入车牌号和进入时间,自动分配停车位编号, 结算:根据停车位编号计算停车费用,计费标准为停车时长(秒)乘以每秒费用0.05元,同时记录车辆离开时间和费用; 查看记录

    2024年02月11日
    浏览(31)
  • 停车场管理系统文件录入(C++版)

    ❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 之前写的停车场管理系统或者是通讯录管理系统都没有使用 文件 录入、保存数据,今天带来一个文件录入信息的C++版停车场管理系统。代码部分都会有详细注释,稍加思

    2024年02月03日
    浏览(27)
  • 【数据结构】停车场管理系统程序设计

    说明: 该程序设计采用常见基础的数据结构栈和队列实现了一个简单停车场管理系统。在具体设计中,实现了系统页面和停车场的示意图显示,通过调用顺序栈和链队的相关函数,模拟了实际停车场的运营流程。 目录 1 任务内容 2 需求分析 2.1 功能需求 2.2 输入输出需求 3 概

    2024年02月03日
    浏览(33)
  • Python 实验报告,实现停车场收费管理系统

    3.某小型收费停车场有50个车位,有一个入口与一个出口,满1小时收费1元,不足1小时不收费,10元封顶,超过1天罚款200元。编写程序实现停车场出入口管理。 要求: (1)定义出入口类,将车位总数与目前停在停车场的车辆信息(每辆车包括车牌和入场时间)定义为类属性;

    2024年02月12日
    浏览(33)
  • 基于Web的停车场管理系统(Java)

    目录 一、系统介绍 1.开发的环境 2.本系统实现的功能 3.数据库用到的表 4.工程截图 二、系统展示 1、登录页面  2、首页 3、系统信息管理模块   4、车位信息管理模块  5、IC卡信息管理模块 ​编辑6、固定车主停车管理模块 7、临时车主停车管理模块 8、系统功能操作模块 三

    2024年02月10日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包