第八章,作业(网络电视精灵)
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
第八章,作业(网络电视精灵)相关推荐
- 案例 网络电视精灵 c# 1614265410
案例 网络电视精灵 c# 1614265410 界面情况 细节要求 所有电台,只能添加到我的电脑 我的电台,只能删除操作
- 关于《网络电视精灵》项目
网络电视精灵代码详细步骤 1.定义频道以及节目的属性类 public abstract class PD{public DateTime PlayTime { get; set; }public st ...
- 厦门大学c语言第七八章作业答案,厦门大学 运筹学 第七、八章作业
厦门大学 运筹学习题 第七章决策论作业 1. 某地方书店希望订购最新出版的好的图书.根据以往经验,新书的销售量可能为50.100. 150或200本.假定每本新书的订价为4元,销售价格为6元,剩书的处 ...
- 统计学习方法第八章作业:分类问题AdaBoost算法、回归问题提升树算法 代码实现
分类问题AdaBoost算法 import math import numpy as npclass Adaboost_tree:def __init__(self,X,Y,feature_type= ...
- 灭顶之灾之网络电视精灵——S2 2.8
从前,有一个神奇的东西叫做搞搞精灵 关于他,有一段历史. 哎呀!我去!写不下去了. -.-以上玩笑 首先需求分析 TreeView显示两种频道 TypeA和TypeB 所以创建三个类 ChannelB ...
- 网络电视精灵 完整版
namespace _08_电视精灵 {public class ChannelFactory{public static ChannelBase CreateChannel(string type) ...
- 老韩Java第八章作业汇总(自做)
先把作业打下来,然后一题题做. 题目1:1.定义一个Person类 {name, age, job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示,使用冒泡排 ...
- 统计学习方法第十八章作业:PLSA 概率潜在语义分析算法 代码实现
PLSA 概率潜在语义分析 import numpy as np import collections import jiebaclass PLSA:def __init__(self,text_li ...
- 厦门大学c语言第七八章作业答案,数据结构第七章考试题库(含答案).doc
数据结构第七章考试题库(含答案).doc 第七章 图一.选择题1图中有关路径的定义是( ).[北方交通大学 2001 一.24 (2分)]A由顶点和相邻顶点序偶构成的边所形成的序列 B由不同顶点所形成 ...
最新文章
- Nacos源码系列——第一章(Nacos核心源码主线剖析上)
- BC #49 1001 Untitled
- DiffServ实现技术
- 随堂小测app(nabcd)
- 现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论
- GitHub 5.9K,目标检测、跟踪、关键点全覆盖的年度开源项目来了!
- Android面经分享,失业两个月,五一节前拿到offer
- 中国传统纹样背景素材|一眼识别东方韵之美
- 如何用手机打开dcm格式图片_实现原始Dicom自动转换BIDS格式 ——Heudiconv
- poj 2594 Treasure Exploration 最小路径覆盖
- OpenCV探索之路(零):HighGUI——使用imwrite调整保存的图片质量
- Asp.Net中WebApi多图片上传(附前后端代码)
- js-YDUI 移动端解决方案
- Radon变换主要知识点
- 为什么网站打开速度慢?
- 非肿瘤体细胞突变可能是临床基因检测新赛道
- 全美“50大好差事” 软件工程师排名第一
- db mysql error_list
- 计算机摄影比赛,计算机系摄影大赛圆满结束
- 大数据战略上升为国家战略,悄悄告诉你大数据大牛都在读的8本书