软件工程个人项目
项目概况 |
内容 |
---|---|
班级博客链接 | 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展示
Planning |
计划 |
||
估计这个任务需要多少时间,并规划大致工作步骤 |
|||
Developement |
开发 |
||
需求分析(包括学习新技术) |
|||
生成设计文档 |
|||
设计复审(和同事审核设计文档) |
|||
代码规范(为目前的开发制定合适的规范) |
|||
具体设计 |
|||
具体编码 |
|||
代码复审 |
|||
测试(自我测试,修改代码,提交修改) |
|||
Reporting |
报告 |
||
测试报告 |
|||
设计工作量 |
|||
事后总结,并提出过程改进计划 |
任务9:项目上传
任务10:经验分享
在此次项目实施过程中,遇到了很多问题,例如C++的图形绘制问题,之前从来没有接触过,通过上网查找资料学习将解决方案加入项目中,也遇到了实际实施过程中花费的时间比计划要长得多,原因在于编码能力还不过硬,经验较少,还需多加学习练习。