一、简述

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

二、设计

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

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", }, // 语速
{"vol", }, // 音量
{"per", } // 发音人,4:情感度丫丫童声
};
var result = _ttsClient.Synthesis(audioText, option);
if (result.ErrorCode == )
{
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);
}
}

总结:这是一个简单的备忘录程序,欢迎初学者学习,大神就随便看看就行了,欢迎大家点赞转发

c# 小小备忘录的更多相关文章

  1. java设计模式之备忘录模式

    备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...

  2. NOIP赛前集训备忘录(含每日总结)(日更?。。。)

    NOIP赛前集训备忘录(含每日考试总结) 标签: 有用的东西~(≧▽≦)/~啦啦啦 阅读体验:https://zybuluo.com/Junlier/note/1279194 考试每日总结(这个东西是 ...

  3. MementoPattern(备忘录模式)

    /** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...

  4. C#设计模式-备忘录模式

    访问者模式的实现是把作用于某种数据结构上的操作封装到访问者中,使得操作和数据结构隔离.而本文要介绍的备忘者模式与命令模式有点相似,不同的是,命令模式保存的是发起人的具体命令(命令对应的是行为),而备忘 ...

  5. Vuex2.0+Vue2.0构建备忘录应用实践

    一.介绍Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,适合于构建中大型单页应用. ...

  6. 设计模式03备忘录(java)

    先贴代码有空来写内容. 备忘录1 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作. class Student{ private String name; private Stri ...

  7. (转)小小科学家的归来 by 王珢

    小小科学家的归来 by 王垠很多人来信关心我的现状,所以在写别的技术性文章之前,先说说我现在的情况吧.虽然自己追求的东西和经历都比较不同寻常,但是也许可以给奋斗中的人们一些慰藉和鼓励. 首先是超级好消 ...

  8. C#设计模式系列:备忘录模式(Memento)

    1.备忘录模式简介 1.1>.定义 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 1.2>.使用频率 ...

  9. php实现设计模式之 备忘录模式

    <?php /*备忘录模式:在不破坏封装的前提下,获取对象的内部状态,并且在对象外保存该状态.这样就可以将该对象恢复到保存之前的状态(行为模式) * * 发起人:记录当前时刻的内部状态,负责定义 ...

随机推荐

  1. 华为olt ma5680t常用命令详解

    进入待替换的故障ONU所注册的单板 interface epon 0/1         //此处可以通过查看PON口下设备状态来获取需要替换的ONU ID.假设故障设备位于2端口,ID为6 ont ...

  2. mysq参数sql_safe_updates限制范围

    在mysql运维中出现过不少因为update/delete条件错误导致数据被误更新或者删除的case,为避免类似问题的发生,可以用sql_safe_updates参数来对update/delete做限 ...

  3. Hadoop2.7.3集群搭建

    hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA.YARN等.最新的hadoop-2.4.1又增加了YARN HA   注意:apache提供的hadoop-2.4.1的安装 ...

  4. 转载:C#特性-表达式树

    原文地址:http://www.cnblogs.com/tianfan/ 表达式树基础 刚接触LINQ的人往往觉得表达式树很不容易理解.通过这篇文章我希望大家看到它其实并不像想象中那么难.您只要有普通 ...

  5. iOS开发中使用文字图标iconfont

    在iOS的开发中,各种图标的使用是不可避免的,如果把全部图标做成图片放在项目中,那么随着项目的逐渐庞大起来,图片所占的地方就会越来越大,安装包也就随之变大了,如果图标需要根据不同的场景改变使用不同的颜 ...

  6. 【转】浅谈UML的概念和模型之UML九种图

    原文地址:浅谈UML的概念和模型之UML九种图 目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图.本文我们重点讲解UML每种图的 ...

  7. SPARK 创建新任务

    1.应用程序创建 SparkContext 的实例 sc 2.利用 SparkContext 的实例来创建生成 RDD 3.经过一连串的 transformation 操作,原始的 RDD 转换成为其 ...

  8. ThreeJS之动画交互逻辑及特效

    工作需要,研究了一下 threejs 简单逻辑动画交互方法.写了一个小示例,分享一下,挺丑的. 第一步 当然就是初始化 threejs 的渲染场景了. var camera; //相机 var sce ...

  9. CoreCLR源码探索(八) JIT的工作原理(详解篇)

    在上一篇我们对CoreCLR中的JIT有了一个基础的了解, 这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在https://github.com/dotnet/coreclr/tree/m ...

  10. Java基础——数据类型

    Java中与C++的区别: 1.Java中没有无符号类型. 2.整型值和布尔值之间不能进行相互转换. 3.Java中不区分变量的定义和声明. 如:在C++中int i = 10;是一个定义,而exte ...