强悍の绝巴哈

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

软件工程个人项目

项目概况
内容
班级博客链接 2019卓越工程师班
作业要求链接 实验二 软件工程个人项目
我的课程学习目标 (1)掌握软件项目个人开发流程。
(2)掌握Github发布软件项目的操作方法。
这个作业在哪些方面帮助我实现学习目标 (1)对0-1背包问题的算法有了更深入的了解。
(2)掌握了c++画图的使用。
项目Github的仓库链接地址 个人Github的仓库链接

正文

任务1:作业点评

评论链接
内容
201971020204-曹霖枫 博主条例清晰,语言简明扼要,完成情况较好。
201971010135-孙得弘 博主界面布局简洁,内容详尽,对构建之法进行了较为深入的思考
201971010246-王孜睿 博主条理清晰地完成了实验,并进行了较好的实验总结,语言简洁清晰

任务2:项目需求分析

(1)该项目应该具有数据读取和输出的功能,通过读取指定的.in文件中的数据来进行测试。
(2)该项目应该将数据可视化的功能,将读取的数据回绘制成散点图的形式令数据一目了然。
(3)该项目应该具有与用户交互的功能,使用户可以选择数据,选择算法。

任务3:项目功能设计

通过对项目进行需求分析,在项目的设计过程中给项目添加了下列功能:
(1)读取数据:在文件根目录下创建了InFile文件夹,将输入文件全部放在该文件夹下供程序读取。
(2)散点图绘制:可将读取的数据可视化为散点图。
(3)选择:可以让用户通过输入数字编号选择数据与算法。

任务4:重要函数设计

项目中较为重要的函数是三种算法的函数设计:
贪心算法:

if (i > n - 1)
{
  if ( bestValue1 < cv && cw <= c)
  {
    for (int k = 0; k < n; k++)
    x[k] = cx[k];//存储最优路径
    bestValue1 = cv;
  }
  return bestValue1;
}
cw = cw + resCapacity[i];
cv = cv + resValue[i];
cx[i] = 1;
knapstackTanXin(i + 1, n, c, resCapacity, resValue);
cw = cw - resCapacity[i];
cv = cv - resValue[i];
cx[i] = 0;
knapstackTanXin(i + 1, n, c, resCapacity, resValue);
return bestValue1;

动态规划法:

for (int i1 = 0; i1 < dataNum1; i1++)
{
  for (int j = bagCapasity1; j >= v[i1]; j--) {
    f1[j] = max(f1[j], f1[j - v[i1]] + w1[i1]);
  }
}
int temp = f1[bagCapasity1];
return temp;

回溯法:

for (int k = i3; k < n3; k++) {
  if (max3 > 0) {
    if (rescapacity23[k] <= max3) {
      if (value3 + resvalue23[k] >= result) {
        result = value3 + resvalue23[k];
      }
    }
    if ((k + 1) < n3) {
      KnapsackHuiSu(k + 1, max3 - rescapacity23[k], value3 + resvalue23[k], rescapacity23, resvalue23, n3);
    }
  }
}

任务5:测试运行




任务6:特色代码

散点图绘制:

  Graph graph = Graph(800, 640);
  graph.drawCoordinateAxis(MaxW, MaxV, MaxW/10, MaxV/10);//结合窗口合理设置(´-﹏-`;)
  graph.setPointColor(Graph::COLOR_RED);//设置点颜色
  graph.setTextColor(Graph::COLOR_BLUE);//设置文本颜色
  for (int i = 0; i < numOfData; i++) {
    point[i][0] = resCapacity[i];
    point[i][1] = resValue[i];
    graph.drawPoint(point[i][0], point[i][1]);//画点
    graph.drawNum(point[i][0], point[i][1], i + 1);//写数字
  }
  graph.setLineWidth(1);
  graph.setLineColor(Graph::COLOR_GREEN);
  graph.show();

任务7:总结

项目分为两个模块,第一个是算法模块,这个模块通过设计算法求出结果,第二个模块是绘图模块,将数据可视化为散点图更加直观。

任务8:PSP展示

PSP2.1
任务内容
计划共完成所需要的时间(min)
实际完成需要的时间(min)

Planning

计划

Estimate

估计这个任务需要多少时间,并规划大致工作步骤

10
15

Developement

开发

130
165
Analysis

需求分析(包括学习新技术)

10
10
Design Spec

生成设计文档

20
25
Design Review

设计复审(和同事审核设计文档)

15
10
Code Standard

代码规范(为目前的开发制定合适的规范)

15
10
Design

具体设计

20
30
Coding

具体编码

40
54
Code Review

代码复审

10
20
Test

测试(自我测试,修改代码,提交修改)

8
11

Reporting

报告

15
25
Test Report

测试报告

5
7
Size Measurement

设计工作量

5
8
Postmortem & Precess Improvement Plan

事后总结,并提出过程改进计划

5
10

任务9:项目上传

任务10:经验分享

在此次项目实施过程中,遇到了很多问题,例如C++的图形绘制问题,之前从来没有接触过,通过上网查找资料学习将解决方案加入项目中,也遇到了实际实施过程中花费的时间比计划要长得多,原因在于编码能力还不过硬,经验较少,还需多加学习练习。

posted on 2022-03-21 19:26  强悍の绝巴哈  阅读(58)  评论(2编辑  收藏  举报