----------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

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

转载于:https://www.cnblogs.com/lzx666/p/6720126.html

第八章,作业(网络电视精灵)相关推荐

  1. 案例 网络电视精灵 c# 1614265410

    案例 网络电视精灵 c# 1614265410 界面情况 细节要求 所有电台,只能添加到我的电脑 我的电台,只能删除操作

  2. 关于《网络电视精灵》项目

    网络电视精灵代码详细步骤 1.定义频道以及节目的属性类 public abstract class PD{public DateTime PlayTime { get; set; }public st ...

  3. 厦门大学c语言第七八章作业答案,厦门大学 运筹学 第七、八章作业

    厦门大学 运筹学习题 第七章决策论作业 1. 某地方书店希望订购最新出版的好的图书.根据以往经验,新书的销售量可能为50.100. 150或200本.假定每本新书的订价为4元,销售价格为6元,剩书的处 ...

  4. 统计学习方法第八章作业:分类问题AdaBoost算法、回归问题提升树算法 代码实现

    分类问题AdaBoost算法 import math import numpy as npclass Adaboost_tree:def __init__(self,X,Y,feature_type= ...

  5. 灭顶之灾之网络电视精灵——S2 2.8

    从前,有一个神奇的东西叫做搞搞精灵 关于他,有一段历史. 哎呀!我去!写不下去了. -.-以上玩笑 首先需求分析 TreeView显示两种频道 TypeA和TypeB 所以创建三个类 ChannelB ...

  6. 网络电视精灵 完整版

    namespace _08_电视精灵 {public class ChannelFactory{public static ChannelBase CreateChannel(string type) ...

  7. 老韩Java第八章作业汇总(自做)

    先把作业打下来,然后一题题做. 题目1:1.定义一个Person类 {name, age, job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示,使用冒泡排 ...

  8. 统计学习方法第十八章作业:PLSA 概率潜在语义分析算法 代码实现

    PLSA 概率潜在语义分析 import numpy as np import collections import jiebaclass PLSA:def __init__(self,text_li ...

  9. 厦门大学c语言第七八章作业答案,数据结构第七章考试题库(含答案).doc

    数据结构第七章考试题库(含答案).doc 第七章 图一.选择题1图中有关路径的定义是( ).[北方交通大学 2001 一.24 (2分)]A由顶点和相邻顶点序偶构成的边所形成的序列 B由不同顶点所形成 ...

最新文章

  1. Nacos源码系列——第一章(Nacos核心源码主线剖析上)
  2. BC #49 1001 Untitled
  3. DiffServ实现技术
  4. 随堂小测app(nabcd)
  5. 现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论
  6. GitHub 5.9K,目标检测、跟踪、关键点全覆盖的年度开源项目来了!
  7. Android面经分享,失业两个月,五一节前拿到offer
  8. 中国传统纹样背景素材|一眼识别东方韵之美
  9. 如何用手机打开dcm格式图片_实现原始Dicom自动转换BIDS格式 ——Heudiconv
  10. poj 2594 Treasure Exploration 最小路径覆盖
  11. OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
  12. Asp.Net中WebApi多图片上传(附前后端代码)
  13. js-YDUI 移动端解决方案
  14. Radon变换主要知识点
  15. 为什么网站打开速度慢?
  16. 非肿瘤体细胞突变可能是临床基因检测新赛道
  17. 全美“50大好差事” 软件工程师排名第一
  18. db mysql error_list
  19. 计算机摄影比赛,计算机系摄影大赛圆满结束
  20. 大数据战略上升为国家战略,悄悄告诉你大数据大牛都在读的8本书

热门文章

  1. JavaEE基础(十七)/集合
  2. VB 泛型 T 应用
  3. 【转】hadoop机架感知
  4. 设计模式——责任连模式
  5. linux环境变量设置和修改
  6. 使用jquery简化ajax开发
  7. malloc/free 与 new/delete的区别
  8. 【jQuery学习】—jQuery对象的过滤
  9. CCF CSP202012-2期末预测之最佳阈值
  10. 准备入手三星s9+,各位有何见解?