C语言实现简单的停车场管理系统
问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面呢的车要先退出,待它走后再依次进入。汽车离开时按停放时间收费。
基本功能要求:
(1)建立三个数据结构分别是:停放队列、让路栈、等候队列。
(2)输入数据模拟管理过程,数据(入或出,车号)。
停车管理系统是C语言中队列和栈比较简单的应用,需要注意的是停车队列、等候队列、让路栈结构体的构建。在写代码时,出队列入栈和出栈入队列时,指针容易出错而造成段错误,应当注意。我所写的代码如下:
//定义结构体
#include <stdio.h>
#include <stdlib.h> #define F 0
#define T 1
#define MAX 3 typedef struct Node //数据
{
int number;
int time;
}Node; typedef struct QueueNode //队列结点
{
struct Node infom;
struct QueueNode * next;
}*QueueNode; typedef struct LinkQueue //链队列
{
struct QueueNode * front;
struct QueueNode * rear;
}LinkQueue; typedef struct stack //栈结点
{
struct Node data;
struct stack *next;
}*StackNode; typedef struct LinkStack //链栈
{
StackNode top;
int count;
}LinkStack;
//函数实现
void menu(LinkQueue *wait,LinkQueue *park,LinkStack *giveway,int num,int t);//菜单
int init(LinkQueue *wait,LinkQueue *park,LinkStack *giveway);//初始化
int linklength(LinkQueue q);//查看长度
int enqueue(LinkQueue *q,int num,int t);//入队列
int dequeue(LinkQueue *q,int *num,int *t);//出队列
void park1(LinkQueue *wait,LinkQueue *park);//停车函数
int push(LinkStack *s,int num,int t);//入栈
int pop(LinkStack *s,int *num,int *t);//出栈
void leave2(LinkQueue *wait,LinkQueue *park,LinkStack *giveway,int num,int t);//离开函数
void view3(LinkQueue wait,LinkQueue park);//查看停车场状态 int main()
{
LinkQueue wait;
LinkQueue park;
LinkStack giveway;
int num = ;
int t = ;
init(&wait,&park,&giveway);
menu(&wait,&park,&giveway,num,t);
return ;
} int init(LinkQueue *wait,LinkQueue *park,LinkStack *giveway)
{
QueueNode newnode1 = (QueueNode)malloc(sizeof(struct QueueNode));
if(NULL == newnode1)
{
return F;
}
newnode1->next = NULL;
wait->front = newnode1;
wait->rear = newnode1; QueueNode newnode2 = (QueueNode)malloc(sizeof(struct QueueNode));
if(NULL == newnode2)
{
return F;
}
newnode2->next = NULL;
park->front = newnode2;
park->rear = newnode2; giveway->top = NULL;
giveway->count = ;
} void menu(LinkQueue *wait,LinkQueue *park,LinkStack *giveway,int num,int t)
{
printf("**********Welcome to our Car Parking !**********\n");
printf("********** Please choose function **********\n");
printf("********** 1 : park. **********\n");
printf("********** 2 : leave. **********\n");
printf("********** 3 : view. **********\n");
printf("********** 4 : exit. **********\n");
int option;
scanf("%d",&option);
switch(option)
{
case :{
park1(wait,park);
printf("停车完成!\n");
menu(wait,park,giveway,num,t);
break;
}
case :{
leave2(wait,park,giveway,num,t);
menu(wait,park,giveway,num,t);
break;
}
case :{
view3(*wait,*park);
menu(wait,park,giveway,num,t);
break;
}
case :{
printf("********** 欢迎再次使用,谢谢! **********\n");
break;
}
default:{
printf("********** 请输入正确的指令! **********\n");
menu(wait,park,giveway,num,t);
break;
}
} } int linklength(LinkQueue q)
{
int i = ;
while(q.front != q.rear)
{
i++;
q.front = q.front->next;
}
return i;
} int enqueue(LinkQueue *q,int num,int t)
{
QueueNode newnode = (QueueNode)malloc(sizeof(struct QueueNode));
if(NULL == newnode)
{
return F;
}
newnode->infom.number = num;
newnode->infom.time = t;
newnode->next = NULL;
q->rear->next = newnode;
q->rear = newnode;
return T;
} int dequeue(LinkQueue *q,int *num,int *t)
{
if(q->front == q->rear)
{
printf("the queue is empty!\n");
return F;
}
*num = q->front->next->infom.number;
*t = q->front->next->infom.time;
QueueNode temp = q->front->next;
q->front->next = temp->next;
if(temp->next == NULL)
{
q->rear = q->front;
}
free(temp);
return T;
} void park1(LinkQueue *wait,LinkQueue *park)
{
printf("请输入车号和停车时间\n");
int num,t;
scanf("%d,%d",&num,&t);
if(linklength(*park) >= MAX)
{
printf("停车场已满,进入等待区!\n");
enqueue(wait,num,t);
}
else
{
enqueue(park,num,t);
}
} int push(LinkStack *s,int num,int t)
{
StackNode newnode = (StackNode)malloc(sizeof(struct stack));
if(NULL == newnode)
{
return F;
}
newnode->data.number = num;
newnode->data.time = t;
newnode->next = s->top;
s->top = newnode;
s->count++;
return T;
} int pop(LinkStack *s,int *num,int *t)
{
if( == s->count)
{
printf("the stack is empty !\n");
return F;
}
*num = s->top->data.number;
*t = s->top->data.time;
StackNode temp = s->top;
s->top = s->top->next;
free(temp);
s->count--;
return T;
} void leave2(LinkQueue *wait,LinkQueue *park,LinkStack *giveway,int num,int t)
{
printf("请输入要离开车的车号\n");
int leavenumber;
scanf("%d",&leavenumber);
int i = ;
QueueNode head = park->front;
while(head != park->rear)
{
if(head->next->infom.number != leavenumber)
{
head = head->next;
i++;
}
else
break;
}
int j = ;
if(i <= MAX-)
{
while(j != i)
{
dequeue(park,&num,&t);
push(giveway,num,t);
j++;
}
dequeue(park,&num,&t);
}
else
{
printf("查无此车!\n");
}
while(giveway->top != NULL)
{
pop(giveway,&num,&t);
enqueue(park,num,t);
}
if(linklength(*wait) != )
{
dequeue(wait,&num,&t);
enqueue(park,num,t);
}
} void view3(LinkQueue wait,LinkQueue park)
{
printf("******************** 目前停车场状况 ********************\n");
printf("停车场共%d个车位,当前停车场共有%d量车,等待区共有%d量车\n",
MAX,linklength(park),linklength(wait));
printf("**************************************************************\n");
printf("车 号:");
QueueNode head1 = park.front;
QueueNode head2 = park.front;
while(head1 != park.rear)
{
printf("%d ",head1->next->infom.number);
head1 = head1->next;
}
printf("\n");
printf("停车时间:");
while(head2 != park.rear)
{
printf("%d ",head2->next->infom.time);
head2 = head2->next;
}
printf("\n");
}
原文地址:https://blog.csdn.net/qq_33557384/article/details/77600922
C语言实现简单的停车场管理系统的更多相关文章
- 我们为之奋斗过的C#之---简单的库存管理系统
今天非常开心,因为今天终于要给大家分享一个库存管理项目了. 我个人感觉在做项目之前一定先要把逻辑思路理清,不要拿到项目就噼里啪啦的一直敲下去这样是一不好的习惯,等你做大项目的时候,你就不会去养成一种做 ...
- 李洪强漫谈iOS开发[C语言-042]-简单计算器
李洪强漫谈iOS开发[C语言-042]-简单计算器
- 基于ThinkPHP框架的简单的后台管理系统
版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:
- Spring Boot简单应用——会员管理系统
简介 本项目是使用Spring Boot编写的一个简单的会员管理系统. 提供了会员的解决方案,主要有会员模块,管理员模块,礼品模块,商品模块,会员等级模块,生日提醒模块,积分模块,详细模块如下图 准备 ...
- Java之从头开始编写简单课程信息管理系统
编写简单的课程管理系统对于新手并不友好,想要出色的完成并不容易以下是我的一些经验和方法 详情可参考以下链接: https://www.cnblogs.com/dream0-0/p/10090828.h ...
- 谁说C语言很简单?
前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...
- 实现超级简单的bug管理系统
大家可以试着去实现一个超级简单的bug管理系统 不需要鉴权,也就是不需要登陆 有tag管理功能,缺陷上可以加tag,通过tag区分bug的状态和类型 bug的增删改查功能 bug描述支持markdow ...
- C语言项目:学生成绩管理系统
C语言项目:学生成绩管理系统 1.数据结构:学生信息:学号.姓名.年龄.性别.3课成绩 2.功能: (1)增加学生记录 (2) 删除学生记录 (3) 查找学生信息(学号 ...
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
随机推荐
- c# Unicode
- c# HashTable 类
- ISCC之web1
由题意知,爆破可行. 简单说一下抓包过程,第一个抓到的POST包直接放掉,右键扫描站点,扫出来第二个POST包,第二个POST包cookie,验证码,密码均为空,于是我开始尝试去利用, 经过几次rep ...
- k8s安装之flannel.yaml
收藏一下,以后直接从这里cp过来用的. flannel新版 --- apiVersion: extensions/v1beta1 kind: PodSecurityPolicy metadata: n ...
- P1052 过河[DP]
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 《CoderXiaoban》第九次团队作业:Beta冲刺与验收准备3
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十三 团队作业9:BETA冲刺与团队项目验收 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件黑盒 ...
- destoon二次开发-签到时间函数扩展
在api/extend.func.php文件下增加以下代码: //签到时间函数 function timetoday($time = 0, $type = 6) { if(!$time) $time ...
- notepad++ 调整行间距
在“设置”-“语言格式设置”里面,找到style里面的Line number margin一项,调整字体大小就可以调整左边标号的大小,然后文本内容的行间距即可任意调整.
- 在PHP中使用CURL实现GET和POST请求的方法
1.CURL介绍 CURL是一个利用URL语法规定来传输文件和数据的工具.支持很多协议,如HTTP.FTP.TELNET等. 幸运的是PHP也支持CURL库.本文将介绍curl的一些高级特性,以及在P ...
- java发送邮件javamail, freemarker读取html模板内容
https://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件 ...