项目 内容
课程班级博客链接 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. HTML5 Server-Sent Events

    HTML5 Server-Sent Events SSE demo https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_sse htt ...

  2. JPG学习笔记4(附完整代码)

    #topics h2 { background: rgba(43, 102, 149, 1); border-radius: 6px; box-shadow: 0 0 1px rgba(95, 90, ...

  3. Linux下部署Apache+PHP

    Linux下部署Apache+PHP 编辑于2021-02-19 本文中Apache配置文件目录为/etc/httpd/conf/httpd.conf,PHP安装目录为/usr/local/php 一 ...

  4. 微信小程序(一)-工具创建和结构配置说明 Stable Build

    按装前特别说明: windows最好下载32位的,不然用到用到后面就出现"网络连接失败",然后就登录不上去了,打不开编辑器了! 问题 : 微信开发者工具网络连接失败, " ...

  5. 使用PowerDesigner进行数据库设计并直接把设计好的表导出相应的建表语句

    Power Designer:数据库表设计工具 PowerDesigner是Sybase公司的一款软件,使用它可以方便地对系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用PowerDesig ...

  6. 使用python进行接口自动化测试,批量执行测试用例

    工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...

  7. pytorch中多个loss回传的参数影响示例

    写了一段代码如下: import torch import torch.nn as nn import torch.nn.functional as F class Test(nn.Module): ...

  8. 剑指 Offer 17. 打印从1到最大的n位数

    剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...

  9. LeetCode-重建二叉树(前序遍历+中序遍历)

    重建二叉树 LeetCode-105 首次需要知道前序遍历和中序遍历的性质. 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建. 本题的难点 ...

  10. CCF(JSON查询:40分):字符串+模拟

    JSON查询 201709-3 纯字符串模拟,考的就是耐心和细心.可惜这两样我都缺... #include<iostream> #include<cstdio> #includ ...