官术网_书友最值得收藏!

2.4 演示系統(tǒng)的構(gòu)成

下面以一個(gè)數(shù)據(jù)結(jié)構(gòu)輔助教學(xué)軟件介紹演示系統(tǒng)的構(gòu)成,這個(gè)教學(xué)軟件由系統(tǒng)目錄、程序演示、同步講義、精選習(xí)題四個(gè)部分組成,本書只討論前兩個(gè)部分。

在系統(tǒng)目錄中主要通過TreeView控件提供數(shù)據(jù)結(jié)構(gòu)中分章節(jié)某個(gè)算法的選擇。程序演示部分提供算法及程序源代碼的顯示、各變量的變化、系統(tǒng)棧變化、圖形顯示等,它是軟件的核心部分。

2.4.1 系統(tǒng)目錄與程序演示部分的關(guān)聯(lián)

本系統(tǒng)充分利用控件特性,實(shí)現(xiàn)系統(tǒng)目錄與程序演示部分的關(guān)聯(lián),設(shè)計(jì)時(shí)把TreeView控件放入頁框內(nèi),如圖2.2所示,在TreeView Items Editor框中可直接進(jìn)行編輯,隨開發(fā)的進(jìn)展添加、修改內(nèi)容。

圖2.2 TreeView Items Editor編輯示意圖

在TreeView控件中分層顯示標(biāo)題文本,為實(shí)現(xiàn)目錄內(nèi)容語言與演示程序具體類相關(guān)聯(lián)的目的,實(shí)際填充標(biāo)題時(shí),在標(biāo)題前增加一至三位數(shù)字字符,用來表示目錄的三級標(biāo)號。一級標(biāo)號用一位字符表示,用來提供章標(biāo)號;二級標(biāo)號用兩位字符表示,用來提供相關(guān)類名的后兩位數(shù)字字符;三級標(biāo)號用三位字符表示,用來提供某個(gè)具體的算法,其中的前兩位與二級標(biāo)號含義相同,第三位表示該類的某一個(gè)方法。執(zhí)行程序,選擇三級標(biāo)號時(shí),通過變量cap把標(biāo)題傳給主程序。代碼如下:

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

二級標(biāo)題對應(yīng)整個(gè)大的算法族,包含第三級標(biāo)題對應(yīng)的幾個(gè)算法,算法類以ex開頭加兩位數(shù)字字符組成,分別在initialization、finalization部分進(jìn)行注冊和撤銷。代碼如下:

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

2.4.2 程序演示部分

在程序演示部分通過顯示區(qū)及輸入?yún)^(qū)實(shí)現(xiàn)交互。

顯示區(qū)包括算法代碼、靜態(tài)變量、系統(tǒng)工作棧、圖形及數(shù)組的顯示,都通過TstringGrid控件來實(shí)現(xiàn)。通過標(biāo)簽控件顯示相應(yīng)代碼的注釋。輸入?yún)^(qū)包括文本框及三個(gè)命令按鈕,在文本框內(nèi)輸入算法要求的原始數(shù)據(jù),三個(gè)命令按鈕分別是“開始”、“單步”、“自動”。下面是“開始”按鈕的單擊事件程序代碼:

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;

第一個(gè)if語句判斷在系統(tǒng)目錄中是否進(jìn)行了選擇,如果未選擇,認(rèn)為從文件中讀取自定義的演示腳本。語句“dd:=ttdemo(findclass('ex'+copy(cap,1,2))).Create”用來根據(jù)選擇目錄生成已注冊類的一個(gè)實(shí)例;下一句用來進(jìn)行初始化,把當(dāng)前表單的控件對象傳給算法類。dd.runprogram(i)根據(jù)選擇的三級目錄第三位數(shù)值,執(zhí)行相應(yīng)的一個(gè)方法,并產(chǎn)生腳本文件。之后,把算法代碼填入代碼顯示表格,把“單步”、“自動”按鈕設(shè)為可用,就可以進(jìn)行演示了。

如果為執(zhí)行狀態(tài),單擊一次“單步”按鈕就解釋一行腳本文件,如果單擊了“自動”按鈕,就由計(jì)時(shí)器自動調(diào)用“單步”按鈕的事件程序。代碼如下:

  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;
主站蜘蛛池模板: 民县| 平昌县| 辽阳市| 宜章县| 明光市| 永定县| 星座| 许昌市| 石楼县| 青神县| 柳林县| 陆河县| 盘山县| 绩溪县| 丽江市| 磴口县| 休宁县| 肇州县| 永年县| 永济市| 清水河县| 崇义县| 保靖县| 理塘县| 中宁县| 定州市| 长宁区| 华蓥市| 乃东县| 名山县| 逊克县| 合肥市| 长治县| 合阳县| 桑日县| 虎林市| 常德市| 潼南县| 从化市| 稻城县| 珲春市|