基于.NET平臺的Windows編程實戰(六)—— 題目管理功能的實現

作者: Asidy  來源: 博客園  發布時間: 2009-06-08 11:14  閱讀: 3903 次  推薦: 0   原文鏈接   [收藏]  
摘要:本課將帶領大家一起來實現題目管理:添加、編輯、查看、刪除、存入題庫;以及題庫管理:添加、編輯、查看、刪除、插入到問卷等功能。

系列文章導航:

基于.NET平臺的Windows編程實戰(一)——前言

基于.NET平臺的Windows編程實戰(二)—— 需求分析與數據庫設計

基于.NET平臺的Windows編程實戰(四)—— 數據庫操作類的編寫

基于.NET平臺的Windows編程實戰(五)—— 問卷管理功能的實現

基于.NET平臺的Windows編程實戰(六)—— 題目管理功能的實現

 

 

  申明:本系列課程是專為新手們寫來入門練習用的,目的是想通過一個完整的問卷調查管理系統的案例開發來讓新手們了解、加深或是熟悉軟件項目的開發流程及在.NET平臺上使用VS2005和C# 進行Windows方面的編程;在整個課程的設計上,我盡量避開或是根本不討論底層的以及性能優化等方面的東西,故高手完全可以無視本系列課程。 

今天下班回來前查看了下早上放出去的第五課的課程,看到一朋友的評論,說實話當時不好受,想想自己每晚寫課程到深夜,竟然被人說成白癡文章!于是帶著幾分沖動草草的回復之后,便帶著疑惑與思考回家了。剛才重新看了下昨晚寫的第五課的課程,果真發現了不少“白癡”的地方:概念模糊,思路不明,無整體模型,雜亂無章…… 如此之文章,新手如何看懂?如何練習?……自責、自問、自思之后,我決定改變一下后面課程的寫作方式,即先寫設計思路[流程圖],再動手實驗并講解一些相關的實現原理[挑幾個比較有代表性的地方進行講解],之后再把源碼放出來供大家參考練習;這樣,我想對新手來說應該會更加容易理解一些吧。當然,在這里要感謝一下那位發表評論的朋友,因為是他(她)提醒了我,并使我重新去思考整個課程的設計,在此我向這位朋友說聲:謝謝!同時也希望他(她)以及更多的朋友能在以后的課程中提出更多的建議、指導以及批評 ^_^ 我將萬分感謝!你們的支持是我最大的動力!

  本課將帶領大家一起來實現題目管理:添加、編輯、查看、刪除、存入題庫;以及題庫管理:添加、編輯、查看、刪除、插入到問卷等功能。

  一、設計思路

我們知道:一份問卷是由若干條不同的題目組合而成的,而這些題目又是由用戶一條一條添加進去的。那么我們來分析一下:假如需要對A區域做一份問卷調查試題,且這份問卷要求包含100條題目,于是我們通過系統[假設這個系統只具有添加/編輯/刪除/預覽問卷及添加題目的功能]創建好一份名為“A區域試題”的問卷,并向此問卷里輸入添加了100條的題目;幾天后,我們發現這份問卷有些地方做的不好,需要進行修改,于是我們為了方便操作,便給系統增加了題目編輯、檢查[查看]、排序、刪除等題目管理功能;再過了幾天后,我們又需要對B區域及C區域各做一份包含100條試題的問卷,于是我們打開原來的系統,并創建了二份名為“B區域試題”與“C區域試題”的問卷,但當我們往里面添加題目的時候,我們發現三份問卷有許多相同或相似的題目,于是我們就會想:如果有一個題庫能將這些相同或相似的題目存起來,那么當我們需要創建新的問卷的時候,我們直接從題庫里面把題目插入進去不就可以了嗎?多方便呀!于是我們就有了建立一個題庫來存放題目的想法了,并且這個題目應該具有編輯、查看、插入到問卷、刪除等功能……

好,現在我們來設計一下流程圖:

 

  圖6-1

  簡單的解釋一下添加試題的過程:

  用戶向問卷中添加題目時,先在所要添加的問卷中查找是否已經存在了該題,如果存在了則提示,如果不存在,則去題庫中進行查找是否存有該題了,如存在則提示從題庫中插入該題,

  否則直接添加進問卷中,并提示是否將該存入到題庫中去。

  到這里相信大家應該明白或是大致知道了整個的設計思路了吧!下面我們就來動手做做吧。

  二、動手實驗及相關原理講解

  下面我挑選添加題目、排序以及窗口間的相互關聯中的部分設置或代碼來進行動手實驗及原理的講解,其余的請大家自行下載本課程源碼參考練習。

  首先,我們來創建一個添加題目的窗口(創建方法請參見前面的課程),命名為 “TitleAdd”,并使其繼承于“SurveyWin”母窗口,方法為將:

  public partial class TitleAdd :From

改成:

  public partial class TitleAdd :SurveryWin

  并將其設置成如下圖6-2所示[具體的屬性設置請參見本課程源碼]: 

  圖6-2

  其次,我們給這個窗口中的輸入題目標題文本框添加了一個鼠標離開事件,以便提示用戶所輸入的題目是否已經存在于本問卷或題庫中了。

  其實現原理是這樣的:當用戶往標題文本框中輸入標題后,鼠標離開其文本框時,將用戶所輸入的標題作為條件在其問卷與題庫中進行相似題目的查詢,

  如查出則給出相關提示,否則作為新題添加進問卷或題庫中。其實現的代碼如下所示:

 

         private void TRichTitleText_MouseLeave(object sender, EventArgs e)
        {
            if (TRichTitleText.Text.Trim() != "")//判斷是否為空,如不為空,則執行如下操作
            {
                //在問卷與題庫中分別進行查找,看是否已經存在了?
                string stSql = "Select Count(*) From Lj_TitleStorage Where TitleSt_Title like '" + TRichTitleText.Text.Trim() + "'";

                string tcontent = TRichTitleText.Text.Trim() + "(" + TCombBtn.SelectedItem.ToString() + ")";
                string istSql = "Select Count(*) From Lj_Title Where Title_Content like '" + tcontent + "'";

                if (dboperate.ExcuteScrSql(istSql) > 0) //如果已經存在于問卷中了,則執行如下操作
                {
                    IsStorageCoMBox.SelectedIndex = 1;
                    IsStorageCoMBox.Enabled = false;//將是否存入題庫設為不可選擇
                    TAddBtn.Enabled = false;//將添加按鈕設為不可用
                    IsStorageLab.Visible = true;//顯示提示標簽
                    IsStorageLab.Text = "*該題已在此問卷中存在!請重新輸入!";
                }
                else if (dboperate.ExcuteScrSql(istSql) == 0 && dboperate.ExcuteScrSql(stSql) > 0)//
如果已經存在于題庫中了,則執行如下操作
                {
                    IsStorageCoMBox.SelectedIndex = 1;
                    IsStorageCoMBox.Enabled = false;
                    IsStorageLab.Visible = true;
                    IsStorageLab.Text = "*題庫中已經存在該題了!";
                    LookStLinkLab.Enabled = true; //將"點擊查看"按鈕設為可用可見,以便用戶點擊連接到題
庫中題目進行查看或插入操作
                    LookStLinkLab.Visible = true;
                }
                else
                {
                    IsStorageCoMBox.SelectedIndex = 0;
                    IsStorageCoMBox.Enabled = true;
                    TAddBtn.Enabled = true;
                    IsStorageLab.Visible = false;
                    LookStLinkLab.Enabled = false;
                    LookStLinkLab.Visible = false;
                }
            }
        }

  之后,我們再創建一個添加題目選項的窗口,使其命名為“TitleItemsAdd”,繼承于“SurveyWin”母窗口,并設置成如下圖6-3所示;

  當我們點擊圖6-2中的“添加”題目按鈕時,將會彈出一個提示框來詢問用戶是否需要馬上給題目添加選項,如果用戶選擇“是”,則彈出本窗口以供用戶添加該題目的選項,

  反之,則返回主窗口。

  圖6-3

  其添加選項與減少選項實現原理是:當點添加選項時,實例化一個TextBox控件并將其添加到FlowLayoutPanel控件中;
  而當點擊減少選項時,則從FlowLayoutPanel控件中將其移除,其對應的代碼如下所示:

 

Code

  從上面的代碼中,我們可以看出,其實現原理是這樣的:當點擊“上升”時,先獲取DataGridView中的當前點擊行的行號,再通過這個行號獲得當前行的題目ID,之后再對這個當前行進行是否為首行的判斷:如果不是則再通過當前行去獲得其上一行的行號及題目ID,最后再將這二行所對應的排序號[Title_Order]進行互換即可,反之,如果為首行則提示其只能做下降操作。而當點擊“下降”時的實現原理同“上升”差不多,只不過是通過獲取當前點擊行及對應的下一行的排序號來進行互換而已。

  最后,我們再將這些窗口與主窗口“MainFrom”關聯起來:

  我們先打開“MainForm”窗口,分別給主菜單中“題目”菜單下的各子菜單項添加Click事件,其對應的事件處理代碼如下所示:

Code

之后,我們再在工具欄的ItemClicked事件中補上如下代碼,以便點擊工具欄上的相應按鈕時,也能出現相同的效果:

 

else if (e.ClickedItem == TStorageToolStipBtn)
      TSToolStripMenuItem_Click(null, null); //題庫管理
else if (e.ClickedItem == TMaToolScriptBtn)
      TMaToolStripMenuItem_Click(null, null); //題目管理
else if (e.ClickedItem == TAddToolScriptBtn)
     TAToolScriptMenuItem_Click(null, null); //添加題目

 

 

這樣,就可以將所有的窗口與主窗口關聯起來了,當我們點擊“題目管理”時,就會出現如下圖6-4所示的界面了:


圖6-4

OK!本課程就先到這里吧,其余沒有講解的部分,如有不清楚的地方,可以在下面留言,我將盡力給予解答!謝謝大家的支持……

附:本課程源碼下載

0
0
 
標簽:WinForm
 
 

文章列表

全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()