项目 内容
课程班级博客链接 18级卓越班
这个作业要求链接 实验三-软件工程结对项目
这个课程学习目标 掌握软件开发流程,提高自身能力
这个作业在哪些方面帮助我实现了学习目标 本次实验让我对软件工程中的团队合作有了深入的学习与实践
结对方学号+姓名 201871030113-蒋鑫
结对方本次博客作业链接 蒋鑫-ch3
本项目Github的仓库链接地址 实验三

任务一

1、阅读《现代软件工程-构建之法》第3-4章,理解掌握以下概念
  • 代码风格规范

    代码风格原则是:简明,易读,无二义性。主要体现在以下几个方面。

    • 缩进:可以使用Tab键以及2、4、8等空格。个人认为依据不同是编程语言,可以使用不同的缩进方式。
    • 行宽:对行宽进行同一设置。
    • 括号:用括号清楚的表明逻辑优先级。
    • 断行与空白的{}行:主要是在多层循环中规范使用。
    • 分行:不要把多条语句放在一行上。
    • 命名:命名能够表明变量的类型及相应的语义,简洁易懂。
    • 下换线:合理使用来分隔变量名字中的作用域标注和变量的语义。
    • 大小写:多个单次组成的变量名,用大小写区分,例如著名的驼峰式命名法。
    • 注释:能够很好的解释程序是做什么的,以及为什么这样做。
  • 代码设计规范

    代码设计规范不光是程序书写格式的问题,而且牵涉到程序设计、模块之间的关系、设计模式等的方方面面。其中,不少内容又与程序设计语言息息相关。在此,主要讨论了一下一些通用的原则。

    • 函数:能过很好的完成一件事。
    • goto:函数最好有单一的出口,可以使用goto。
    • 错误处理:预留足够的时间,使用的方法包括参数处理和断言。
    • c++类的处理:注意类、classvc.struct、公共/保护/私有成员、数据成员、虚函数、构造函数、析构函数、new和delete、运算符、异常处理、类型继承等的规范设计。
  • 代码复审
    • 定义:即代码能否在代码规范的框架内正确地解决了问题。
    • 目的:提出代码编码错误,发现逻辑错误、算法错误、潜在的和回归性错误,发现可能需要改进的地方,互相传授经验。
  • 结对编程
    • 即软件工程的所有部分都由一对程序员一起完成。包括两个角色:驾驶员(控制键盘输入)、领航员(起到领航、提醒的作用)。结对编程是个相互学习、相互磨合的渐进过程,优质的结对编程具有1+1>2的效果。

任务二

1、结对方博客链接

蒋鑫-实验二

2、结对方Github项目仓库链接

jx1024-ch2

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 实例数据集算法实验平台》项目报告的更多相关文章

  1. 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  2. 201871030110-何飞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030110-何飞 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 ...

  3. 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...

  4. 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...

  5. 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...

  6. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  7. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  8. 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  9. 201871030127-王明强 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.熟悉PSP流程2. 熟悉github操作3.加深对D{0-1}问题的解法的理解4.熟悉ja ...

随机推荐

  1. mdn & remove & removeChild

    mdn & remove & removeChild Element https://developer.mozilla.org/en-US/docs/Web/API/Element ...

  2. Flutter ReorderableListView 可拖拽的列表

    import 'package:flutter/material.dart'; import 'dart:math' as math; void main() => runApp(MyApp() ...

  3. 创新全球算力生态价值,SPC算力生态强势来袭!

    当前,区块链技术已经到了一个新的时代,即3.0时代.在区块链3.0时代,区块链技术迎来了数字经济革命,各行各业也在积极寻找与区块链能够融合的切入点.而随着区块链的愈加成熟,区块链技术也愈加被更多的人应 ...

  4. 什么是NGK算力挖矿?怎么使用USDN购买算力?

    NGK公链项目即将正式上线,NGK项目中重要生态NGK算力挖矿也将启动,正式开启DPOSS挖矿.因为具有低能耗,低搭建费用,高收益等特点,可以想象如果正式上线必将引起行业瞩目. NGK算力挖矿项目为N ...

  5. 聊一下PBN程序图例中的XTT

       PBN航路点的定位容差用XTT与ATT来表示,ATT=0.8*XTT.保护区半宽用1.5*XTT+BV计算得到,BV值在不同的航段取值不同. 对于A至E类航空器,距ARP 30nm以外BV值为2 ...

  6. Spring 注解(二)注解工具类

    本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...

  7. ============================================ 新的开始(前后端分离项目学习Vue+DRF)

  8. Guava - LoadingCache实现Java本地缓存

    前言 Guava是Google开源出来的一套工具库.其中提供的cache模块非常方便,是一种与ConcurrentMap相似的缓存Map. 官方地址:https://github.com/google ...

  9. Java 面向对象 05

    面向对象·五级 package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放      * 包其实就是文件夹 * B:包的概述     举例:        ...

  10. Python2021哔哩哔哩视频爬取

    一.找到想要爬取的视频,进入网页源代码 在网页源代码里面可以很容易的找到视频各种清晰度的源地址 二.对地址发送请求 如果对视频源地址发送get请求会返回403 通过按F12进入开发者工具分析 发现并不 ...