零、前言

  这次的作业比较特殊,有两种做法。由于我对网页很熟悉,所以选择网页。

  细节不赘述,下面写一下这次作业的几个亮点。

一、亮点

最大的亮点就是这个页面是纯客户端的,没有服务端。也就是说所有功能都是在本地完成。

简单介绍几个技术难点:

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

·         测试(自我测试,修改代码,提交修改)

 5%  9 6

总结报告

 5%  9  6
总计 100% 总用时  180
总估计的用时 120

[课程相关]homework-09的更多相关文章

  1. 【学习笔记】B站-2019-NLP(自然语言处理)之 BERT 课程 -- 相关课程笔记

    BERT 课程笔记 1. 传统方案遇到的问题 BERT的核心在于Transformer,Transformer就类似seq2seq网络输入输出之间的网络结构. 传统的RNN网络:最大的问题,因为不能并 ...

  2. Linux及安全课程——相关链接总结

    附录:学习笔记链接总结 MOOC课程学习笔记与实验: 第一周:计算机是如何工作的 第二周:操作系统是怎么工作的 -- 一个简单的时间片轮转多道程序内核代码及分析 第三周:构造一个简单的Linux系统M ...

  3. [课程相关]homework-04

    零.准备工作 这次的作业仍然是结对编程,我们队伍的成员为:梁杰.夏天晗.谢祖三.上次我们是选择了一个时间大家聚在一起进行编程,效果不错,所以这次我们还是决定采用这种方式.由于大家平时比较忙,这周六日我 ...

  4. [课程相关]homework-02

    一.如何组织代码 因为这个代码比较简单,用函数就足够了,个人觉得没必要用类,杀鸡不必用牛刀. 代码有点长,主要是加了很多判断参数的部分. 提取了一个公共的递归函数. 用了不少全局变量,可能当做参数传入 ...

  5. iOS开源库--最全的整理 分类: ios相关 2015-04-08 09:20 486人阅读 评论(0) 收藏

    youtube下载神器:https://github.com/rg3/youtube-dl 我擦咧 vim插件:https://github.com/Valloric/YouCompleteMe vi ...

  6. 潭州课堂25班:Ph201805201 django 项目 第四十二课 后台 课程相关,用户组管理 (课堂笔记)

    在线课程: 当点击进入页面时,显示所有课程 def get(self, request): courses = Course.objects.select_related('category', 't ...

  7. [课程相关]附加题——stack的理解

    一.stack的三种解释 stack有三种解释,我个人理解如下. 1.用户自定义的stack 用户自定义的stack就是一般意义上的后进先出队列,从名字上就能理解了,stack由下向上增长,有一个顶指 ...

  8. [课程相关]homework-06

    一.c++11 lambda /* * File: main.cpp * Author: liangjie * * Created on 2013年11月23日, 下午12:02 */ #includ ...

  9. [课程相关]homework-08

    一.变量作用域和生命周期 #include <cstdlib> #include <iostream> using namespace std; void try_change ...

随机推荐

  1. android打电话、发短信实现

    打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...

  2. 彻底解决cookie欺骗(有问题)

    不要在公共场登陆 自己重要的用户名和密码: 不用的时候,[关闭浏览器],只点[退出],还是会有安全隐患.--没有绝对的安全由于http的无状态性,总不能每次访问页面都要输入用户名和密码,所以为了保持状 ...

  3. Spring REST实践之客户端和测试

    RestTemplate 可参考spring实战来写这部分. RestTemplate免于编写乏味的样板代码,RestTemplate定义了33个与REST资源交互的方法,涵盖了HTTP动作的各种形式 ...

  4. JQuery 的bind和unbind函数

    测试:页面代码:<body>     <input type="button" name="aaa" value="点击我" ...

  5. Firefox 32 支持 Public Key Pinning 对抗中间人攻击。

    Firefox 32 支持 Public Key Pinning 对抗中间人攻击.8月28日消息,即将发布的Firefox 32将支持Public Key Pinning机制,以防止中间人攻击.Pub ...

  6. 解决ArcGIS Android Could not find class 'com.esri.android.map.MapView'问题

    环境win7 64bit sp1,eclipse 4.2.1 ,android API 16,ADT 23.0.2,arcgis android sdk 10.2.4 从arcgis-android- ...

  7. Remobjects SDK 服务器搭建

    for delphi: 在工程文件源码中,有一个编译字 {#ROGEN: ***.rodl},将它的名字改成 指定的 rodl 即可自动生成相关文件,一般默认为 NewService.

  8. os.getcwd()

    1.os.getcwd():获取当前工作目录,也就是在哪个目录下运行这个程序.举例来说:假设F:\aaa\bbb\ccc目录下有个文件 TestDir.py,打印当前工作目录.进入windows命令行 ...

  9. Codeforces Round #313 (Div. 1) B. Equivalent Strings DFS暴力

    B. Equivalent Strings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559 ...

  10. C++ Code_HotKey

            Code::使用HotKeyCtrl定义一个系统热键 // 关联HotKeyCtrl控件变量 m_HotKey1       BEGIN_MESSAGE_MAP(CXyzDlg, CD ...