diff --git a/.gitignore b/.gitignore index 78f9a6b..0220fd4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # 项目的构建文件夹 build/ +cmake-build-*/ # VSCode的配置文件夹 .vscode/ diff --git a/README.md b/README.md index 6a69c61..fc8c9e9 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,22 @@ # Auto Pilot Bus -## 项目简介 +北京邮电大学计算机学院2021级《计算导论与程序设计》实践大作业项目仓库,本次课程的题目为“自动公交车调度”。 -北京邮电大学计算机学院2021级《计算导论与程序设计》实践大作业项目仓库。 +### 特点 -在指定的公交车行驶模型下,实现指定的算法以实现对于公交车的自动调度。 +- 采用`cmake`进行项目管理,编译轻松快捷。 +- 程序模块化设计,注释详尽,代码可读性高。 +- 含有`GTest`单元测试模块和自行设计的全局测试模块,还提供了不少测试用例。 +- 完全使用`markdown`撰写的文档 ## 项目使用 -### 项目结构 +### 结构 ``` auto_pilot_bus | -+-all_test //本地测试文件夹 ++-all_test //本地全局测试文件夹 | +-docs // 文档文件夹 | @@ -33,29 +36,27 @@ auto_pilot_bus ### 编译环境 -- 编译器 `MinGW-W64 gcc 8.1.0` - 编译工具 `cmake 3.23.1` +- 理论上不依赖特定的编译器 -### 项目使用 +> `MinGW64 GCC`和`GNU GCC`编译器经过测试可正常编译。 -处在校园网环境在 - -> 参考信息化中心的这篇[文章](https://nic.bupt.edu.cn/info/1016/1301.htm)安装VPN客户端 +### 使用 使用 ```bash -git clone http://10.3.255.244:8801/2021211180/2021211180.git +git clone https://github.com/jackfiled/auto_bus.git ``` -下载仓库,在下载过程中可能提示输入账号和密码认证,账号即为你的学号,密码就是你登录`GitLab`时输入的密码。 - -下载完成后文件夹`2021211180`即为项目的文件夹。 +下载完成后文件夹`auto_bus`即为项目的文件夹。 使用 +> 可自行指定使用的编译器 + ```bash -cd 20212111180 +cd auto_bus mkdir build # 创建编译的文件夹 cd build cmake .. -G "MinGW Makefiles" # 在第一次生成之后就不必再使用"-G"参数指定编译类型 @@ -64,16 +65,25 @@ cmake --build . 在编译执行完成之后,`build`文件下的`bus.exe`即为编译产生的程序。 -## 项目测试 +程序具体支持的指令可以查看文档中的说明文档。 -### 单元测试 +### 测试 + +#### 单元测试 在编译之后,`build/test`文件夹内即为`google test`框架生成的单元测试。 -### 本地测试 +#### 全局测试 在编译之后,`build/all_test`内的`bus_all_test.exe`就是全局本地测试程序。 运行这个程序,根据程序的提示选择适当的测试集,程序会自动读取选定的测试集中的配置文件和输入文件,并且将程序的输出和测试集中的输出文件进行对比,输出比对的结果。 程序现有的测试集存储在`all_test/test_cases`下面,目前已有18个测试集,对应测试集采用的调度策略可以查看测试集中的配置文件。 + +## 支持 + +如果你在学习/使用的过程中遇到的任何问题,或者有任何的意见与建议,可以在仓库中提交`Issue`和`Pull Request`同我们讨论。 + +当然,也可以给我发电子邮件。 + diff --git a/docs/概要设计书/auto_pilot_bus.drawio b/docs/概要设计书/auto_pilot_bus.drawio deleted file mode 100644 index d09ff70..0000000 --- a/docs/概要设计书/auto_pilot_bus.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/docs/概要设计书/main模块函数调用.png b/docs/概要设计书/main模块函数调用.png deleted file mode 100644 index e70889e..0000000 Binary files a/docs/概要设计书/main模块函数调用.png and /dev/null differ diff --git a/docs/概要设计书/main模块流程图.png b/docs/概要设计书/main模块流程图.png deleted file mode 100644 index 164ac50..0000000 Binary files a/docs/概要设计书/main模块流程图.png and /dev/null differ diff --git a/docs/概要设计书/query模块函数调用.png b/docs/概要设计书/query模块函数调用.png deleted file mode 100644 index 8a82003..0000000 Binary files a/docs/概要设计书/query模块函数调用.png and /dev/null differ diff --git a/docs/概要设计书/先来先服务流程图.png b/docs/概要设计书/先来先服务流程图.png deleted file mode 100644 index c00a8f5..0000000 Binary files a/docs/概要设计书/先来先服务流程图.png and /dev/null differ diff --git a/docs/概要设计书/最短寻找时间优先策略.png b/docs/概要设计书/最短寻找时间优先策略.png deleted file mode 100644 index e8eeaf2..0000000 Binary files a/docs/概要设计书/最短寻找时间优先策略.png and /dev/null differ diff --git a/docs/概要设计书/概要设计书.md b/docs/概要设计书/概要设计书.md deleted file mode 100644 index 75e3ade..0000000 --- a/docs/概要设计书/概要设计书.md +++ /dev/null @@ -1,274 +0,0 @@ -# 概要设计 - -## main函数流程 - -![](main模块流程图.png) - -## 轨道模块 - -> 轨道模块是比较基础的模块,许多模块都建立在这个模块的基础上 - -模块的主体是一个表示每个轨道节点的结构体。 - -### 创建结构体 - -```C -/** - * 创建轨道列表 - * @param length 站点之间的距离 - * @param node_num 站点的个数 - * @return 指向首站的指针 - */ -rail_node_t * CreateRails(int length, int node_num); -``` - -这个函数的难点应该是创建一个双向的循环链表。 - -### 寻找指定的站点 - -```C -/** - * 查找指定编号的站点指针 - * @param rails 轨道的头节点地址 - * @param id 需要查找的站点编号 - * @return 需要查找站点指针 - */ -rail_node_t *FindNode(rail_node_t rails, int id); -``` - -比较重要的工具函数,给定编号寻找对应的站点站点指针,不过没啥难度。 - -## 公交车模块 - -> 公交车模块就是比较复杂的模块了。 - -模块的主体是一个表示公交车的结构体。 - -### 运行公交车 - -```C -/** - * 每个时刻使公交车前进 - * @param rails 轨道链表 - * @param direction 公交车前进的方向 - * @param bus 公交车 - * @return 公交车是否到达站点 - */ -int RunBus(rail_node_t* rails, bus_t bus, int direction); -``` - -这个函数不难,就是根据指定的方向让公交车前进,同时判断公交车是否到站。 - -## 请求模块 - -请求模块的核心是一个表示请求的结构体。 - -### 创建请求 - -```C -/** - * 创建请求 - * @param query 请求链表队列 - * @param type 请求的类型 - * @param node 请求产生/指向的站点 - */ -void CreateQuery(bus_query_t query, int type, rail_node_t node); -``` - -还是一个简单的链表创建函数,主要的关键点在于说明的第五点第四条: - -> 如果在某个请求没有完成时再有相同的请求(请求类型和站点全部相同)发生,则该请求被抛弃 - -也就是在创建的时候要判断是否已存在相同的请求。 - -### 删除请求 - -> 删除请求其实就是处理请求的同义词 - -这个函数没啥意思,就是删除一个链表节点。 - -## 控制器模块 - -> 全程序最复杂的模块 - -### 时间计算 - -一个`int`类型的全局变量储存全局的时间。 - -```C -/** - * 时间增加 - */ -void AddTime(); -``` - -一个可有可无的函数,负责将时间加一。 - -> 可能后期删除,作用不明显。 - -### 策略简述 - -策略的相关函数会在公交车到站的时候调用。 - -策略一般包括两个函数,方向控制函数和请求处理函数。 - -### 先来先服务策略(FCFS) - -> first come first serve -> -> 对于先来先服务策略,车一次停站只完成一个请求,即使在这个站点上即有乘车请求,车内也有到该站的请求,也只能按策略完成已经调度的那个请求。但是完成当前请求后,如果发现时间序列上后续的一个或多个连续请求都恰好在同一站点(即连续的同站点请求位置相同,但请求类型不同),则可以立即完成这些连续的同站点请求,也就是说特殊情况下,一次停车的1秒内可完成多个请求。 - -#### 方向 - -```C -/** - * 在先来先服务策略下应该前进的方向 - * @param bus 公交车 - * @param queries 请求队列链表 - * @return 前进的方向 - */ -int FCFSDirection(bus_t bus, bus_query_t queries); -``` - -直接给出最先的一个请求就可以了。 - -将给定的请求赋给全局变量。 - -#### 请求 - -```C -/** - * 在先来先服务策略下给出处理的请求 - * @param bus 公交车 - * @param queries 请求队列链表 - * @return 需要处理的请求 - */ -bus_query_t FCFSQuery(bus_t bus, bus_query_t queries); -``` - -按照指定的策略给出现在可以处理的请求。 - -在这里是当前所在站点和第一个请求指向站点相同是即可处理,而且连续处理。 - -### 最短寻找时间优先(SSTF) - -> 对于最短寻找时间优先策略,一次服务的目标请求一旦确定,即使中途产生更优的请求也不可以更改。但如果新的请求恰好可以顺便服务(同方向的站台请求或车内请求),可以为新的请求停站。具体为:程序计算离当前车的位置最近的请求,如果没有请求则原地不动,否则按最近的路线(顺、逆时针)去接(送)。如果车途中遇到与车目前同方向的上车或下车请求,可以停下一秒解决,反方向的上车请求不停车。车服务完目标后,反复此过程,直到end。特别地,当车到达目标站点时,可以停一次车(1秒钟)完成该站点已接收的所有类型请求(区别于顺便站停靠)。 - -#### 方向 - -```C -/** - * 在最短寻找时间策略下应该前进的方向 - * @param bus 公交车 - * @param queries 请求队列链表 - * @return 前进的方向 - */ -int SSTFDirection(bus_t bus, bus_query_t queries); -``` - -这个函数比较难,求出最短前进的方向即可。 - -将处理的请求赋给全局变量。 - -#### 请求 - -```C -/** - * 在最短寻找时间策略给出处理的请求 - * @param bus 公交车 - * @param queries 请求队列链表 - * @return 需要处理的请求 - */ -bus_query_t SSTFQuery(bus_t bus, bus_query_t queries); -``` - -给出当前需要处理的请求。注意有些请求时可以处理的,有些请求时不能顺便处理的。 - -### 顺便服务策略(SCAN) - -#### 方向 - -```C -/** - * 顺便服务的前进方向 - * @param bus 公交车 - * @param queries 请求队列链表 - * @return 前进的方向 - */ -int SCANDirection(bus_t bus, bus_query_t queries); -``` - -也是判断最短的前进方向,但是 - -## 输入输出模块 - -> 输入输出模块是比较基础的模块,主要作用就是调用其他模块实现的功能。 - -### 配置文件读取 - -```C -/** - * 读取配置文件,创建轨道链表,同时读取需要使用的策略 - * @return 指向轨道链表的指针 - */ -rail_node_t* ReadConfigFile(); -``` - -这个函数需要完成三个任务: - -- 解析配置文件。(重点) -- 调用函数创建轨道列表。 -- 读取指定的策略。 - -### 打印当前状态 - -```C -/** - * 打印当前的状态 - * @param rails 轨道链表 - * @return 返回需输出的字符串 - */ -char* PrintState(); -``` - -输出的格式如下: - -``` -TIME:秒数 -BUS: -position:0 -target: 0000000000 -STATION: -clockwise: 0000000000 -counterclockwise: 0000000000 -``` - -这个函数的实现应该不难,遍历几个链表就结束了。 - -> 返回一个字符串是为了便于测试,直接`printf`出来不好测试,也不符合解耦的设计策略。 - -### 读取输入 - -```C -/** - * 读取标准输入流中的输入 - * @param inputString 输入的字符串 - * @return 当前读取的状态 - */ -int ReadInput(char* inputString); -``` - -这个函数的实现比较困难,在于读取对应的输入并调用相关的函数。 - -输出的`int`值是一系列定义的宏: - -```C -#define IO_CLOCK 0 // 读取时钟指令 -#define IO_READING 1 // 读取请求指令 -#define IO_END 2 // 读取结束指令 -``` - -便于main函数确定下一步的行为。 - - - diff --git a/docs/概要设计书/模块结构图.png b/docs/概要设计书/模块结构图.png deleted file mode 100644 index 53c6405..0000000 Binary files a/docs/概要设计书/模块结构图.png and /dev/null differ diff --git a/docs/概要设计书/自动机状态图.png b/docs/概要设计书/自动机状态图.png deleted file mode 100644 index 34be03f..0000000 Binary files a/docs/概要设计书/自动机状态图.png and /dev/null differ diff --git a/docs/概要设计书/顺便服务策略.png b/docs/概要设计书/顺便服务策略.png deleted file mode 100644 index e8eeaf2..0000000 Binary files a/docs/概要设计书/顺便服务策略.png and /dev/null differ