[课程相关]homework-09
零、前言
这次的作业比较特殊,有两种做法。由于我对网页很熟悉,所以选择网页。
细节不赘述,下面写一下这次作业的几个亮点。
一、亮点
最大的亮点就是这个页面是纯客户端的,没有服务端。也就是说所有功能都是在本地完成。
简单介绍几个技术难点:
1、本地读文件
一般情况下读文件的过程是:上传文件到服务器——服务器读文件——服务器返回文件内容。
由于没有服务端,所以要在本地读文件,我用到了ActiveX,具体可以看readText()函数。
不夸张的说,80%写网站的人不会写js本地读文件。
2、网页端运行Python代码
由于我之前的作业是用Python写的,我又不想用js重新写一遍,所以在网页端解析并运行Python代码。这里用到了一个插件——skulpt,在这个插件的帮助下可以在网页端模拟运行Python代码。
3、js多行字符串
熟悉网页的人都知道,js是不支持多行字符串的,唯一的办法是转义回车符。但是由于Python代码对格式要求很严,所以转义之后输出的代码无法运行。我采用了一个曲线救国的方法,就是先把代码写到textarea里面,然后用jquery读出来,这样就可以存到变量里了。把testarea设置为不可见,不影响美观。
4、模拟单步执行
采用的方法是先把数据跑一遍,记录下来每步的状态,然后根据当前显示步数的不同来显示。
5、自动执行
自动执行使用了一个比较巧的办法,设置了一个变量来记录是否需要自动执行,然后有一个函数每隔一秒就检测一次,如果变量为true就自动执行。然后通过按钮来改变变量值。
6、改变文件上传按钮样式
出于安全考虑,默认文件上传按钮是无法更改样式的,我采用了一个很巧的办法,就是把文件上传按钮设置为不可见,然后在另一个按钮的click事件中trigger文件上传按钮的click事件,并将文件上传按钮的onchange事件绑定到函数,这样就实现了改变文件上传按钮样式。
二、截图展示
首先看看初始界面
可以看到两种输入方式都有,并且可以选择vha参数。
测试一下文件输入:
可以看到选择好文件后,界面上就会出现矩阵以及操作按钮
我们点两下单步执行
可以看到左右的矩阵发生了变化,很直观的看出当前值以及最优值及其具体子矩阵
我们试一下手动设置参数
设置行列
点击生成矩阵
可以看到自动生成了矩阵
三、动态规划(附加题)
原理:
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问 题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省 时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。 具体的动态规划算法多种多样,但它们具有相同的填表格式。
展示:
我做了一个动态GIF图片来展示
可以很直观的看到状态转移以及记录的改变。
四、单元测试以及代码覆盖率
老师的要求是UI界面不要求单元测试,我这个整体就是一个UI界面,只不过包含了很多功能,但是本质上都是客户端代码,所以没有进行单元测试和代码覆盖率测试。
五、时间
Personal Software Process Stages |
时间百分比(%) |
实际花费的时间 (分钟) |
原来估计的时间 (分钟) |
计划 |
10% | 18 | 12 |
· 估计这个任务需要多少时间,把工作细化并大致排序 |
10% | 18 | 12 |
开发 |
85% | 153 | 102 |
· 需求分析 (包括学习新技术) |
15% | 27 | 18 |
· 设计复审 (和同事审核设计文档) |
10% | 18 | 12 |
· 代码规范 (制定合适的规范) |
5% | 9 | 6 |
· 具体设计 |
10% | 18 | 12 |
· 具体编码 |
35% | 63 | 42 |
· 代码复审 |
5% | 9 | 6 |
· 测试(自我测试,修改代码,提交修改) |
5% | 9 | 6 |
总结报告 |
5% | 9 | 6 |
总计 | 100% | 总用时 180 |
总估计的用时 120 |
[课程相关]homework-09的更多相关文章
- 【学习笔记】B站-2019-NLP(自然语言处理)之 BERT 课程 -- 相关课程笔记
BERT 课程笔记 1. 传统方案遇到的问题 BERT的核心在于Transformer,Transformer就类似seq2seq网络输入输出之间的网络结构. 传统的RNN网络:最大的问题,因为不能并 ...
- Linux及安全课程——相关链接总结
附录:学习笔记链接总结 MOOC课程学习笔记与实验: 第一周:计算机是如何工作的 第二周:操作系统是怎么工作的 -- 一个简单的时间片轮转多道程序内核代码及分析 第三周:构造一个简单的Linux系统M ...
- [课程相关]homework-04
零.准备工作 这次的作业仍然是结对编程,我们队伍的成员为:梁杰.夏天晗.谢祖三.上次我们是选择了一个时间大家聚在一起进行编程,效果不错,所以这次我们还是决定采用这种方式.由于大家平时比较忙,这周六日我 ...
- [课程相关]homework-02
一.如何组织代码 因为这个代码比较简单,用函数就足够了,个人觉得没必要用类,杀鸡不必用牛刀. 代码有点长,主要是加了很多判断参数的部分. 提取了一个公共的递归函数. 用了不少全局变量,可能当做参数传入 ...
- iOS开源库--最全的整理 分类: ios相关 2015-04-08 09:20 486人阅读 评论(0) 收藏
youtube下载神器:https://github.com/rg3/youtube-dl 我擦咧 vim插件:https://github.com/Valloric/YouCompleteMe vi ...
- 潭州课堂25班:Ph201805201 django 项目 第四十二课 后台 课程相关,用户组管理 (课堂笔记)
在线课程: 当点击进入页面时,显示所有课程 def get(self, request): courses = Course.objects.select_related('category', 't ...
- [课程相关]附加题——stack的理解
一.stack的三种解释 stack有三种解释,我个人理解如下. 1.用户自定义的stack 用户自定义的stack就是一般意义上的后进先出队列,从名字上就能理解了,stack由下向上增长,有一个顶指 ...
- [课程相关]homework-06
一.c++11 lambda /* * File: main.cpp * Author: liangjie * * Created on 2013年11月23日, 下午12:02 */ #includ ...
- [课程相关]homework-08
一.变量作用域和生命周期 #include <cstdlib> #include <iostream> using namespace std; void try_change ...
随机推荐
- 程序设计第三次作业--C++计算器初始部分
面向对象程序设计作业3--C++计算器初始部分 Github 链接:https://github.com/luojingzhao/object-oriented/tree/master/calcula ...
- Linux下安装protobuf并实现简单的客户端服务器端通信
http://code.google.com/p/protobuf/downloads/list上可以下载Protobuf的源代码. 安装步骤如下所示: 1>tar -xzf protobuf- ...
- JAVA插入数据到MySql少了8小时
这个问题,真的是找了很久. 之前以为是mysql的timezone有问题.根据网上的方法,把timezone改了,还是不起作用. 然后以为是java的问题,但试来试去java也不存在timezone不 ...
- 手把手教你玩转SOCKET模型之重叠I/O篇(下)
四. 实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却 ...
- angular实践第一弹:选项卡开发
在学习angular的过程中,实践是最好的方法. 在开发选项卡的过程中,不需要再像jquery一样以DOM操作为核心,那什么样的情况是以DOM操作为核心的Jquery的思想呢? 一想到改变什么,就想设 ...
- 关于C#中文本模板(.tt)的简单应用
这两天做项目突遇 .tt文件,之前没有接触过,so查询学习做笔记,帮助记忆和后来者. 在项目添加中点击选择文本模板 下面贴出代码,做了简单的注释 <#@ template debug=" ...
- jQuery each,避免使用js for循环
What is the difference between $.each(selector) and $(selector).each(): http://stackoverflow.com/que ...
- 【JUnit】EasyMock用法总结
使用EasyMock的总体步骤 1.生成Mock接口 IService mockService = EasyMock.createMock("name", IService.cla ...
- cdoj 03 BiliBili, ACFun… And More! 水题
Article Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/3 Descr ...
- 一步步学Mybatis-搭建最简单的开发环境-开篇(1)
最近抽空学习了Mybatis这个框架,在学习的过程中也找了很多的文章,个人感觉官网上的东西太多太杂,不适合许多希望一步步快速上手的朋友们,当然觉得查阅问题的时候可以直接通过官网找还比较快或者是Stac ...