diff --git a/README.md b/README.md index ad20e2f..92be736 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,22 @@ -# 项目名称 +# 机场起降模拟系统 董函铄 胡煜男 于博 袁楷昊 -**摘要**:本项目针对在机场中飞机的降落或起飞问题,实现了对处理的飞机总数进行统计、飞机降落或起飞请求等功能。为了有效地存储和处理飞机总数,请求降落或起飞的飞机数,接受起飞或降落的飞机数,拒绝起飞或降落的飞机数,实际起飞或降落的飞机数等数据,采用了线性表、队列、排序、随机数等数据结构。为了解决时间单位内,飞机的降落或起飞问题,采用了c++算法,算法效率中等,项目的整体效果较好。 +**摘要**:本项目针对在机场中飞机的降落或起飞问题,实现了对处理的飞机总数进行统计、飞机降落或起飞请求等功能。为了有效地存储和处理飞机总数,请求降落或起飞的飞机数,接受起飞或降落的飞机数,拒绝起飞或降落的飞机数,实际起飞或降落的飞机数等数据,采用了线性表、队列、排序、随机数等数据结构。为了解决时间单位内,飞机的降落或起飞问题,采用了c++、线性表、队列、排序算法,算法效率中等,项目的整体效果较好。 任务分工及完成情况: - -| 任务 | 人员 | +| 任务 | 人员 | |---|---|---|---|---| -| 文档资料查询 | 胡煜男 、袁楷昊 | -| 文档汇总 | 董函铄、胡煜男 | -| 代码资料查询 | 董函铄、于博、胡煜男、袁楷昊 | -| 代码开发 | 于博、董函铄、胡煜男、袁楷昊 | -| 代码测试 | 袁楷昊、胡煜男 | +| 文档资料查询 | 胡煜男 、袁楷昊 | +| 文档汇总 | 董函铄、胡煜男 | +| 代码资料查询 | 董函铄、于博、袁楷昊 | +| 代码开发 | 于博、董函铄、胡煜男、袁楷昊 | +| 代码测试 | 袁楷昊、于博 | 工作量占比: - | 董函铄 | 胡煜男 | 于博 | 袁楷昊 | |---|---|---|---|---| | 25 | 25 | 25 | 25 | @@ -34,19 +32,19 @@ 机场只有一个跑道,准备降落的飞机和准备起飞的飞机分别组成一个队列,排队等待降落和起飞。 -机场只有一个跑道,准备降落的飞机和准备起飞的飞机分别组成一个队列,排队等待降落和起飞。 +本项目涉及的对象主要包括飞机、跑道,等待降落和起飞的队列。 ## 1.3 需求分析 ### (1)输入和输出 -####输入: +#### 输入: 请输入飞机场运行的时间。 请输入降落和起飞队列最多容纳的飞机数。 请输入平均每个单位时间请求降落的飞机数。 请输入平均每个单位时间请求起飞的飞机数。 -####输出: +#### 输出: x号时间x号飞机降落了,等了x个单位时间。 x号时间x号飞机飞走了,等了x个单位时间。 x号时间没有飞机降落,也没有飞机起飞,此时跑道为空。 @@ -90,7 +88,6 @@ ``` 输出: - ##0号时间## 没有飞机降落,也没有飞机起飞,此时跑道为空。 @@ -136,37 +133,86 @@ #### (2)相关数据的输入: 输入飞机场运行的时间、降落和起飞队列最多容纳的飞机数、平均每个单位时间请求降落的飞机数和平均每个单位时间请求起飞的飞机数。 #### (3)处理已经在队列里的飞机: - - +根据所给的条件进行判断,输出几号时间几号飞机降落了,等了多少个单位时间或者几号时间几号飞机飞走了,等了多少个单位时间或者几号时间没有飞机降落,也没有飞机起飞,此时跑道为空。 +#### (4)处理请求: +根据条件进行判断,是否同意飞机的降落或起飞请求。如果同意降落,则输出几号飞机请求降落,并进入降落队伍,如果不同意降落,则输出几号飞机请求降落但被拒绝了;如果同意起飞,则输出几号飞机请求起飞,并进入起飞队伍,如果不同意起飞,则输出几号飞机请求起飞但被拒绝了。 +#### (5)数据汇总: +最后统计并输出在本次运行中处理的飞机总数,请求降落的飞机数,请求起飞的飞机数,接受降落的飞机数,接受起飞的飞机数,拒绝降落的飞机数,拒绝起飞的飞机数,实际降落的飞机数,实际起飞的飞机数,仍在等待降落的飞机数,仍在等待起飞的飞机数,跑道空闲时间占比,平均等待降落时间,平均等待起飞时间。 ## 2.2 数据结构设计 -首先,分析对比几种可选的数据结构设计方案。如图可以采用邻接矩阵,也可以采用邻接表,表示集合可以用普通的查找表,还可以用不相交集。给出每一种设计方案的特点(优势、不足等)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。 +以下是用到的数据结构: -### (1)xxx结构 +飞机:设计一个结构体或类来表示飞机,包括飞机的编号、起降状态、起飞时间、降落时间、所属航班等信息。 -给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。多个数据结构,逐一列出。 +航线:设计一个结构体或类来表示航线,包括航班编号、起降机场、航班状态、预计起飞时间、预计降落时间等信息。 -### (2)xxx结构 +排队队列:设计一个队列结构来存储飞机的起飞或降落排队队列信息。 -给出核心数据结构的设计,包括文字描述和示意图。讲清楚数据是如何组织的。 +栈:用来存储已经起飞或降落的飞机信息,方便回退操作。 +### (1)queue队列结构 +设计一个队列结构来存储飞机的起飞或降落排队队列信息。 +``` +queue q1; //q1是准备降落的飞机队列 +queue q2; //q2是准备起飞的飞机队列 +``` + +### (2)Random结构 +生成随机数: +``` +class Random{ + public: + Random(bool pseudo=true); + double random_real(); + int poisson(double mean); + private: + int reseed(); + int seed, + multiplier,add_on; +}; +``` ### ## 2.3 算法设计 -首先,分析对比几种可选的算法设计方案。如是否排序,广度优先或深度优先搜索等。给出每一种设计方案的特点(优势、不足)。然后,综合考虑各种因素(空间、时间、乃至团队成员的水平等),给出你的选择。 - -### (1)XXX算法 - -给出核心算法的设计,包括伪代码或流程图。多个核心算法,逐一列出。只列举解决问题的核心算法,重点讲清楚是如何解决问题的。 - -### (2)XXX算法 - -给出核心算法的设计,包括伪代码或流程图。 - +### (1)排队算法 +对于需要进行起降的航班,需要按照先来先服务的原则进行排队。使用队列来实现队列算法,确保飞机的起降顺序正确。 +``` +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)计算时间算法 +每个航班的起飞和降落时间是需要进行计算和预测的。可以利用机场容量、飞机起降时间、飞机所属航班等信息来进行计算,预测出每个航班的起飞和降落时间。 +``` +Random::Random(bool pseudo) +{ + if(pseudo) + seed=1; + else + seed=time(NULL)%INT_MAX; + multiplier=2743; + add_on=5923; +} +``` # 3. 系统实现 该程序使用C++语言,主要用到了STL中的queue队列和cmath库中的exp()函数等。开发工具是CodeBlocks和VS Code。 @@ -278,27 +324,20 @@ int main() # 5. 总结 -概况项目和完成情况。 - -遇到的问题和解决方法。 个人小结: -成员1: - -成员2: +董函铄:在本次课程设计中,再次学习巩固了数据结构的基础知识,包括栈、队列等等;学习了数据结构的算法,例如排序算法;学习了如何规划和组织自己的代码,如何进行测试和调试。但是,学习过程中也遇到了一些问题和挑战。例如,有些算法可能很抽象,需要反复理解和练习,编码中也可能会遇到很多错误和异常情况,需要耐心调试和解决。在我们团队的共同努力和配合下,我们解决了遇到的问题,很好地完成了本次课程设计。 -成员3: - -成员4: - -成员5: +胡煜男:总的来说,这次完成的还算比较顺利。但对于算法的改进和优化方面,需要我们更加深入思考和探索。在团队合作中,我们需要更加密切的沟通和合作,彼此理解和支持,才能解决好问题。 +于博:在合作的这段时间里,我学到了很多在学校里没有接触到的东西,而且还掌握了一些实用的技能,这些对我来说都是非常有价值的。通过做这次项目让我感受到了团队浓厚的文化氛围和积极进取的精神。同时,在这段时间里也让我对自己有了一个清醒的认识。当然,在这段制作时间里也遇到一些困难和挫折,但在我们互相的帮助下,这些问题都得到了很好地解决 +袁楷昊: # 参考文献 列出参考的文献资料,根据情况自行添加。 [1] 严蔚敏, 吴伟民. 数据结构(C语言版). 北京: 清华大学出版社, 2007. - +[2] Data Structures and Program Design in C++ (Robert Kruse, Alexander Ryba) (Z-Library) p96 模拟飞机起降