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 ...
随机推荐
- privacy policy 隐私政策
privacy policy 隐私政策 privacy agreement css layout & ssr page flex & center & fonts demo h ...
- vue的filter用法,检索内容
var app5 = new Vue({ el: '#app5', data: { shoppingList: [ "Milk", "Donuts", &quo ...
- AdoptOpenJDK是什么?
要搞清楚AdoptOpenJDK是什么,前提条件是我们需要知道JDK是什么,OpenJDK是什么.明白了JDK和OpenJDK的关系,会容易明白什么是AdoptOpenJDK. JDK是什么? 首先, ...
- javaMail (java代码发送邮件)
第一在邮件账户设置开启以下两个 需要发送短信获取 授权码. 代码如下: package com.hjb.javaMail; import javax.mail.*; import javax.mai ...
- python模块win32com中的early-bind与lazy-bind(以Autocad为例)
1.什么是Lazy-bind模式,Early-bind模式? win32com中,Lazy-bind 模式指的是程序事先不知道对象的任何方法和属性,当对象属性,方法被调用时,程序才向对象发出一个询问( ...
- JavaScript async/await:优点、陷阱及如何使用
翻译练习 原博客地址:JavaScript async/await: The Good Part, Pitfalls and How to Use ES7中引进的async/await是对JavaSc ...
- Python函数注解
目录 函数注解概述 实际应用 inspect模块 业务代码 总结 以下内容基于Python 3x 涉及的知识前提: 建议理解Python装饰器后学习此内容 函数注解概述 函数注解可以针对函数的参数.返 ...
- 剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数 Offer 15 题目描述: 方法一:使用1逐位相与的方式来判断每位是否为1 /** * 方法一:使用1逐位与的方法 */ public class Off ...
- CCF(JSON查询:40分):字符串+模拟
JSON查询 201709-3 纯字符串模拟,考的就是耐心和细心.可惜这两样我都缺... #include<iostream> #include<cstdio> #includ ...
- python工业互联网应用实战7—业务层
本章我们演示代码是如何"进化"的,实战的企业日常开发过程中,系统功能总伴随着业务的不断增加,早期简单的代码慢慢的越来越复杂,敏捷编程中的"禅"--简单设计.快速 ...