网络电视精灵 完整版

来源:互联网 发布:mac拳皇13摇杆按键设置 编辑:程序博客网 时间:2024/04/27 21:56
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 0