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

     待续,,,,,

  • 相关阅读:
    POJ 2923 Relocation ★(状态压缩+01背包)
    POJ 1062 昂贵的聘礼 (带限制的最短路)
    HDU 4355 Party All the Time (三分求凸函数极值)
    POJ 1860 Currency Exchange (BellmanFord)
    POJ 2923 Relocation ★(状态压缩+01背包)
    【HNOI2011】数学作业(BZOJ 2326)
    POJ 1062 昂贵的聘礼 (带限制的最短路)
    作为当代大学生,面对着信息增长加快,老化周期变短,你应该如何做?
    作为当代大学生,面对着信息增长加快,老化周期变短,你应该如何做?
    信息分析与预测考前模拟试题
  • 原文地址:https://www.cnblogs.com/zhangzongle/p/5274132.html
Copyright © 2011-2022 走看看