告警程序實例(c#實現)

告警程序實例(c#實現)
1.  需求
設計一個簡化版的告警程序。這是一個Windows應用程序,它能夠根據用戶的選擇結果,給出不同級別的告警消息。用戶根據信號的不同,判斷當前的錯誤警告屬於何種級別。
告警程序的功能如下:
(一)  根據用戶的選擇觸發告警信息:
(二)  告警消息根據警告的嚴重情況分爲Lower,MediumHigh三級;
(三)  不同級別的告警消息發出不同的聲音;
2.通過需求識別對象
   告警程序的功能非常簡單。我們可以利用識別系統的關鍵詞來尋找需要定義的對象。毋庸置疑,告警消息是整個需求分析中反覆強調的,它應該是我們的關重心。需求分析中還有兩個名詞:用戶與聲音,它們是否是我們需要識別的對象的?判斷的標準是這些對象是否參與了系統的功能實現,並與程序模型密切相關。
   例如用戶對象,它是否屬於程序的一部分呢?雖然,功能需求中要求告警信號必須根據用戶的選擇而觸發,然而,它代表的含義實際上是指用戶通過交互界面,完成對告警信號的選擇。因此,它僅僅屬於信息交互中的一個操作者,程序並不要求用戶執行相應的行爲,也不需要獲取用戶的相關屬性。如果排除某些特定的需求(例如標記接口),這種有行爲與屬性的對象在軟件系統中是沒有存在的必要的。
   聲音對象無疑是存在的,以爲我們需要調用播放聲音的方法。如果聲音是一個外部文件,則準確的對象識別應該是聲音播放器,通過它播放聲音文件,例如wav文件。實際上,.net framwork已經定義了聲音播放對象System.Media.SoundPlayer,我們只需調用其Play方法即可。
在項目中添加資源文件的方法:
在項目上右鍵點擊-添加-新建項-選擇Resouse file類型-然後選擇添加聲音文件即可-在項目中會出項一個Resouse文件夾,添加的聲音文件將被拷貝到此文件夾下

 

   現在,回過頭來分析告警消息對象的屬性與行爲。通過需求,我們知道告警信號能夠發出聲音,這證實它的一種行爲表現形式,我們可以將其定義爲告警消息對象的方法。那麼,告警消息對象是否具有特定的屬性呢?從需求判斷,告警消息根據警告的嚴重情況分爲Lower,MediumHigh三級,這似乎可以作爲對象的一個屬性,通過該屬性值判斷當前對象的嚴重級別。此外,該屬性值還將制約行爲的實現方式。因此告警消息對象的定義與實現如下:
namespace AlarmManager

{

    class Alarm

    {

        private SoundPlayer m_player;//聲明SoundPlayer對象

        private string m_seriousLevel;//嚴重級別

        public string SeriousLevel

        {

            get

            {

                return m_seriousLevel;

            }

            set

            {

                m_seriousLevel = value;

            }

        }

        public Alarm()

        {

            m_seriousLevel = "High";

        }

        public Alarm(string seriousLevel)

        {

            m_seriousLevel = seriousLevel;

        }

        public void knock()

        {

            switch (m_seriousLevel.ToUpper())

            {

                case "HIGH":

                    m_player = new SoundPlayer(AlarmManager.Resource1.ALARM1);

                    //AlarmManager爲聲音文件的名稱

                    break;

                case "MEDIUM":

                    m_player = new SoundPlayer(AlarmManager.Resource1.ALARM2);

                    //Resource1爲資源對象

                    break;

                default:

                    m_player = new SoundPlayer(AlarmManager.Resource1.ALARM3);

                    //ALARM3爲聲音文件名稱

                    break;

            }

            m_player.Play();

 

        }

    }

}

 

如果我們現在要添加一個更高級別的告警,則需要修改knock方法,在switch中添加分支,並建立一個新的實例,並不能很好的適應需求的變化。

 
更好的解決方法,期待大家一起解決!共同探討

 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章