zoukankan      html  css  js  c++  java
  • 2020软件工程作业03

    软件工程
    https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1
    作业要求
    https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10494
    作业目标
    编写程序,做单元测试
    作业正文
    https://www.cnblogs.com/lucky-6127/p/12590637.html
    参考文献
    www.baidu.com



    1、Github项目地址

    https://github.com/migu-6127/20177651



    2、PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning
    计划
    Estimate
    估计这个任务需要多少时间
    30
    30
    Development
    开发
    Analysis
    需求分析 (包括学习新技术)
    60
    240
    Design Spec
    生成设计文档
    20
    30
    Design Review
    设计复审
    10
    20
    Coding Standard
    代码规范 (为目前的开发制定合适的规范)
    30
    60
    Design
    具体设计
    120
    240
    Coding
    具体编码
    240
    540
    Code Review
    代码复审
    30
    60
    Test
    测试(自我测试,修改代码,提交修改)
    60
    120
    Reporting
    报告
    Test Repor
    测试报告
    30
    30
    Size Measurement
    计算工作量
    20
    30
    Postmortem & Process Improvement Plan
    事后总结, 并提出过程改进计划
    20
    30
    合计
    670
    1430



    3、解题思路

    • 首先将它拆分为四个模块,命令行传参、读取文件、对数据进行操作、写入文件。
    • 在针对每个模块查阅相关资料(百度解决一切~)。
    • 在一步步实现每个模块。
    • 最后将四个模块组合到一起。(哎~说起来简单,但这两周...窝都快愁秃了)



    4、实现过程

    1. 实现命令行传参这一模块,考虑到主函数中太多操作会比较混乱,所以我是设计了一个LoadArgs()实现命令行传参。具体实现是用到了Switch分支结构判断字符。

    2. 然后就是读取文件转换为二位数组进行操作了,读取文件我是参照了网上实现的,至今也没整明白字节流,字符流有是什么意思...

    3. 第三步就是对二维数组进行数独操作了,嗯...这部分我也卡了很久...本来是想定义两个标志数组对0的元素行和列不为0的数进行标记,在排除得出这个位置的值...但木有成功...最后还是参照了某位刘大佬的方法实现的。(基于我技术太差....只能实现三宫格的...)

    4. 最后就是将填完的二维数组写入到文件中。

    单元测试



    5、改进程序性能

    下面这张图片对我来说简直就像是天书...再一看代码,满框的红,我实在不知道从何下手...o(╥﹏╥)o



    6、关键代码

    (实现数独部分的代码就不拿出来了,实在是太废柴了...丢人)

    对于我来说,这次的关键代码应该是读取文件跟写入文件了...所以这里就拿出来献丑吧....

      /*
             * 读取文件
         */
    
        public static void readFile() throws Exception{
            /*
             * 相对路径
             * */
            File file=new File(inputpath);
            /*
             *字节流
             */
            FileInputStream fileInputStream = null;
            fileInputStream = new FileInputStream(file);
            /*
             * 读取文件内容
             * */
            Scanner sc = new Scanner(fileInputStream);
            for (int i = 0; i < m*n; i++) {
                for (int j = 0; j < m; j++) {
                    /*
                    取字符存入二维数组中
                     */
                    arr[i][j] = sc.nextInt();
                }
            }
        }
        /*
         * 写入文件
         */
    
        public static void writeFile() throws Exception{
            File writername = new File(outputpath);
            /*
              *字符流
             */
            FileWriter writer = new FileWriter(writername);
            /*
            输出流对象
             */
            BufferedWriter out=new BufferedWriter(writer);
            for (int i = 0; i < m*n; i++) {
                for (int j = 0; j < m; j++) {
                    out.append(arr[i][j]+" ");
                }
                /*
                txt中
    才是换行
                 */
                out.write("
    ");
                if((i-(m-1))%m==0) {
                    out.write("
    ");
                }
            }
            /*
            把缓冲区内容压入文件
             */
            out.flush();
            /*
            关闭文件
             */
            out.close();
    
        }
    

    仅支持三宫格,命令行输入以及结果如下图



    7、心里路程与收获

    别问!问就是崩溃!满脸问号,我到底是个什么废柴...
    构建之法?我看!我一定去看!
    刚拿到题目,命令行输入是什么?数独怎么解?怎么读取文件?怎么写入文件?

    百度~疯狂百度...
    被百度到一个方法...奥...试试...完了不行没得用...继续百度...
    无限循环...脑袋炸裂...最后把自己绕晕了...
    刚不过...我承认我就是个辣鸡...我就实现三宫格还不行嘛
    最后还是选择一步步慢慢来,结合之前百度到的知识点,一点点梳理,一点点尝试...
    首先命令行输入...什么?jdk运行版本与编译版本不匹配无法运行?检查了环境配置以及修改了项目jdk之后....
    什么?找不到或无法加载主类?百度百度百度...n个小时以后...原来必须要在包含.class文件的文件夹内运行...
    然后读取文件...此处省略n个小时..
    数独盘处理...我是谁?我在哪?我要干什么?我从哪开始?

    春去秋来...年复一年...终于看到了希望...
    最后代码规约检测..性能分析...单元测试...上传代码...

    虽然这两周在无止境崩溃中...但不得不承认的是...也学到了不少知识
    也深刻地认识到我就是个渣渣!



    8、评分

  • 相关阅读:
    设计模式命令模式(Command)
    设计模式责任链模式(COR)
    设计模式备忘录模式(Memento)
    设计模式中介者模式(Mediator)
    设计模式策略模式(Strategy)
    设计模式解释器模式(Interpreter)
    设计模式迭代器模式(Iterator)
    设计模式状态模式(State)
    Ext终于开始收费了
    设计模式观察者模式(Observer)
  • 原文地址:https://www.cnblogs.com/lucky-6127/p/12590637.html
Copyright © 2011-2022 走看看