例:RSS阅读器的设计方案与实现_第1页
例:RSS阅读器的设计方案与实现_第2页
例:RSS阅读器的设计方案与实现_第3页
例:RSS阅读器的设计方案与实现_第4页
例:RSS阅读器的设计方案与实现_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE《客户机服务器应用开发综合实验》题目:RSS阅读器的设计与实现分院:理工分院班级:11计算机科学与技术本1姓名:张三学号:0000000008完成日期:2013年6月8日温州大学瓯江学院教务部二○一二年十一月制目录TOC\o”1—3"\h\z\uHYPERLINK\l"_Toc346882838"1项目需求 PAGEREF_Toc346882838\h—1-HYPERLINK\l”_Toc346882839”1。1前言ﻩPAGEREF_Toc346882839\h-1-HYPERLINK\l”_Toc346882840"1.2RSS阅读器研究的背景与意义 PAGEREF_Toc346882840\h—1—HYPERLINK\l”_Toc346882841"1.3分析需求 PAGEREF_Toc346882841\h—2—HYPERLINK\l"_Toc346882842"1。4功能分析 PAGEREF_Toc346882842\h—2—HYPERLINK\l"_Toc346882843”2软件开发工具ﻩPAGEREF_Toc346882843\h-3-HYPERLINK\l"_Toc346882844”2.1.NET技术简介 PAGEREF_Toc346882844\h-3-HYPERLINK2.1。1公共语言运行库 PAGEREF_Toc346882845\h-3-HYPERLINK\l”_Toc346882846"2.1.2。NET基类库ﻩPAGEREF_Toc346882846\h—3-HYPERLINK\l"_Toc346882847"2。2c#语言简介 PAGEREF_Toc346882847\h-3-HYPERLINK3技术分析ﻩPAGEREF_Toc346882848\h—5-HYPERLINK\l"_Toc346882849"3.1泛型ﻩPAGEREF_Toc346882849\h—5-HYPERLINK\l"_Toc346882850”3。2简单工厂设计模式 PAGEREF_Toc346882850\h-5-HYPERLINK\l"_Toc346882851"3.3序列化与反序列化 PAGEREF_Toc346882851\h—5-HYPERLINK\l"_Toc346882852"4软件设计ﻩPAGEREF_Toc346882852\h-7-HYPERLINK\l”_Toc346882853"4。1设计方案概述ﻩPAGEREF_Toc346882853\h—7-HYPERLINK4.2.2频道基类类设计FeedBase。cs PAGEREF_Toc346882856\h-8-HYPERLINK\l”_Toc346882857"4。2.3频道子类类设计RssFeed.cs PAGEREF_Toc346882857\h-8-HYPERLINK\l"_Toc346882858”4.2.4频道子类类设计AtomFeed。csﻩPAGEREF_Toc346882858\h—8-HYPERLINK\l”_Toc346882859"4.2。5FeedFactory工厂类设计ﻩPAGEREF_Toc346882859\h-9—4.2.7ProfileManger管理配置类ﻩPAGEREF_Toc346882861\h—9-HYPERLINK\l"_Toc346882862"5详细设计与编码实现ﻩPAGEREF_Toc346882862\h—10—HYPERLINK\l"_Toc346882863"5。1类设计 PAGEREF_Toc346882863\h-10-HYPERLINK\l”_Toc346882864”5.1.1文章类设计 PAGEREF_Toc346882864\h-10-HYPERLINK\l"_Toc346882865"5.1.2频道类设计ﻩPAGEREF_Toc346882865\h-11-HYPERLINK\l”_Toc346882866"5.1.3FeedFactory工厂类设计 PAGEREF_Toc346882866\h-12—HYPERLINK\l”_Toc346882867"5。1.5ProfileManger管理配置类 PAGEREF_Toc346882867\h—14—HYPERLINK\l”_Toc346882868"5.2阅读器界面设计 PAGEREF_Toc346882868\h-17-HYPERLINK\l"_Toc346882869"5.2。1主界面设计 PAGEREF_Toc346882869\h-17—HYPERLINK\l”_Toc346882870"5.2。2子界面设计 PAGEREF_Toc346882870\h-18-HYPERLINK\l"_Toc346882871”5.3数据显示ﻩPAGEREF_Toc346882871\h-19—HYPERLINK\l"_Toc346882872”6结论ﻩPAGEREF_Toc346882872\h—22-HYPERLINK\l”_Toc346882873"6。1本文完成的工作ﻩPAGEREF_Toc346882873\h—22-HYPERLINK\l"_Toc346882874”6.2软件的优点与缺点ﻩPAGEREF_Toc346882874\h-22—1-1项目需求1.1前言获得信息是在人类的生活中是必不可少的环节.如果现在的社会对获得信息不快捷,那么这个社会将不会像如今这般的发达和进步。在当今网络技术相当发达的今天,大量的信息充斥在网上。现在网络越来越发达,用户在网上既能工作也能娱乐.当用户在网上需游览很多个网站才能获取自己多需的信息时,那就感觉很累。因为现在每个网站都有很多信息,找到自己所喜欢的并不是一件轻松的事。这时RSS阅读器的功用就体现出来了。每当那些网站的信息更新时,阅读器上的信息也会更新.如何让RSS阅读器的功能越来越适合用户口味,成为各个运营商开发一个实时,精确,个性化的RSS阅读器变的至关重要。对具有高效的阅读方式的RSS阅读器来说,它的研究也就有其重要的意义。1.2RSS阅读器研究的背景与意义RSS阅读器就是能读取Rss和Atom两种格式文档的软件。RSS通常被用于新闻和其他按顺序排列的网站,例如Blog。RSS这种高效的阅读方式在国内并没有得到普及。除了一些博客和主流媒体网站外,到目前为止大多数人对RSS还并不熟悉。RSS的目标群体是有定向阅读习惯的人,但RSS源的质量一直是好差不等的,门户网站信息太多、小网站信息又少,使得RSS使用者难以壮大。目前比较受欢迎的信息主要是BLOG、分类新闻。国内的RSS内容提供商数目也还不是很多.比较有名的国内RSS阅读器有鲜果,抓虾等。现在的阅读器主要分为三种:第一种阅读器是运行在计算机桌面上的应用程序,通过所订阅的网站或博客中的新闻提供信息,可自动及时的获得更新了的新闻。第二种阅读器是已内含在计算机应用软件中。例如,Outlook已经内建了RSS的文件夹,用户只要点击网站订阅按钮或手动在Outlook中加入RSS地址就可以了。第三种阅读器是在线的阅读器,其优点在于不用安装就可以获得RSS阅读的功能,推荐和收藏自己感兴趣的文章。提供这种服务的主要有两类网站,一种是专门提供RSS阅读器的网站,例如GoogleReader和鲜果;另一种是提供个性化首页的网站,例如netvibes和雅蛙.现在网站的广告、不健康的内容充斥着屏幕。这使用户更喜欢自己可以控制的体验。在一些大的主流媒体网站的推广下,RSS的用户会越来越多。这使越来越多的内容提供者为了获得更大的客户群也会推出RSS服务,靠这样来获得更大的流量和知名度。在新闻出版领域,RSS技术作为电子出版的一个新型渠道已经在新华社等新闻机构得到了尝试,并逐渐成熟走向商业化。RSS是伟大的发明,它让读者从被动接受变成主动筛选,极大提高了阅读效率,减少了阅读的额外时间消耗.由于大多数用户对这个新技术还不怎么熟悉,不怎么会用,除了一些用后爱不释手的技术人员或关注资讯方面的从业人员外,普通用户跟本就没用上这个新技术,他们了解资讯最多也不过是看看百度新闻或门户网站新闻之类的对于RSS订阅服务只是抱着试试看的想法,日积月累下来大家沉淀下来的用户并不多,这部分用户距离消费比较远.这些原因最终导致了RSS阅读器发展状况不佳。从技术来说上还没有什么能代替RSS。相信在不久的未来,RSS技术会被广泛应用。1.3分析需求本设计要设计一个RSS阅读器,其实RSS是站点用来和其他站点之间共享内容的一种简易方式(也叫新闻聚合)。通常被用于新闻和其他按顺序排列的网站.一段项目的介绍可能包含新闻的全部介绍等。或者仅仅是额外的内容或者简短的介绍.这些项目可以称为频道,一个频道的链接通常能链接到全部内容。网络用户可以在客户端借助于支持RSS的新闻聚合软件(例如抓虾、周博通游览器、本设计的NewsReader),在不打开网站内容页面的情况下,将网站提供的支持RSS输出的网站内容(新闻、Blog等)聚集到RSS阅读器中,用户可以不必登录各个提供信息的网站,而通过“RSS阅读器"来阅读这些内容。1。4功能分析本设计的类的功能如下:(1)文章类Article:它的属性主要有文章的标题和文章的链接地址。(2)频道类(FeedBase类、RssFeed类、AtomFeed类):用来保存频道信息的新闻订阅点。(3)工厂类FeedFactory:自动辨别从网上获得的Feed文件是Rss类型还是Atom类型。(4)配置类Profile:用来保存阅读器中显示的各个频道的集合。(5)类ProfileManger:用来管理配置信息的Profile类.本设计的UI界面主要有如下几个:(1)主界面:软件使用的主要界面。(2)频道增加界面:用于新增频道所需的界面。(3)频道修改界面:用于修改频道所需的界面。(4)频道删除界面:用于删除频道所需的界面。(5)频道查看界面:用于查看频道所需的界面.(6)帮助里的RSS介绍界面:介绍RSS的定义及原理。(7)帮助里的RSS使用界面:介绍RSS的使用方法.(8)帮助里的关于RSS版本信息界面:介绍RSS的版本信息.2软件开发工具2。1.NET技术简介.NET是Microsoft公司发布的新一代的系统、服务和编程平台,主要由.NETFramework和MicrosoftVisualStudio。NET开发工具组成。。NETFramework是一种新的计算平台,它包含了操作系统上软件开发的所有层,简化了在高度分布式Internet环境中的应用程序开发。。NETFramework主要包含两个最基本的内核,即公共语言运行库(CommonLanguageRuntime,简称CLR)和。NETFramework基本类库,它们为.NET平台的实现提供了底层技术支持。下面将分别做详细的介绍.2。1。1公共语言运行库公共语言运行库是。NETFramework的基础,是。NETFramework的运行环境。公共语言运行库是一个在执行时管理代码的代理,以跨语言集成、自描述组件、简单配置和版本化以及集成安全服务为特点,提供核心服务(如内存管理、线程管理和远程管理)。公共语言运行库还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性.公共语言运行库遵循公共语言架构(简称CLI)标准,可以使C++,C#,VisualBasic以及JScript等多种语言深度集成。在。NETFramework中,用一种语言所写的代码能继承用另一种语言所写的类实现,用一种语言所写的代码抛出的异常能被另一种语言写的代码捕获。2.1.2。NET基类库.NETFramework的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,例如ADO。NET,ASP.NET等。.NET基类库位于公共语言运行库的上层,与。NETFramework紧密集成在一起,可被.NET支持的任何语言所使用。.NET类库非常丰富,提供数据库访问、XML、网络通信,线程,图形图像、安全、加密等多种功能服务.类库中的基类提供了标准的功能,例如输入输出、字符串操作、安全管理、网络通信、线程管理、文本管理和用户界面设计功能。这些类库使得开发人员更容易地建立应用程序和网络服务,从而提高开发效率。2.2c#语言简介本设计是用C#语言编写的。C#是一种面向对象的编程语言,主要用于开发可以在.NET平台上运行的应用程序。C#的语言体系都构建在.NET框架上,它是C和C++派生出来的一种简单、现代、面向对象和类型安全的编程语言,并且能够与.NET框架完美结合。C#具有以下突出的特点:(1)语法简洁.不允许直接操作内存,去掉了指针操作。(2)测底的面向对象设计。C#具有面向对象语言所应用的一切特性——封装、继承和多态.(3)与Web紧密结合,C#支持绝大多数的Web标准.(4)强大的安全机制.可以消除软件开发中的常见错误(如语法错误),。NET提供的垃圾回收器能够帮助开发者有效地管理内存资源。(5)兼容性。因为C#遵循。NET的公共语言规范(CLS),从而能够保证与其他语言开发组件的兼容.(6)灵活的版本处理技术。因为C#语言本身内置了版本控制功能,使开发人员更加容易地开发和维护.(7)完善的错误、异常处理机制.C#提供了完善的错误和异常处理机制,使程序在交付应用时能够更加准确。3技术分析3.1泛型本设计中使用了泛型技术。泛型是C#2。0中的一个新特性。通过泛型可以定义类型安全的数据类型,它的最显著应用就是创建集合类,可以约束集合类内的元素类型.泛型有很多传统集合没有的特性,与传统集合相比,它的类型更为安全,无须装箱与拆箱的操作.泛型对于整个C#有很重要的意义.它的重要性主要体现在以下几点。(1)解决了很多繁琐的操作问题,例如传统集合中获取元素需要大量的类型转换,不易控制程序的异常,而泛型集合无须这些类型的转换,使我们编程更加便捷。(2)提供了更好的类型安全性。泛型对于类型的约束十分严格,它可以控制我们在集合中对于不同类型的对象的胡乱使用,从而保证程序类型的安全。(3)CLR可以支持泛型,这样使得整个.NET平台都能使用泛型.3.2简单工厂设计模式简单工厂模式是设计模式中的一种。软件中的设计模式是软件开发中对于某种需求的一种经验的总结,是特定问题经过实践检验的特定解决方法。一般情况下就是根据参数数据返回一个适当的子类,然后用基类或接口引用具体的对象,而不用考虑该实际对象的产生过程.在设计模式的简单工厂模式中,简单工厂也是用来生产“产品"的,在程序中也就是“对象.”在程序中的类FeedFactory就是一个简单工厂,FeedFactory中的方法CreateFeed()判断Feed文件的格式后会实例化不同子类类型的频道对象,然后将父类作为返回值,提供给工厂调用者。如果要增加其他的频道类型,只需修改类FeedFactory,工厂的调用者无须任何改变这样简化了系统的维护。这样做提高了代码的效率,方便维护.而且调用者也不需要知道所创建的实例对象属于哪个子类。设计模式可以提高软件的复用性,使得我们编写的软件更容易扩展,更容易适合需求的变化,设计模式是面向对象在实际应用的集中体现。3.3序列化与反序列化序列化是将对象的状态存储到特定存储介质的过程,也可以说是将对象状态转换为可保持或传输的格式的过程。在序列化过程中,会将对象的公有成员、私有成员包括类名,都转换成数据流的形式,存储到介质中,这里说的存储介质通常指的是文件。在本设计中,通过序列化保存了Profile对象的信息,包括它存储的频道信息等..NET提供多种形式的序列化,文本或XMl流等。反序列化就是从特定存储介质(这里说的存储介质通常指的是文件)中,将数据重新构建对象的过程。通过反序列化,可以将存储在文件上的对象信息读取,然后重新构建为对象。这样就不需要再将文件上的信息一一读取、分析再组织为对象了。将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐,而且容易出错。序列化提供了轻松实现这个目标的快捷方法。通过序列化将对象从一个应用程序发送到另一个应用程序中。在远程通信中应用非常广泛,可以将应用程序中的对象序列化,然后可以通过网络通信,远程传递给其他地点的另一个应用程序。4软件设计4.1设计方案概述网络用户在客户端借助于RSS的阅读器(比如本设计的NewsReader阅读器),在不打开各大新闻门户网站的情况下,将网站提供的支持RSS输出的网站内容(新闻,Blog等)聚集到RSS阅读器中.用户可以不必登录各个提供信息的网站,而通过RSS阅读器来阅读这些内容.RSS阅读器设计方案如下。设计图如5-1(1)新闻发布者(我们这里认为是各大新闻网站)会提供这种频道订阅点,也就是Feed.为此设计相应的方法让阅读器会解析这种Feed.(2)阅读器接到Feed后,根据设计出的方法分析Feed文件后.把解析出的新闻标题、链接内容保存到集合中.(3)将解析出的已经保存到集合中的内容组织后,显示到阅读器显示界面中,供用户阅读。(4)新闻的内容会不断的进行更新,刷新Feed。用户就能用阅读器随时能够读取到最新的文章了。新闻中心新闻中心订阅到RSS阅读器向阅读提交频道(Feed)阅读器获取频道(Feed)获取文章阅读分析频道(Feed)提供文章链接用户阅读图5—1阅读器设计图4.2类的设计4。2。1文章类设计Article.cs文章类Article:它的属性主要有文章的标题和文章的链接地址。文章类Article详细信息如图5-2。5-2文章类Article详细信息4.2。2频道基类类设计FeedBase.cs频道类(FeedBase类):是用来保存频道信息的新闻订阅点的基类。类FeedBase详细信息如图5—3.5-3类FeedBase详细信息4.2。3频道子类类设计RssFeed.cs频道类(RssFeed类):用来保存RSS格式频道信息的新闻订阅点。类RssFeed详细信息如图5-4.5-4类RssFeed详细信息4.2。4频道子类类设计AtomFeed.cs频道类(AtomFeed类):用来保存Atom格式频道信息的新闻订阅点.类AtomFeed详细信息如图5—5.5—5类AtomFeed详细信息4。2.5FeedFactory工厂类设计工厂类FeedFactory:自动辨别从网上获得的Feed文件是Rss类型还是Atom类型。工厂类FeedFactory使用了简单工厂模式.简单工厂模式是设计模式中的一种。一般情况下就是根据参数数据返回一个适当的子类,然后用基类或接口引用具体的对象,而不用考虑该实际对象的产生过程。设计模式是得到了很好研究的范例,是一种经验的总结。软件中的设计模式是软件开发中对于某种需求的一种经验总结,是特定问题经过实践检验的特定解决方法.工厂类FeedFactory详细信息如图5—6.5-6工厂类FeedFactory详细信息4.2.6Profile配置类设计配置类Profile:用来保存阅读器中显示的各个频道的集合。配置类Profile详细信息如图5-7.5-7配置类Profile详细信息4.2.7ProfileManger管理配置类类ProfileManger:用来管理配置信息的Profile类。ProfileManger管理配置类如图5-8。5—8ProfileManger管理配置类详细信息5详细设计与编码实现5.1类设计为了实现阅读器的从网上抓取频道链接、获取文件、解析文件按文件格式的不同处理后都保存在阅读器上的等功能,因此设计Article文章类,Feed(FeedBase,RssFeed,AtomFeed)频道类,FeedFactory工厂类,Profile配置类,ProfileManger配置管理类。5.1.1文章类设计新闻阅读器的主要对象是新闻,我们称为文章。所以我们要创建一个文章类Article,它的属性主要有文章的标题和文章的链接地址。类Article主要内容如下表6-1.表6-1类Article主要内容属性文章标题Title文章链接Url类Article代码如下:usingSystem;usingSystem.Collections。Generic;usingSystem.Text;namespaceNewsReader.Models{///<summary>///频道中的文章类///〈/summary〉[Serializable]classArticle{publicArticle(){}publicArticle(stringtitle,stringurl){this。title=title;this。url=url;}///<summary〉///文章标题///</summary〉privatestringtitle;publicstringTitle{get{returntitle;}set{title=value;}}///<summary>///文章链接///</summary〉privatestringurl;publicstringUrl{get{returnurl;}set{url=value;}}}}5。1。2频道类设计阅读器组织新闻(文章)的对象是频道,我们称为Feed。Feed是用来保存频道信息的新闻订阅点。一个频道的主要信息大致可以归纳为频道名称,频道链接,频道的详细说明,频道的文章列表,还可以加入点击次数。如下表6-2Feed类的主要内容:表6—2Feed类的主要内容属性方法频道名称DisplayName填充文章列表链接地址Url重载构造函数描述Description点击次数Clicks很多大型的网站往往都会提供Rss+Atom两种格式的频道订阅方式.这两种格式既有相同的地方,也有不同点.为了实现软件的代码复用,以提高程序的简洁和高效。把这两种格式相同的属性(频道名称,链接地址,描述,点击次数)放入一个基类FeedBase中,把他们不同的属性(获取文章的方法)放入各自的类RssFees中和类AtomFeed中来实现。这三个类代码请见附录Ⅰ,关系图6-3如下:图6-3类FeedBase,类RssFeed和类AtomFeed的类关系图5.1。3FeedFactory工厂类设计为了自动辨别从网上获得的Feed文件是Rss类型还是Atom类型,创建一个类FeedFactory来解决这个问题.这涉及到了软件开发中的简单工厂设计模式.简单工厂模式是设计模式中的一种。一般情况下就是根据参数数据返回一个适当的子类,然后用基类或接口引用具体的对象,而不用考虑该实际对象的产生过程。设计模式是得到了很好研究的范例,是一种经验的总结。软件中的设计模式是软件开发中对于某种需求的一种经验总结,是特定问题经过实践检验的特定解决方法。类FeedFactory类图如下图图6-4类FeedFactory类图FeedFactory的代码:usingSystem;usingSystem。Collections。Generic;usingSystem.Text;usingSystem.Net;usingSystem.Xml;namespaceNewsReader.Models{///<summary>///Feed的简单工厂用来控制不同Feed的构建///</summary>classFeedFactory{publicFeedFactory(){}publicstaticFeedBaseCreateFeed(stringtitle,stringurl,stringdesc){FeedBaseret;//定义一个Feed基类try{//下载Feed文件WebClientmyClient=newWebClient();myClient。DownloadFile(url,”unknown.feed");//读取未知文件XmlDocumentmyXml=newXmlDocument();myXml.Load("unknown.feed”);XmlNoderootNode=myXml。DocumentElement;//读取根节点//根据节点值的不同,判断类型switch(rootNode。Name.ToLower()){//判断后创建相应的类型case"rss":ret=newRssFeed(title,url,desc);//父类保存子类对象break;case”feed”:ret=newAtomFeed(title,url,desc);//父类保存子类对象break;default:ret=null;break;}returnret;//返回一个父类}catch(Exception){thrownewException();}}}}在简单工厂设计模式这个方法中有两个重要的特征:(1)返回类型是父类。(2)方法中根据情况的不同创建不同类型的子类对象,将子类对象用父类保存,然后返回父类.类FeedFactory就是一个简单工厂,FeedFactory中方法CreateFeed()判断Feed文件的格式后会实例化不同子类类型的频道对象,然后将父类作为返回值,提供给工厂调用者。5.1.4Profile配置类设计类Profile用来保存阅读器中显示的各个频道的集合。类Profile的类图如下图6—5:图6-5类Profile的类图类Profile代码如下:usingSystem;usingSystem。Collections。Generic;usingSystem.Text;namespaceNewsReader。Models{[Serializable]classProfile{publicProfile(){}publicList<FeedBase>Feeds=newList<FeedBase>();}}5.1.5ProfileManger管理配置类类ProfileManger用来管理配置信息的Profile类。图6-6ProfileManger管理配置类类图ProfileManger管理配置类代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Collections;usingSystem.Text;usingSystem.Runtime.Serialization.Formatters。Soap;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.IO;namespaceNewsReader.Models{classProfileManager{publicProfileProfile=newProfile();publicProfileManager(){}internalProfileProfile1{get{thrownewSystem.NotImplementedException();}set{}}publicvoidChannelReset(){Profile.Feeds.Clear();}///〈summary〉///序列化方式保存Profile对象///〈/summary>publicvoidSave(){FileStreamfileStream=null;try{fileStream=newFileStream(”profile。bin",FileMode。Create);//定义一个文件流BinaryFormatterbf=newBinaryFormatter();//二进制方式bf。Serialize(fileStream,Profile);//序列化保存配置文件对象Profile}catch(Exception){throw;}finally{fileStream.Close();}}///<summary〉///反序列化将本地信息转为Profile///〈/summary>publicvoidLoad(){FileStreamfileStream=null;try{fileStream=newFileStream("profile。bin",FileMode。Open);BinaryFormatterbf=newBinaryFormatter();Profile=(Profile)bf.Deserialize(fileStream);}catch(Exception){ChannelReset();}finally{if(fileStream!=null)fileStream。Close();}}}}类ProfileManger中的ChannelReset()方法用于重置频道信息(如程序首次运行未找到用户的配置文件时,或者读取配置文件发生错误时将调用此方法.。)Load()方法用于读取配置文件,Save()方法用于保存配置文件。在类ProfileManger中通过序列化保存了Profile对象的信息,包括它存储的频道信息。。net提供了多种形式的序列化,文本或XML流等。目前使用二进制对泛型支持得最好。在类ProfileManger中也通过反序列化将存储在文件上的对象Profile的信息读取出来,然后重新构建为对象。这样就不需要我们将文件上的信息一一读取,分析在组织为对象了。5.2阅读器界面设计5.2.1主界面设计在NewsReader中需设计界面,界面有复杂的也有简单的,如图6-7是程序的主界面,集中要用到很多的控件,要用到MenuStrip,TreeView,PictureBox,TabControl,Time,WebBrowser等控件。图6-7是程序的主界面5.2.2子界面设计在NewsReader中,其中有设计查看(ChannelInfoViewForm),修改(ChannelInfoModifyForm),增加(ChannelInfoModifyForm)3个窗体界面。这三个窗体包含的内容有很多相同的,因此设计一个ChannelInfoFormBase窗体.它里面包含“查看”,“修改",“增加”3个窗体的公共部分。然后分别再创建“查看”,“修改”,“增加”这3个不同的窗体都继承ChannelInfoFormBase窗体。通过继承,有效的保持了界面的一致性和减少了代码。由于这三个窗体中的“确定”按钮的功能不同,所以每个窗体的“确定"按钮的功能要在各自的窗体中实现。下面图是ChannelInfoFormBase窗体界面,由于查看窗体(ChannelInfoViewForm),修改窗体(ChannelInfoModifyForm),增加窗体(ChannelInfoModifyForm)继承自ChannelInfoFormBase窗体,界面基本是一样的。ChannelInfoFormBase窗体界面的图如6-8,查看窗体(ChannelInfoViewForm)窗体界面的图如6-9,增加窗体(ChannelInfoModifyForm)窗体界面的图如6—10:图6—8ChannelInfoFormBase窗体界面图6—9ChannelInfoViewForm窗体界面图6—10ChannelInfoModifyForm窗体界面5。3数据显示为了把存储在频道集合中的频道显示在窗体上,就要利用TreeView控件,这种控件用于在windows窗体上显示树形结构。TreeView是通过节点来表示数据的,TreeView的Nodes对象表示它的节点集合,TreeView的节点对象是TreeNode。为了让NewsReader更新所有频道列表,或用右键指定更新一个频道的新闻。TreeView控件在程序中如图6—11。图6-11TreeView控件界面代码如下:internalvoidUpdateFeedsView(){tvLiveBookmark。BeginUpdate();tvLiveBookmark。Nodes.Clear();foreach(FeedBasefeedinpm。Profile.Feeds){TreeNodefeedNode=newTreeNode(feed.DisplayName);feedNode.ContextMenuStrip=this.cmsFeeds;//设置每个节点的右键菜单tvLiveBookmark.Nodes。Add(feedNode);if(feed。Articles!=null){foreach(Articleatclinfeed.Articles.Values){TreeNodeatclNode;atclNode=feedNode.Nodes。Add(atcl.Title);}}}tvLiveBookmark.EndUpdate();}//获取指定频道最新文章列表privatevoidcmstsmiFetchArticles_Click(objectsender,EventArgse){TreeNodenode=tvLiveBookmark。SelectedNode;//获取当前节点选中的节点if(node==null)return;//判断当前节点是否为空if(node.Level!=0)return;//判断当前节点是否是频道节点this.Cursor=Cursors。WaitCursor;//设置等待光标//取得指定频道新闻中的文章if(pm.Profile.Feeds[node。Index]。FetchArticles()){UpdateArticlesView(node.Index);//调用更新指定频道的方法}this.Cursor=Cursors。Arrow;}//更新指定的频道文章到TreeView中privatevoidUpdateArticlesView(intfeedIndex){tvLiveBookmark。BeginUpdate();//禁止树视图重绘tvLiveBookmark.Nodes[feedIndex].Nodes.Clear();//将当前右键选中的频道列表清空//遍历当前频道中的新闻foreach(Articleatclinpm。Profile。Feeds[feedIndex].Articles。Values){TreeNodenode;node=tvLiveBookmark.Nodes[feedIn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论