项目 内容
课程班级博客链接 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. Node.js & module.exports & exports

    Node.js & module.exports & exports https://www.cnblogs.com/xgqfrms/p/9493550.html exports &a ...

  2. Dart: List排序

    var list = <Item>[ Item(title: "item 1", isTopping: true), Item(title: "item 2& ...

  3. VAST重磅出击,NGK网络搜索量超越ETH!

    Wechat指数中,NGK超越ETH,NGK搜索指数是157648点位,单日环比上涨11.95%,ETH搜索指数是115604点位,就连区块链标杆的BTC也仅仅只有171669点位,我们可清楚的看到N ...

  4. Error Code: 1452 Cannot add or update a child row: a foreign key constraint fails

    错误: Error Code: 1452 Cannot add or update a child row: a foreign key constraint fails 错误产生情景:我向一张带外键 ...

  5. 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用

    尽人事,听天命.博主东南大学研究生在读,热爱健身和篮球,正在为两年后的秋招准备中,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 C ...

  6. HarmonyOS三方件开发指南(12)——cropper图片裁剪

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1. cropper组件功能介绍2. cropper使用方法3. cropper组件开发实现4. ...

  7. 怎么去掉右下角的thinkphp的图标

    关闭thinkphp右下角的trace可以试试以下步骤: 1.在入口文件index.php 加入 define("APP_DEBUG", false); 2.在config.php ...

  8. frame 和 iframe

    1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...

  9. Linux系统管理--part(1)

    Linux系统管理--part(1) Linux系统安装完毕,需要对Linux系统进行管理和维护,让Linux服务器能够真正英语于企业中 Linux运维的三个步骤安装.调试.启动 通过本篇文章,将学习 ...

  10. 在 Svelte 中使用 CSS-in-JS

    你即便不需要,但你可以. 注意:原文发表于2018-12-26,随着框架不断演进,部分内容可能已不适用. CSS 是任何 Web 应用程序的核心部分. 宽泛而论,如果一个 UI 框架没有内置向组件添加 ...