蒲公英学长 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
下面通过图文并茂的方式给大家分享C#实现KTV点歌系统。
public enum SongPlayState { //未播放,播放,重播,切歌 unplayed, played, again, cut } public class Song { public string SongName { get; set; }//歌曲名称 public string SongURL { get; set; }//歌曲路径 public SongPlayState playState = SongPlayState.unplayed;//默认未播放 internal SongPlayState PlayState { get; set; } //状态为已播 public void SetSongPlayed() { this.PlayState = SongPlayState.played; } //重唱 public void SetPlayAgain() { this.playState = SongPlayState.again; } //切歌 public void SetSongCut() { this.playState = SongPlayState.cut; }</div>
PlayList类中实现切歌 重唱 下一首 等.....
public class PlayList { //定义一个长度为、 的歌曲数组,默认存储 首歌曲 public static Song[] SongList = new Song[ ]; public static int SongIndex = ;//当前播放的歌曲在数组中的索引 //点播一首歌曲,其实是将歌曲对象添加到歌曲数组中 public static bool AddSong(Song song) { bool success = false;//记录添加歌曲是否成功 for (int i = ; i < SongList.Length; i++) { //找到数组中第一个为null的位置 if (SongList[i] == null) { SongList[i] = song; success = true; break; } } return success; } //获取当前播放的歌曲::既然是获取当前播放的歌曲,返回值肯定是Song类型 public static Song GetPlaySong() { if (SongList[SongIndex] != null) { return SongList[SongIndex]; } else { return null; } } /// <summary> /// 播放下一首 /// </summary> public static void MoveOn() { if (SongList[SongIndex] != null && SongList[SongIndex].PlayState == SongPlayState.again) { SongList[SongIndex].SetSongPlayed(); } else { SongIndex++; } } /// <summary> /// 当前播放的歌曲名称 /// </summary> /// <returns>歌曲名称</returns> public static string PlayingSongName() { string songName = ""; // 歌曲名称 if (SongList[SongIndex] != null) { songName = SongList[SongIndex].SongName; } return songName; } /// <summary> /// 下一首要播放的歌曲名称 /// </summary> /// <returns>歌曲名称</returns> public static string NextSongName() { string songName = ""; // 歌曲名称 if (SongList[SongIndex + ] != null) { songName = SongList[SongIndex + ].SongName; } return songName; } //重放当前歌曲 public static void PlayAgain() { if (SongList[SongIndex] != null) { SongList[SongIndex].SetPlayAgain(); } } //切歌 public static void CutSong(int index) { int i;//循环变量,代表切歌的位置 if (index == - )//循环变量,代表切割的位置 { i = SongIndex; } else { i = index;//从切歌的位置开始,将歌曲逐个向前移一个位置 } SongList[i].SetSongCut(); while (SongList[i] != null) { SongList[i] = SongList[i + ]; i++; //如果达到数组最后一个元素,就将最后一个元素指向空 if (i == SongList.Length) { SongList[i] = null; } } } }</div>
实现歌手点歌
public FrmMain frmMain; string connectionStr = "server=.;database=MyKTV;uid=sa"; DBHelp db = new DBHelp(); private SqlConnection con; //首先要查出数据库中的图片路径和歌曲路径 private void FrmCountry_Load(object sender, EventArgs e) { con = new SqlConnection(connectionStr); con.Open(); string sql = "select resource_path from resource_path where resource_id= "; string sqlsongpath = "select resource_path from resource_path where resource_id= "; SqlCommand cmd = new SqlCommand(sql,con); SqlCommand cmd = new SqlCommand(sqlsongpath, con); KtvUnit.ImagePath = cmd.ExecuteScalar().ToString(); KtvUnit.SongPath = cmd .ExecuteScalar().ToString(); con.Close(); } //点击歌手男女或组合时 private void LvOne_Click(object sender, EventArgs e) { LoadSingerArea(); } public string singer_type { get; set; } private void LoadSingerArea() { if (this.LvOne.SelectedItems[ ] != null) { LvOne.Visible = false; LvTwo.Location = LvOne.Location; LvTwo.Dock = DockStyle.Fill; LvTwo.Visible = true; this.singer_type=Convert.ToString(LvOne.SelectedItems[ ].Text); } con = new SqlConnection(connectionStr); string sql = "select singertype_id,singertype_name from singer_type"; SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr; try { con.Open(); LvTwo.Items.Clear(); dr = cmd.ExecuteReader(); if (dr.HasRows) { int index = ; while (dr.Read()) { ListViewItem lvItem = new ListViewItem(); int typeid = Convert.ToInt (dr["singertype_id"]); string typename = Convert.ToString(dr["singertype_name"]); lvItem.Text = typename; lvItem.Tag = typeid; lvItem.ImageIndex = index; LvTwo.Items.Add(lvItem); index++; } } dr.Close(); } catch (Exception ex) { MessageBox.Show("系统出现异常" + ex.Message); } finally { con.Close(); } } public string singertype_id { get; set; } /// <summary> /// 点击地区类型时 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void LvTwo_Click(object sender, EventArgs e) { if (this.LvTwo.SelectedItems[ ] != null) { LvTwo.Visible = false; Lvthree.Location = LvTwo.Location; Lvthree.Dock = DockStyle.Fill; Lvthree.Visible = true; this.singertype_id = Convert.ToString(LvTwo.SelectedItems[ ].Tag); } string result = singer_type; if (result != "组合") { result = singer_type == "女歌手" ? "女" : "男"; } con = new SqlConnection(connectionStr); string sql =string.Format( "select singer_id,singer_name,singer_photo_url from singer_info where singertype_id={ } and singer_Sex='{ }'",singertype_id,result); SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr; try { con.Open(); int index = ; Lvthree.Items.Clear(); imageList .Images.Clear(); dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { string photoURL =KtvUnit.ImagePath + Convert.ToString(dr["singer_photo_url"]); //先给ImageList填充图片 imageList .Images.Add(Image.FromFile(photoURL)); ListViewItem lvItem = new ListViewItem(); lvItem.Text = Convert.ToString(dr["singer_name"]); lvItem.Tag = Convert.ToString(dr["singer_id"]); lvItem.ImageIndex = index; Lvthree.Items.Add(lvItem); index++; } } dr.Close(); } catch (Exception ex) { MessageBox.Show("系统出现异常" + ex.Message); } finally { con.Close(); } } public void SongList() { //读取数据库,读出该歌手的所有歌曲 StringBuilder sb = new StringBuilder(); //拼接SQL语句 sb.AppendFormat("select song_id,song_name,song_url,singer_name from song_info,singer_info where singer_name='{ }' and song_info.singer_id={ }", Lvthree.SelectedItems[ ].Text, Convert.ToInt (Lvthree.SelectedItems[ ].Tag)); FrmSongList songList = new FrmSongList(); songList.Sql = sb.ToString(); songList.Previous = KtvClient.PrevioisForm.Singer;//指定返回的窗体是按歌手点歌 songList.ShowDialog(); this.Close(); } private void Lvthree_Click(object sender, EventArgs e) { SongList(); } private void tsSingerMain_Click(object sender, Even