目录
第四步:完成show_park()函数中第一个功能:查看场内停车情况
第六步:完成show_park()函数中第二个功能:查看所有车辆的信息
第七步:完成leave_park()函数中的第一个功能:找车
第八步:完成leave_park()函数中的第一个功能:离场
补充1:printf(“XXX”);和fprintf(stderr, “XXX”);的区别
补充3:如果嫌每次都要敲编译的命令太麻烦,可以创建一个Makefile的文件
前情知识链接:嵌入式全栈开发学习笔记_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()函数中实现
但是停车这里我们得定义一个链式队列
然后创建一个等待队列(全局变量)
再初始化这个队列