基于敏捷开发的数据结构研究
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 演示系统的构成

下面以一个数据结构辅助教学软件介绍演示系统的构成,这个教学软件由系统目录、程序演示、同步讲义、精选习题四个部分组成,本书只讨论前两个部分。

在系统目录中主要通过TreeView控件提供数据结构中分章节某个算法的选择。程序演示部分提供算法及程序源代码的显示、各变量的变化、系统栈变化、图形显示等,它是软件的核心部分。

2.4.1 系统目录与程序演示部分的关联

本系统充分利用控件特性,实现系统目录与程序演示部分的关联,设计时把TreeView控件放入页框内,如图2.2所示,在TreeView Items Editor框中可直接进行编辑,随开发的进展添加、修改内容。

图2.2 TreeView Items Editor编辑示意图

在TreeView控件中分层显示标题文本,为实现目录内容语言与演示程序具体类相关联的目的,实际填充标题时,在标题前增加一至三位数字字符,用来表示目录的三级标号。一级标号用一位字符表示,用来提供章标号;二级标号用两位字符表示,用来提供相关类名的后两位数字字符;三级标号用三位字符表示,用来提供某个具体的算法,其中的前两位与二级标号含义相同,第三位表示该类的某一个方法。执行程序,选择三级标号时,通过变量cap把标题传给主程序。代码如下:

procedure TForm1.TreeView1Click(Sender: TObject);
begin
cap:=form1.TreeView1.Selected.Text ;
end;

二级标题对应整个大的算法族,包含第三级标题对应的几个算法,算法类以ex开头加两位数字字符组成,分别在initialization、finalization部分进行注册和撤销。代码如下:

      initialization
      RegisterClass(ex00);
      RegisterClass(ex01);
      RegisterClass(ex11);
      cap:='';
finalization
      UnregisterClass(ex00);
      UnregisterClass(ex01);
      UnregisterClass(ex11);

2.4.2 程序演示部分

在程序演示部分通过显示区及输入区实现交互。

显示区包括算法代码、静态变量、系统工作栈、图形及数组的显示,都通过TstringGrid控件来实现。通过标签控件显示相应代码的注释。输入区包括文本框及三个命令按钮,在文本框内输入算法要求的原始数据,三个命令按钮分别是“开始”、“单步”、“自动”。下面是“开始”按钮的单击事件程序代码:

procedure TForm1.begincommClick(Sender: TObject);
var i:integer;
begin
    if cap='' then cap:='000';
    form1.Label1.Caption :=cap;
    if pos(copy(cap,3,1),'0987654321')>0
        then begin
                i:=strtoint(copy(cap,3,1)) ;
                dd:=ttdemo(findclass('ex'+copy(cap,1,2))).Create ;
                dd.init(form1.varGrid ,form1.proGrid,form1.sysgrid,
                        form1.cvargrid ,form1.Label2,form1.inputedit,form1.img );
                if dd.runprogram(i)
                    then begin
                           dd.initfile;
                           dd.fillprogram ;
                           runcomm.Enabled :=true;
                           begincomm.Enabled :=false;
                           auto.Enabled :=true;
                           auto.caption:='自动'
                          end ;
                  end;
          end;

第一个if语句判断在系统目录中是否进行了选择,如果未选择,认为从文件中读取自定义的演示脚本。语句“dd:=ttdemo(findclass('ex'+copy(cap,1,2))).Create”用来根据选择目录生成已注册类的一个实例;下一句用来进行初始化,把当前表单的控件对象传给算法类。dd.runprogram(i)根据选择的三级目录第三位数值,执行相应的一个方法,并产生脚本文件。之后,把算法代码填入代码显示表格,把“单步”、“自动”按钮设为可用,就可以进行演示了。

如果为执行状态,单击一次“单步”按钮就解释一行脚本文件,如果单击了“自动”按钮,就由计时器自动调用“单步”按钮的事件程序。代码如下:

  procedure TForm1.runcommClick(Sender: TObject);
  begin
    if dd.getrunstate
        then dd.runoneline
        else begin
                runcomm.Enabled :=false;
                auto.Enabled :=false;
                timer1.Enabled :=false;
                begincomm.Enabled :=true;
            end;
        end;
        procedure TForm1.autoClick(Sender: TObject);
        begin
           if auto.caption='自动'
               then begin
                      timer1.Enabled :=true;
                      auto.caption:='暂停';
                end
        else begin
                  timer1.Enabled :=false;
                  auto.caption:='自动';
        end ;
  end;