查询完成后给歌曲便利到一个数组当中
将选中的歌曲对象加入到playlist类中的数组songs.

创建类名称:

class Playlist
       {   //定义一个长度为50的数组
       public static Song[] songlist = new Song[50];

public static int songIndex = 0;//当前播放的歌曲在数组中的索引
//每点击一次歌曲时,便是将歌曲对象放在数组中
       public static bool addsong(Song song)
        {
               bool success = false;//记录添加歌曲是否成功
               for (int i = 0; i < songlist.Length; i++)
                          {                //找到数组第一个为null的位置2
               if (songlist[i] == null)
        {
               songlist[i] = song;
               success = true;
               break;
        }
  }
               return success;
  }
//获取当前播放的窗体返回值是song类型

public static Song GetPlaysSong()

        {

            if (songlist[songIndex] != null )

            {

                return songlist[songIndex];

            }

            else

            {

                return null;

            }

        }

        //播放下一首

public static void Moveon()

        {

            if (songlist[songIndex] != null && songlist[songIndex].PlayState == SongplayState.again)

            {

                songlist[songIndex].setplayagaun();

            }

            else

            {

                songIndex++;

            }

切歌功能:

当我们点击切歌按钮时,变会播放下一首歌曲

}

    }

在这个类中我们要保存的是数组有二个方法

3:我们查询出的结果添加到数组当中;定义一个索引名称为index

它用来说明当前播放的歌曲在数组当中的位置

4:

5:定义一个Timer空间将Enabled属性改为ture,意思是可用状态

用来记录现在没有播放歌曲时,我们便获取到歌曲路径进行播放和当前歌曲播放完成后,进行下一手歌曲的播放

if (song == null)

            {

                PlaySong();

            }

            if (playan.playState ==WMPLib.WMPPlayState.wmppsStopped)//播放器为停止状态

{

song = null;

                Playlist.Moveon();//继续播放下一首

}

6:当我们点完歌曲后,便要将其状态也要发生改变

正在播放的便将状态改为已播放,未播放的状态改为未播放

代码在查询窗体中写如下:

private void Bofangzt()//播放歌曲的状态

{

lvlist.Items.Clear();//清空原列表

for (int i = 0; i <Playlist.songlist.Length; i++)//小于数组的长度

{

if (Playlist.songlist[i]!=null)

                {

                    ListViewItem item = new ListViewItem();

                    item.Text = Playlist.songlist[i].songName;

                    item.Tag = i;

                    string playStste = Playlist.songlist[i].playState == SongplayState.unplayed ? "未播放" : "已播放";

item.SubItems.Add(playStste);

                    lvlist.Items.Add(item);

         }

            }

   }

这变可用将状态进行改变了

切歌功能:我们需要将歌曲的状态进行改变,当点击切歌按钮时,自动切换下一首歌曲

我们可以再playlist类中邪一个切歌的方法:

public static void bofang1()

       {

           if (FrmMain.song != null)

           {

               FrmMain.song = null;//歌曲为空

Playlist.Moveon();//继续播放下一首了

}

       }

按钮调用该方法便可以进行切歌的操作

重唱也是改变歌曲的状态,

public static void chongchuang()

       {

           FrmMain.song.setplayagain();

           if (FrmMain.song != null && FrmMain.song.playState == SongplayState.again)

           {

               FrmMain.song = null;

           }

       }

使用与上面方法一样

已点列表当用户点击已点列表按钮时,自动跳转到已点窗口

在已点列表的DGV控件我们要做的便是在click中

/创建一个对象来保持歌曲路径和歌曲名字

Song song = new Song();

            song.SongName = dgvgequ.SelectedRows[0].Cells["SongName"].Value.ToString();//songname是lvtgequ中的名称

song.SongURl = dgvgequ.SelectedRows[0].Cells["SongURl"].Value.ToString();//songurl是歌曲的路径

//将选择的歌曲放在数组中

Playlist.addsong(song);

当我们每点击一个按钮变自动增加到已点列表和并且获取到他的状态

类型选择点歌

在类型选择点歌中,想要实现如上的效果我们要用到二种控件

Picturebox和label或者用listview控件均可实现上面效果

我们每点击一次歌曲,便调用一次已点列表,并将所点击控件的歌曲添加到已点列表

只要调用已点列表,更改where控件便可实现

拼音点歌

用户在文本控件输入歌曲的缩写, 便可以进行查询了

查询完成后,点击歌曲添加到播放列表

SqlConnection con = new SqlConnection(Sqlhelper.str);

            DataSet ds = new DataSet();

            //Select             Singer_name,song_name from singer_info,song_info where Song_ab like '%" + txtsx.Text + "%'

            string sql = "select song_name,Singer_name,Song_url from singer_info,song_info where singer_info.singer_id=song_info.singer_id ";

            SqlDataAdapter da = new SqlDataAdapter(sql, con);

            da.Fill(ds, "SONG_INFO");

            this.dgvgequ.DataSource = ds.Tables["SONG_INFO"];

字数点歌

在这里我用的一张图片,运用代码将10个控件添加到窗体中,并对其位置,隐藏添加的文字

当用户点击上面数字时便可以查询到对应数字的歌曲,以及进行播放

int num1 = 1;

        private void Form1_Load(object sender, EventArgs e)

        {

            int num2 = 1;//用来显示字数

for (int i = 0; i <2; i++)

            {

                for (int j = 0; j <4; j++)

                {

                    Label label = new Label();

                    num2++;

                    label.Tag = num1;

                    num1++;

                   label.Size = new Size(60, 60);

                   label.Location = new Point(60+(150)*j, 80+(125)*i);

                    label.BackColor=Color.Transparent;

                    this.Controls.Add(label);

                    label.Click += label_Click;

                }

                Console.ReadLine();

            }

一期结业KTV项目难点的更多相关文章

  1. KTV项目 SQL数据库的应用 结合C#应用窗体

    五道口北大青鸟校区 KTV项目 指导老师:袁玉明 歌曲播放原理 SQL数据库关系图 C#解决方案类图 第一步:创建数据库连接方法和打开方法和关闭方法! public class DBHelper { ...

  2. KTV项目总结

    KTV项目总结 大约一个星期前吧,老湿说我们要开始做KTV项目了,说是KTV项目是贯穿整个学的内容的,会所的,要我们认真去对待,一开始,第一天搭前台界面,总是有不会的,要去问问,这个要用什么控件啊,用 ...

  3. 小学生之KTV项目文档(bdqn)

    第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...

  4. KTV项目之3个ListView的跳转和加载歌手图片

    第一个ListView: 第二个ListView: 第三个ListView: 定义一个KTVUtil类,在里面定义一个静态变量保存歌手图片 //定义一个静态变量保存歌手图片路径 public stat ...

  5. 平凡的KTV后台,不平凡的KTV数据

    之前就是说过“一个项目有很多重要的步骤以及功能”,那我们现在就来看看对于KTV项目来说:后台是处于什么样的重要作用! 首先就得了解KTV后台的一些功能了: 1.歌曲管理 .歌手管理 .设置资源路径 2 ...

  6. S1293和S2220KTV项目结束

    1.界面原型(前台的界面搭建一下) 2.数据库 3.架构设计 4.约定的文件抽取 2015年7月20日下午 歌星点歌三界面的联动,数据动态加载 01.点击第一个LIstView,弹出第二个ListVi ...

  7. 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~

    结对项目:Web复利计算 搭档博客地址:25江志彬  http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...

  8. MyKTV项目总结

    今天和大伙分享一下我的KTV系统,我想大家都有自己独特的魅力,都有自己的风采,都有自己骄傲的一部分. 在这里我就抛砖引玉,聊聊我的KTV项目,希望大家能给出自己的建议.. 首先,我们先了解一下:当我们 ...

  9. MyKTV项目,走起!

    MyKTV项目,走起! 第一部分:这个项目对于新手来说有一点难度,但是当你理清类之间的关系和怎样去实现功能后就会感觉轻松很多. 话不多说,先上类图: 接着是数据库表间关系: 本项目要实现以下功能: 明 ...

随机推荐

  1. List学习笔记

    List 特点:1.有序.2.可重复. ArrayList: 底层是数组,数组是有下标的. 会自动扩容,底层默认初始化容量是10,扩大之后的容量预设是原来容量的一半(jdk 1.8).以前好像是原容量 ...

  2. 无锁同步-JAVA之Volatile、Atomic和CAS

    1.概要 本文是无锁同步系列文章的第二篇,主要探讨JAVA中的原子操作,以及如何进行无锁同步. 关于JAVA中的原子操作,我们很容易想到的是Volatile变量.java.util.concurren ...

  3. java中的Set的使用以及各种遍历方法(较为全面)

    1. 概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个接口来实现前面提到的关于商品 ...

  4. 医院his系统数据库恢复

    医院IT系统的重要性堪比金融行业,“银行系统宕机,老百姓不能取钱:医院HIS系统宕机,老百姓不能看病”, 医院信息系统称得上是迄今为止企业级信息系统中最复杂的一类.  某医院HIS系统SQL2008数 ...

  5. TSP问题 遗传算法 智能优化算法

    写了半天,效率还是有点低的,以后有空再优化下: //用次序表示法来表示个体编码 #include<iostream> #include<fstream> #include< ...

  6. bzoj1070————2016——3——14

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1070: 题目概括: Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中 ...

  7. iOS workspace 依次编译多个工程

    目的:当我封装一个framework的时候,需要检验当前的改动,但是又不想编译完framework,又要编译测试工程. 步骤: 1. 选择测试工程 2. Edit Scheme 3. 选中Build- ...

  8. css中盒子宽高的auto

    CSS盒模型中,auto属性只适用于外margin和width,height,border和padding不适用.下面就来说说它的情况.这里所说的都是标准流盒子. 1.横向来说 (1)若设置width ...

  9. post请求时2种传参方式

    @Testpublic void dopost(){ String httpurl = "https://jin.caimao.com/api/user/loginSalt"; M ...

  10. Zepto swipe 无效(坑)

    Zepto 滑动插件 bug Zepto 的 'swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown' 触摸事件在安卓4.4系统中除chro ...