一、簡述 備忘錄,相信大家生活中都使用過,比如記筆記、手機備忘錄等等,這些都是記錄自己靈感時所想、定期內想做的事情,好像跑題了,說說我的備忘錄吧,我的備忘錄功能上也就是增刪改查的操作,另加到時提醒、語音播放內容,很簡單吧,但是實用,好了,想看設計點吧。 二、設計 1、資料庫設計 資料庫用的是SQLi ...
一、簡述
備忘錄,相信大家生活中都使用過,比如記筆記、手機備忘錄等等,這些都是記錄自己靈感時所想、定期內想做的事情,好像跑題了,說說我的備忘錄吧,我的備忘錄功能上也就是增刪改查的操作,另加到時提醒、語音播放內容,很簡單吧,但是實用,好了,想看設計點吧。
二、設計
1、資料庫設計
資料庫用的是SQLite
資料庫表:Sys_Kind、Memorandum
Sys_Kind是一個通用字典表,這個對初學者有幫助,如下圖:
解析:ID不用說了,自增的標識,K_Name:字典名稱,K_Parent:父類型標識,就是說如果K_Parent為0,那麼它就是一個類型,然後子字典就以它作為父類,這個欄位鍵入父類ID值即可,K_Sort排序就是單個類型的排序,或者你也可以將所有數據作為排序也行,K_AddTime添加時間,K_Desc字典描述,這樣可以便於後來的人查看這個是用來乾什麼的,K_State字典狀態,這個呢,可以靈活應用,用來是否顯示某個字典或者其他多狀態都可以,K_Code字典代碼值,這個就很重要了,這個就用作字典的值,很多人或許會問,為什麼不用自增ID呢,因為如果類型很多的情況下,這個ID值會越來越大,你定義的類型值本身沒有幾個,而它的值還這麼大,何必呢,旁邊這個表就是備忘錄表,我就不解釋了,自己慢慢體會。
2、程式設計(上圖)
這個呢,大家都知道哈,就是普普通通的增刪改查,沒什麼大的技術含量
三、核心技術
1、自動查詢備忘錄
這一塊呢,相信大家都知道,可以用Timer這個控制項,的確可以用Timer,當然這裡,我用的不是Timer控制項,而是System.Threading.Timer這個類,當然需要瞭解相關的用法,大家可以百度搜索,也可以去這兒https://msdn.microsoft.com/zh-cn/library/system.threading.timer(v=vs.110).aspx看看,當然我也貼出代碼,讓大家參考一下。
//聲明一個委托 private delegate void SetTimerLogicCallback(); //聲明一個定時器的類 private System.Threading.Timer threadTimer; //執行委托的方法,ShowMemorandumInfo是查詢資料庫的方法 private void ThreadMethod(object obj) { SetTimerLogicCallback timerLogic = new SetTimerLogicCallback(ShowMemorandumInfo); this.Invoke(timerLogic); } /// <summary> /// 定時器設置,這個方法或者這段代碼可以寫在窗體載入的時候 /// </summary> private void TimerSet() { threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ThreadMethod), null, 0, 1000); }
2、語音播報內容
這塊我用了兩個方面的技術,一個就是微軟自帶的System.Speech.Synthesis.SpeechSynthesizer語音識別的類,第二個就是百度提供的語音識別介面,為什麼用兩個呢,如果我們用戶機上面沒網,那麼就可以使用微軟自帶的語音識別功能,如果用戶機沒裝微軟的語音識別,那麼就可以使用百度的語音識別介面,如果沒網、機器也沒裝微軟的語音識別,那麼你可以打包程式自動裝微軟自帶語音識別的安裝包或者其他插件異或組件,當然,這個安裝包肯定比你的程式大很多,估計現在除了用xp的,win7的沒有幾個沒自動裝語音識別的吧,好了,下麵就是代碼:
/// <summary> /// 微軟語音識別 /// </summary> /// <param name="content">提示內容</param> public static void SpeakAsync(string content) { try { if (synth != null) synth.Dispose(); synth = new System.Speech.Synthesis.SpeechSynthesizer(); synth.SpeakAsyncCancelAll(); synth.SpeakAsync(content); } catch (Exception ex) { throw ex; } } /// <summary> /// 百度語音合成(文檔網站:http://yuyin.baidu.com/docs/tts/197) /// </summary> private void BaiduTts(string audioText) { _ttsClient = new Baidu.Aip.Speech.Tts("API_KEY", "SECRET_KEY "); // 可選參數 var option = new Dictionary<string, object>() { {"spd", 5}, // 語速 {"vol", 7}, // 音量 {"per", 4} // 發音人,4:情感度丫丫童聲 }; var result = _ttsClient.Synthesis(audioText, option); if (result.ErrorCode == 0) { string fileName = Application.StartupPath + "\\" + Guid.NewGuid().ToString() + ".mp3"; System.IO.File.WriteAllBytes(fileName, result.Data); axWindowsMediaPlayer1.URL = fileName; axWindowsMediaPlayer1.Ctlcontrols.play(); System.IO.File.Delete(fileName); } else { Utils.LogMessage("百度語音合成異常", result.ErrorMsg); } }