Compare commits

...

17 Commits
s ... master

@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "C:/mingw64/bin/gcc.exe",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}

@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/Users/31989/Desktop/机场起降模拟/jcqjmn",
"program": "c:/Users/31989/Desktop/机场起降模拟/jcqjmn/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

@ -0,0 +1,38 @@
{
"C_Cpp_Runner.msvcBatchPath": "",
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wconversion",
"-Wnull-dereference",
"-Wsign-conversion"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false
}

48
.vscode/tasks.json vendored

@ -0,0 +1,48 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "C:\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
},
{
"type": "cppbuild",
"label": "C/C++: cpp.exe 生成活动文件",
"command": "C:\\mingw64\\bin\\cpp.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

@ -1,18 +1,29 @@
# 马誉航快写
# P5机场起降模拟系统
马誉航、王振宇、王意伟、宋岱瑾
**摘要**:本项目针对什么问题,实现了哪些功能。为了有效地存储和处理何种数据,采用了何种数据结构。为了解决什么问题,采用了什么算法,算法效率如何。针对其他特定需求做了哪些工作。项目的整体效果如何,有何亮点和创新。
**摘要**:随着航空运输和长途旅游业的迅速发展,飞机的需求量在日常生活中逐渐增多,机场航班的起降协调工作也变得越来越重要。而随着时代发展,充满着主观性,不确定性的传统塔楼式人工调度已经无法满足机场的现代化需求,并且在机场规模逐渐增大,飞机班次逐渐增多的今天,使用传统的调度方式也容易出现调度冲突和信息延误等问题。针对这些问题,我们设计了这个模拟机场调度的代码,有效模拟了单位时间内飞机起降的各类数据。同时,为了进一步提高模拟数据的真实性,我们通过生成随机数,使用泊松分布等方法使得模拟结果更具有参考价值。
任务分工及完成情况。
| 任务 | 人员 |
|---|---|
| 文档资料查询 | 马誉航 、王意伟 |
| 文档汇总 | 王振宇、马誉航 |
| 代码资料查询 | 王振宇、宋岱瑾、王意伟 |
| 代码开发 | 宋岱瑾、王振宇、马誉航、王意伟 |
| 代码测试 | 王意伟、宋岱瑾 |
工作量占比。
```
宋岱瑾 王振宇 王意伟 马誉航
25 25 25 25
```
# 1. 系统分析
@ -36,150 +47,331 @@
### 1输入和输出
确定系统的主要输入和输出,如可以设定的参数,数据文件等,明确其主要作用
用户首先输入自主设定的数据,如飞机场运行时间,起飞和降落队列最多容纳的飞机数目,和单位时间内请求起飞和降落的飞机的频数,为程序设定计算的条件和初始值。程序在经过运行后输出根据输入数据所得的,本次运行的统计数据和具体情况,分析各类不同情况下的飞机的数目,跑道空闲时间占比,平均落地时间等用户所需求数据
### 2数据字典
### 2参数设定
描述系统中需要处理的所有数据包含的具体信息。例如:
1.飞机运行的时间。
2.降落和起飞队列最多容纳的飞机数。
3.平均每个单位时间请求降落的飞机数。
4.平均每个单位时间请求起飞的飞机数。
学生 = 学号 + 姓名 + 成绩
### 3生成随机数功能
### 3数据文件
rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。
```
———————————————————————————
| # include <iostream> |
| |
| using namespace std; |
| int main() |
| { |
| for(int i=0;i<10;i++) |
| { |
| cout<<rand()<<endl; |
| } |
|} |
————————————————————————————
```
### 4泊松分布功能
系统中需要读取xx数据文件以获取xx数据或者需要导出xx数据。举例说明xx数据文件的具体格式。
```c++
int Random::poisson(double mean)
{
double limit=exp(-mean);
double product=random_real();
int count=0;
while(product>limit){
count++;
product*=random_real();
}
return count;
}
```
### 4参数设定
系统开始运行时,需要设置的参数。可以用户手册的形式给出设定参数的过程,如系统提示信息和用户输入等。
# 2. 系统设计
### 5XX功能
## 2.1 概要设计
其他具体功能。
模块一:随机数的生成以及泊松分布的实现;
模块二:将起飞和降落的飞机分为两个队列并且分别处理请求;
模块三使用printf函数输出过程。
首先简要说明该功能的主要作用,可以用户手册的形式给出系统提示信息、用户输入和系统输出等。
### 6XX功能
其他功能逐项列出。
## 2.2 数据结构设计
以下是用到的数据结构:
飞机:设计一个结构体或类来表示飞机,包括飞机的编号、起降状态、起飞时间、降落时间、所属航班等信息。
# 2. 系统设计
航线:设计一个结构体或类来表示航线,包括航班编号、起降机场、航班状态、预计起飞时间、预计降落时间等信息。
## 2.1 概要设计
排队队列:设计一个队列结构来存储飞机的起飞或降落排队队列信息。
系统划分为几个模块,可以画模块图
栈:用来存储已经起飞或降落的飞机信息,方便回退操作
逐个说明每个模块的功能(输入、输出、做什么,这里不写怎么做)。
###1queue队列结构
设计一个队列结构来存储飞机的起飞或降落排队队列信息。
```
queue <struct plane> q1; //q1是准备降落的飞机队列
queue <struct plane> q2; //q2是准备起飞的飞机队列
```
###2Random结构
生成随机数:
```
class Random{
public:
Random(bool pseudo=true);
double random_real();
int poisson(double mean);
private:
int reseed();
int seed,
multiplier,add_on;
};
```
###(3)plane结构
```
struct plane{
int name;
int in_queue_time;
} plane;
```
## 2.3 算法设计
## 2.2 数据结构设计
### 1泊松分布实现随机数生成算法
```
class Random{
public:
Random(bool pseudo=true);
double random_real();
int poisson(double mean);
private:
int reseed();
int seed,
multiplier,add_on;
};
首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
int Random::reseed()
{
seed=seed*multiplier + add_on;
return seed;
}
### 1xxx结构
Random::Random(bool pseudo)
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。
{
if(pseudo)
seed=1;
else
seed=time(NULL)%INT_MAX;
multiplier=2743;
add_on=5923;
}
### 2xxx结构
double Random::random_real()
{
double max=INT_MAX + 1.0;
double temp=reseed();
if(temp<0)
temp=temp+max;
return temp/max;
}
给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。
int Random::poisson(double mean)
{
double limit=exp(-mean);
double product=random_real();
int count=0;
while(product>limit){
count++;
product*=random_real();
}
return count;
}
```
### 2排队算法
```
if(!q1.empty()){
temp=q1.front();
wait_time=i-temp.in_queue_time-1;
come_wait_time+=wait_time;
printf("\n\n##%d号时间##\n%d号飞机降落了等了%d个单位时间。\n", i, temp.name , wait_time);
q1.pop();
}
else if(!q2.empty()){
temp=q2.front();
wait_time=i-temp.in_queue_time-1;
go_wait_time+=wait_time;
printf("\n\n##%d号时间##\n%d号飞机飞走了等了%d个单位时间。\n", i, temp.name , wait_time);
q2.pop();
}
else {
printf("\n\n##%d号时间##\n没有飞机降落也没有飞机起飞此时跑道为空。\n",i);
spare_time++;
}
```
###
## 2.3 算法设计
首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。
# 3. 系统实现
#####系统使用C++语言进行开发使用VScode作为开发工具。
#####项目的文件结构如下:
c.cpp主程序文件包含程序的主函数和主要逻辑。
README.md项目文档包含程序的介绍和使用说明。
#####程序的主要函数包括:
Random():构造函数,初始化随机数生成器。
random_real()生成0~1之间的随机实数。
poisson():生成泊松分布的随机数。
main():主函数,包含程序的主要逻辑,如输入、处理、输出等。包括两个队列的入队和出队,以及每个飞机的等待时间计算和输出。
## 3.1 核心数据结构的实现
### 1XXX算法
在程序中定义了两个queue对象一个用于存储准备降落的飞机另一个则用于存储准备起飞的飞机。每个队列中存储结构体类型的plane对象表示每个飞机的编号和进入队列的时间。
给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。
### 2XXX算法
给出核心算法的设计,包括伪代码或流程图。
## 3.2 核心算法的实现
系统的核心算法主要包括泊松分布实现随机数生成算法和排队算法
# 4. 系统测试
```
——————————————————————————————————————————————
请输入飞机场运行的时间。
20
请输入降落和起飞队列最多容纳的飞机数。
5
请输入平均每个单位时间请求降落的飞机数。
0.4
请输入平均每个单位时间请求起飞的飞机数。
0.5
# 3. 系统实现
##0号时间##
没有飞机降落,也没有飞机起飞,此时跑道为空。
说明所使用的语言、开发工具等。
介绍项目的文件结构,以及主要函数的功能。
##1号时间##
没有飞机降落,也没有飞机起飞,此时跑道为空。
0号飞机请求起飞并进入起飞队伍。
## 3.1 核心数据结构的实现
描述数据结构的实现方法。
##2号时间##
0号飞机飞走了等了0个单位时间。
可以配合程序代码加以说明。如:
```cpp
struct LNode {
E data; // 数据元素
LNode *next; // 指向下一个结点的指针
};
```
##3号时间##
没有飞机降落,也没有飞机起飞,此时跑道为空。
1号飞机请求降落并进入降落队伍。
2号飞机请求起飞并进入起飞队伍。
##4号时间##
1号飞机降落了等了0个单位时间。
对该数据结构的特点进行分析。
##5号时间##
2号飞机飞走了等了1个单位时间。
3号飞机请求起飞并进入起飞队伍。
## 3.2 核心算法的实现
##6号时间##
3号飞机飞走了等了0个单位时间。
描述算法的实现方法。
可以配合程序代码加以说明。如:
##7号时间##
没有飞机降落,也没有飞机起飞,此时跑道为空。
4号飞机请求起飞并进入起飞队伍。
```cpp
// 冒泡排序
void bubble_sort(T a[], int n)
{
......
}
```
##8号时间##
4号飞机飞走了等了0个单位时间。
对该算法的时间和空间复杂度进行分析。
##9号时间##
没有飞机降落,也没有飞机起飞,此时跑道为空。
5号飞机请求起飞并进入起飞队伍。
6号飞机请求起飞并进入起飞队伍。
##10号时间##
5号飞机飞走了等了0个单位时间。
7号飞机请求起飞并进入起飞队伍。
# 4. 系统测试
描述测试的思路和方法。比如,先用小数据量进行测试,再用真实数据进行测试。
##11号时间##
6号飞机飞走了等了1个单位时间。
8号飞机请求起飞并进入起飞队伍。
9号飞机请求起飞并进入起飞队伍。
测试应考虑到输入数据的特殊情况。
给出若干测试用例,包括输入、预期结果、运行结果或是否通过测试。运行结果和预期结果一致,为通过测试。
##12号时间##
7号飞机飞走了等了1个单位时间。
10号飞机请求降落并进入降落队伍。
##13号时间##
10号飞机降落了等了0个单位时间。
11号飞机请求起飞并进入起飞队伍。
# 5. 总结
概况项目和完成情况。
##14号时间##
8号飞机飞走了等了2个单位时间。
12号飞机请求降落并进入降落队伍。
遇到的问题和解决方法。
个人小结:
##15号时间##
12号飞机降落了等了0个单位时间。
成员1
成员2
##16号时间##
9号飞机飞走了等了4个单位时间。
成员3
成员4
##17号时间##
11号飞机飞走了等了3个单位时间。
13号飞机请求降落并进入降落队伍。
成员5
##18号时间##
13号飞机降落了等了0个单位时间。
14号飞机请求起飞并进入起飞队伍。
# 参考文献
##19号时间##
14号飞机飞走了等了0个单位时间。
历经20个单位时间机场停止接收请求。
一共收到了15架飞机的请求。
一共有4架请求降落。其中有4架被接受了0架被拒绝了。
一共有11架请求起飞。其中有11架被接受了0架被拒绝了。
成功降落了4架还有0架在排队等待降落。
成功起飞了11架还有0架在排队等待起飞
轨道有25.00%的时间是空闲的。
降落平均要等0.00个单位时间。
起飞平均要等0.60个单位时间。
列出参考的文献资料,根据情况自行添加。
这个机场平均每个单位时间收到0.20个降落请求。
这个机场平均每个单位时间收到0.55个起飞请求。
————————————————————————————————————————————————————————
```
# 5. 总结
通过本次实践作业,我们不但粗浅的了解了泊松分布的含义和使用,对于离散型分布等知识也有了一定的个了解。也更加深入的了解了课堂上的知识,比如结构体和队列的构建与使用。同时经过这次实践作业,我们也初步认识了合作的重要性,和程序设计的实践作业不同,本次数据结构的实践作业明显专业性更强,目的性更加的突出,难度也随之增大,对小组中每个人都有一定的挑战,需要小组成员团结合作,各自发挥自己的长处,从代码,排版,数据的搜集和使用等方面发挥不同的作用。
# 参考文献
[1] 严蔚敏, 吴伟民. 数据结构C语言版. 北京: 清华大学出版社, 2007.
[1] CSDN C语言生成符合泊松分布离散型的随机数手写—— 10生万物
[2] CSDN 《数据结构与程序设计》队列 case study ——— airport 模拟机场调度 ——超超超超超级菜
[3] CSDN 【数据结构笔记】 队列的应用——飞机场模拟 ——勇敢琪琪

@ -25,6 +25,7 @@ int Random::reseed()
}
Random::Random(bool pseudo)
{
if(pseudo)
seed=1;
Loading…
Cancel
Save