网络电视精灵 完整版

namespace _08_电视精灵
{
    public class ChannelFactory
    {
        public static ChannelBase CreateChannel(string type)
        {
            ChannelBase channel = null;

            switch (type)
            {
                case "TypeA":
                    channel=new  TypeA();
                    break;
                case "TypeB":
                    channel = new TypeB();
                    break;             
            }
            return channel;
 
        }
    }
}
namespace _08_电视精灵
{
    public partial class FrmTV : Form
    {
        public FrmTV()
        {
            InitializeComponent();
        }


        public ChannelManager manager = new ChannelManager();
        private void FrmTV_Load(object sender, EventArgs e)
        {

            TreeNode nodeFirstLevel = new TreeNode("我的电视台");
           
           


            TreeNode root = new TreeNode( "所有电视台");
          
           

            //访问 ChannelManager  中的 FullChannels 集合
          
            manager.ReadXmlToList();

            List<ChannelBase> list = manager.FullChannels1;
            int num = 0;
            foreach (ChannelBase item in list)
            {
                TreeNode node = new TreeNode();
                node.Text = item.ChannelName;
                node.Tag = num;
                nodeFirstLevel.Nodes.Add(node);
                root.Nodes.Add(node);
                num++;
               

            }

            this.tvShow.Nodes.Add(nodeFirstLevel);
            this.tvShow.Nodes.Add(root);
        }


      

        private void tvShow_AfterSelect(object sender, TreeViewEventArgs e)
        {
            List<ChannelBase> list = manager.FullChannels1;         
            ChannelBase ba = list[Convert.ToInt16(tvShow.SelectedNode.Tag)];
            ba.Fetch();
            dataGridView1.DataSource = ba.tvList;
        }


       
    }
}
namespace _08_电视精灵
{
    //相当于一个  工具类  管理所有频道
    public class ChannelManager
    {
        // 01. 定义一个泛型  
        private List<ChannelBase> FullChannels = new List<ChannelBase>();

        public List<ChannelBase> FullChannels1
        {
            get { return FullChannels; }
            set { FullChannels = value; }
        }

        

 
 public ChannelManager()
        {
            FullChannels = new List<ChannelBase>();
        }

        // 01. 定义一个方法  将XML数据填充到泛型中
        public void ReadXmlToList()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("FullChannels.xml");

            XmlNode root = doc.DocumentElement;

            foreach (XmlNode item in root.ChildNodes)
            {
                //解析出当前的频道类型
                string type = item["channelType"].InnerText;
                
                ChannelBase channel = ChannelFactory.CreateChannel(type);

                // 每一个item 是一个频道对象                 
                channel.ChannelName = item["tvChannel"].InnerText;
                channel.ChannelPath = item["path"].InnerText;

                FullChannels.Add(channel);
            }
            
        }
    }
}
namespace _08_电视精灵
{
    //频道父类
    //三个属性   一个方法
   public abstract class ChannelBase
    {
        public string  Type { get; set; }
        public string ChannelName { get; set; }
        public string ChannelPath { get; set; }

       //提供一个用于保存该频道下的所有节目单集合
        public List<TVProgram> tvList = new List<TVProgram>();


       //Fetch ()方法    解析Path 对应的频道 xml 文件,形成内存中的泛型集合
       public abstract void Fetch();
    }
}
namespace _08_电视精灵
{
    
    //和files/xml文件对应
    //这些类 是根据 XML 文件的属性提炼出来的
   public class TVProgram
    {
       //播出时间
        public DateTime  PlayTime { get; set; }

       //早间档  午间档 晚间档
        public string  ShiDuan { get; set; }

       //节目名称
        public string  Name { get; set; }

       //视频路径
        public string  Path { get; set; }

    }
}
namespace _08_电视精灵
{
    //北京电视台.Xml
    public class TypeA:ChannelBase
    {

        public override void Fetch()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("北京电视台.xml");

            XmlNode root = doc.DocumentElement;

            //<playTime>2013-9-29 06:02</playTime> <!--节目播出时间-->
            //<meridien>早间档</meridien> <!--时段-->       
            //<programName>重播:国际双行线</programName> <!--节目名称-->
            //<path>c:\a.wma</path>   
            每一个 item 是一个频道
            foreach (XmlNode item in root.ChildNodes)
            {

                if (item.Name.Equals("tvProgramTable"))
                {
                    foreach (XmlNode item2 in item.ChildNodes)
                    {
                        TVProgram tp = new TVProgram();
                        tp.PlayTime = Convert.ToDateTime(item2["playTime"].InnerText);
                        tp.ShiDuan = item2["meridien"].InnerText;
                        tp.Path = item2["path"].InnerText;
                        tp.Name = item2["programName"].InnerText;

                        //把解析出来的 放到 集合里

                        tvList.Add(tp);
                       
                    }

                    
                }

            }

 	 
         }
        
    }
}
namespace _08_电视精灵
{
    //凤凰电视台.Xml
    public class TypeB:ChannelBase
    {
        public override void Fetch()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("凤凰卫视.xml");

            XmlNode root = doc.DocumentElement;

            //每一个 item 是一个频道
            foreach (XmlNode item in root.ChildNodes)
            {

                if (item.Name.Equals("ProgramList "))
                {
                    foreach (XmlNode item2 in item.ChildNodes)
                    {
                        TVProgram tp = new TVProgram();
                        tp.PlayTime = Convert.ToDateTime(item2["PlayTime"].InnerText);
                        tp.ShiDuan = item2["ShiDuan"].InnerText;
                        tp.Path = item2["path"].InnerText;
                        tp.Name = item2["name"].InnerText;

                        //把解析出来的 放到 集合里

                        tvList.Add(tp);

                    }


                }

            }
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值