201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
| 项目 | 内容 |
|---|---|
| 课程班级博客链接 | 18级卓越班 |
| 这个作业要求链接 | 实验三-软件工程结对项目 |
| 这个课程学习目标 | 掌握软件开发流程,提高自身能力 |
| 这个作业在哪些方面帮助我实现了学习目标 | 本次实验让我对软件工程中的团队合作有了深入的学习与实践 |
| 结对方学号+姓名 | 201871030113-蒋鑫 |
| 结对方本次博客作业链接 | 蒋鑫-ch3 |
| 本项目Github的仓库链接地址 | 实验三 |
任务一
1、阅读《现代软件工程-构建之法》第3-4章,理解掌握以下概念
代码风格规范
代码风格原则是:简明,易读,无二义性。主要体现在以下几个方面。
- 缩进:可以使用Tab键以及2、4、8等空格。个人认为依据不同是编程语言,可以使用不同的缩进方式。
- 行宽:对行宽进行同一设置。
- 括号:用括号清楚的表明逻辑优先级。
- 断行与空白的{}行:主要是在多层循环中规范使用。
- 分行:不要把多条语句放在一行上。
- 命名:命名能够表明变量的类型及相应的语义,简洁易懂。
- 下换线:合理使用来分隔变量名字中的作用域标注和变量的语义。
- 大小写:多个单次组成的变量名,用大小写区分,例如著名的驼峰式命名法。
- 注释:能够很好的解释程序是做什么的,以及为什么这样做。
代码设计规范
代码设计规范不光是程序书写格式的问题,而且牵涉到程序设计、模块之间的关系、设计模式等的方方面面。其中,不少内容又与程序设计语言息息相关。在此,主要讨论了一下一些通用的原则。
- 函数:能过很好的完成一件事。
- goto:函数最好有单一的出口,可以使用goto。
- 错误处理:预留足够的时间,使用的方法包括参数处理和断言。
- c++类的处理:注意类、classvc.struct、公共/保护/私有成员、数据成员、虚函数、构造函数、析构函数、new和delete、运算符、异常处理、类型继承等的规范设计。
代码复审
- 定义:即代码能否在代码规范的框架内正确地解决了问题。
- 目的:提出代码编码错误,发现逻辑错误、算法错误、潜在的和回归性错误,发现可能需要改进的地方,互相传授经验。
结对编程
- 即软件工程的所有部分都由一对程序员一起完成。包括两个角色:驾驶员(控制键盘输入)、领航员(起到领航、提醒的作用)。结对编程是个相互学习、相互磨合的渐进过程,优质的结对编程具有1+1>2的效果。
任务二
1、结对方博客链接
2、结对方Github项目仓库链接
3、博客评论
点击1的连接即可查看
4、代码核查表
| 项目 | 说明 |
|---|---|
| 概要部分 | 代码易读,容易维护,但是设计不全面,功能部分实现 |
| 设计规范部分 | 代码设计遵从日常模式,没有无用的代码清除,可以下载到本地运行 |
| 代码规范部分 | 变量命名不规范 |
| 具体代码部分 | 没有使用调用的外部函数将各个功能进行整合,没有错误处理 |
| 效能 | 可支持大量数据运行,效能较好 |
| 可读性 | 注释全面,易读 |
| 可测试性 | 需要结合数据库进行开发 |
任务三
1、需求分析陈述
D{0-1}KP问题可以采用动态规划算法,回溯算法以及遗传算法等多种算法来解决,每一种算法解决D{0-1}KP问题所消耗的时间和空间都有所不同,为了方便用户快速的选择某种算法来解决D{0-1}KP问题并且比较每一种算法执行时所消耗的时间和空间,所以我们试图开发一个D{0-1}KP实例数据集算法实验平台,以便用户能够快速的选择某种算法来解决D{0-1}KP问题并且比较出哪种算法更高效。
2、软件设计说明
在实验二-个人项目的基础上进行开发;
人机交互界面通过python来编写GUI界面;
将D{0-1}KP实例数据集存储在数据库,在GUI界面可进行数据的查询;
输入需要绘制散点图或者需要排序的数据集以及数据项后进行散点图的绘制或者数据的排序;
平台动态嵌入有效的D{0-1}KP实例求解算法,并且可以保存算法实验日志数据;
添加遗传算法。在原来个人项目的基础上添加遗传算法,在GUI界面上添加遗传算法的选择按钮。
3、核心功能代码展示
连接生成数据库
list2=[]#存放重量
list3=[]#存放价值
for i in message1:
str1=i[:-2].split(',')
list1=[]
for j in str1:
list1.append(int(j))
list2.append(list1)
for i in message2:
str1=i[:-2].split(',')
list1=[]
for j in str1:
list1.append(int(j))
list3.append(list1) for i in range(len(list2)):
for j in range(len(list2[i])):
c.execute('insert into bp (weight,value) values (?,?)',(list2[i][j],list3[i][j]))
ok=0
for i in range(p):
xx1=10**(i+1)
ok=3*xx1+ok
xx1=10**(p+1)
ok1=3*xx1
c.execute('select * from bp limit ?,?',(ok,ok1))
result=c.fetchall()
list11=[]
list22=[]
for i in range(len(result)):
list11.append(result[i][0])
list22.append(result[i][1])
使用数据库进行查询
def find(result=[]):
win1 = tkinter.Toplevel()
win1.title('查询数据')
win1.geometry('500x300')
sw = win1.winfo_screenwidth()
sh = win1.winfo_screenheight()
win1.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2)) tkinter.messagebox.showinfo("结果如下",result)
win1.destroy()
散点图的绘制
def paint(list11=[],list22=[]):
import numpy as np
import matplotlib.pyplot as plt
plt.scatter(list11,list22)
plt.show()
数据排序
def sort(list11=[],list22=[]):
win1 = tkinter.Toplevel()
win1.title('数据排序')
win1.geometry('500x300')
sw = win1.winfo_screenwidth()
sh = win1.winfo_screenheight()
win1.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
list4=[]
for i in range(2,len(list11)+1):
if i%3==0:
list4.append(round(int(list11[i-1])/int(list22[i-1]),3))
list4.sort(reverse=True) tkinter.messagebox.showinfo("按照性价比的非递增排序",list4)
win1.destroy()
算法
for i in range(n+1):
x.append(0)
for i in range(n+1):
f.append([]) for i in range(n+1):
for j in range(c1+1):
f[i].append(0) for i in range(1,n+1):
for j in range(1,c1+1):
if j<int(list11[i]):
f[i][j]=f[i-1][j]
else:
f[i][j]=max(f[i-1][j],f[i-1][j-int(list11[i])]+int(list22[i]));
4、运行测试
依照数据库进行查询

散点图的绘制

数据排序

算法选择

5、结对过程
由于我两在同一宿舍,沟通方便,所以没有讨论时候的照片。
6、结对作业PSP展示
| PSP各个阶段 | 预估时间(min) | 实际时间(min) |
|---|---|---|
| 计划 | 20 | 40 |
| 开发 | 560 | 560 |
| 需求分析 | 20 | 20 |
| 生成设计文档 | 30 | 20 |
| 设计复审 | 30 | 30 |
| 代码规范 | 30 | 40 |
| 具体设计 | 30 | 20 |
| 具体编码 | 360 | 400 |
| 代码复审 | 30 | 30 |
| 测试 | 30 | 20 |
| 报告 | 180 | 200 |
| 测试报告 | 120 | 120 |
| 计算工作量 | 30 | 30 |
| 事后总结 | 30 | 50 |
| 总共花费的时间 | 760 | 800 |
7、小结感受
随着博客的总结,我们的团队合作项目告一段落。这次要求实现的功能是在实验二的基础上进行一系列的改进,加入了数据库和GUI界面编程。由于我们二人是舍友,项目进行期间也是方面沟通,但同时没有留下什么聊天的截图啥的。最后,通过我两的合作,能够正确实验使用数据库的连接以及GUI界面编程。但是知识水平能力有限,界面不够美观,功能不全面。由于对该问题认识的不全面,导致算法运行依然有误。整个项目开发过程,我深深的认识到了团队合作的好处,我们互帮互助,共同协作,共同进步,带来了有1+1>2的效果。
201871010113-贾荣娟 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告的更多相关文章
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...
- 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...
- 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...
随机推荐
- 软件工程中的CI&CD
wiki 在软件工程中,CI/CD或CICD通常是指持续集成以及持续交付或持续部署的组合实践 持续集成 在软件工程中,持续集成(CI)是每天将所有开发人员的工作副本合并到共享主线中的一种做法.[1] ...
- Mybatis-03 配置解析
Mybatis-03 配置解析 配置解析 1.核心配置文件 mybatis-config.xml: configuration(配置) properties(属性) settings(设置) type ...
- 创建gitHub账户并配置秘钥
1. 登录注册地址 https://github.com/ 2.点击注册 Sign up 3.输入邮箱 密码 进行注册 4.注册成功后,登录邮箱验证 .然后通过邮箱和密码登录gitHub.设置 set ...
- 【ZeyFraのJavaEE开发小知识02】MybatisPlus&ElementUI
1.关于如何获得Mybatis-Plus在插入对应为自增长主键但并未对该主键赋值的实体类之后其主键值 对应数据库中某张表并未设置主键值,但其主键为自增长类型的实体类,在使用Mybatis-Plus做i ...
- 使用syncthing和蒲公英异地组网零成本实现多设备实时同步
设想一个场景,如果两台电脑之间可以共享一个文件夹,其中一个增删更改其中的内容时,另一个也能同步更新,而且速度不能太慢,最好是免费的.那么syncthing就可以满足这个要求.syncthing可以实现 ...
- 【产品设计】linux产品设计总结笔记
Linux 预研产品设计 产品的目的: 1.综合集团内部重复性开发的工作,将多种操作系统统一到科东统一负责 2.明确技术在哪些设备上是可行的,再去拓展.一开始不做平台化产品 3.软件规划需要结合硬 ...
- PAT-1146(Topological Order)拓扑排序+判断一个序列是否满足拓扑序列
Topological Order PAT-1146 #include<iostream> #include<cstring> #include<string> # ...
- Mybatis系列全解(六):Mybatis最硬核的API你知道几个?
封面:洛小汐 作者:潘潘 2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时 ...
- 在Linux上从零开始部署前后端分离的Vue+Spring boot项目
最近做了一个前后端分离的商城项目来熟悉开发的整个流程,最后希望能有个正式的部署流程,于是试着把项目放在云服务器上,做了一下发现遇到了不少问题,借此记录一下整个部署的过程. 使用的技术栈如标题所说大体上 ...
- CVE-2019-10758-Mongo-express-远程代码执行
漏洞分析 https://xz.aliyun.com/t/7056 漏洞简介 mongo-express是一款mongodb的第三方Web界面,使用node和express开发. 如果攻击者可以成功登 ...