停车场管理系统实习题〈数据结构〉
设有一个可以停放n(n>=5)辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车 未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制模拟该停车场的管理的程序。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAXSIZE 2 //定义停车场的最大容量
#define MAX 10 //定义便道的最大容量
#define OK 1
#define ERROR 0
//建立车辆停留时间结点
float parktime;//车辆停留的总时间,全局变量
char panduan[10];//用于判断条件
struct shijian
{
int hour;
int minute;
};
//建立车辆信息的结点结构
typedef struct node
{
char num[10];//牌照信息
int panduan; //如果是1,表示到达,0表示离去
struct shijian arrivetime;
struct shijian leavetime;
}cardata;
//建立存放停车场车辆的栈
//临时栈和实际停车场站可建立一个栈数组
typedef struct
{
cardata elem[MAXSIZE];
int top;
}carstack;
void initstack(carstack* s)
{
s->top = -1;
}
int isempty(carstack* s)//判断空
{
return(s->top == -1 ? OK : ERROR);
}
int isfull(carstack* s)
{
return(s->top == MAXSIZE - 1 ? OK : ERROR);
}
int push(carstack* s, cardata x)
{
if (!isfull(s)) //站满不执行
{
s->top++;
s->elem[s->top] = x;
return OK;
}
else
return ERROR;
}
int pop(carstack* s, cardata* x)
{
if (!isempty(s))
{
*x = s->elem[s->top];
s->top--;
return OK;
}
else
return ERROR;
}
//构建计算停车场收费函数
float charge(cardata* x)//传入需要计算停车费的车辆信息,返回停车的总费用
{
int first;//停车起始费用
int h;//从第二个小时开始,每小时收取的费用
float last;//总费用
float t;//用于计算时间差,单位为hour
printf("请输入起始费用:\n");
scanf("%d", &first);
printf("请输入每小时收取的费用:\n");
scanf("%d", &h);
t = abs(x->leavetime.hour - x->arrivetime.hour) + abs(x->leavetime.minute - x->arrivetime.minute) / 60.0;
parktime=t;
if (t <= 1)
{
return first;
}
else
{
last = first + h * (t - 1.0);
return last;
}
}
//利用队列建立便道
typedef struct
{
cardata queue[MAX];
int front,rear;
}carqueue;
void initqueue(carqueue* sq)//队列的初始化
{
sq->front=sq->rear=0;
}
int queueempty(carqueue* sq)//判断队列是否为空
{
return(sq->front==sq->rear?OK:ERROR);
}
int queuefull(carqueue* sq)
{
return ((sq->rear+1)%MAX==sq->front? OK:ERROR);
}
//入队
int enterqueue(carqueue* sq,cardata x)
{
if(!queuefull(sq))
{
sq->rear++;
sq->queue[sq->rear]=x;
return OK;
}
else
{
printf("队列已满,无法入队\n");
return ERROR;
}
}
//出队
int deletequeue(carqueue* sq,cardata* x)
{
if(!queueempty(sq))
{
*x=sq->queue[sq->front];
sq->front++;
return OK;
}
else
{
return ERROR;
}
}
int main()
{
cardata mycar;//创建一个输入车的变量
carstack park;//建立一个停车场
carstack tempark;//建立一个临时停车场
carqueue way; //建立一个通道
int f;//便道的第几个位置
initstack(&park);
initstack(&tempark);
initqueue(&way);
printf("亲爱的顾客:\n");
printf("\t\t欢迎使用停车场管理系统\t\t\n");
do
{
printf("请输入您是到达还是离去:(到达按1,离去按0)\n");
scanf("%d",&mycar.panduan);
if(mycar.panduan==1)//表示到达
{
printf("请输入您的车牌号(例如苏A12345)\n");
scanf("%s",&mycar.num);
printf("请输入您到达的时间(小时+分钟):\n");
scanf("%d %d",&mycar.arrivetime.hour,&mycar.arrivetime.minute);
if(!isfull(&park)) //如果停车场不满
{
push(&park,mycar);//将车开入
printf("您的车目前停在%d车位(一共%d个车位)\n",park.top+1,MAXSIZE);
}
else //如果停车场已满,则将车存入便道
{
if(!queuefull(&way))//如果便道不满
{
enterqueue(&way,mycar);
f++;
printf("您的车目前停在便道的第%d个位置(便道一共有%d个位置)\n",f,MAX);
}
else
printf("此停车场已经超载,无法继续停车,请稍后再来\n");
}
}
else//表示离开
{
int i,j,k;
if(!isempty(&park)) //停车场有车的情况下
{
printf("请输入您的车停在停车场的第几号位:\n");
scanf("%d",&i);
printf("请输入现在的时间(小时+分钟)\n");
scanf("%d %d",&park.elem[i-1].leavetime.hour,&park.elem[i-1].leavetime.minute);
printf("您的车辆所需要支付的费用为:%0.2f元\n",charge(&park.elem[i-1]));
printf("您在停车场内停留的时间为%0.2f小时",parktime);
j=park.top;
cardata t;//中间变量
cardata s;
for(j;j>i-1;j--)//出的车辆后面的车辆出栈,表示让路
{
pop(&park,&t);//让路的车出栈
push(&tempark,t);//放入临时停放栈
}
pop(&park,&s);//自己的车出栈,即删除
while(!isempty(&tempark)) //将临时栈的车出栈进入停车场
{
pop(&tempark,&t);
push(&park,t);
}
if(!queueempty(&way))
{
deletequeue(&way,&t);//将便道的第一辆车出队
f--;
push(&park,t);//进入停车场
}
}
else//停车场无车
{
printf("您的操作有误!停车场内无车...\n");
}
}
printf("以上进程执行完毕,是否重新执行,请键入y或n以回车键结束:\n");
scanf("%s",panduan);
}while(!strcmp(panduan,"y"));
return 0;
}
运行结果:
创作不易,感谢支持
停车场管理系统实习题〈数据结构〉相关推荐
- 停车场管理系统程序设计c语言数据结构,数据结构(C语言)—停车场管理系统...
2014-01-02 回答 #include #include #include #include #define max 3 #define price 1 int b=1; typedef str ...
- 计算机课程设计收费管理系统,数据结构课程设计报告---收费停车场管理系统
数据结构课程设计报告---收费停车场管理系统 (20页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 XX大学计算机与电子 信息学院< ...
- c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...
<数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...
- 数据结构课程设计-停车场管理系统
利用前面所建立的算法库基础进行的课程设计,名曰停车场管理系统 具体利用顺序栈以及链队等知识 当车辆进入时,输入车辆车牌号码并且自动获取当前系统时间. 具体请运行代码. parking.h: 包含定义顺 ...
- C语言数据结构练习——停车场管理系统(使用栈和队列)(草稿的草稿)
(代码很乱,也没什么注释,调试信息也没删,真心不是给别人看的东西,等标题上的草稿两字没了再看也不迟.)(注:标题带有"草稿"两字的,质量普遍很低,亲们,就不要浪费时间在上面吧) 题 ...
- 数据结构大作业之停车场管理系统
数据结构大作业之停车场管理系统 安排: 1. 分析停车场的数据属性,并依据停车场管理的功能要求,确定模拟系统设计方案: 2. 完成停车场管理的数据结构设计工作,包括栈和队列的逻辑结构和存储结构等: 3 ...
- java数据结构停车场管理系统_《数据结构》实验设计报告-停车场管理系统
<<数据结构>实验设计报告-停车场管理系统>由会员分享,可在线阅读,更多相关<<数据结构>实验设计报告-停车场管理系统(28页珍藏版)>请在人人文库网上 ...
- java数据结构停车场管理系统_停车场管理系统数据结构毕业论文.doc
PAGE PAGE \* MERGEFORMAT 20 数据结构课程设计题目: 停车场管理系统 姓名: 邓全飞 学号: 201120320105 专业: 信息与计算科学 指导老师:姜俊坡 目 录 TO ...
- [数据结构实践项目]变态的停车场管理系统
[数据结构实践项目]变态的停车场管理系统 项目简介 设停车场是一个可以停放 n 辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在 ...
最新文章
- 志澄观察:卫星互联网——太空经济新动力
- Python中str.replace()的使用方法
- python访问序列元素的编号用什么括起来_Python 序列通用操作介绍
- DataSet转换为实体(函数)
- MybatisPlus中@TableField注解的使用
- Django中如何防范CSRF跨站点请求伪造攻击
- ad19原理图标注_AD19中原理图的模板如何进行编辑?
- Python基础(四)函数
- 【问题】父套子时,‘阻止子元素的外边距传递给父元素’与闭合浮动
- android view state,Android状态系统(二)——View状态组合
- 多媒体交互应用基础(7)
- PPP项目群管理模式的实践探索——以浙江交工富阳PPP项目群为例
- 论坛源码推荐(12月24日):OS X原生开源游戏模拟器OpenEmu iOS 7条形码扫描器
- 电磁兼容测试分析软件软件,电磁兼容测试方案的主要应用
- lettcode算法题目--玛祖游戏
- Excel转PDF 一百行代码超简单
- Mysql定义DELETE操作触发器,将删除数据存入历史表
- 【20230302】【剑指1】数学(中等)
- 人与计算机进行交互的接口,5种新型人机交互技术
- 搭建Discuz论坛网站-最新版Discuz3.4
热门文章
- [Java]使用jConsole导出java程序的heap dump文件
- 学校计算机使用维护管理制度,计算机教室使用管理制度
- 牛客 - 统计每个月兔子的数量
- Linux-Centos7搭建k8s前系统配置项
- XXXX工程割接方案
- C++ 判断 IP 是否在 1网段。 char string 查找 截取 比较
- http://blog.csdn.net/jame_peng
- Echarts学习之十一:地理坐标系geo
- 长城wifi服务器没响应,wifi设置网站进不去怎么办,教你一招轻松解决
- 《痞子衡嵌入式半月刊》 第 41 期