蒲公英学长 通过本文主要向大家介绍了马桶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

