2020软件工程第五次作业05
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 |
---|---|
这个作业要求在哪 | https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10619 |
这个作业要求在哪 | 在网页页面上呈现树形结构形式的师门树 |
作业正文 | 下文 |
参考文献 | CSDN、哔哩哔哩、学堂在线、名华在线、百度文库······ |
1.链接
[唐同学的博客地址:](https://home.cnblogs.com/u/asd1422/)
[严同学的博客地址:](https://home.cnblogs.com/u/fengyunzhixia/)
[本次作业的博客地址](https://i-beta.cnblogs.com/posts/edit;postId=12706425)
GitHub项目地址:
2.明确分工
- 唐:整合资料,参与和协助我完成项目
- 严:需求分析、代码编写、UI设计
3.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
Estimate | 估计这个任务需要多少时间 | 30 | 40 |
Development | 开发 | 150 | 120 |
Analysis | 需求分析 (包括学习新技术) | 950 | 750 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 30 | 60 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 30 |
Design | 具体设计 | 60 | 90 |
Coding | 具体编码 | 480 | 600 |
Code Review | 代码复审 | 60 | 90 |
Test | 测试(自我测试,修改代码,提交修改) | 180 | 240 |
Reporting | 报告 | 30 | 30 |
Test Repor | 测试报告 | 60 | 60 |
Size Measurement | 计算工作量 | 10 | 60 |
ostmortem & Process Improvement | 事后总结, 并提出过程改进计划 | 30 | 60 |
合计 | 2200 | 2300 |
4.解题思路描述与设计实现说明
需求分析
读完题目,经过认真的分析,NABCD模型,我们将整个需求分成三个模块
- 处理输入数据模块
- TreeGraph模块
- 个人信息展示模块
算法关键
主要在于处理输入数据,首先空行分割数据,数据按组来处理,每一组在通过关键字检测提取分割,最后维护出图的邻接表。然后通过dfs递归遍历图,将数据格式修改为指定要求的构建树图数据格式,传入对应的类,渲染出关系树。
树的结构设计
因为存在多树关联的情况,那么本质上就是构造出一张DAG,但是我们经过讨论后,认为如果构造一张DAG的话,可能层级结构不是那么清晰,我们决定如果多棵树有公共节点就合并成为一颗树,每一个级别也抽象成一个点,例如"2016级博士生"也作为图上的一个点,每一人物节点的父节点先是他是什么年级的学生,再连着他的导师,公共节点拿去拆分成多个副本,这样结构关系清晰,并且也能够清楚知道他跟过哪些导师,但是每个人只保存他的最高学历。
-
上一次结对是美术作业,这次自然就是延续“学术家族树”的编程作业了。我们用思维导图构思了一下,如下:
-
树状静态结构的生成
-
代码组织与内部实现设计(类图)
-
说明算法的关键与关键实现部分流程图
-
贴出你认为重要的/有价值的代码片段,并解释
5.附加特点设计与展示
-
设计的创意独到之处,这个设计的意义
-
实现思路
-
贴出你认为重要的/有价值的代码片段,并解释
-
实现成果展示
6.在博客中给出目录说明和使用说明
-
说明你的目录是如何组织的
-
测试人员如何运行你的网页
7.单元测试
-
说明你们选用的测试工具,是如何学习单元测试的,能出一份你自己的简易教程吗?
-
展示出项目部分单元测试代码,并说明测试的函数
-
说明构造测试数据的思路,你是如何考虑各种情况的?你如何考虑将来测试人员的***难?
-
ps:上一次编程作业是比较欠缺的部分,请同学们认真完成此次单元测试,请看附录部分说明。
8.贴出Github的代码签入记录
- 请合理记录commit信息
9.遇到的代码模块异常或结对困难及解决方法
- 问题描述
选择如何建成一棵树
我觉得大多数人在看到题目的时候都没什么头绪,毕竟以树的结构直接显示出来数据大多数都没有经验,所以大家都在这个问题纠结。一开始是想用bootstrap,毕竟这是助教推荐的,我也不知道这个能不能实现,但也就先学。边学别实现,虽然效率不是很好。
问题二
处理数据
本次作业需要使用框架,而框架对于数据的传入格式有着非常严格的要求,把传入的数据处理成框架所需要的比较困难,我们采用层层处理,像剥洋葱一样,将数据分成多步慢慢处理,提取出其中需要的并转化为固定的格式
问题三
合成树
对于每一大块数据会生成一个三层的树,如果只是把一组组数据单独的显示成一颗颗树,其中不乏有联系的节点,但那样树节点有许多的关系都没有体现出来,而把它们连接起来就格外的困难,在这里我们首先在处理数据的同时记录每个节点的父亲节点,由此可以将树的关系搭建起来,在这里我们首先在处理数据的同时记录每个节点的父亲节点,由此可以将树的关系搭建起来,再使用深搜逐步将数据串起来,将零散的数据合并为一整个树
有何收获
10.评价你的队友
值得学习的地方:
- 长路漫漫,队友作伴
自己需要改进的地方:
- 做事比较没有效率,一些简单的东西都要上网去看视频从头学到尾,这样的方式虽然好但是效率不高。我给出的意见是直接看官网样例或者API,实在不懂再去看视频解释,这样才能发挥最大效益。