zoukankan      html  css  js  c++  java
  • 网络精灵系统

    效果:

      需求和分析:

     1.点击TreeView中的节点,Listview中显示相应的电视节目,其中节目的信息都储存在xml文件中(IO的应用)

     2.在“所有电台”中选中节点右击可进行添加到“我的电台”,同时在”我的电台“也可进行删除,在你退出后,系统会把你选择的”我的电台“中的记录记录,在你再次打开会显示(IO的     应用或序列化和反系列化的应用)

     3.选中Listview中选中右击可以进行播放

    1.我们分析好后,我们就得准备我们需要的类和xml文件

      类图:

     01.xml文件

        001.存贮频道类型

      <Channel>
        <channelType>TypeA</channelType>
        <!--频道类型-->
        <tvChannel>北京电视台</tvChannel>
        <!--频道名称-->
        <path>files/北京电视台.xml</path>
        <!--频道对应XML文件的本地路径-->
      </Channel>
      <Channel>
        <channelType>TypeB</channelType>
        <tvChannel>凤凰卫视</tvChannel>
        <path>files/凤凰卫视.xml</path>
      </Channel>
    </TVChannels>

       002.存储北京电视台(TypeA)

    <?xml version="1.0" encoding="utf-8" ?>
    <typeA version =" 1.0">
      <channelName>北京电视台</channelName>
      <tvProgramTable>
        <tvProgram>
          <playTime>2009-9-29 06:02</playTime>
          <!--节目播出时间-->
          <meridien>早间档</meridien>
          <!--时段-->
    
          <programName>重播:国际双行线</programName>
          <!--节目名称-->
          <path>F:\Day01_01C#基本概念.avi</path>
          <!--视频路径-->
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 07:00</playTime>
          <!--节目播出时间-->
          <meridien>早间档</meridien>
          <!--时段-->
    
          <programName>北京您早</programName>
          <!--节目名称-->
          <path>C:New Stories (Highway Blues).wma</path>
          <!--视频路径-->
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 09:02</playTime>
          <!--节目播出时间-->
          <meridien>早间档</meridien>
          <!--时段-->
    
          <programName>重播《红星剧场》32集剧:勇者无敌(31)</programName>
          <!--节目名称-->
          <path>**</path>
          <!--视频路径-->
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 09:58</playTime>
    
          <meridien>早间档</meridien>
          <programName>重播《红星剧场》32集剧:勇者无敌(32)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 11:15</playTime>
    
          <meridien>午间档</meridien>
          <programName>重播:专题片:我爱你,中国(14)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 11:58</playTime>
    
          <meridien>午间档</meridien>
          <programName>身边</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 12:30</playTime>
    
          <meridien>午间档</meridien>
          <programName>特别关注</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 13:05</playTime>
    
          <meridien>午间档</meridien>
          <programName>天下天天谈</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 13:40</playTime>
    
          <meridien>午间档</meridien>
          <programName>《玫瑰剧场》55集剧:闯关东中篇(21)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 14:32</playTime>
    
          <meridien>午间档</meridien>
          <programName>《玫瑰剧场》55集剧:闯关东中篇(22)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 15:27</playTime>
    
          <meridien>下午档</meridien>
          <programName>《玫瑰剧场》55集剧:闯关东中篇(23)</programName>
          <path>D:\video\心灵之约.mp4</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 16:19</playTime>
    
          <meridien>下午档</meridien>
          <programName>《玫瑰剧场》55集剧:闯关东中篇(24)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 17:31</playTime>
    
          <meridien>下午档</meridien>
          <programName>法治进行时</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 18:00</playTime>
    
          <meridien>晚间档</meridien>
          <programName>新闻晚高峰</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 18:30</playTime>
    
          <meridien>晚间档</meridien>
          <programName>北京新闻</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 18:56</playTime>
    
          <meridien>晚间档</meridien>
          <programName>天气预报</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 19:00</playTime>
    
          <meridien>晚间档</meridien>
          <programName>转播CCTV新闻联播</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 19:31</playTime>
    
          <meridien>晚间档</meridien>
          <programName>看气象</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 19:40</playTime>
    
          <meridien>晚间档</meridien>
          <programName>专题片:我爱你,中国(15)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 20:22</playTime>
    
          <meridien>晚间档</meridien>
          <programName>《爸妈都是老党员》首播庆典</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 21:21</playTime>
    
          <meridien>晚间档</meridien>
          <programName>《红星剧场》38集剧:咱爸咱妈六十年(1)</programName>
          <path>**</path>
        </tvProgram>
        <tvProgram>
          <playTime>2009-9-29 23:25</playTime>
    
          <meridien>晚间档</meridien>
          <programName>重播文艺:花样年华歌舞大赛(5)</programName>
          <path>**</path>
        </tvProgram>
      </tvProgramTable>
    </typeA>

       003.存储凤凰电视台(TypeB)

    <?xml version="1.0" encoding="utf-8" ?>
    <typeB version =" 1.0">
      <ProgramList>
        <Program>
          <playTime>2009-9-29 01:30</playTime>
          <!--播出时间-->
          <name>简单工厂模式</name>
          <!--节目名称-->
          <path>D:简单工厂模式.wmv</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 02:10</playTime>
          <!--播出时间-->
    
          <name>非凡人物论成功(713)</name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 02:15</playTime>
          <!--播出时间-->
    
          <name>有报天天读(28/09/09) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 02:40</playTime>
          <!--播出时间-->
    
          <name>娱乐大风暴(682) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 03:15</playTime>
          <!--播出时间-->
    
          <name>上海新长宁集团特约之2009中华小姐环球大赛-美丽前奏(41) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 03:20</playTime>
          <!--播出时间-->
    
          <name>完全时尚手册:天桥云裳(632)  </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 03:40</playTime>
          <!--播出时间-->
    
          <name>东风康明斯凤凰冲击播:天力士特约之今日看世界(39)  </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 04:25</playTime>
          <!--播出时间-->
    
          <name>音乐中国风(442)  </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 04:35</playTime>
          <!--播出时间-->
    
          <name>维维健康新概念(193) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 04:40</playTime>
          <!--播出时间-->
    
          <name>红牛凤凰全球连线(28/09/09) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 05:05</playTime>
          <!--播出时间-->
    
          <name>红云红河时事开讲(28/09/09)  </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
        <Program>
          <playTime>2009-9-29 05:30</playTime>
          <!--播出时间-->
    
          <name>别巡检调查队(34)(R) </name>
          <!--节目名称-->
          <path>**</path>
          <!--节目视频的本地路径-->
        </Program>
      </ProgramList>
    </typeB>

    02.频道父类ChannelBase

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 网络电视精灵
    {
        //能被序列化的标志
        [Serializable]
    
        //频道类(父类)
       public  class ChannelBase
        {
           //频道名称
            public string ChannelName { get; set; }
           //频道路径
            public string  ChannelPath { get; set; }
           //节目列表
            public List<TvProgram> List = new List<TvProgram>();
        
           //解析频道节目信息的虚方法
            public virtual void Fetch(){}
           
    
        }
    }

      03.电视节目类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 网络电视精灵
    {
        //电视节目类
      public class TvProgram
        {
          //播出时间
            public DateTime PlayTime { get; set; }
          //时段
            public string Median { get; set; }
          //节目名称
            public string ProgramName { get; set; }
          //节目文件路径
            public string  FilePath { get; set; }
        }
    }

    04.TypeA频道类(子类)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    namespace 网络电视精灵
    {
        //TypeA频道类(子类)
       public  class TypeAChannel:ChannelBase
        {
            //获取频道列表
            public override void Fetch()
            {
                
                XmlDocument doc = new XmlDocument();
                //读取指定xml文档
                doc.Load("北京电视台.xml");
                //读取根节点
                XmlNode root = doc.DocumentElement;
                TvProgram tv = null; 
                foreach (XmlNode item in root["tvProgramTable"].ChildNodes)
                {
                    //把读取的值赋给变量
                    string platytime = item["playTime"].InnerText;
                    string path = item["path"].InnerText;
                    string progranname = item["programName"].InnerText;
                    string meridien = item["meridien"].InnerText;
                    //同时把值赋给TvProgram类中的变量
                    tv=new TvProgram();
                    tv.FilePath = path;
                    tv.PlayTime = Convert.ToDateTime(platytime);
                    tv.ProgramName = progranname;
                    tv.Median = meridien;
                    //最后添加到集合
                    this.List.Add(tv);
                }
            }
        }
    }

       03.TypeB频道类(子类)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    namespace 网络电视精灵
    {
        //TpyeB频道类(子类)
      public class TypeBChannel:ChannelBase
        {
    
            public override void Fetch()
            {
    
                XmlDocument doc = new XmlDocument();
                //读取指定xml文档
                doc.Load("凤凰电视台.xml");
                //读取根节点
                XmlNode root = doc.DocumentElement;
                TvProgram tv = null;
                foreach (XmlNode item in root["ProgramList"].ChildNodes)
                {
                    string platytime = item["playTime"].InnerText;
                    string path = item["path"].InnerText;
                    string progranname = item["name"].InnerText;
                    //string meridien = item["meridien"].InnerText;
    
                    tv = new TvProgram();
                    tv.FilePath = path;
                    tv.PlayTime = Convert.ToDateTime(platytime);
                    tv.ProgramName = progranname;
                 
                    this.List.Add(tv);
                }
            }
        }
    }

      04.创建一个类来解析xml文件(读取的一些操作都在此)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    using System.IO;
    using System.Windows.Forms;
    using System.Runtime.Serialization.Formatters.Binary;
    namespace 网络电视精灵
    {
        //创建一个类来解析总的电视台
       public  class ChannelManager
        {
           //定义一个泛型集合,所有电台
           public List<ChannelBase> FullChannels;
           //定义一个集合,存取“我的电台”的集合
           public List<ChannelBase> mylist = new List<ChannelBase>();
    
    
           //定义一个集合,为了读取以前用户已添加的节目
          public List<ChannelBase> mylove = new List<ChannelBase>();
    
           public ChannelManager() 
           {
               //实例化泛型,具有重大意义
               FullChannels = new List<ChannelBase>();
           }
    
           //解析所有的电视台名称
           public void ReadXmlToList() 
           {
               //01.获取地址
               XmlDocument doc = new XmlDocument();
               //读取指定的Xml文件
               doc.Load("FullChannels.xml");
               //02.然后读取xml的根节点
               XmlNode engineer=doc.DocumentElement;
               foreach (XmlNode item in engineer.ChildNodes)
               {
                  //获取是什么频道类型
                   string pin = item["channelType"].InnerText;
                   ChannelBase Channel = ChannelFactory.CreateChannel(pin);
    
                   Channel.ChannelName = item["tvChannel"].InnerText;
                   Channel.ChannelPath = item["path"].InnerText;
                   FullChannels.Add(Channel);
    
               }
               
           }
    
    
           //用于读写“我的电台”的信息
           //方法一:序列化与反序列化
            #region 序列化
           public void Writer() 
           {
               //二进制序列化器,就是一个类
               BinaryFormatter bf = new BinaryFormatter();
               //以后传递流,就是指向硬盘路径的一个文件流
               FileStream fs = new FileStream("D:\1.bin", FileMode.Create);
               bf.Serialize(fs, mylist);
               fs.Close();
               MessageBox.Show("序列化成功!");
              
           }
            #endregion
    
            #region 反序列化
           public void Read()
           {
               //01.反序列化硬盘上的哪个文件
               FileStream fs = new FileStream("D:\1.bin", FileMode.Open);
               BinaryFormatter bf = new BinaryFormatter();
               mylist = (List<ChannelBase>)bf.Deserialize(fs);
    
                fs.Close();
               
           }
            #endregion
    
    
           //方法二:用IO的写与读
            #region 读与写
           //保存定制频道信息的文本文件名称
           private string saveFileName = @"save";
    
           //将定制频道信息存入文本文件
           public void SaveAsTxt()
           {
               try
               {
                   //创建文件流
                   FileStream fs = new FileStream(saveFileName + ".txt", FileMode.Create);
                   //创建写入器
                   StreamWriter writer = new StreamWriter(fs, Encoding.GetEncoding("gb2312"));
    
                   string type = "";
                   //循环定制频道列表
                   for (int i = 0; i < mylist.Count; i++)
                   {
                       ChannelBase channel = mylist[i];
                       if (channel is TypeBChannel)
                       {
                           type = "TypeB";
                       }
                       else
                       {
                           type = "TypeA";
                       }
                       writer.WriteLine(type + "|" + channel.ChannelName + "|" + channel.ChannelPath);
                      
                   }
    
                  // writer.WriteLine("读入成功");
                   writer.Close();
                   fs.Close();
               }
               catch (Exception)
               {
                  // MessageBox.Show("写入失败");
    
               }
           }
    
           //读取定制频道信息
           public void ReadAsTxt()
           {
               try
               {
                   //创建文件流
                   FileStream fs = new FileStream(saveFileName + ".txt", FileMode.Open);
                   //创建读取器
                   StreamReader reader = new StreamReader(fs, Encoding.GetEncoding("gb2312"));
                   string result="";
    
                   while ((result=reader.ReadLine())!=null)
                   {
                       //string[] result2 = new string[] { result};
                       string[] num = result.Split('|');
    
                       //获得是什么频道类型
                       string type = num[0];
                       ChannelBase channel = ChannelFactory.CreateChannel(type);
                       channel.ChannelName = num[1];
                       channel.ChannelPath = num[2];
    
                       mylist.Add(channel);
    
                   }
                                
                   //关闭读取器
                   reader.Close();
                   fs.Close();
    
               }
               catch (Exception)
               {
                 //  MessageBox.Show("读取失败");
    
               }
           }
            #endregion
     
        }
    }

     待续,,,,,

  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/zhangzongle/p/5274132.html
Copyright © 2011-2022 走看看