201871030137-杨钦颖 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

201871030137-杨钦颖 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客链接 班级连接
这个作业要求链接 作业连接
我的课程学习目标 1、掌握软件项目个人开发流程。
2、掌握Github发布软件项目的操作方法。
这个作业在哪些方面帮助我实现学习目标 1、实战使用了Github项目仓库,更加熟悉了Github的使用方法。
2、基本完成了个人项目的开发,掌握了项目开发流程。
项目Github的仓库链接地址 仓库连接

任务1:作业互评

任务2:阅读《构建之法》,掌握PSP流程

  • PSP 的特点:
    • 不局限于某一种软件技术 (如编程语言), 而是着眼于软件开发的流程, 这样不同应用的工程师可以互相比较。
    • 不依赖于考试, 而主要靠工程师自己收集数据, 然后统计提高。
    • 在小型,初创的团队中, 高质量的项目需求很难找到,这意味着给程序员的输入质量不高,在这种情况下, 程序员的输出 (程序/软件) 往往质量不高, 然而这并不能全部由程序员负责。

任务3:个人项目开发

需求分析

  应用动态规划算法或回溯算法实现 D{0-1} KP问题。其中D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大。

功能设计

  • 可正确读入实验数据文件的有效D{0-1}KP数据;
  • 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
  • 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
  • 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
  • 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。

设计实现

测试运行

  • 读取文件有效数据
  • 绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图
  • 对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序
  • 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位)
    • 动态规划算法
    • 回溯算法
  • 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
    • 动态规划算法
    • 回溯算法

代码展示

  • 动态规划算法
def bag(n, c, w, v):
    value = [[0 for j in range(c + 1)] for i in range(n + 1)]
    for i in range(1, n + 1):
        for j in range(1, c + 1):
            value[i][j] = value[i - 1][j]
            if j >= w[i - 1] and value[i][j] < value[i - 1][j - w[i - 1]] + v[i - 1]:
                value[i][j] = value[i - 1][j - w[i - 1]] + v[i - 1]
    return value
  • 回溯算法
  def backtrack(i):
      global bestV,bestx,currV,currW,x
      if i>= n:
          if bestV<currV:
              bestV = currV
              bestx = x[:]
      else:
          if currW+w[i]<=c:
              x[i]=1
              currW += w[i]
              currV += v[i]
              backtrack(i+1)
              currW -= w[i]
              currV -= v[i]
          x[i]=0
          backtrack(i+1)

总结

  本次实验较为复杂,在实验中我遇到了很多问题,如:在绘制散点图时不能正确导入需要的库、对两种算法的模糊记忆、GitHub无法正常使用等等,这些问题都在我实现项目的过程中耗费了大量的时间。目前已经基本完成了老师提出的要求,学到了很多,同时也意识到了我还有很多需要学习的地方,还需要做到温故而知新。

PSP展示

PSP 各个阶段 自己预估的时间 (分钟) 实际的记录 (分钟)
计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 10 10
开发 (包括下面 8 项子任务) 1440 1030
· 需求分析 (包括学习新技术、新工具的时间) 40 30
· 生成设计文档 (整体框架的设计,各模块的接口,用时序图,快速原型等方法) 30 20
· 设计复审 (和同事审核设计文档,或者自己复审) 20 20
· 代码规范 (为目前的开发制定或选择合适的规范) 10 10
· 具体设计(用伪代码,流程图等方法来设计具体模块) 60 50
· 具体编码 600 500
· 代码复审 180 100
· 测试(自我测试,修改代码,提交修改) 500 300
报告 60 60
测试报告(发现了多少bug,修复了多少) 20 20
计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) 20 20
事后总结, 并提出改进计划 (包括写文档、博客的时间) 20 20

任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中

任务5:完成个人项目报告博文作业

  • 已完成博客

写在后面

  • 用python绘制散点图时要注意的

    • 当我们用python绘制散点图时需要以下语句添加相应库
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
  • 在运行程序前首先需要下载matplotlib库,这时我们要做的是打开cmd窗口,输入python -m pip install matplotlib,单机回车即可(有时会出现报错,一种可能是网速太慢不能支持库继续下载,还有一种可能是出现error报错,这时只需要将error中的提示语句输入并单击回车即可),当提示Successfully时就安装成功啦。
posted @ 2021-03-31 08:22  201871030137-杨钦颖  阅读(72)  评论(1编辑  收藏  举报