网络电视精灵思路分析

项目需求

使用C#语言将磁盘上存放的保存频道和频道下对应的节目信息的xml文件通过TreeView控件和DataGridView控件展示出来并提供播放的功能。

练习知识点

  • 动态加载TreeView节点

  • 在C#中解析xml文件的简单操作

  • IO流的简单读写操作

架构搭建

我们知道:“在做一个新的项目之前需要对项目的架构进行搭建,也就是对项目进行详细的设计”

通过对需求的分析“保存的频道和频道下对应的节目信息”我们可以知道我们需要创建两个类-频道类(Channel)和节目类(Program)而他们的具体属性我们可以参考xml文档进行设计。

我们可以很明显的从xml文档中抽象出类的属性

  • ChannelType(频道类型)
  • TvChannel(频道名称)
  • Path(频道对应的保存节目信息的xml文档路径)

每个频道下可以有多个节目信息

所以频道对象下还要有一个保存节目对象的集合

节目对象的属性

我们看到两个频道的xml文档的存储方式都不一样,这是怎么办呢?

我们可以结合两个xml文档抽象出齐全的属性

  • PlayTime(播出时间)
  • Meridien(播出时间段)
  • ProgramName(节目名称)
  • Path(节目的存放路径)

方法的抽象

通过保存节目信息的xml文档路径在频道对象的path属性中保存我们可以在频道类中定义一个解析xml文档的方法。但是两个频道对应的xml文档的保存节目信息的方式并不一样,所以我们可以将Channel中定义抽象方法。并定义两个Channel的子类来对其方法进行重写。

而节目对象则需要有一个播放方法对其进行播放

进过我们的设计可以得到如下的类架构。当然后续也可以根据需求增加类。类图如下:

关于工厂类(ChannelTool)

工厂类的作用就是根据程序运行时的需要创建出对应的频道对象

关键代码如下:

public  static List<channels> Load()
       {
           List<channels> channels = new List<channels>();
           XmlDocument channe = new XmlDocument();
           channe.Load("fils\\FullChannels.xml");
           XmlNode root = channe.DocumentElement;
           foreach (XmlNode item in root.ChildNodes)
           {
               channels cl=null;
               switch (item["channelType"].InnerText)
               {
                   case "TypeA":
                       cl = new TypeAChannel();
                       break;
                   case "TypeB":
                       cl = new TypeBChannel();
                       break;

               }
               cl.ChannelName = item["tvChannel"].InnerText;
               cl.Type = item["channelType"].InnerText;
               cl.Path = item["path"].InnerText;
               channels.Add(cl);
           }
           return channels;

       }

动态绑定TreeView

绑定TreeView就是将保存频道信息的xml文档解析出来保存在一个集合中,然后遍历整个集合将集合中的每一项转换为TreeView控件的节点对象再通过Nodes.Add()方法将节点对象添加到TreeView控件中。

使用DataGridView显示节目信息

首先将选择的TreeNode对象的Tag属性转化为Channel类型变量(频道对象保存在TreeNode节点的Tag属性中,Text属性保存的是频道名称),调用频道对象的解析节目信息xml的Load()方法给给频道对象的Programs结合变量赋值(programs中保存的是节目对象集合)。使用DataGridView的DataSource属性将频道对象的Programs集合绑定到DataGridView中显示。

频道对象解析xml文档的Load方法的关键代码

public override void Load()
        {
            XmlDocument TypeA = new XmlDocument();
            TypeA.Load(Path);
            XmlNode root = TypeA.DocumentElement;
            XmlNode tvTable = root["tvProgramTable"];
            foreach (XmlNode item in tvTable.ChildNodes)
            {
                TvProgram program = new TvProgram();
                program.PlayTime = item["playTime"].InnerText;
                program.Meridien = item["meridien"].InnerText;
                program.ProgramName = item["programName"].InnerText;
                program.Path = item["path"].InnerText;
                this.Programs.Add(program.PlayTime,program);
            }
        }

上述代码是解析北京电视台对应的xml文档,凤凰卫视的Load方法与此类似,这里不再附上代码!

时间: 2024-08-24 06:44:53

网络电视精灵思路分析的相关文章

网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且

继承,多态,集合,面向对象,XML文件解析,TreeView动态加载综合练习-----&gt;网络电视精灵项目练习、分析

网络电视精灵 项目运行状态如图: 项目完成后的类: 首先,将程序分为二部分进行: 一:TreeView节点内容的设计及编写: 1.1遍写XML文件:管理(FullChannels.xml),A类电视台北京电视台(北京电视台.xml),B类电视台凤凰卫视(凤凰卫视.xml) 1.2创建一个抽象的电视频道父类,ChannelBase,其中有成员:频道名称,频道路径,节目列表(以电视节目类作为类型的集合),解析频道节目单的抽象方法.代码如下: using System; using System.Co

初识XML及简单工厂运用--网络电视精灵

网络电视精灵 任务描述 1. 解析XML文件中的数据 三个简单的xml文件; <?xml version="1.0" encoding="utf-8" ?> <TVChannele> <Channel> <channelType>TypeA</channelType> <tvChannel>北京电视台</tvChannel> <path>files/北京电视台.xml&l

单例模式的应用___网络电视精灵

网络电视精灵 首先创建几个基本类 编写节目类 属性:播出时间.时段.名称.视频路径 编写频道基类 属性:频道名称.频道节目单位置.节目列表 抽象方法:Fetch() 编写频道子类 继承“频道基类”,实现Fetch()[只写方法声明] 编写频道工厂类 方法:实现创建频道子类 private void tsmAddToFavor_Click(object sender, EventArgs e) { //如何将电台从所有电台加载到我的电台 TreeNode tn = tvChannel.Select

ajaxFileupload的源码思路分析

? 1 ajaxfileupload源码: jQuery.extend({ //创建一个临时的iframe; createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="posit

网络电视精灵(新手练习,如果有不好的地方,请各位多多指导指导小弟。)

电视精灵效果展示: 1.电视台和节目信息从xml文件中解析并绑定: 2.实现点击频道节点时显示有关该频道的节目信息: 好了,废话不多说.大家请看效果演示,如有不好之处,请多多指教一下,毕竟我还是个新手. 01.第一张效果图. 02.第二张效果图. 03.第三张效果图. 04.第四张效果图北京电视台,然而截屏软件不行效果不太好. 05.第五张效果图,然而截屏软件不行效果不太好. 好了,效果图放完了,下面我们来看看代码吧.你们是不是很期待? 1.频道类: namespace Day08网络电视精灵

运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

【常用算法思路分析系列】字符串高频题集

本文是[常用算法思路分析系列]的第二篇,分析字符串相关的高频题目.第一篇是关于排序相关的高频题,还没有看的同学请移步:[常用算法思路分析系列]排序高频题集 1.KMP字符匹配 对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同,即给定两棵二叉树的头结点A和B,请返回一个boolean值,代表A中是否存在一棵同构于B的子树.上述其实就是一个字符匹配的问题,我们将A.B两棵二叉树进行遍历,得到一个字符串,就是判断B串是否是A串的子串.而字符匹配常用的

前端识别验证码思路分析

作者:莫卓颖 相信很多前端同学对于二维码识别.图像对比等这类高大上的图像识别技术望而生畏,觉得此类识别技术只能通过更加底仓的高级语言才能实现(诸如c等),本文试图从前端的角度出发介绍如何通过canvas来进行简单的图像识别. canvas是什么 canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形.图标.以及其它任何视觉性图像 canvas图片处理运用 对于canvas来说,主要是两个方法对图片处理比较重要,一个是通过html5 canvas的 getImageDat