0x00 主要思想
停车场的构建就比之前的通讯录的构建复杂了一些,之中加入了顺序栈和队列的应用,一开始时我以为使用的是链栈,后来才发现使用的顺序栈,这样话车辆出栈时就相对来说麻烦了一些但是因为车辆相对较少,处理起来还可以。停车场构建需要的是先构造一个空栈和一个空队列,还有就是一些功能函数的实现。到了主函数中就可以和通讯录相同的使用do()while()语句和switch()语句进行控制输出输入。
0x01 程序源代码
//停车场管理系统
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<math.h>
#include<process.h>
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 20
#define STACK_INCREMENT 2
typedef int SElemType;
typedef int Status;
//定义车的基本信息
typedef struct
{
int arrive[2];
int leave[2];
char num[10];
}car;
//定义队列
typedef struct QNode
{
car data;
QNode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
//定义栈
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode, *StackPtr;
typedef struct SqStack
{
int base;
int top;
car parkcar[STACK_INIT_SIZE];
int stacksize;
}SqStack;
//-------------------------------------------------------
//构造一个空栈一个空队列即创建一个停车场
void CreatePark(SqStack &S, LinkQueue &Q)
{
S.base = S.top = 0;
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front)
exit(0);
Q.front->next = NULL;
printf("恭喜停车场创建成功!\n");
}
//-------------------------------------------------------
//-------------------------------------------------------
//遍历栈和队列即显示停车情况
//停车场的情况
void ShowStack(SqStack &S)
{
int j = S.base;
while (j < S.top)
{
cout << S.parkcar[j].num << " " << S.parkcar[j].arrive[0] << ":" << S.parkcar[j].arrive[1]<<" "<<j+1<<"\n";
j++;
}
}
//临时停车点的情况
void ShowQueue(LinkQueue &Q)
{
QueuePtr p = Q.front->next;
while (p)
{
car c = p->data;
printf("%s %d:%d",c.num,c.arrive[0],c.arrive[1]);
if (p != Q.rear)
{
p = p->next;
}
else
{
Q.rear = Q.front;
p = NULL;
}
}
}
//总体情况的显示
void ShowInformation(SqStack &S,LinkQueue &Q)
{
if (S.base != S.top)
{
printf("车牌号 停车时间 停车位置\n");
ShowStack(S);
}
else
{
ShowQueue(Q);
}
}
//-------------------------------------------------------
//-------------------------------------------------------
//一些基本操作:入栈,入队
//入栈即汽车进入停车场
void PushSqStack(SqStack &S, car ch)
{
printf("请输入当前小时:");
cin >> ch.arrive[0];
printf("请输入当前分钟:");
cin >> ch.arrive[1];
S.parkcar[S.top++] = ch;
printf("已将您的车停好,车的位置是:%d\n", S.top);
}
//入队列即进入临时停车点
void PushQueue(LinkQueue &Q, car ch)
{
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p)
{
exit(0);
}
p->data = ch;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
printf("对不起,停车场已满,请您在临时停车区等待!");
ShowQueue(Q);
}
//-------------------------------------------------------
//-------------------------------------------------------
//出栈,出队列
//出队列即进入停车场
car PopQueue(LinkQueue &Q)
{
car ch;
QueuePtr p;
p = Q.front->next;
ch = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
free(p);
return ch;
}
//判断队列是否为空
int QueueEmpty(LinkQueue &Q)
{
if (Q.front == Q.rear)
return 0;
return 1;
}
//出栈即离开停车场
void PopSqStack(SqStack &S, LinkQueue &Q)
{
int i;
if (S.base == S.top)
{
printf("停车场没有车!\n");
exit(0);
}
SqStack sq;
printf("请输入您的停车位置:\n");
cin>>i;
sq.base = sq.top = 0;
while (S.top > i)
sq.parkcar[sq.top++] = S.parkcar[--S.top];
int n = --S.top;
printf("请输入当前小时:\n");
cin >> S.parkcar[n].leave[0];
printf("请输入当前分钟:\n");
cin >> S.parkcar[n].leave[1];
int time = (S.parkcar[n].leave[0] - S.parkcar[n].arrive[0]) * 60 + (S.parkcar[n].leave[1] - S.parkcar[n].arrive[1] );
double money = time*0.05;
printf("您的停车时长为:%d分钟\n", time);
cout << "你本次停车的费用为:" << money << "元" << endl;
printf("\n");
printf("\n");
printf("谢谢您使用本系统,欢迎下次光临!\n");
while (sq.top > sq.base)
S.parkcar[S.top++] = sq.parkcar[--sq.top];
if (QueueEmpty(Q))
{
S.parkcar[S.top] = PopQueue(Q);
printf("车牌号为%s的车从临时停车点进入停车场,停车位置为%d\n", S.parkcar[S.top].num, S.top + 1);
printf("请输入当前小时:%d\n");
cin >> S.parkcar[S.top].arrive[0];
printf("请输入当前分钟:%d\n");
cin >> S.parkcar[S.top].arrive[1];
S.top++;
}
}
//-------------------------------------------------------
//-------------------------------------------------------
//构建整个停车场
//登记车辆信息
car Register()
{
car c;
printf("请输入您的车牌号:");
cin >> c.num;
c.arrive[0] = 0;
c.arrive[1] = 0;
c.leave[0] = 0;
c.leave[1] = 0;
return c;
}
//判断一辆车到达后是否需要构造队列
void Judge(SqStack &S, LinkQueue &Q)
{
car ch = Register();
if (S.top == STACK_INIT_SIZE) //如果栈满,推入队列,否则推入栈
{
PushQueue(Q, ch);
}
else
{
PushSqStack(S, ch);
}
}
//-------------------------------------------------------
//功能目录函数
void menu()
{
printf("-------------------------------------------\n");
printf("| |\n");
printf("| 欢迎使用停车场管理系统 |\n");
printf("| |\n");
printf("| |\n");
printf("| 请选择您需要的功能 |\n");
printf("| 1.创建停车场 |\n");
printf("| 2.车进停车场 |\n");
printf("| 3.车出停车场 |\n");
printf("| 4.查看停车情况 |\n");
printf("| 0.退出系统 |\n");
printf("| |\n");
printf("-------------------------------------------\n");
}
//主函数
int main()
{
SqStack S;
LinkQueue Q;
int i, j = 0;
bool flag = false;
do
{
system("CLS");
menu();
if (j == 0)
{
printf("请输入你的选择:");
}
else
{
printf("请继续输入你的选择:");
}
cin>>i;
switch (i)
{
case 1:CreatePark(S,Q);
system("pause");
break;
case 2:Judge(S, Q);
system("pause");
break;
case 3:PopSqStack(S,Q);
system("pause");
break;
case 4:ShowInformation(S,Q);
system("pause");
break;
case 0:printf("已退出,谢谢使用!");
return 0;
default:printf("对不起,您的输入有误,已强制退出,请重新登录!");
i = 0;
system("pause");
}
} while (i != 0);
return 0;
}
分享到:
相关推荐
数据结构课程设计C++语言停车场管理系统源码,添加了UI数据结构课程设计C++语言停车场管理系统源码,添加了UI数据结构课程设计C++语言停车场管理系统源码,添加了UI数据结构课程设计C++语言停车场管理系统源码,添加...
在这篇《数据结构课程设计报告停车场管理系统》中,作者冷清淼以数据结构为核心,设计并实现了一个基于顺序栈和链队列模拟的停车场管理系统。 ### 停车场管理系统需求分析 该系统的模拟对象是一个狭长通道的停车场...
"数据结构C语言版课程设计停车场管理系统方案" 本文基于C语言实现了一个停车场管理系统的设计方案,使用栈模拟停车场,队列模拟便道,实现了停车场的收费管理系统。下面是相关的知识点: 1. 数据结构:栈和队列 ...
停车场管理系统数据结构课程设计报告 本课程设计的目的是为了解决停车场管理问题,通过使用数据结构和C语言实现一个停车场管理系统。该系统可以模拟停车场的管理过程,包括车辆的到达和离开、停车场的停放车辆信息...
数据结构课程设计中的停车场模拟管理系统是一项综合应用,旨在让学生运用所学的数据结构知识解决实际问题。在这个项目中,主要涉及到了栈和队列这两种基本数据结构,并通过它们来模拟停车场的运作过程。 栈是一种...
综上所述,这个停车场管理系统展示了如何运用Java编程语言和基础数据结构解决实际问题,同时也锻炼了设计和实现一个完整系统的综合能力。通过这个项目,学生不仅可以深化对Java语言的理解,还能增强对数据结构和算法...
`数据结构课程设计 - 停车场管理系统.doc`文档可能包含了项目的详细描述、设计思路、算法分析、系统流程图以及可能的优化方案。文档通常会阐述如何结合实际需求选择合适的数据结构,并解释各个功能模块的工作原理。 ...
首先,我们要理解停车场管理系统的数据结构基础。在停车场系统中,核心数据结构可能包括: 1. 车位(ParkingSpace):每个车位通常需要记录车位编号、状态(空闲或占用)、车辆信息(如车牌号、车辆类型)等。这些...
在这个数据结构课程设计中,我们关注的是一个具体的实际应用——停车场管理系统。这个系统利用了数据结构的知识来模拟真实世界的停车场景,帮助我们理解如何在实际问题中运用抽象数据类型和算法。 首先,我们可以...
"停车场管理系统数据结构课程设计" 停车场管理系统是一种复杂的系统,它需要使用数据结构来设计和实现。该系统的主要功能是管理停车场的停车信息,包括车辆的到达和离开信息,以及查询停车信息。为了实现该系统,...
"数据结构课程设计-停车场管理系统" 本文将详细介绍如何使用C语言编写一个停车场管理系统,解决实际生活中的停车场管理问题。该系统使用栈和队列数据结构来模拟停车场和便道的管理。 知识点1:栈和队列数据结构 ...
数据结构课程设计——停车场管理系统是IT领域中一个典型的实践项目,它涵盖了计算机科学与技术的基础知识,特别是数据结构的应用。这个系统的设计目的是有效地管理和优化停车场的车位分配,提高运营效率,为用户提供...
大学数据结构课程设计停车场管理系统源码cpp文件
数据结构在停车场管理系统中的应用是计算机科学中一个重要的实践领域,尤其对于软件工程的学生来说,这是一个极好的课程设计项目。这个完整的工程展示了如何利用数据结构来实现一个功能齐全的停车场管理系统,包括...
### 停车场管理-数据结构课程设计 #### 需求分析 根据题目描述,本项目的主要目的是设计一个程序...以上内容涵盖了该项目的设计思路、核心算法以及具体的实现细节,为开发一个完整的停车场管理系统提供了坚实的基础。
数据结构课程设计中的停车场管理系统是一个典型的面向对象编程实践,它涉及到数据结构、算法以及软件工程的基本概念。在本实验报告中,我们将详细探讨以下几个关键知识点: 1. **需求分析**: - **问题描述**:...
数据库课程设计停车场管理系统知识点总结 停车场管理系统是计算机科学与技术专业的一门集中实践性课程设计,旨在设计并建立一个简单的关系数据库,以加深对数据库模式的理解,锻炼数据库设计能力,掌握开发一个小型...
用c语言写的停车场管理,数据结构的课程设计