C#备忘录

2021-04-26 15:35

阅读:748

一、简述

              备忘录,相信大家生活中都使用过,比如记笔记、手机备忘录等等,这些都是记录自己灵感时所想、定期内想做的事情,好像跑题了,说说我的备忘录吧,我的备忘录功能上也就是增删改查的操作,另加到时提醒、语音播放内容,很简单吧,但是实用,好了,想看设计点吧。

 

二、设计

              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);
        }


 /// 
        /// 定时器设置,这个方法或者这段代码可以写在窗体加载的时候
        /// 
        private void TimerSet()
        {
             threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(ThreadMethod), null, 0, 1000);
        }
技术分享图片

             2、语音播报内容

                  这块我用了两个方面的技术,一个就是微软自带的System.Speech.Synthesis.SpeechSynthesizer语音识别的类,第二个就是百度提供的语音识别接口,为什么用两个呢,如果我们用户机上面没网,那么就可以使用微软自带的语音识别功能,如果用户机没装微软的语音识别,那么就可以使用百度的语音识别接口,如果没网、机器也没装微软的语音识别,那么你可以打包程序自动装微软自带语音识别的安装包或者其他插件异或组件,当然,这个安装包肯定比你的程序大很多,估计现在除了用xp的,win7的没有几个没自动装语音识别的吧,好了,下面就是代码:

                 

技术分享图片
        /// 
        /// 微软语音识别
        /// 
        /// 提示内容
        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;
            }
        }



        /// 
        /// 百度语音合成(文档网站:http://yuyin.baidu.com/docs/tts/197)
        /// 
        private void BaiduTts(string audioText)
        {
            _ttsClient = new Baidu.Aip.Speech.Tts("API_KEY", "SECRET_KEY ");
            // 可选参数
            var option = new Dictionary()
                {
                    {"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);
            }
        }
技术分享图片


评论


亲,登录后才可以留言!