失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于C++的自动驾驶公交车调度系统

基于C++的自动驾驶公交车调度系统

时间:2019-12-20 06:19:44

相关推荐

基于C++的自动驾驶公交车调度系统

目录

用户界面设计 1

1.1 文件方式(定义输入输出的格式) 1

1.2 动画方式(画出图形界面) 1

2 有限状态自动机状态转换图 1

stop:停止drive:运行 3

3 高层数据结构设计 3

3.1 常量定义 3

3.2 全局变量定义 3

//以下为公共变量,默认全部为 0 3

4 系统模块划分 4

4.1 系统模块划分(说明共分成哪些程序模块,各模块功能概述) 4模块名称 io.c 4模块名称 public.c 5模块名称 datastr.c 5模块名称 strategy.c 5

5.模块名称 init.c 5

4.2 各模块接口说明 5模块接口 init.h 5模块接口 public.h 5模块接口 default.h 5模块接口 datstr.h 5模块接口 datastr.h 5模块接口 io.h 5模块接口 strategy.h 5

4.3 各模块函数说明 5

5 核心算法设计 7FCFS:First Come First Service 先来先服务策略 7SSTF: Shortest Seek Time First 最短寻找时间优先策略 7SCAN 顺便服务策略 7

写在最后: 7

4系统模块划分

4.1系统模块划分(说明共分成哪些程序模块,各模块功能概述)

模块划分思路说明。

哪些模块需要独立成线程?

模块关系图,独立线程的模块要用红色标记出来!参考如下图例。

1.模块名称 io.c

模块功能简要描述:完成对用户输入的线程的实现,根据输入更新用户请求数据结构;读取配置文件,根据指令分析类型,调用相应策略;输出当前车辆的状态和各站点的请求信息。

2.模块名称 public.c

模块功能简要描述:三个策略的共同部分,如公交车状态的更新等。

3.模块名称 datastr.c

模块功能简要描述:存放三个策略以及输出状态时用到的数据结构。

4.模块名称 strategy.c

模块功能简要描述:先来先服务策略、最短寻道优先算法策略、扫描策略的具体实现。

5.模块名称 init.c

模块功能简要描述:负责初始化整个系统。

4.2各模块接口说明

1.模块接口 init.h

本模块声明 initSystem()函数,进行程序的初始化。

2.模块接口 public.h

本模块声明了三个策略通用的几个函数,如控制运行方向的 drive(),判断是否到目的地的

isArrive()等,还有一系列共用的全局变量,如时间变量 time,策略类型 STRATEGY 等。

3.模块接口 default.h

本模块使用 define 定义了两个常量,MAX_STATION=10 和 MAX_REQUEST=10000.

4.模块接口 datstr.h

本模块定义了程序的数据结构(data structure),采用了双向循环链表模拟轨道;定义以及相关变量与函数。

5.模块接口 datastr.h

本模块声明了一系列策略共用的函数,如删除链表的 deleteList(),增加站点信息的 addINFO(),删除站点信息的 delINFO()以及判断是否结束退出程序的 isExist(),以及表示公交车信息的结构体数组 INFO 等。

6.模块接口 io.h

本模块声明了用于输入输出的函数,如读取配置文件的函数 readCommand(),获取指令的函数

getRequest(),以及输出打印公交车目前状态的函数 printStatus()等。

7.模块接口 strategy.h

本模块声明了策略一:先来先服务策略、策略二:最短时间寻道策略、策略三:扫描算法的函数。

#include "public.h"#include "datastr.h"#include "strategy.h"int time = 0;//打印状态里的时间int goal = 0;//在FCFS中是当前目标在队列中的编号,在SSTF中是目标站的编号int TOTAL_STATION = 5; //默认为5int STRATEGY = 1; //默认为1,STRAGETY值含义:1 => FCFS,2 => SSTF,3 => SCANint DISTANCE = 2; //默认为2int TOTAL_LENGTH = 10; //默认为10int stop = 0;//记录停站状态int direction = 0;void drive() {//车辆运行函数if (STRATEGY == 1) {if (direction == 1) {position = position->next;}if (direction == -1) {position = position->prev;}}if (STRATEGY == 2 || STRATEGY == 3) {if (status == 1 && stop == 0) {position = position->next;}if (status == 2 && stop == 0) {position = position->prev;}}}int cacu(int now, int sta,int mn) {int dis = fmin(abs(now - sta), fmin(abs(TOTAL_STATION - now + sta), abs(TOTAL_STATION - sta + now)));return fmin(mn, dis);}

如果觉得《基于C++的自动驾驶公交车调度系统》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。