zoukankan      html  css  js  c++  java
  • 【现代程序设计】【期末作业】【homework-09】

    作业要求说明:

    http://www.cnblogs.com/xinz/p/3441537.html

    我在做一个什么样的应用:

    展示如何逐步求解一个加权矩阵的

    1. 最大子矩阵
    2. 最大子联通图

    下面是软件的截图

    包含的基本功能:

    1. 从文件读入矩阵随机生成矩阵
      1. 本软件将保存最近使用的3个文件(若包含当前正在使用的文件,则为4个)
    2. 随机生成矩阵
      1. 可设置矩阵的大小,不超过10*10
      2. 超过10*10将导致anymaxsum步骤过多,而没有什么教学意义了。
    3. 播放
      1. 自动
        1. 随时调整播放间隔(播放中亦可)
      2. 手动
        1. 回退和下一步
      3. 重置
      4. 选择播放类型

    结果展示:(包含一个矩阵和两个文本框)

    • 矩阵:用于显示详细步骤和状态(详细见软件)
    • 最大值(文本框):显示当前最大值
    • 当前值(文本框):显示当前选定值

    应用设计语言和平台:

    • 语言:C#+XAML
    • 运行平台:.Net 4.0+ and 浏览器(IE9+)

    什么工作占用了我比较大的时间?

    GUI的设计

    思考到底怎样的设计才能让初学者理解DP动态规划执行的过程和原理,而不是看着动画一闪而过,完全不明白整个过程是在做什么。

    1. 例子需简单,即矩阵不能包含过多的元素,4*4,5*5,6*6是可接受的值。
    2. 执行过程需可控,用户可以选择手动或者自动模式,自动模式下,播放速度可以调节。
    3. 每一个中间步骤需要有对应的解释说明,解释还需要贴合人们的思维模式,比如 a.红色代表错误 b.绿色代表可行。
    4. 用户大多数时候都在看算法执行的过程,因此初始值相关的GUI控件应该只占用小部分空间
    5. 【停止】,【播放】,【上一步】等等控件应该被设计的比较大,因为它们会被访问的更频繁。

      

    下面是该软件的详细设计时遇到几个问题:

    安全问题,浏览器文件访问权限

    浏览器端的应用均运行于沙盒之中,所以浏览器无法直接使用使用文件选取器

    解决办法

    提升应用的权限,在属性中更改

     

     

    如何将二维数组绑定到控件 DataGrid?

    代码DataGrid

     1                    <DataGrid x:Name="dataGrid" ItemsSource="{Binding CollectionSource}" SelectionUnit="CellOrRowHeader" IsReadOnly="True"  MaxColumnWidth="100" MinColumnWidth="100" AutoGenerateColumns="True" CanUserResizeRows="False" CanUserSortColumns="False"  CanUserReorderColumns="False"  LoadingRow="dataGrid_LoadingRow" HorizontalAlignment="Center" VerticalAlignment="Center" AutoGeneratedColumns="dataGrid_AutoGeneratedColumns" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" Margin="0,0,0,30" FontSize="20" FontFamily="Segoe UI">
     2                         <DataGrid.ColumnHeaderStyle>
     3                             <Style TargetType="DataGridColumnHeader">
     4                                 <Setter Property="HorizontalContentAlignment" Value="Center"/>
     5                                 <Setter Property="Background" Value="AliceBlue" />
     6                                 <Setter Property="Foreground" Value="Black"/>
     7                                 <Setter Property="FontSize" Value="20" />
     8                             </Style>
     9                         </DataGrid.ColumnHeaderStyle>
    10 
    11                     </DataGrid>
    View Code

    PageSource

        <Page.Resources>
            <DataTemplate x:Key="CellTemplate">
                <TextBlock Background="{Binding Back}" Text="{Binding Value}" TextAlignment="Center"  Foreground="White"/>
            </DataTemplate>
    
        </Page.Resources>
    View Code

    首先,在PageSource 里面申明了一个CellTemplate,将DataGrid 每一个Cell 设置为 一个TextBlock

    后台定义了一个类 item,包含元素 Back,Value

    分别对应该TextBlock的Background和Text两个属性

    定义了 一个 继承于 ObservableCollection<item> items 收集DataGrid每一行的数据

    并定义了一个 ObservableCollection<items> CollectionSource,收集DataGrid所有行的数据

    再在DataGrid代码里将 ItemsSource绑定到CollectionSource: [ItemsSource="{Binding CollectionSource}"]

    后台算法

    因在第三次作业中已经完成了这部分工作

    所以这次作业,我只是在maxsum类中加入了两个属性:

    并设置了访问器

    在实体化maxsum类之后,便可以直接获取数据

    1 /// <summary>
    2  /// 结果存储于下面两个list
    3  /// result_maxsum 矩阵
    4 /// result_any_maxsum 任意
    5 /// </summary>
    6         public List<step_detail> result_maxsum { get; set; }
    7         public List<step_detail> result_any_maxsum { get; set; }

    几个测试用例

    完整代码:

    https://github.com/11061027zsx/homework-09/

  • 相关阅读:
    [android] 获取系统的联系人信息
    [android] 内容观察者
    [nodejs] nodejs开发个人博客(六)数据分页
    [android] 插入一条记录到系统短信应用里
    [android] 短信的备份
    [android] 内容提供者实现
    [android] 内容提供者简介
    [nodejs] nodejs开发个人博客(五)分配数据
    [android] 常用数据适配器SimpleAdapter
    [android] 常用数据适配器ArrayAdapter
  • 原文地址:https://www.cnblogs.com/lightz/p/3475515.html
Copyright © 2011-2022 走看看