你的位置:首页 > ASP.net教程

[ASP.net教程]网络精灵系统


效果:

  需求和分析:

 1.点击TreeView中的节点,Listview中显示相应的电视节目,其中节目的信息都储存在

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

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

 

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

  类图:

 

 01.

    001.存贮频道类型

 <Channel>  <channelType>TypeA</channelType>  <!--频道类型-->  <tvChannel>北京电视台</tvChannel>  <!--频道名称-->  <path>files/北京电视台.</path>  <!--频道对应--> </Channel> <Channel>  <channelType>TypeB</channelType>  <tvChannel>凤凰卫视</tvChannel>  <path>files/凤凰卫视.</path> </Channel></TVChannels>

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

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

<??><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.namespace 网络电视精灵{  //TypeA频道类(子类)  public class TypeAChannel:ChannelBase  {    //获取频道列表    public override void Fetch()    {            = new //读取指定      doc.Load("北京电视台.");      //读取根节点       doc.DocumentElement;      TvProgram tv = null;       foreach (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.namespace 网络电视精灵{  //TpyeB频道类(子类) public class TypeBChannel:ChannelBase  {    public override void Fetch()    {      = new //读取指定      doc.Load("凤凰电视台.");      //读取根节点       doc.DocumentElement;      TvProgram tv = null;      foreach (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.创建一个类来解析

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.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 Read//01.获取地址      new //读取指定的      doc.Load("FullChannels.");      //02.然后读取      doc.DocumentElement;      foreach (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   }}

 待续,,,,,