项目 内容
课程班级博客链接 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. TYLER ADAMS BRADBERRY的私人投资分享

    TYLER ADAMS BRADBERRY是星盟全球投资公司(USA International Covenant 公司编号:20091457685)的创始人.投资委员会发起了15支项目基金,通过多方 ...

  2. VS Code使用Git可视化管理源代码详细教程

    前言: 随着VS Code的功能和插件的不断强大和完善,它已经成为了我们日常开发中一个必不可缺的伙伴了.在之前我曾经写过一篇SourceTree使用教程详解(一个git可视化管理神器,想要了解的话可以 ...

  3. epoll使用

    epoll通过下面3个epoll系统调用为用户提供服务. (1)epoll_create系统调用 epoll_create在C库中的原型如下: int epoll_create(int size); ...

  4. c# 全选和批量修改

    //全选 function checkAll(){ var items = document.getElementsByTagName("input"); for(var i =0 ...

  5. MySQL 常用命令手册 增删改查大法

    一.数据库操作 创建数据库 语法: CREATE DATABASE database_name; 删除数据库 删除数据库务必谨慎!因为执行删除命令后,所有数据将消失. 语法: DROP DATABAS ...

  6. Redis6.0.9主从搭建

    所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...

  7. SpineRuntime-Presentation - 基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画

    SpineRuntime-Presentation 基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画 Github地址 效果 可以在 Andro ...

  8. 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)

    剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...

  9. CMDB项目要点之技术点(面试题)

    1.单例模式 日志对象用单例模式 django admin中注册类是,用到单例模式 为什么要用单例模式 同一个对象操作 维护全局变量 + 对全局变量做一些操作 # __new__ import thr ...

  10. cocos 向左滚动公告

      properties:{ lblNotice:[cc.Node], speed:1, curtext:null }, start (){ this.getNotice(); }, getNotic ...