嵌入式全栈开发学习笔记---项目1:停车管理系统

目录

项目概述

程序文件规划

项目实现的功能

测试结果

 程序主流程图

程序详解(重点)

第一步:写一个欢迎界面welcome();

第二步:写一个主菜单界面menu();

第三步:获取用户输入的键值,并根据键值实现对应的功能

第四步:完成show_park()函数中第一个功能:查看场内停车情况

第五步:完成push_park()函数停车的功能

第六步:完成show_park()函数中第二个功能:查看所有车辆的信息

第七步:完成leave_park()函数中的第一个功能:找车

第八步:完成leave_park()函数中的第一个功能:离场

完整代码(共计大约700多行,几乎每句有注释)

main.c

show.c

park.c

data.c

 bfs.c

 park.h

data.h

本项目涉及知识补充

补充1:printf(“XXX”);和fprintf(stderr, “XXX”);的区别

补充2:使用printf打印颜色

补充3:如果嫌每次都要敲编译的命令太麻烦,可以创建一个Makefile的文件

补充4:time_t是什么数据类型?

补充5:头文件之间不能互相包含。

补充6:数组(名)之间不能相互赋值。

补充7:time(NULL)得到的时间怎么格式化?

补充8:计算时间difftime


前情知识链接:嵌入式全栈开发学习笔记_Vera工程师养成记的博客-CSDN博客

目前为止我们已经学习了linux系统的终端上的一些操作命令、vim编辑器上的一些操作命令、C语言和数据结构,接下来我们就用我们学过的这些知识做一个“停车管理系统”的项目。

PS:对项目有任何问题可进群询问:QQ交流群:963138186

项目概述

开发环境:基于VMware Workstation虚拟机上的Linux系统的终端上的vim编辑器

涉及重要知识点:

C语言(二维数组);

数据结构(链表、队列、广度优先算法(BFS));

程序文件规划

源文件:

main.c:主逻辑在该文件编辑

show.c:屏幕界面显示功能在该文件实现

park.c:关于车辆操作功能在该文件实现

data.c:队列和链表的操作功能在该文件实现

bfs.c:广度优先算法的功能在该文件实现

头文件:

park.h:关于车辆的操作函数和变量在该文件声明

data.h:关于队列和链表的操作函数和变量在该文件声明

项目实现的功能

该系统的主菜单界面有3个子菜单:1.查看停车场情况;2.停车;3.离开

子菜单1:查看停车场情况-->子功能:1.查看所有车辆信息;2.查看场内停车情况

子菜单2:停车

子菜单3:离开-->子功能:1.找车;2.离场

测试结果

启动欢迎界面

停留1s后显示主菜单

输入数字2回车,进入停车功能,输入车牌号回车(输入的车牌号需合法),系统随机生成一个位置,用户根据位置停放车辆成功

回车返到主菜单

输入数字1查看停车场情况,进入子菜单

输入数字1车辆信息

回车返回主菜单

 输入数字1查看停车场情况,进入子菜单后输入数字2回车查看场内停车情况(停车的位置被标为了黄色)

回车返回主菜单

输入数字3进入离开的子菜单

输入数字1回车,输入车牌号回车,输入用户所在的当前位置(输入的位置需合法),系统提示人和车之间的最短路径

用户可以根据此路径找到自己的车

回车返回主菜单

输入数字3回车进入子菜单,输入数字2回车,输入车牌号回车可以看到停车时长和缴费信息,如果输入数字1表示已缴费则系统会提示车到出口的最短路径,再回车可以看到系统提示车辆已经离场。如果输入数字2表示放弃缴费则直接返回主菜单,不提示路径。

车辆离场后可以回车返回主菜单

输入数字1回车进入子菜单,输入数字2回车查看场内停车情况,可以看到刚刚停的那辆车已经不在了

下面为了测试停车场已停满的效果,所以把表示停车场的二维数组的行和列改小,现在最多可以停放9辆车

超出9辆车后,就会提示停车场已满,进入等候队列

如果此时有一辆车离场,系统会同时提示等候队列中的一辆车进场成功

 程序主流程图

程序详解(重点)

第一步:写一个欢迎界面welcome();

第二步:写一个主菜单界面menu();

第三步:获取用户输入的键值,并根据键值实现对应的功能

第四步:完成show_park()函数中第一个功能:查看场内停车情况

查看场内停车情况在park_info()函数内完成

我们是用一个二维数组来模拟停车场,所以遍历数组这里我们需要先定义一个二维数组

为了方便我们后期根据需要随意更改行和列,我们需要宏定义行和列

然后将二维数组传过来给print_array()实现功能

这里我们要先布置停车场,道路用WAY表示,空车位用CAR表示,有车的车位用CAREXIST表示,然后根据不同的布置打印不同的符号 

布置好停车场后,系统一开始要初始化一个空的停车场(即还没有车子进场的时候)

第五步:完成push_park()函数停车的功能

当用户输入车牌号的时候要判断车牌号的长度和是否重复

如果重复就提示输入有误,让用户重新输入,如果输入没有错误就进而判断停车场有没有满,

 这里要定义一个统计实际在场车辆的变量和统计车位总数的变量,

如果Carnumber>Total则表示已满,就需要进入等待队列,在push_queue()函数中实现

但是停车这里我们得定义一个链式队列

然后创建一个等待队列(全局变量)

再初始化这个队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vera工程师养成记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值