201971010230-孟姣姣 实验三 软件工程结对项目
作者:互联网
3.1需求分析陈述
本项目要求设计开发一款{0-1}KP 实例数据集算法实验平台,该平台具有实例数据读写、示例数据排序、使用不同算法求解0-1背包问题、以及日志记录等功能。除此之外,该平台还必须具备以下要求。
(1){0-1}KP 实例数据集需存储在数据库;
(2)平台可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据;
(3)人机交互界面要求为GUI界面(WEB页面、APP页面都可);
(4)查阅资料,设计遗传算法求解{0-1}KP,并利用此算法测试要求;
(5)附加功能:除(1)-(4)外的任意有效平台功能实现。
3.2软件设计说明。
本系统采用B/S结构实现,前端采用Web界面实现,后端使用Springboot实现。前端部分由欢迎界面和主界面两个界面构成,主界面由数据展示、散点图绘制、算法求解和日志记录四个部分组成。后盾由控制层、服务层以及Dao经典MVC三层结构组成。
3.3软件实现及核心功能代码展示:
系统前端项目如下图所示,一共包含index.html和home.html两个文件,index.html是欢迎界面文件,页面中主要功能是初始化,当用户点击进入系统按键时,可以访问后端,实现数据初始化操作。home.html是主界面文件,该界面核心代码就是散点图的绘制,实验二中散点图是通过java实现,本次界面的前端是Web界面,所以散点图需要在Web界面绘制,这里使用d3框架实现,核心代码如下:
点击查看代码
function draw() {
var calculateElement = document.getElementById("calculate");
var width = 500;
var height = 490;
var padding = {
left: 30,
right: 30,
top: 30,
bottom: 30
};
var svg = d3.select("#part")
.append("svg")
.attr("width", width)
.attr("height", height);
var xScale = d3.scale.linear()
.domain([0, 1.2 * d3.max(dataset, function(d) {
return d[0];
})])
.range([0, width - padding.left - padding.right]);
var yScale = d3.scale.linear()
.domain([0, 1.2 * d3.max(dataset, function(d) {
return d[1];
})])
.range([height - padding.top - padding.bottom, 0]);
var circle = svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("fill", "black")
.attr("cx", function(d) {
return padding.left + xScale(d[0]); //设置圆心x坐标
})
.attr("cy", function(d) {
console.log(yScale(d[1]));
return yScale(d[1]) + padding.bottom;
//调节y的值 调了好久
//需要与设置的y轴的坐标相对应
})
.attr("r", 5); //半径
//定义x轴
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom"); //坐标轴方向
//定义Y轴
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left");
//添加X轴
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding.left + "," + (height - padding.bottom) + ")")
.call(xAxis);
//添加y轴
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding.left + "," + padding.top + ")")
// .attr("transform","translate("+padding.left+(height-padding.bottom-yAxisWidth)+")")
.call(yAxis);
}
系统后端项目如下图所示,后端部分由Demo3Controller、ProduceRepository、ProduceService、Produce、Demo3Utils、DataBean、ResultBean以及SoftwareProjectApplication八个类构成。SoftwareProjectApplication是Springboot项目的启动类,Demo3Controller、ProduceRepository、ProduceService三个类是MVC三层架构的类,Produce是实例数据的实体封装类,DataBean、ResultBean是返回结果的封装类。Demo3Utils是0-1背包问题的求解算法封装类,它里面包含DP、Greedy、Back、GA2以及FileBean五个静态内部类,分别封装动态规划、贪心、回溯、遗传算法和文件读写的业务逻辑功能。除遗传算法,其余功能核心代码上一个实验已经展示过,这里只展示遗传算法核心代码,如下所示:
点击查看代码
public void solve() {
init();
int i;
int k;
// 初始化种群
initGroup();
// 计算初始化种群适应度,Fitness[max]
for (k = 0; k < scale; k++) {
fitness[k] = evaluate(oldPopulation[k]);
// System.out.println(fitness[k]);
}
// 计算初始化种群中各个个体的累积概率,Pi[max]
countRate();
for (t = 0; t < MAX_GEN; t++) {
evolution();
// 将新种群newGroup复制到旧种群oldGroup中,准备下一代进化
for (k = 0; k < scale; k++) {
for (i = 0; i < LL; i++) {
oldPopulation[k][i] = newPopulation[k][i];
}
}
// 计算种群适应度
for (k = 0; k < scale; k++) {
fitness[k] = evaluate(oldPopulation[k]);
}
// 计算种群中各个个体的累积概率
countRate();
}
}
3.4程序运行:
欢迎截面图
主界面
数据展示功能
散点图绘制功能
问题求解和日志记录功能
数据库存储
3.5描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。(3分)
提供此次结对作业的PSP。(4分)
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。(4分)
标签:结对,scale,界面,attr,201971010230,padding,var,孟姣,d3 来源: https://www.cnblogs.com/MJJBQ/p/16055538.html