• 第八章,作业(网络电视精灵)


    ----------Xml文件----------
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <TVChannels>
     3   <Channel>
     4     <channelType>TypeA</channelType>
     5     <tvChannel>北京电视台</tvChannel>
     6     <path>TypeA.xml</path>
     7   </Channel>
     8 
     9   <Channel>
    10     <channelType>TypeB</channelType>
    11     <tvChannel>凤凰电视台</tvChannel>
    12     <path>TypeB.xml</path>
    13   </Channel>
    14 </TVChannels>
    Tv
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <!--频道A-->
     3 <typeA>
     4   <!--电视台名称-->
     5   <channelName>北京电视台</channelName>
     6   <!--电视台节目清单-->
     7   <tvProgramTable>
     8     <Program>
     9       <playTime>2017-04-15 6:02</playTime><!--播出时间-->
    10       <ProgramName>《熊出没》</ProgramName><!--节目名称-->
    11       <ProgramPath>d:/tv/《熊出没》.mp4</ProgramPath><!--节目路径-->
    12     </Program>
    13 
    14     <Program>
    15       <playTime>2017-04-16 7:00</playTime><!--播出时间-->
    16       <ProgramName>《sugar》</ProgramName><!--节目名称-->
    17       <ProgramPath>d:/tv/《sugar》.mp4</ProgramPath><!--节目路径-->
    18     </Program>
    19 
    20     <Program>
    21       <playTime>2017-04-17 8:08</playTime><!--播出时间-->
    22       <ProgramName>《西游记》</ProgramName><!--节目名称-->
    23       <ProgramPath>d:/tv/《西游记》.mp4</ProgramPath><!--节目路径-->
    24     </Program>
    25   </tvProgramTable>
    26 </typeA>
    TypeA
     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <!--频道B-->
     3 <typeB>
     4   <!--电视台名称-->
     5   <channelName>凤凰电视台</channelName>
     6   <!--电视台节目清单-->
     7   <tvProgramTable>
     8     <program>
     9       <playTime>2017-04-16 20:00</playTime><!--播出时间-->
    10       <ProgramName>《雪豹》</ProgramName><!--节目名称-->
    11       <ProgramPath>d:/tv/《雪豹》.mp4</ProgramPath><!--节目路径-->
    12     </program>
    13 
    14     <program>
    15       <playTime>2017-04-16 9:00</playTime><!--播出时间-->
    16       <ProgramName>《三国》</ProgramName><!--节目名称-->
    17       <ProgramPath>d:/tv/《三国》.mp4</ProgramPath><!--节目路径-->
    18     </program>
    19 
    20     <program>
    21       <playTime>2017-04-17 10:15</playTime><!--播出时间-->
    22       <ProgramName>《水浒传》</ProgramName><!--节目名称-->
    23       <ProgramPath>d:/tv/《水浒传》.mp4</ProgramPath><!--节目路径-->
    24     </program>
    25   </tvProgramTable>
    26 </typeB>
    TypeB

    ----------类----------

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace TellyFairy.Entity
     8 {
     9     public abstract class ChannelBase
    10     {
    11         /// <summary>
    12         /// 频道名称
    13         /// </summary>
    14         public string ChannelName { get; set; }
    15         /// <summary>
    16         /// Xml文件路径
    17         /// </summary>
    18         public string Path { get; set; }
    19         /// <summary>
    20         /// 节目列表
    21         /// </summary>
    22         public List<TvProgram> ProgramList { get; set; }
    23 
    24         public ChannelBase()
    25         {
    26             this.ProgramList = new List<TvProgram>();
    27         }
    28         /// <summary>
    29         /// 解析频道节目单信息
    30         /// </summary>
    31         public abstract void Fetch();
    32     
    33     }
    34 }
    ChannelBase(父类)
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Xml;
     7 
     8 namespace TellyFairy.Entity
     9 {
    10     public class ChannelManager
    11     {
    12         //XML文件路径
    13         public string channelPath = "Tv.xml";
    14         //所有频道集合
    15         public Dictionary<string, ChannelBase> channelBase = new Dictionary<string, ChannelBase>();
    16         /// <summary>
    17         /// 根据频道类型创建频道
    18         /// </summary>
    19         /// <param name="type"></param>
    20         /// <returns></returns>
    21         public ChannelBase CreateChannel(string type)
    22         {
    23             ChannelBase clb = null;
    24             if (type == "TypeA")
    25             {
    26                 clb = new TypeAChannel();
    27             }
    28             if (type == "TypeB")
    29             {
    30                 clb = new TypeBChannel();
    31             }
    32             return clb;
    33         }
    34         /// <summary>
    35         /// 加载节目
    36         /// </summary>
    37         public void LoadChannel()
    38         {
    39             XmlDocument xmlDoc = new XmlDocument();
    40             xmlDoc.Load(this.channelPath);
    41             XmlNode xmlRoot = xmlDoc.DocumentElement;
    42             //将所有频道添加到channelBase泛型集合
    43             foreach (XmlNode node in xmlRoot.ChildNodes)
    44             {
    45                 //根据类型创建不同子类
    46                 ChannelBase clb = CreateChannel(node["channelType"].InnerText);
    47                 //根据创建不同子类的对象将不同频道名称赋值给属性
    48                 clb.ChannelName = node["tvChannel"].InnerText;
    49                 //根据创建不同子类的对象把不同频道的xml地址赋值属性
    50                 clb.Path = node["path"].InnerText;
    51                 //根据不同子类对象执行重写方法 给 节目列表赋值
    52                 clb.Fetch();
    53                 //将不同频道 赋值给所有频道泛型集合
    54                 channelBase.Add(clb.ChannelName, clb);
    55             }
    56         }
    57 
    58     }
    59 }
    ChannelManager类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace TellyFairy.Entity
     8 {
     9     public class TvProgram
    10     {
    11         /// <summary>
    12         /// 播出时间
    13         /// </summary>
    14         public DateTime PlayTime { get; set; }
    15         /// <summary>
    16         /// 节目名称
    17         /// </summary>
    18         public string ProgramName { get; set; }
    19         /// <summary>
    20         /// 节目路径
    21         /// </summary>
    22         public string ProgramPath { get; set; }
    23     }
    24 }
    TvProgram类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Xml;
     7 
     8 namespace TellyFairy.Entity
     9 {
    10     public class TypeAChannel:ChannelBase
    11     {
    12         public override void Fetch()
    13         {
    14             XmlDocument xmlDoc = new XmlDocument();
    15             xmlDoc.Load(base.Path);
    16             //XmlElement elem = xmlDoc.DocumentElement;
    17             XmlNode xmlRoot = xmlDoc.DocumentElement;
    18             ProgramList = new List<TvProgram>();
    19             foreach (XmlNode node in xmlRoot.ChildNodes)
    20             {
    21                 if (node.Name == "tvProgramTable")
    22                 {
    23                     foreach (XmlNode node1 in node.ChildNodes)
    24                     {
    25                         //新建节目类型对象
    26                         TvProgram program = new TvProgram();
    27                         //根据xml数据赋值对应属性
    28                         program.PlayTime = DateTime.Parse(node1["playTime"].InnerText);
    29                         program.ProgramName = node1["ProgramName"].InnerText;
    30                         program.ProgramPath = node1["ProgramPath"].InnerText;
    31                         //将节目添加到节目列表
    32                         ProgramList.Add(program);
    33                     }
    34                 }
    35             }
    36         }
    37     }
    38 }
    TypeAChannel类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Xml;
     7 
     8 namespace TellyFairy.Entity
     9 {
    10     public class TypeBChannel:ChannelBase
    11     {
    12         public override void Fetch()
    13         {
    14             XmlDocument xmlDoc = new XmlDocument();
    15             xmlDoc.Load(base.Path);
    16             //XmlElement elem = xmlDoc.DocumentElement;
    17             XmlNode xmlRoot = xmlDoc.DocumentElement;
    18             ProgramList = new List<TvProgram>();
    19             foreach (XmlNode node in xmlRoot.ChildNodes)
    20             {
    21                 if (node.Name == "tvProgramTable")
    22                 {
    23                     foreach (XmlNode node1 in node.ChildNodes)
    24                     {
    25                         //新建节目类型对象
    26                         TvProgram program = new TvProgram();
    27                         //根据xml数据赋值对应属性
    28                         program.PlayTime = DateTime.Parse(node1["playTime"].InnerText);
    29                         program.ProgramName = node1["ProgramName"].InnerText;
    30                         program.ProgramPath = node1["ProgramPath"].InnerText;
    31                         //将节目添加到节目列表
    32                         ProgramList.Add(program);
    33                     }
    34                 }
    35             }
    36         }
    37     }
    38 }
    TypeBChannel类
      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Linq;
      7 using System.Text;
      8 using System.Threading.Tasks;
      9 using System.Windows.Forms;
     10 using TellyFairy.Entity;
     11 
     12 namespace TellyFairy
     13 {
     14     public partial class FrmMain : Form
     15     {
     16         public FrmMain()
     17         {
     18             InitializeComponent();
     19             //初始把ContextMenuStrip两个选项隐藏
     20             cmsiMenu.Items[0].Visible = false;
     21             cmsiMenu.Items[1].Visible = false;
     22         }
     23         ChannelManager clm = new ChannelManager();
     24 
     25         /// <summary>
     26         /// 初始化TreeView 选项
     27         /// </summary>
     28         public void InitList()
     29         {
     30             tvTv.Nodes.Add("我的电视台");
     31             tvTv.Nodes.Add("所有电视台");
     32             //加载节目
     33             clm.LoadChannel();
     34             //将所有频道名称加到所有电视台
     35             foreach (var cb in clm.channelBase)
     36             {
     37                 tvTv.Nodes[1].Nodes.Add(cb.Key);
     38             }
     39             //展开所有节点
     40             tvTv.ExpandAll();
     41         }
     42         /// <summary>
     43         /// 窗体加载
     44         /// </summary>
     45         /// <param name="sender"></param>
     46         /// <param name="e"></param>
     47         private void FrmMain_Load(object sender, EventArgs e)
     48         {
     49             dgvProgram.AutoGenerateColumns = false;
     50             InitList();
     51         }
     52         //Items[0]:删除,Items[1]:添加
     53         private void tvTv_MouseClick(object sender, MouseEventArgs e)
     54         {
     55             
     56                 //如果选中的是我的电视台的子节点则把删除显示,加入隐藏
     57                 if (tvTv.SelectedNode.Parent != null && tvTv.SelectedNode.Parent.Text.Equals("我的电视台"))
     58                 {
     59                     cmsiMenu.Items[0].Visible = false;
     60                     cmsiMenu.Items[1].Visible = true;
     61                 }
     62                 //如果选中的是所有电视台的子节点则把隐藏显示,删除隐藏
     63                 else
     64                 {
     65                     cmsiMenu.Items[1].Visible = false;
     66                     cmsiMenu.Items[0].Visible = true;
     67                 }
     68                 //如果选中根节点则把两个都隐藏
     69                 if (tvTv.SelectedNode.Level == 0)
     70                 {
     71                     cmsiMenu.Items[0].Visible = false;
     72                     cmsiMenu.Items[1].Visible = false;
     73                 }
     74             
     75             
     76         }
     77         /// <summary>
     78         /// 右键添加到电视台
     79         /// </summary>
     80         /// <param name="sender"></param>
     81         /// <param name="e"></param>
     82         private void tmsiAdd_Click(object sender, EventArgs e)
     83         {
     84             //循环判断“我的电视台”里有无重复频道
     85             foreach (TreeNode tr in tvTv.Nodes[0].Nodes)
     86             {
     87                 if (tr.Text.Equals(tvTv.SelectedNode.Text))
     88                 {
     89                     MessageBox.Show("已有该频道");
     90                     return;
     91                 }
     92             }
     93             tvTv.Nodes[0].Nodes.Add(tvTv.SelectedNode.Text);
     94             //展开“我的电视台”的节点
     95             tvTv.Nodes[0].Expand();
     96         }
     97         /// <summary>
     98         /// 右键删除
     99         /// </summary>
    100         /// <param name="sender"></param>
    101         /// <param name="e"></param>
    102         private void tmsiDelete_Click(object sender, EventArgs e)
    103         {
    104             tvTv.SelectedNode.Remove();
    105         }
    106         /// <summary>
    107         /// 选中节点后
    108         /// </summary>
    109         /// <param name="sender"></param>
    110         /// <param name="e"></param>
    111         private void tvTv_AfterSelect(object sender, TreeViewEventArgs e)
    112         {
    113             BangChannel();
    114         }
    115         public void BangChannel()
    116         {
    117             //选中根节点不显示节目
    118             if (tvTv.SelectedNode.Level == 0)
    119             {
    120                 dgvProgram.DataSource = null;
    121                 return;
    122             }
    123             //用选中的频道找节目列表
    124             dgvProgram.DataSource = clm.channelBase[tvTv.SelectedNode.Text].ProgramList;
    125         }
    126 
    127     }
    128 }
    Mian

     -------------窗体

  • 相关阅读:
    计算机速成课 第十一集 编程语言发展史
    计算机速成课 第十集 早期的编程方式
    Sharepoint2013操作文档库内容的相关操作
    IE6 css fixed
    Sharepoint2013站点503错误的解决方法(图解)
    发布Sharepoint2013相关的WebService服务
    Spring 读书笔记Spring容器(二)
    (转)UML类图与类的关系详解
    (转)C# 操作 Excel 颜色索引对照
    (转)Silverlight显示本地图片、Stream转Byte数组
  • 原文地址:https://www.cnblogs.com/lzx666/p/6720126.html
Copyright © 2020-2023  润新知