【现代程序设计】【期末作业】【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/

转载于:https://www.cnblogs.com/lightz/p/3475515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该程序允许用户比较摄氏和华氏温度的相等性。具体要求如下: 建立一个Temperature类,它有两个实例变量:一个是温度值(float);另一个是温度的计量单位(char),即取值 ’C’ 或 ’F’,C表示Celsius(摄氏温度)、F表示Fahrenheit(华氏温度)。这个类还应有2 个构造方法: 给每一个实例变量设置缺省值,即温度值为0、计量单位为C(摄氏); 通过两个参数分别给两个实例变量赋初值。 这个类应包括: 两个存取方法:一个返回用摄氏计量的温度、另一个返回华氏温度。摄氏和华氏温度的转换公式如下: degreesC = 5 * (degreesF - 32)/9 degreesF = (9* (degreesC)/5) + 32 三个改变对象属性的方法:一个设置温度值、一个设置计量单位(’F’或’C’)、另一个同时设置温度值和计量单位。 三个比较方法:一个用来是否两个温度相等;一个方法用来测试比较一个温度大于另一个温度;一个方法用来测试比较一个温度小于另一个温度。 最后写一个测试程序(main方法),测试Temperature类中的所有方法。要确保使用到所用的构造方法;要测试每一个比较方法,并确保至少有一个真(true)一个假(false)的结果。例如测试:0.0 degrees C = 32.0 degrees F -40.0 degrees C = - 40.0 degrees F -100.0 degrees C = 212.0 degrees F 请注意:必须保证输入的数据是有效的。所有非法的输入字符都应产生相应的错误信息并提示用户重新输入正确的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值