其他分享
首页 > 其他分享> > 201971010230-孟姣姣 实验三 软件工程结对项目

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