版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 桌面日历系统的设计与实现方案桌面日历系统的设计与实现方案摘要自上个世纪以来,随着电脑的逐渐普及,人们的工作和生活越来越方便和快捷,也使得越来越多的人依赖于电脑办公。而传统的日程记事本逐渐显现出在当今时代的不足和局限性。比如:不便携带,不便查阅,不能自动提醒等等,电脑桌面日历由此孕育而生。很快,桌面日历就以其方便的日期查询,个性化的日程安排,精确地闹钟提醒和人性化的日志系统,美观的界面设计受到广大办公人士的追捧。本设计就是针对当前网络上众多的桌面日历,综合国内外日历系统以及各项基本功能来开发的属于用户私人的个性桌面日历系统。本设计主要采用C#语言+sqlite的设计模式,将日历和日志集成到一款
2、软件上,来实现用的添加日志,设置私密日志,闹钟提醒以及个性的铃声设置等功能,既在最大程度上保护了用户的隐私,又给用户提供了方便快捷的体验,使得用户准确掌握每日的日程安排。本设计按照功能模块分为查看日志,添加日志,闹钟提醒和设置四个模块。本文详细介绍了该日历系统的功能需求,系统设置和具体实现。并且简要介绍了该系统开发采用的过程及方法。关键词 :桌面日历;日程;多用户;Design and Development of Desktop Calendar SystemAbstractAs PC becomes more and more popular since last century, peo
3、ples work and lifebecome more and more convenient, and people rely increasingly on computers.However, the conventional notepad has revealed its deficiencies and limitations, suchas inconvenience. And conventional notepad can not alarm automatically also. So, the desktop calendar appears. Because of
4、its convenient date inquiry, individualized schedule management system, accurate schedule alarm system and friendly user interface, desktop calendar is highly estimated among computer workers.Combining the functions of a number of todays desktop calendars, this design aims to develop an individual d
5、esktop calendar and schedule system. It is developed by C# and SQL, based on C/S. Its functions include “multi-user login”, “schedule management”, “schedule alarm”, “date inquiry”, “holiday management”and so on.The calendar is convenient for users to check the schedule everyday, and also canprotect
6、each users private information.The calendar includes “user login”module, “user registry and edition” module, “date and time” module, “holiday manage” module, “schedule manage” module, “schedule alarm”module and “database”module. This article describes the functional requirement, system design and de
7、tail implementation. It also describes the methods and development process of this system in brief.Key words: Desktop Calendar;Schedule;Multiple Userii目录摘要IIIAbstractii1 绪论11.1 课题研究的目的及意义11.2 桌面日历的发展状况12 相关理论基础22.1 C#22.1.1 C#简介22.1.2 C#的优点32.1.3 C#的缺点42.1.4 C#的与语言结构52.1.5 C#的程序执行82.1.6 C#的历史发展82.2
8、SQLite介绍92.2.1 SQLite简介92.2.2 SQLite的特点92.2.3 使用.net操作SQLite102.2.4 使用SQLite的注意事项112.2.5 SQLite的语言绑定122.2.6 SQLite的客户端管理132.2.7 SQLite的类型143 系统需求分析153.1 用户需求153.2 功能需求153.3 性能需求164 桌面日历的系统功能实现174.1 查看日记模块174.2 添加日志模块184.3. 闹钟提醒模块245 系统测试275.1 主要功能的验证275.2 密码的安全性检验325.3 日志信息的安全性检验325.4 数据库的安全性336 结论3
9、4参考文献35致谢36外文文献3711 绪论1.1 课题研究的目的及意义随着信息时代的到来,手机,电脑等新生代的通信设备成了通信领域的主力军。并且随着手机和电脑的普及,最终成为通信的主导工具。根据国家统计局的统计,至2010年7月,中国的网名数量超过4.2亿,手机网民数量达到2.77亿。这将意味着我国有超过4.2亿的人民正在享受电子时代所带来的方便和快捷。对于大多数网民而言,手机,电脑已经成为他们生活中不可或缺的一部分,让他们花更多的时间和金钱去购买和使用非电子版的日历,这显然是不实际的。桌面日历系统的诞生也是必然的。本软件所要设计的是一款集传统日历功能和日志功能于一身的个性化的桌面日历系统。
10、同时增加提醒,记事,备忘,存储,密码设置等常用功能,真正意义上实现便捷,有效,实时的查找信息,了解信息。1.2 桌面日历的发展状况 日历软件真正的诞生源于WINDOWS系统的开发。日历软件是WINDOWS系统的自带软件,主要是方便用户了解时间而附加上去的。但是,作为WINDOWS系统开发者的主要力量西方人,以他们的对事物的了解方式所做出来的软件并非被所有中国的网民所认同。对深受中国文化深深影响的中国网民来说,使用这种日历软件并没有带来什么方便,因为在中国人的日常生活中还有一部日历农历。一些有预见的软件公司找到了商机,开发了诸多的只面向中国网民的桌面日历备忘管理软件。伴随着科学技术的日新月异,桌
11、面日历备忘管理软件得到了长足的发展,并正在不断地更新、完善,同时,出现的问题也愈加明显。由于软件公司在利益的趋势与业内强大的竞争的压迫下,软件公司为所开发的软件能够获得更多的用户使用,在所开发的桌面日历备忘管理软件中捆绑了大量的其他功能软件,例如股市信息、网络电视、游戏等,使得一个本该短小简单的软件变成了一个捆绑了大量功能的“变形金刚”。就我熟悉的八戒桌面工具,其中包含了各种硬件的监测信息、计算器、证券信息、基金信息、网络广播、网络电视、电子字典、各种版本的天气预报等49个功能部件,其功能之强大与齐全让人望尘莫及。实际上,大多数的网民根本就不需要这么多的功能软件。即使有部分网民需要使用这些软件
12、,也必然会选择使用更加专业的软件,而不会用这些看似强大,但又不专业的功能软件。当网民们只想使用一个纯粹的桌面日历备忘录软件时,确又不得不使用那些“变形金刚”,这是多么苦恼的事情。所以开发一款纯粹的桌面日历备忘管理软件存在其开发的价值的。2 相关理论基础2.1 C#2.1.1 C#简介C#读作C Sharp。最初它有个更酷的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#。在1998年,Delphi语言的设计者Hejlsberg带领着Microsoft公司的开发团队,开始了第一个版本C#语言的设计。在2000年9月,国际信息和通信系统标准
13、化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。在过去的二十年里,C 和C+已经成为在商业软件的开发领域中使用最广泛的语言。它们为程序员提供了十分灵活的操作,不过同时也牺牲了一定的效率。许多程序员都试图寻找一种新的语言。希望能在功能与效率之间找到一个更为理想的通过权衡点。对于C/C+用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。C#是由微软开发的一种全新的、面向对象的编程语言。作为Visual Studio中的一部分推出。既保持了C+中熟悉的语法,并且还包含了大量的高效代码和面向对象特性。C#使得C+程序员可以高
14、效的开发程序,而绝不损失C/C+原有的强大的功能。因为这种继承关系,C#与C/C+具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。C#语言将在保持C/C+灵活性的基础上为程序员带来更高效的RAD 开发方GUI 界面。它不仅能用于WEB 服务程序的开发,并且还能开发强大的系统级程序。微软称C#是由C 和C+派生而来的一种“简单、流行、面向对象、类型安全”的程序设计语言C#意在综合Visual Basic 的高效率和C+的强大功能。事实上,C#将是完全依靠Windows 的最完美产物。那些困绕Java SDK, MFC和SET 的数据库已成为过去。你想放入C#的任何东西,(无论何种语言)
15、只要在Windows 的.NET 子系统下建立和包装后都可以使用Windows 的运行库。C#是一种安全的、稳定的、简单的、优雅的,由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#是面向对象的编程语言。它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯
16、领域。正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选无论是高级的商业对象还是系统级的应用程序。使用简单的C#语言结构,这些组件可以方便的转化为XML网络服务,从而使它们可以由任何语言在任何操作系统上通过INTERNET进行调用。C#使得C+程序员可以高效的开发程序,且因可调用由 C/C+ 编写的本机原生函数,因此绝不损失C/C+原有的强大的功能。因为这种继承关系,C#与C/C+具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。2.1.2 C#的优点C#在带来对应用程序的快速开发能力的同时,并没有牺牲C与C+程序员所关心的各种特性。它忠实地继承了C和C+的优点。如果你对C
17、或C+有所了解,你会发现它是那样的熟悉。即使你是一位新手,C#也不会给你带来任何其它的麻烦,快速应用程序开发(Rapid Application Development,RAD)的思想与简洁的语法将会使你迅速成为一名熟练的开发人员。C#是专门为.NET应用而开发出的语言。这从根本上保证了C#与.NET框架的完美结合。在.NET运行库的支持下,.NET框架的各种优点在C#中表现得淋漓尽致。概括来讲,C#的优点有:第一,简洁的语法。在缺省的情况下,C#的代码在.NET框架提供的“可操纵”环境下运行,不允许直接地内存操作。它所带来的最大的特色是没有了指针。与此相关的是,那些在C+中被疯狂使用的操作符
18、(例如:“:”、“-”和“.,”)已经不再出现。C#只支持一个“.”,对于我们来说,现在需要理解的一切仅仅是名字的嵌套而已。C#用真正的关键字换掉了那些把活动模板库(Active Template Library,ALT)和COM搞得乱糟糟的伪关键字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每种C#操作符在.NET类库中都有了新名字。第二,精心的面向对象设计。C#具有面向对象的语言所应有的一切特性:封装、继承与多态性,这并不出奇。然而,通过精心地面向对象设计,从高级商业对象到系统级应用,C#建造广泛组件的绝对选择。在C#的类型系统中,每种类型都可
19、以看作一个对象。C#提供了一个叫做装箱(boxing)与拆箱(unboxing)的机制来完成这种操作,而不给使用者带来麻烦。C#只允许单继承,即一个类不会有多个基类,从而避免了类型定义的混乱。在后面的学习中你很快会发现,C#中没有了全局函数,没有了全局变量,也没有了全局常数。一切的一切,都必须封装在一个类之中。你的代码将具有更好的可读性,并且减少了发生命名冲突的可能。整个C#的类模型是建立在.NET虚拟对象系统(Visual Object System,VOS)的基础之上,其对象模型是.NET基础架构的一部分,而不再是其本身的组成部分。C#具备了良好的开发环境。结合自身强大的面向对象功能,C#
20、使得开发人员的生产效率得到极大的提高。对于公司而言,软件开发周期的缩短将能使它们更好应付网络经济的竞争。在功能与效率的杠杆上人们终于找到了支点。第三,完整的安全性和错误处理。语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。任何人都会犯错误,即使是最熟练的程序员也不例外:忘记变量的初始化,对不属于自己管理范围的内存空间进行修改,.。这些错误常常产生难以预见的后果。一旦这样的软件被投入使用,寻找与改正这些简单错误的代价将会是让人无法承受的。C#的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为了减少开发中的错误,C#会帮助开发者通过更少的代码
21、完成相同的功能,这不但减轻了编程人员的工作量,同时更有效地避免了错误的发生。第四,灵活性和安全性。在简化语法的同时,C#并没有失去灵活性。尽管它不是一种无限制语言,比如:它不能用来开发硬件驱动程序,在默认的状态下没有指针等等,但是,在学习过程中你将发现,它仍然是那样的灵巧。如果需要,C#允许你将某些类或者类的某些方法声明为非安全的。这样一来,你将能够使用指针、结构和静态数组,并且调用这些非安全代码不会带来任何其它的问题。此外,它还提供了一个另外的东西(这样的称呼多少有些不敬)来模拟指针的功能-delegates,代表。再举一个例子:C#不支持类的多继承,但是通过对接口的继承,你将获得这一功能。
22、正是由于其灵活性,C#允许与C风格的需要传递指针型参数的API进行交互操作,DLL的任何入口点都可以在程序中进行访问。C#遵守.NET公用语言规范(Common Language Specification,CLS),从而保证了C#组件与其它语言组件间的互操作性。元数据(Metadata)概念的引入既保证了兼容性,又实现了类型安全。2.1.3 C#的缺点首先,在大量的现有Windows 平台上,C# 的程序还不能运行,因为C# 程序需要 .NET 运行库为基础,而 .NET 运行库将作为新一代的Windows(Whistler)的一部分发行,或以Service Pack 的形式提交给Windo
23、ws Me 和 Windows 2000用户。所以在近期,C# 会主要在服务器上得到应用。其次,C# 能够使用的组件和库还只有 .NET 运行库等很少的选择,没有丰富的第三方软件库可用,这需要有一个过程同时各软件开发商的支持也很重要。第三,JAVA 的成功因素里有一些是反微软阵营的吹捧,虽然“只写一次,到处运行”只是一句口号,但毕竟已经是一种成熟的技术。而C# 的鼓吹者目前只有名声不佳的微软,且只能运行在Windows 上。实际上这两种语言都不是不可替代的,理智的说,对软件开发商而言,什么工具用的最熟,那就是最好的工具。尤其对C+的使用者C# 没有带来任何新东西,因为.NET 运行库在C+中也
24、可以使用,没有要换的绝对的理由。 作为微软的产品,它不能帮助竞争者-其它操作系统。作为微软的产品,它必须追求稳定、严谨,而不要出现任何错误。C#团队实力确实非常强大,导致C#不会出现任何一个低级错误,就连 if(a = false) 这样的代码都会出现一个警告。C#的语法、底层库也无时不刻在印证一个理念:我们做的是产品,我们必须保证产品根据我们所期望的工作,而不允许出现任何错误。这是一个优点,也是一个缺点。当我们的需求和产品设计者所期望的一致时,事情会变的非常轻松。但如果需求和期望不同时,麻烦事情会接踵而至。 举个例子,当我们希望switch能够贯穿case时,就会出现麻烦-产品设计者不允许用
25、户直接这么做-虽然他有合适的理由,也提供了实现这个功能的替代方法,但用户必须按他说的做。如果这种情况发生在其它产品设计者未考虑到的需求时,那么这个麻烦将会更大。比如当我们想要重载来模拟C+代码时,就会发现这是一个不可能的任务。很多人都有这种感受,直接使用IDE自带的功能开发,做起来非常轻松。但一旦有一种自主的想法时,就很难实现-比如修改软件主题。在C#中,文档注释需求书写xml,但是文档注释却是不能继承的-用户必须手动为每个函数和重载添加注释。C#的很多常用的工具类因为其使用的局限性(如菜鸟用了就会出错)而不被公开。典型的例子如下:public string GetValue(int inde
26、x) if(index this.Count) throw new ArgumentOutOfromRangeException(); return GetValueInternal(index);internal string GetValueInternal(int index) /.C#把用户当成傻子-GetValue 会传递一个非法的index,然后自己则使用更高效的GetValueInternal 。C#系统库的设计通过对 index 检测,来确保抛出的是一个符合意义的异常。那用户怎么办?如果在项目中,不检测 index 是否合法,则显得不严谨,代码质量低(不检查 index,会导致
27、 index 错误时将出现 IndexOfRangeException,而不是 ArgumentOutOfRangeException,这会让第三方用户迷惑:到底应该捕获哪个异常)。而检测则是在浪费代码量,一个函数尚且如此,一个项目可见一斑。此外,用户经常需要使用一个类来实现功能,但其实这个类在系统库中是存在的,但由于它只是一个内部使用的功能模块所以不是 public 。这时用户只好另起炉灶。这也不难解释为了明明有 Buffer.Copy 这个方法,系统内部却只会调用 Buffer.CopyInternal(不是public的) 而不是 Buffer.Copy ,而 Buffer.CopyIn
28、ternal 却是用户真正所需要的函数。总体看,C#不适合做项目。它是一个很大的坑,因为它会通过各种方式消耗用户的时间。特别是追求完美的人,想要紧跟微软的节奏创造完美,那简直是在拿时间开玩笑。而对于仅仅想做完项目的人,也会越做越烦:明明简单的事情要搞这么复杂。即使如此,C#终究也只是一个语言,一个工具。客观评价一个工具的好坏没有实际意义,关键看用户能否熟练使用,并且扬长避短。没有最好的语言,但有最适合自己的语言。2.1.4 C#的与语言结构类:在C#中类的声明与C+和Java很相似。但是,不象C+,C#结构体与类是不支持继承。但是,与Java相同的是,一个结构体可以实现接口(interface
29、)。Java的关键字import已经被替换成using,它起到了同样的作用。类可以是抽象的和不可继承的:一个被申明成abstract的类不能被实例化,它只能被用做一个基类,C#关键字lock就像Java关键字final,它申明一个类不是抽象的,但是它也不能被用做另一个类的基类界面:就象在Java中一样,一个界面是一组方法集合的抽象定义。当一个类或结构体实现一个界面的时候,它必须实现这个界面中定义的所有方法。一个单一的类可以实现几个界面,也许以后会出现一些微妙的差别,但是这个特点看起来与Java相比没有变化。在Java中,一个接口是一组方法集合的抽象定义.当一个类或结构体实现一个接口的时候,它必
30、须实现这个接口中定义的所有方法.一个单一的类可以实现几个接口.也许以后会出现一些微妙的差别,但是这个特点看起来与Java相比没有变化。布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其他类型没有直接的转换过程.布尔常量true和false是C#中的关键字.错误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程.内存管理:由底层.NET框架进行自动内存垃圾回收。布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型,从布尔类型到其他类型没有直接的转换过程,布尔常量true和false是C#中的关键字。错
31、误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程。内存管理:由底层.NET框架进行自动内存垃圾回收。一个基本的C#类中包含数据成员、属性、构造器和方法。属性可以是静态或实例成员。接口:是其他类型为确保它们支持某些操作而实现的引用类型。接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型。一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以包含方法、属性、索引器和事件作为成员。强类型:C#是一个强类型的语言,它的数值类型有一些可以进行隐式转换,其他的必须显式转换,隐式转换的类型只能是长度短的类型转换成长的类型,int可以转换成long、float、do
32、uble、decimal,反之必须显式的转换。编译:程序直接编译成标准的二进制可执行形式.但C#的源程序并不是被编译成二进制可执行形式,而是一种中间语言(IL),类似于JAVA字节码。如果前面的Hello World程序被保存成一个c#与权威指南教程文本文件并被命名为Hello.cs,它将被编译成命名Hello.exe的可执行程序。C#程序不能直接编译成标准的二进制可执行形式,与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过 .NET Framework 的虚拟机被称之为通用语言执行层(Common Language Runtim
33、e, CLR)执行。一个C#的结构体与C+的结构体是相似的,因为它能够包含数据声明和方法.但是,不象C+,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现接口。预编译:C# 中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用的预编译指令有:#define,#undef,#if,#elif,#else,#endif,#warning,#error,#line。没有了#include伪指令,无法再用#define 语句对符号赋值,所以就不存在源代码替换的概念-这些符号只能用在#if和#elif伪指令里.在#line伪指令里的数字(和可选的名字)能够修改
34、行号还有#warning和#error输出结果的文件名。操作符重载:一些操作符能够被重载,而另一些则不能.特别的是,没有一个赋值运算符能够被重载.能够被重载的单目操作符是:+ - ! + - true false能够被重载的二元运算符是:+、 - 、*、 /、 %、 &、 |、 、 、 =、 !=、 、 = 、=。类型:C# 中的类型一共分为两类,一类是值类型(Value Type),一类是引用类型(Reference Type)。值类型和引用类型是以它们在计算机内存中是如何被分配的来划分的。值类型包括 结构和枚举,引用类型包括类、接口、委托 等。还有一种特殊的值类型,称为简单类型(Simpl
35、e Type),比如 byte,int等,这些简单类型实际上是FCL类库类型的别名,比如声明一个int类型,实际上是声明一个System. Int32结构类型。因此,在 Int32类型中定义的操作,都可以应用在int类型上,比如 “123.Equals(2)”。所有的值类型都隐式地继承自System.ValueType类型(注意System.ValueType本身是一个类类型),System.ValueType和所有的引用类型都继承自 System.Object基类。不能显式地让结构继承一个类,因为C#不支持多重继承,而结构已经隐式继承自ValueType。NOTE:堆栈(stack)是一种后
36、进先出的数据结构,在内存中,变量会被分配在堆栈上来进行操作。堆(heap)是用于为类型实例(对象)分配空间的内存区域,在堆上创建一个对象,会将对象的地址传给堆栈上的变量(反过来叫变量指向此对象,或者变量引用此对象)。中间代码:微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地.微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多-如果不是大多数的话-程序员认为Java程序要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程序(指的是用C#,Visual Basic,Managed C+-C+的一个符合CLS的版本-等语言编写的程序)将
37、在性能上超过解释性的Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是Java JIT编译器的普遍存在使得Java和C#在性能上相对相同.象C#是编译语言而Java是解释性的,之类的声明只是商业技巧.Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码。基本数据类型:C#拥有比C/C+或者Java更广泛的数据类型.这些类型是bool、byte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal,像Java一样,所有这些类型都有一个固定的大小
38、.又像C和C+一样,每个数据类型都有有符号和无符号两种类型.与Java相同的是,一个字符变量包含的是一个16位的Unicode字符,C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字。两个基本类:一个名叫object的类是所有其他类的基类。而一个名叫string的类也象object一样是这个语言的一部分.作为语言的一部分存在意味着编译器有可能使用它,无论何时在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它。参数传递:方法可以被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递。ref关键字可以用来强迫一个变量通过引用传递
39、,这使得一个变量可以接受一个返回值。out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值。COM的集成:C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术.实际上,最终有可能在任何.NET语言里编写COM客户和服务器端。C#编写的类可以子类化一个已存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说,JScript语言子类化它从而得到第三个COM组件。这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用任何.NET语言子类化。索引下标:一个索引与属性除了不使用属性名
40、来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标一样)以外是相似的。代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就行了。代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用.一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中。2.1.5 C#的程序执行C#所开发的程序源代码并不是编译成能够直接在操作系统上执行的二进制本地代码。与Java类似,它被编译成为中间代码,然后通过.NET Framework的虚拟机被称之为通用语言运行时(CLR)执行。所有的.Ne
41、t编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。2.1.6 C#的历史发展C#是微
42、软公司在2000年6月发布的一种新的编程语言,主要由安德斯海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行。它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,并且新增了许多功能及语法糖,而且它是微软公司.NET windows网络框架的主角。C#读作C Sharp。最初它有个更酷的名字,叫做COOL。微软从1998年12月开始了COOL项目,直到2000年2月,COOL被正式更名为C#。在1998年,Delphi语言的设计者Hejlsberg带领着Microsoft公司的开发团队,开始了第一个版本C#语言的设
43、计。在2000年9月,国际信息和通信系统标准化组织为C#语言定义了一个Microsoft公司建议的标准。最终C#语言在2001年得以正式发布。原Broland公司的首席研发设计师安德斯海尔斯伯格(Anders Hejlsberg)在微软开发了Visual J+ 1.0,很快的Visual J+由1.1版本升级到6.0版。SUN公司认为Visual J+ 违反了Java开发平台的中立性,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC 2000)上,发表新的语言C#。C#语言取代了Visual J+,语言本身深受 Java、C 和 C+ 的影响。C#是兼顾
44、系统开发和应用开发的最佳实用语言,并且很有可能成为编程语言历史上的第一个“全能”型语言。看过这篇简史,不要把C#看成年轻后生了只要是“马拉多纳”,就早晚当“球王”。C#1.0,纯粹的面向对象。1998年底,微软正在忙于新一代COM的设计工作,COM一直是组件化开发中非常成功的一种技术;但由于它仅提供了二进制层面上的统一,因此无法将类型信息和用于支持基础平台和开发工具的信息放到组件中,Java逐步走向成熟。微软学习Java的做法,将虚拟机的概念引入到了COM领域;同时,微软提出了“元数据”的概念,用于描述组件的类型信息和工具支持信息,并决定将其放入到组件当中。1998年12月,微软启动了一个全新
45、的语言项目COOL,这是一款专门为CLR设计的纯面向对象的语言,也正是本文的主角C#的前身。1999年7月份,微软完成了COOL语言的一个内部版本。2000年2月份,微软才正式将COOL语言更名为C#。据说起这个名字是因为C#开发小组的人很讨厌搜索引擎,因此把大部分搜索引擎无法识别的“#”字符作为该语言名字的一部分;还有一种说法是在音乐当中“#”是升调记号,表达了微软希望它在C的基础上更上一层楼的美好愿望当然这些都只是传说,无从考证。又是历经了一系列的修改,微软终于在2000年7月发布了C#语言的第一个预览版。2.2 SQLite介绍2.2.1 SQLite简介 SQLite,是一款轻型的数据
46、库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有14个年头,SQLite也迎来了一个版本 SQLite 3已经发布。不像常见的客户-服务器范例,SQLi
47、te引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文
48、件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。2.2.2 SQLite的特点SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准大多数标准(比如视图、事务、触发器等)。QLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以使用它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以
49、在部署的时候能够省去不少麻烦。 SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,不需要管理员去创建新数据库或分配用户权限,在系统崩溃或失电之后自动恢复。 大多数SQL数据库引擎是作为一个单独的服务器进程被执行。访问数据库的程序使用某种内部进程通信(典型的是TCPIP)与服务器通信,完成 发送请求到服务器和接收查询结果的工作。SQLite不采用这种工作方式。使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间 的服务器进程。所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,
50、也照用不误。 一个SQLite数据库是一个单独的普通磁盘文件,能够被定位在路径层次的任何地方。如果 SQLite能读写磁盘文件,则它也能访问数据库。大多数SOL数据库引擎趋向于把数据存为一个大的文件集合,通常这些文件在一个标准的定位中,只有数据 库引擎本身能访问它。SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:ATTACH DATABASE,BEGIN TRANSACTION,Comment,COMMIT TRANSACTION,COPY,CREATE INDEX,CREATE TABLE,CREATE TRIGGER,CREATE VIEW,DEL
51、ETE,DETACH DATABASE,DROP INDEX,DROP TABLE,DROPTRIGGER,DROP VIEW,END TRANSACTION,EXPLAIN,Expression,INSERT,ON CONFLICT clause,PRAGMA,REPLACE,ROLLBACK TRANSACTION,SELECT,UPDATE。同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个
52、很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。它的特性包括1). ACID事务。2). 零配置 无需安装和管理配置。3).储存在单一磁盘文件中的一个完整的数据库。4).数据库文件可以在不同字节顺序的机器间自由的共享。5).支持数据库大小至2TB。6). 足够小, 大致13万行C代码, 4.43M。7). 比一些流行的数据库在大部分普通数据库操作要快。8). 简单, 轻松的API。9). 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定。10). 良好注释的源代码, 并且有着90%以上的测试覆盖率。11). 独立: 没有额外依赖。12). 源
53、码完全的开源, 你可以用于任何用途, 包括出售它。13). 支持多种开发语言,C, PHP, Perl, Java, C#,Python, Ruby。2.2.3 使用.net操作SQLite先下载ADO.NET2.0 Provider for SQLite。下载binaries zip版就可以了。下载完后解压缩,可以在bin目录下找到System.Data.SQLite.DLL。在vs2008中用Add Reference功能把System.Data.SQLite.DLL加到工程里就可以了。运行下面代码试试:string datasource = e:/tmp/test.db;System.D
54、ata.SQLite.SQLiteConnection.CreateFile(datasource);/连接数据库System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection();System.Data.SQLite.SQLiteConnectionStringBuilder connstr = new System.Data.SQLite.SQLiteConnectionStringBuilder();connstr.DataSource = datasource;connstr.Pass
55、word = admin;/设置密码,SQLite ADO.NET实现了数据库密码保护conn.ConnectionString = connstr.ToString();conn.Open();/创建表System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();string sql = CREATE TABLE test(username varchar(20),password varchar(20);cmd.CommandText = sql;cmd.Connection = conn;cmd
56、.ExecuteNonQuery();/插入数据sql = INSERT INTO test VALUES(a,b);cmd.CommandText = sql;cmd.ExecuteNonQuery();/取出数据sql = SELECT * FROM test;cmd.CommandText = sql;System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();StringBuilder sb = new StringBuilder();while (reader.Read()sb.Append(username:).Append(reader.GetString(0).Append(n).Append(password:).Append(reader.GetString(1);MessageBox.Show(sb.ToString();2.2.4 使用SQLite的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陶瓷制品订购协议三篇
- 智能物流系统投资合同三篇
- 信阳师范大学《热力学与统计物理》2022-2023学年第一学期期末试卷
- 信阳师范大学《变态心理学》2022-2023学年第一学期期末试卷
- 小班节日文化的教育传承计划
- 手术室主管工作计划
- 汽车燃料运输合同三篇
- 新余学院《编舞技法》2022-2023学年第一学期期末试卷
- 西南林业大学《家具设计基础》2021-2022学年第一学期期末试卷
- 信阳师范大学《Python语言程序设计实验》2022-2023学年第一学期期末试卷
- DB11-T 1520-2022 在用电梯安全风险评估规范
- 浙江省宁波市鄞州区2023-2024学年九年级上学期期末考试科学试题
- 金华市水资源保护节约与综合利用规划
- 第16课 大家排好队 一年级道德与法治上册(2024版)教学设计
- 安保设施保障措施方案
- 软件运维服务协议合同范本
- 2024市场营销知识竞赛题库及答案(共169题)
- 《科研诚信与学术规范》学习通超星期末考试答案章节答案2024年
- 部编统编版小学道德与法治一年级下册-集体备课记录(表格式)
- 2024年平面设计师技能及理论知识考试题库(附含答案)
- 部编版语文四年级上册第五单元大单元作业设计
评论
0/150
提交评论