完成时间3天,四人团队完成
Client前端
1.KTV主页面
1.KTV主界面
客户端进入KTV点歌系统的主窗体,窗体的中部是通过五个 PictureBox 控件,展示了歌星点歌,拼音点歌,类型点歌,热播排行和字数点歌等功能。当单机某个图片时,将会进入到相关的窗体。而窗体的下部使用了 ToolStrip 控件提供了重唱
2.歌星点歌
在主窗体上,单击“歌星点歌”图标就进入了“歌星点歌”窗体,按歌手性别分为组合,女歌手和男歌手三个类型,如图下所示
1.单机某种类型,如“男歌手”图标,窗体将变换为图下所示的页面,在窗体中对歌手所属地区进行了分类。
1.选择某个地区后,如“台湾”后,将显示这个地区的歌手信息,界面效果如图下所示。
1.当单击歌手姓名为“方大同”的歌手时,将显示这名歌手的信息
歌星点歌关键代码:窗体:FrmOrderBySinger
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmOrderBySinger_Load(object sender, EventArgs e)
{
this.lvsingerregion.Visible=false; //通过歌手地区点歌隐藏
this.lvsinger.Visible=false; //歌星隐藏
this.dgvsonglist.Visible = false; //歌曲列表隐藏
this.dgvsonglist.AutoGenerateColumns = false; //不允许自动创建列
}
public string gander; //歌手性别
public int singerTypeId; //歌手地区
public string singerName; //歌星名字
DBhepel db = new DBhepel();
KTVUtil util = new KTVUtil();
/// <summary>
/// 筛选符合信息的歌手
/// </summary>
private void filtrate()
{
try
{
db.ConnectionOpen();
string sql = string.Format(@"select singer_name,singer_photo_url from singer_info where
singer_gender='{0}' and singertype_id={1}", gander, singerTypeId);
SqlCommand command = new SqlCommand(sql,db.Conn);
SqlDataReader reader = command.ExecuteReader();
int index = 0;
while (reader.Read())
{
ListViewItem lv = new ListViewItem(reader["singer_name"].ToString(), index);
ilsinger.Images.Add(Image.FromFile(util.GetOldPhotoPath() + "\\" + reader["singer_photo_url"].ToString()));
lv.ImageIndex = index;
lvsinger.Items.Add(lv);
index++;
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
db.ConnectionClose();
}
}
/// <summary>
/// 选择歌星性别
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvsingergander_SelectedIndexChanged(object sender, EventArgs e)
{
gander = this.lvsingergander.SelectedItems[0].Text;
MessageBox.Show(gander);
this.lvsingerregion.Visible=true;
}
/// <summary>
/// 选择歌星地区
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvsingerregion_SelectedIndexChanged(object sender, EventArgs e)
{
singerTypeId = Convert.ToInt32(this.lvsingerregion.SelectedItems[0].Tag);
MessageBox.Show(singerTypeId.ToString());
this.lvsingergander.Visible=false;
this.lvsinger.Visible=true;
filtrate();
}
/// <summary>
/// 歌星
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvsinger_SelectedIndexChanged(object sender, EventArgs e)
{
singerName = this.lvsinger.SelectedItems[0].Text;
this.dgvsonglist.Visible = true;
bindDgvList();
numberChoose();
}
private SqlDataAdapter dapter;
DataSet ds = new DataSet();
/// <summary>
/// 绑定歌曲列表
/// </summary>
private void bindDgvList()
{
try
{
string sql = @" select * from song_info,singer_info,song_type
where song_info.singer_id=singer_info.singer_id
and song_info.songtype_id=song_type.songtype_id";
dapter = new SqlDataAdapter(sql, db.Conn);
if (ds.Tables[“songinfo”] != null)
{
ds.Tables[“songinfo”].Clear();
}
dapter.Fill(ds, “songinfo”);
this.dgvsonglist.DataSource = ds.Tables[“songinfo”];
}
catch (Exception ex)
{
MessageBox.Show("异常" + ex.Message);
}
}
/// <summary>
/// 根据歌星名字
/// </summary>
private void numberChoose()
{
MessageBox.Show(singerName);
DataView dv = new DataView(ds.Tables["songinfo"]);
dv.RowFilter = string.Format("singer_name='{0}'", singerName);
dgvsonglist.DataSource = dv; //绑定数据源
}
3.拼音点歌
输入歌曲的名称或歌曲的拼音,单击“查询”按钮,可以进行模糊查询
当你输入“Q”的时候,自动把“Q”开头的歌曲信息查询出来。
当你选择查询的时候也会把符合条件的歌曲信息查询出来显示到列表中
拼音点歌关键代码:窗体:FrmOrderBySongName
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmOrderBySongName_Load(object sender, EventArgs e)
{
bindDgvList();
// this.dgvsonglist.Visible = false;
}
DBhepel db = new DBhepel();
private SqlDataAdapter dapter;
DataSet ds = new DataSet();
/// <summary>
/// 绑定歌曲列表
/// </summary>
private void bindDgvList()
{
try
{
string sql = @" select * from song_info,singer_info,song_type
where song_info.singer_id=singer_info.singer_id
and song_info.songtype_id=song_type.songtype_id";
dapter = new SqlDataAdapter(sql, db.Conn);
if (ds.Tables[“songinfo”] != null)
{
ds.Tables[“songinfo”].Clear();
}
dapter.Fill(ds, “songinfo”);
this.dgvsonglist.DataSource = ds.Tables[“songinfo”];
}
catch (Exception ex)
{
MessageBox.Show("异常" + ex.Message);
}
}
/// <summary>
/// 根据字数选择
/// </summary>
private void seek()
{
DataView dv = new DataView(ds.Tables["songinfo"]);
dv.RowFilter = string.Format("song_ab='{0}'", this.txtab.Text);
MessageBox.Show(this.txtab.Text.ToString());
dgvsonglist.DataSource = dv; //绑定数据源
}
private void btnq_Click(object sender, EventArgs e)
{
this.txtab.Text += "Q";
}
private void btnw_Click(object sender, EventArgs e)
{
this.txtab.Text += "W";
}
private void btne_Click(object sender, EventArgs e)
{
this.txtab.Text += "E";
}
private void btnr_Click(object sender, EventArgs e)
{
this.txtab.Text += "R";
}
private void btnt_Click(object sender, EventArgs e)
{
this.txtab.Text += "T";
}
private void btny_Click(object sender, EventArgs e)
{
this.txtab.Text += "Y";
}
private void btnu_Click(object sender, EventArgs e)
{
this.txtab.Text += "U";
}
private void btni_Click(object sender, EventArgs e)
{
this.txtab.Text += "I";
}
private void btno_Click(object sender, EventArgs e)
{
this.txtab.Text += "O";
}
private void btnp_Click(object sender, EventArgs e)
{
this.txtab.Text += "P";
}
private void btna_Click(object sender, EventArgs e)
{
this.txtab.Text += "A";
}
private void btns_Click(object sender, EventArgs e)
{
this.txtab.Text += "S";
}
private void btnd_Click(object sender, EventArgs e)
{
this.txtab.Text += "D";
}
private void btnf_Click(object sender, EventArgs e)
{
this.txtab.Text += "F";
}
private void btng_Click(object sender, EventArgs e)
{
this.txtab.Text += "G";
}
private void btnh_Click(object sender, EventArgs e)
{
this.txtab.Text += "H";
}
private void btnj_Click(object sender, EventArgs e)
{
this.txtab.Text += "J";
}
private void btnk_Click(object sender, EventArgs e)
{
this.txtab.Text += "K";
}
private void btnl_Click(object sender, EventArgs e)
{
this.txtab.Text += "L";
}
private void btnz_Click(object sender, EventArgs e)
{
this.txtab.Text += "Z";
}
private void btnx_Click(object sender, EventArgs e)
{
this.txtab.Text += "X";
}
private void btnc_Click(object sender, EventArgs e)
{
this.txtab.Text += "C";
}
private void btnv_Click(object sender, EventArgs e)
{
this.txtab.Text += "V";
}
private void btnb_Click(object sender, EventArgs e)
{
this.txtab.Text += "B";
}
private void btnn_Click(object sender, EventArgs e)
{
this.txtab.Text += "N";
}
private void btnm_Click(object sender, EventArgs e)
{
this.txtab.Text += "M";
}
/// <summary>
/// 删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btndelete_Click(object sender, EventArgs e)
{
this.txtab.Text = this.txtab.Text.Substring(0,this.txtab.TextLength-1);
}
/// <summary>
/// 清空
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnclear_Click(object sender, EventArgs e)
{
this.txtab.Text = string.Empty;
}
/// <summary>
/// 搜索
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnseek_Click(object sender, EventArgs e)
{
this.dgvsonglist.Visible = true;
seek();
}
4.类型选择
类型选择提供了歌曲的分类列表(热门流行,经典老歌,影视金曲,游戏动漫,戏曲,儿歌)。
当你选择“热门流行”,将会在窗口下显示这个分类下的歌曲列表,如图下所示:
5.金榜排行
金榜是指将歌曲按点播过的次数,降序排列,作为点歌排行榜,在排行榜中显示了歌曲的名称和歌曲姓名。选择其中一首歌曲,可以进行点播,并把歌曲添加到播放列表中。
类型点歌关键代码: 窗体 FrmOrderBySongType
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmOrderBySongType_Load(object sender, EventArgs e)
{
bindDgvList();
}
string songType;
private void osPopularpop_MouseClick(object sender, MouseEventArgs e)
{
songType = "热门流行";
seek();
}
DBhepel db = new DBhepel();
private SqlDataAdapter dapter;
DataSet ds = new DataSet();
/// <summary>
/// 绑定歌曲列表
/// </summary>
private void bindDgvList()
{
try
{
string sql = @" select * from song_info,singer_info,song_type
where song_info.singer_id=singer_info.singer_id
and song_info.songtype_id=song_type.songtype_id";
dapter = new SqlDataAdapter(sql, db.Conn);
if (ds.Tables[“songinfo”] != null)
{
ds.Tables[“songinfo”].Clear();
}
dapter.Fill(ds, “songinfo”);
this.dgvsonglist.DataSource = ds.Tables[“songinfo”];
}
catch (Exception ex)
{
MessageBox.Show("异常" + ex.Message);
}
}
/// <summary>
/// 根据字数选择
/// </summary>
private void seek()
{
DataView dv = new DataView(ds.Tables["songinfo"]);
dv.RowFilter = string.Format("songtype_name='{0}'", songType);
MessageBox.Show(songType);
dgvsonglist.DataSource = dv; //绑定数据源
}
5.字数点歌
进入“字数点歌”窗体后,可以按歌曲名称的字数进行点歌。
当你选择2的时候他会筛选符合字数为2的歌曲并把它显示出来,如图下所示
字数点歌关键代码: 窗体:FrmOrderByWordCount
/// 加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmOrderByWordCount_Load(object sender, EventArgs e)
{
this.dgvsonglist.AutoGenerateColumns = false;
bindDgvList();
}
public int number;
//一个字
private void lblone_MouseClick(object sender, MouseEventArgs e)
{
number = 1;
numberChoose();
}
//两个字
private void lbltwo_MouseClick_1(object sender, MouseEventArgs e)
{
number = 2;
numberChoose();
}
//三个字
private void lblthree_MouseClick(object sender, MouseEventArgs e)
{
number = 3;
numberChoose();
}
//四个字
private void lblfour_MouseClick(object sender, MouseEventArgs e)
{
number = 4;
numberChoose();
}
//五个字
private void lblfive_MouseClick(object sender, MouseEventArgs e)
{
number = 5;
numberChoose();
}
//六个字
private void lblsix_MouseClick(object sender, MouseEventArgs e)
{
number = 6;
numberChoose();
}
//七个字
private void lblseven_MouseClick(object sender, MouseEventArgs e)
{
number = 7;
numberChoose();
}
//八个字
private void lbleight_Click(object sender, EventArgs e)
{
number = 8;
numberChoose();
}
//九个字
private void lblnine_MouseClick(object sender, MouseEventArgs e)
{
number = 9;
numberChoose();
}
//全部
private void lblall_Click(object sender, EventArgs e)
{
bindDgvList();
}
DBhepel db = new DBhepel();
private SqlDataAdapter dapter;
DataSet ds = new DataSet();
/// <summary>
/// 绑定歌曲列表
/// </summary>
private void bindDgvList()
{
try
{
string sql = @" select * from song_info,singer_info,song_type
where song_info.singer_id=singer_info.singer_id
and song_info.songtype_id=song_type.songtype_id";
dapter = new SqlDataAdapter(sql, db.Conn);
if (ds.Tables[“songinfo”] != null)
{
ds.Tables[“songinfo”].Clear();
}
dapter.Fill(ds, “songinfo”);
this.dgvsonglist.DataSource=ds.Tables[“songinfo”];
}
catch (Exception ex)
{
MessageBox.Show("异常" + ex.Message);
}
}
/// <summary>
/// 根据字数选择
/// </summary>
private void numberChoose()
{
DataView dv = new DataView(ds.Tables["songinfo"]);
dv.RowFilter = string.Format("song_word_count={0}", number);
MessageBox.Show(number.ToString());
dgvsonglist.DataSource = dv; //绑定数据源
}