• 网络电视精灵思路分析


    项目需求

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

    练习知识点

    • 动态加载TreeView节点

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

    • IO流的简单读写操作

    架构搭建

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

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

    image

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

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

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

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

    节目对象的属性

    image

    image

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

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

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

    方法的抽象

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

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

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

    image

    关于工厂类(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方法与此类似,这里不再附上代码!

  • 相关阅读:
    uniapp 子组件如何调用父组件的方法
    idea2022版本安装破解
    三高架构分析
    软件过程与管理——挣值分析
    全国疫情数据可视化展示(详细介绍,含完整源码)
    软件测试——易错题
    QTP——功能测试
    考试宝典——软件过程与管理重点知识总结
    课堂练习——neo4j简单使用
    软件测试复习
  • 原文地址:https://www.cnblogs.com/wangzheand/p/5254386.html
Copyright © 2020-2023  润新知