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的效果。
最新文章
- [Z]CS权威会议
- aopalliance.jar —— 下载地址
- setTimeOut() 和 setTimeInterval()
- The 9th Zhejiang Provincial Collegiate Programming Contest->;Problem D:D - Draw Something Cheat
- Java 反射学习笔记
- 开源欣赏wordpress之文章新增页面如何实现。
- windows phone (25) Canvas元素B
- 解剖 Elasticsearch 集群 - 之三
- warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
- zabbix监控elasticsearch
- xlwt模块
- centos-linux热拔插scsi硬盘
- 【移动端debug-5】可恶的1px万能实现方案
- eclipse svn最新更新地址
- SQL入门教程
- iptables的4表5链(未完)
- [POI2009]WIE-Hexer
- React.js学习小结
- tornado 初学
- Servlet 2.4 规范之第三篇:Servlet生命周期
热门文章
- js 在浏览器中使用 monaco editor
- 2021 NGK生态所体验好、交易快 引人注目!
- 「NGK每日快讯」2021.2.4日NGK公链第93期官方快讯!
- Datahero Inc利用区块链溯源,造福各行各业
- std::vector与std::list效能对比(基于c++11)
- fixed实现遮罩层,小程序
- C#从1970年开始到现在时间的总秒数
- 构建Docker私有仓库
- CentOS7安装Kibana7.9.2
- 免费的图片校正及漂白专业工具PicGrayRemover 0.96,专业去除文档图片黑底麻点杂色,还你一个清晰的文本。