其他分享
首页 > 其他分享> > 201971010242-王凯英 实验二 个人项目—{01背包问题}项目报告

201971010242-王凯英 实验二 个人项目—{01背包问题}项目报告

作者:互联网

项目 内容
课程班级博客链接 2019级卓越工程师班
这个作业要求链接 软件工程个人项目
我的课程学习目标 (1)掌握软件项目个人开发流程(2)掌握Github发布软件项目的操作方法。
这个作业在哪些方面帮助我实现学习目标 (1)更加熟练git的相关操作;(2)巩固算法设计的思想(3)进一步加深对可视化的认识。
项目Github的仓库链接地址 Github仓库链接

任务一的链接任务一

姓名 链接
谢雨涵 (https://www.cnblogs.com/201971010247xyh/p/15966838.html#5025832)
张萌 (https://www.cnblogs.com/zm18/p/15954467.html#5025838)
刘转弟 (https://www.cnblogs.com/liuzhuandi/p/15977039.html#5025853)

任务二
第一章:

  1. 研发出符合用户需求的软件说明
  2. 通过一定的软件流程,在预计的时间内发布“足够好”的软件说明
  3. 并通过数据和其他方式展现所开发的软件是可以维护和继续发展的说明
  4. 能做到以上三点,就是初步学会了软件工程
    第二章:
  1. 单元测试应该在最基本的功能/参数上验证程序的正确性
  2. 单元测试应该由最熟悉代码的人(程序的作者)来写
  3. 单元测试过后机器的状态应保持不变
  4. 单元测试要快
  5. 单元测试应该产生可重复、一致的结果
  6. 独立性-单元测试的运行/通过/失败不依赖别的测试,可以认为构造数据,以保持单元测试的独立性
  7. 单元测试应该覆盖所有代码路径(100%的代码覆盖率不等于100%的正确性)
  8. 单元测试应该集成到自动测试的框架中
  9. 单元测试必须和产品代码一起保存维护
  1. 不局限于某一种软件技术,而是着眼于软件的开发流程
  2. 不依赖考试,而是要靠工程师自己收集数据,然后分析提高依赖于数据
  3. PSP的目的是记录工程师如何完成实现需求的效率,而不是记录顾客对产品的满意度。
  1. 可正确读入实验数据文件的有效D{0-1}KP数据;
  2. 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
  3. 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
  4. 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
  5. 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
PSP2.1 任务内容 计划完成所需要的时间(min) 实际完成所需要的时间(min)
Planning 计划 27 30
Estimate 估计需要的时间并规划步骤 30 27
Development 开发 200 250
Analysis 需求分析 100 110
Design Spec 生成设计文档 20 20
Design Review 设计复审 20 20
Coding Standard 代码规范 10 10
Design 具体设计 10 10
Coding 具体编码 50 60
Code Review 代码复审 60 60
Test 测试 30 20
Reporting 报告 120 110
Test Report 测试报告 30 30
Size Measurement 计算工作量 30 20
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 40 30
/**
     * 字符串数组转int数组
     */
    private static int[] paseStringToInt(String[] splitString) {
        int[] ints = new int[splitString.length];
        for (int i = 0; i < ints.length; i++) {
            ints[i] = Integer.parseInt(splitString[i]);
        }
        return ints;
    }

    /**
     * 字符串分割转存为字符数组
     */
    private static String[] convertStrToArray(String str) {
        String[] strArray = null;
        strArray = str.split(","); //拆分字符为"," ,然后把结果交给数组strArray
        return strArray;
    }

读文件模块代码

/**
     * 读取数据
     */
    public static int readTxtFile(String filePath) {
        try {
            String encoding = "GBK";
            File file = new File(filePath);
            if (file.isFile() && file.exists()) { //判断文件是否存在
                InputStreamReader read = new InputStreamReader(
                        new FileInputStream(file), encoding);//考虑到编码格式
                BufferedReader bufferedReader = new BufferedReader(read);
                String lineTxt = null;
                profitList = new ArrayList<>();
                weightList = new ArrayList<>();
                volumeStringList = new ArrayList<>();
                while ((lineTxt = bufferedReader.readLine()) != null) {
                    if (lineTxt.contains("the cubage of knapsack is")) {
                        volumeStringList.add(lineTxt);
                    }
                    if (lineTxt.equals("The profit of items are:")) {
                        String profit = bufferedReader.readLine();
                        profitList.add(profit);
                    }
                    if (lineTxt.equals("The weight of items are:")) {
                        String weight = bufferedReader.readLine();
                        weightList.add(weight);
                    }
                }
                read.close();
                return 1;
            } else {
                System.out.println("找不到指定的文件");
                return 0;
            }
        } catch (Exception e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }
        return 1;
    }

绘制散点图模块代码

/**
     * 绘制图表
     */
    public static int drawchart(int[] profit, int[] weight) throws IOException {

        if (profit.length != 0 && weight.length != 0) {
            //设置散点图数据集
            XYSeries firefox = new XYSeries("weight/profit");
            for (int i = 0; i < profit.length; i++) {
                firefox.add(profit[i], weight[i]);
            }
            //添加到数据集
            XYSeriesCollection dataset = new XYSeriesCollection();
            dataset.addSeries(firefox);
            //实现简单的散点图,设置基本的数据
            JFreeChart freeChart = ChartFactory.createScatterPlot(
                    "数据散点图",// 图表标题
                    "weight",//y轴方向数据标签
                    "profit",//x轴方向数据标签
                    dataset,//数据集,即要显示在图表上的数据
                    PlotOrientation.VERTICAL,//设置方向
                    true,//是否显示图例
                    true,//是否显示提示
                    false//是否生成URL连接
            );
            //以面板显示
            ChartPanel chartPanel = new ChartPanel(freeChart);
            chartPanel.setPreferredSize(new java.awt.Dimension(560, 400));
            //创建一个主窗口来显示面板
            JFrame frame = new JFrame("Chart");
            frame.setLocation(500, 400);
            frame.setSize(600, 500);
            //将主窗口的内容面板设置为图表面板
            frame.setContentPane(chartPanel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            return 1;
        } else {
            return 0;
        }
    }

在读取的数据中选择某一项数进行按照重量比进行非递增排序

分别对于一组数据进行回溯算法和动态规划算法进行计算最优解,并将其结果保存至文件中

结果显示

标签:01,String,int,单元测试,profit,201971010242,王凯英,new,数据
来源: https://www.cnblogs.com/201971010242wang/p/15984060.html