一个项目,一分收获;一个项目,一些资源。Ktv项目也是一样的,所以我想分享我的收获,让你们获得你需要的资源。
一. 那MyKTV点歌系统具体的功能有哪些呢?我们就来看看吧!
1.MyKTV前台功能:
01.歌星点歌 、拼音点歌 、数字点歌 、类型选择 、金榜排行
02.切歌 、点歌 、重唱和退出
2.MyKTV后台功能:
01.歌手管理 、歌曲管理 、设置资源路径
02.新增歌手、歌曲 ,查询歌手、歌曲信息,设置歌曲路径和退出
二. 功能已经概括的差不多了,就让我们一起来看看MyKTV的项目吧
1.首先就是展现KTV的主界面,让我们先了解一下那些功能
01.实现各个共功能的主代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
//当前播放的歌曲
private Song song;
// 退出系统
SqlConnection con = new SqlConnection(DBHelper.str);
private void tsbtnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void MainForm_Load(object sender, EventArgs e)
{
DBHelper.frm = this;
// 加载时,运行播放窗体
// 启动计时器
this.tim.Start(); // 歌手照片路径
string sql = "select resource_path from resource_path where resource_id=1";
SqlCommand cmd = new SqlCommand(sql, con);
// 歌手照片路径
con.Open();
KTVUtil.singerPhotoPath = cmd.ExecuteScalar().ToString();
// 歌曲路径
sql = "select resource_path from resource_path where resource_id=2";
cmd.CommandText = sql;
KTVUtil.songPath = cmd.ExecuteScalar().ToString();
con.Close();
}
//已点歌曲窗体
private void tsbtnOrdered_Click(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
} // 重新播放当前歌曲
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
PlaySong();
} // 切歌
private void tsbtnCut_Click(object sender, EventArgs e)
{
if (txtnextsong.Text=="")
{
MessageBox.Show("暂无已点歌曲");
}
else
{
PlayList.CutSong(-);
} }
// 服务
private void toolStripButton1_Click(object sender, EventArgs e)
{
MessageBox.Show("当前无服务!");
}
//播放歌曲
private void PlaySong()
{
this.song = PlayList.GetPlayingSong(); // 获取当前要播放的歌曲
if (song != null)
{
this.song.SetSongPlayed(); // 将当前歌曲播放状态设为已播放
this.Winplaymedia.URL = KTVUtil.songPath + "\\" + this.song.SongURL; // 得到当前播放歌曲的路径
string urlls = KTVUtil.singerPhotoPath +"\\"+ this.song.Singerurl;//歌手图片
lblsongname.Text = this.song.Singername;//歌手名字
try
{
this.pblist.Image = Image.FromFile(urlls);
}
catch (Exception)
{ MessageBox.Show("暂无歌手图片"); ;
} }
}
// 定时扫描歌曲列表,显示当前播放歌曲的名称
private void timer1_Tick(object sender, EventArgs e)
{
// 在文本框中显示当前播放的歌曲名字
this.txtplay.Text = PlayList.PlayingSongName();
this.txtnextsong.Text = PlayList.NextSongName();
if (this.song == null)
{
this.PlaySong();
}
if (this.Winplaymedia.playState == WMPLib.WMPPlayState.wmppsStopped)
{
this.song = null; // 将歌曲设为空
PlayList.MoveOn();
}
// 切歌
if (this.song != null && this.song.PlayState == SongPlayState.cut)
{
this.Winplaymedia.URL = "";
this.song = null;
}
}
// 按歌手点歌
private void picSinger_Click(object sender, EventArgs e)
{
frmOrderBySinger frm = new frmOrderBySinger();
frm.Show();
} // 拼音点歌
private void picSongName_Click(object sender, EventArgs e)
{
frmOrderBySongName frm = new frmOrderBySongName();
frm.Show();
} // 分类点歌
private void picSongType_Click(object sender, EventArgs e)
{
frmOrderBySongType frm = new frmOrderBySongType();
frm.Show();
} // 排行榜点歌
private void picSongList_Click(object sender, EventArgs e)
{
frmSongList frm = new frmSongList();
string sql = "select song_id,song_name,singer_info.singer_name,song_url,singer_info.singer_photo_url from song_info inner join singer_info on song_info.singer_id=singer_info.singer_id order by song_play_count desc";
frm.Sql = sql;
frm.Onform = FanhuiForm.Main;
frm.Show();
} // 字数点歌
private void picWordCount_Click(object sender, EventArgs e)
{
frmOrderByWordCount frm = new frmOrderByWordCount();
frm.Show();
} private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
//关闭应用
Application.Exit();
} //点击窗体移动
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlTop_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlTop_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} private void pnlTop_MouseUp(object sender, MouseEventArgs e)
{ // 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
} private void pnlTop_Paint(object sender, PaintEventArgs e)
{ } }
}
2.歌星点歌(三个listview的集成窗体)
01.歌手类别
02.歌手地区
03.歌手姓名
04.代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; // ADO.NET namespace MyKTVClient
{
public partial class frmOrderBySinger : Form
{
// 当前选择的歌手性别
private string singergender = "男";
// 当前选择的歌手类型的编号
private int singerTypeId = ; public frmOrderBySinger()
{
InitializeComponent();
} // 关闭当前窗体,显示主界面
private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
} // 重新播放当前歌曲
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
} // 切歌
private void tsbtnCut_Click(object sender, EventArgs e)
{
PlayList.CutSong(-); } // 打开已点歌曲窗体
private void tsbtnOrdered_Click(object sender, EventArgs e)
{
frmOrderedSongList frm= new frmOrderedSongList();
frm.Show();
} // 呼叫服务
private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务!");
} // 处理返回按钮的事件
private void tsbtnExit_Click(object sender, EventArgs e)
{
if (this.pnlSingerList.Visible)
{ this.pnlSingerType.Visible = true;
this.pnlSingerList.Visible = false;
}
else if (this.pnlSingerType.Visible)
{
this.pnlSingerSex.Visible = true;
this.pnlSingerType.Visible = false;
}
else if (this.pnlSingerSex.Visible)
{
this.Close();
}
}
//点击歌手的信息窗体时,弹出歌曲列表
private void lvlistthree_Click(object sender, EventArgs e)
{ // 读取数据库,读出该歌手的所有歌曲
SqlConnection con = new SqlConnection(DBHelper.str);
StringBuilder sb = new StringBuilder();
sb.AppendFormat("select song_id,song_name,singer_info.singer_name,song_url,singer_info.singer_photo_url from song_info,singer_info where song_info.singer_id=singer_info.singer_id and singer_name='{0}' and song_info.singer_id={1}",
lvlistthree.SelectedItems[].Text, Convert.ToInt32(lvlistthree.SelectedItems[].Tag)); frmSongList frm = new frmSongList();
frm.Sql = sb.ToString(); frm.Onform = FanhuiForm.Singergender; // 指定返回的窗体是按歌手点歌
frm.Show();
}
//当点击歌手类别的窗体时,弹出某歌手的信息的船体
private void lvlisttwo_Click(object sender, EventArgs e)
{
// 隐藏歌手类别,显示歌手列表
pnlSingerType.Visible = false;
pnlSingerList.Location = pnlSingerSex.Location;
pnlSingerList.Dock = DockStyle.Fill;
pnlSingerList.Visible = true;
this.singerTypeId = Convert.ToInt32(lvlisttwo.SelectedItems[].Tag); // 保存选中的类别编号 // 读取数据库,读出歌手信息
SqlConnection con = new SqlConnection(DBHelper.str);
StringBuilder sql = new StringBuilder();
sql.AppendFormat("select singer_id,singer_name,singer_photo_url from singer_info where singertype_id={0} and singer_gender='{1}'",
this.singerTypeId, this.singergender); try
{
SqlCommand cmd = new SqlCommand(sql.ToString(), con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
int imageIndex = ; // 代表歌手头像的索引
imglistthree.Images.Clear(); // 循环读出歌手信息添加到窗体中显示
lvlistthree.Items.Clear();
while (dr.Read())
{
// 将歌手头像放在ImageList控件中
string photoURL = KTVUtil.singerPhotoPath + "\\" + Convert.ToString(dr["singer_photo_url"]);
imglistthree.Images.Add(Image.FromFile(photoURL)); // 将歌手添加到ListView中
ListViewItem item = new ListViewItem();
item.Text = Convert.ToString(dr["singer_name"]);
item.Tag = Convert.ToString(dr["singer_id"]);
item.ImageIndex = imageIndex;
lvlistthree.Items.Add(item); imageIndex++;
}
dr.Close();
}
catch (Exception)
{ MessageBox.Show("错误!");
}
finally
{
con.Close();
}
}
//当点击歌手的性别窗体时,弹出歌手的类别窗体的第一个listview
private void lvlistone_Click(object sender, EventArgs e)
{ if (lvlistone.SelectedItems[] != null)
{
// 隐藏歌手性别,显示歌手类别
pnlSingerSex.Visible = false;
pnlSingerType.Location = pnlSingerSex.Location;
pnlSingerType.Dock = DockStyle.Fill;
pnlSingerType.Visible = true;
// 记录选择的性别
this.singergender = Convert.ToString(lvlistone.SelectedItems[].Tag);
} // 读取歌手类别
SqlConnection con = new SqlConnection(DBHelper.str);
string sql = "select * from singer_type";
try
{
// 查询数据库
SqlCommand command = new SqlCommand(sql, con); con.Open();
SqlDataReader dr = command.ExecuteReader(); // 循环将类别读取出来添加到ListView中
lvlisttwo.Items.Clear();
int i = ;
while (dr.Read())
{
ListViewItem item = new ListViewItem();
item.Text = Convert.ToString(dr["singertype_name"]);
item.Tag = Convert.ToInt32(dr["singertype_id"]);
item.ImageIndex = i;
lvlisttwo.Items.Add(item);
i++;
}
dr.Close();
}
catch (Exception)
{ MessageBox.Show("错误!"); }
finally
{
con.Close();
}
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlon_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlon_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} private void pnlon_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
} }
}
05.歌曲列表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{ // 定义枚举,代表当前应该返回到的上一个窗体
public enum FanhuiForm
{
Main, Singergender, SongType, WordCount, SongName, SongList
} public partial class frmSongList : Form
{
private string sql = "";
private FanhuiForm onform; // 上一个窗体 // 该窗体应该返回到的上一个窗体 public FanhuiForm Onform
{
get { return onform; }
set { onform = value; }
} // 歌曲列表查询语句 public string Sql
{
get { return sql; }
set { sql = value; }
} public frmSongList()
{
InitializeComponent();
} // 返回
SqlConnection con = new SqlConnection(DBHelper.str);
private void tsbtnExit_Click(object sender, EventArgs e)
{
switch (this.Onform)
{
// 返回到歌手点歌
case FanhuiForm.Singergender:
frmOrderBySinger frm = new frmOrderBySinger();
frm.Show();
break;
// 返回到歌曲类型点歌
case FanhuiForm.SongType:
frmOrderBySongType frm1 = new frmOrderBySongType();
frm1.Show();
break;
// 返回到字数点歌
case FanhuiForm.WordCount:
frmOrderByWordCount frm2 = new frmOrderByWordCount();
frm2.Show();
break;
}
this.Close();
} // 窗体加载时查询歌曲列表
private void SongListForm_Load(object sender, EventArgs e)
{ DataSet dataSet = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(this.Sql, con);
da.Fill(dataSet, "info");
dgvlist.DataSource = dataSet.Tables["info"];
} private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务中");
}
// 点播一首歌曲
private void dgvlist_CellClick(object sender, DataGridViewCellEventArgs e)
{
// 创建一个歌曲对象,并将选中的歌曲名和路径赋给该对象
Song song = new Song();
song.SongName = dgvlist.SelectedRows[].Cells["songName"].Value.ToString();
song.SongURL = dgvlist.SelectedRows[].Cells["songURL"].Value.ToString();
song.Singerurl = dgvlist.SelectedRows[].Cells["singerUrl"].Value.ToString();
song.Singername = dgvlist.SelectedRows[].Cells["singer"].Value.ToString();
PlayList.AddSong(song); // 更新数据库,将选中的歌曲点播次数加1
int sId = Convert.ToInt32(dgvlist.SelectedRows[].Cells["songId"].Value);
//string sql = "update song_info set song_play_count=song_play_count+1 where song_id="+sId+"";
string sql = string.Format("update song_info set song_play_count=song_play_count+1 where song_id={0}", sId);
try
{
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{ MessageBox.Show("出错!");
}
finally
{
con.Close();
}
}
//返回
private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
}
// 切歌
private void tsbtnCut_Click(object sender, EventArgs e)
{
PlayList.CutSong(-);
}
// 打开已点歌曲窗体
private void tsbtnOrdered_Click(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
}
// 重新播放当前歌曲
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
}
//主界面
private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
} private void frmSongList_MouseDown(object sender, MouseEventArgs e)
{ } private void frmSongList_MouseMove(object sender, MouseEventArgs e)
{ } private void frmSongList_MouseUp(object sender, MouseEventArgs e)
{ } private void pnlTop_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlTop_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlTop_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} }
}
01. 播放界面
02. 已点歌曲
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace MyKTVClient
{
public partial class frmOrderedSongList : Form
{
private FanhuiForm onform; // 上一个窗体 /// <summary>
/// 该窗体应该返回到的上一个窗体
/// </summary>
public string name;
public FanhuiForm Onform
{
get { return onform; }
set { onform = value; }
} public frmOrderedSongList()
{
InitializeComponent();
} private void OrderedSongListForm_Load(object sender, EventArgs e)
{
this.newSonglist();
tim.Start();
} private void timer1_Tick(object sender, EventArgs e)
{
//this.newSonglist();
} //刷新歌曲列表
private void newSonglist()
{
// 清空原列表
lvlist.Items.Clear();
int index = ;
while (PlayList.SongList[index] != null)
{
ListViewItem item = new ListViewItem();
//获取歌曲的名称
item.Text = PlayList.SongList[index].SongName;
item.Tag = index;
//歌曲的播放状态
string playState = PlayList.SongList[index].PlayState == SongPlayState.unplayed ? "未播放" : "已播放";
item.SubItems.Add(playState);
lvlist.Items.Add(item);
index++;
}
} // 返回到上一个窗体
private void tsbtnExit_Click(object sender, EventArgs e)
{
switch (this.Onform)
{
case FanhuiForm.Singergender:
frmOrderBySinger frm = new frmOrderBySinger();
frm.Show();
break;
case FanhuiForm.SongList:
frmSongList frm1 = new frmSongList();
frm1.Show();
break;
case FanhuiForm.SongName:
frmOrderBySongName frm2 = new frmOrderBySongName();
frm2.Show();
break;
case FanhuiForm.SongType:
frmOrderBySongType frm3 = new frmOrderBySongType();
frm3.Show();
break;
case FanhuiForm.WordCount:
frmOrderByWordCount frm4 = new frmOrderByWordCount();
frm4.Show();
break;
} this.Close();
}
// 呼叫服务
private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务中");
}
//返回
private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
}
//已点
private void tsbtnOrdered_Click(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
}
//切割
private void tsbtnCut_Click_1(object sender, EventArgs e)
{ PlayList.CutSong(songId);
this.newSonglist(); }
//重唱
private void tsbtnAgain_Click_1(object sender, EventArgs e)
{
PlayList.PlayAgain();
}
//
private void tsbtnHome_Click_1(object sender, EventArgs e)
{
this.Close();
}
//删除选中歌曲
int songId = -; // 切歌的编号
private void lvlist_Click(object sender, EventArgs e)
{ if (this.lvlist.SelectedItems.Count > )
{
songId = Convert.ToInt32(this.lvlist.SelectedItems[].Tag);
}
} private void lvlist_MouseDown(object sender, MouseEventArgs e)
{ }
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void frmOrderedSongList_MouseDown(object sender, MouseEventArgs e)
{ } private void frmOrderedSongList_MouseMove(object sender, MouseEventArgs e)
{ } private void frmOrderedSongList_Move(object sender, EventArgs e)
{ } private void frmOrderedSongList_MouseUp(object sender, MouseEventArgs e)
{ } private void pnlTop_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlTop_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} private void pnlTop_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
} }
3.拼音点歌
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{
public partial class frmOrderBySongName : Form
{
public frmOrderBySongName()
{
InitializeComponent();
} // 查询歌曲显示在窗体中
SqlConnection con = new SqlConnection(DBHelper.str);
private void btnSearch_Click(object sender, EventArgs e)
{ DataSet ds = new DataSet();
StringBuilder sb = new StringBuilder();
sb.Append("select song_id,song_name,singer_info.singer_name,song_url,singer_info.singer_photo_url from song_info inner join singer_info on singer_info.singer_id=song_info.singer_id ");
sb.AppendFormat("where song_name like '%{0}%' or song_ab like '{0}'", this.txtname.Text); Console.WriteLine(sb.ToString()); SqlDataAdapter da = new SqlDataAdapter(sb.ToString(), con); // 在填充之前先清空当前列表
if (ds.Tables["info"] != null)
{
ds.Tables["info"].Clear();
}
da.Fill(ds, "info");
this.dgvlist.DataSource = ds.Tables["info"];
}
private void tsbtnExit_Click(object sender, EventArgs e)
{ this.Close();
} // 服务
private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务中!");
}
private void dgvlist_CellClick(object sender, DataGridViewCellEventArgs e)
{ if (dgvlist.SelectedRows[].Cells["songName"] != null)
{
// 创建一个歌曲对象,并将当权选中的歌曲名和路径赋给该对象
Song song = new Song();
song.SongName = dgvlist.SelectedRows[].Cells["songName"].Value.ToString();
song.SongURL = dgvlist.SelectedRows[].Cells["songURL"].Value.ToString();
song.Singerurl = dgvlist.SelectedRows[].Cells["singerUrl"].Value.ToString();
PlayList.AddSong(song); //将选中的歌曲点播次数加1
int songId = Convert.ToInt32(dgvlist.SelectedRows[].Cells["songId"].Value);
string sql = string.Format("update song_info set song_play_count=song_play_count+1 where song_id={0}", songId);
DBHelper dbHelper = new DBHelper();
try
{
SqlCommand cmd = new SqlCommand(sql,con);
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception )
{ MessageBox.Show("异常");
}
finally
{
con.Close();
}
}
} private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
} private void tsbtnCut_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确定要切歌吗?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
PlayList.CutSong(-);
} } private void tsbtnOrdered_Click_1(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
} private void tsbtnAgain_Click_1(object sender, EventArgs e)
{
PlayList.PlayAgain();
} private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlon_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlon_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} private void pnlon_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
}
}
01.点歌后的效果
4.已点歌曲里的切歌效果
代码:
//删除选中歌曲
int songId = -; // 切歌的编号
private void lvlist_Click(object sender, EventArgs e)
{ if (this.lvlist.SelectedItems.Count > )
{
songId = Convert.ToInt32(this.lvlist.SelectedItems[].Tag);
}
} //切歌
private void tsbtnCut_Click_1(object sender, EventArgs e)
{ PlayList.CutSong(songId);
this.newSonglist(); }
5.类型选择
通过代码把图片动态加载进来
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{
public partial class frmOrderBySongType : Form
{
public frmOrderBySongType()
{
InitializeComponent();
} private void tsbtnExit_Click(object sender, EventArgs e)
{
this.Close();
} // 窗体加载时,显示歌曲类别
SqlConnection con = new SqlConnection(DBHelper.str);
private void OrderBySongTypeForm_Load(object sender, EventArgs e)
{
// 读取歌曲类别
string sql = "select * from song_type";
try
{
// 查询数据库
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader(); // 循环将类别读取出来添加到ListView中
this.lvlist.Items.Clear();
int index = ;
while (dr.Read())
{
ListViewItem item = new ListViewItem();
item.Text = Convert.ToString(dr["songtype_name"]);
item.Tag = Convert.ToInt32(dr["songtype_id"]);
item.ImageIndex = index;
this.lvlist.Items.Add(item);
index++;
}
dr.Close();
}
catch (Exception)
{ MessageBox.Show("错误!"); }
finally
{
con.Close();
}
} // 呼叫服务
private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("您呼叫服务中!");
} private void lvlist_Click(object sender, EventArgs e)
{
// 读取数据库,读出该歌手的所有歌曲 StringBuilder sb = new StringBuilder();
sb.Append("select song_id,song_name,singer_info.singer_name,song_url,singer_info.singer_photo_url from song_info inner join singer_info on song_info.singer_id=singer_info.singer_id ");
sb.AppendFormat("where songtype_id={0}", Convert.ToInt32(lvlist.SelectedItems[].Tag));
Console.WriteLine(sb.ToString());
frmSongList frm = new frmSongList();
frm.Sql = sb.ToString();
frm.Onform = FanhuiForm.SongType;
frm.Show(); }
//
private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
}
//
private void tsbtnOrdered_Click_1(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
}
//
private void tsbtnCut_Click_1(object sender, EventArgs e)
{
PlayList.CutSong(-);
}
//
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
} private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
} private void pnlon_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
} private void pnlon_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void lvlist_MouseDown(object sender, MouseEventArgs e)
{ } private void pnlon_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
}
}
}
01.歌曲列表
6.金榜点歌
01.代码同为一个歌曲列表窗体
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{ // 定义枚举,代表当前应该返回到的上一个窗体
public enum FanhuiForm
{
Main, Singergender, SongType, WordCount, SongName, SongList
} public partial class frmSongList : Form
{
private string sql = "";
private FanhuiForm onform; // 上一个窗体 // 该窗体应该返回到的上一个窗体 public FanhuiForm Onform
{
get { return onform; }
set { onform = value; }
} // 歌曲列表查询语句 public string Sql
{
get { return sql; }
set { sql = value; }
} public frmSongList()
{
InitializeComponent();
} // 返回
SqlConnection con = new SqlConnection(DBHelper.str);
private void tsbtnExit_Click(object sender, EventArgs e)
{
switch (this.Onform)
{
// 返回到歌手点歌
case FanhuiForm.Singergender:
frmOrderBySinger frm = new frmOrderBySinger();
frm.Show();
break;
// 返回到歌曲类型点歌
case FanhuiForm.SongType:
frmOrderBySongType frm1 = new frmOrderBySongType();
frm1.Show();
break;
// 返回到字数点歌
case FanhuiForm.WordCount:
frmOrderByWordCount frm2 = new frmOrderByWordCount();
frm2.Show();
break;
}
this.Close();
} // 窗体加载时查询歌曲列表
private void SongListForm_Load(object sender, EventArgs e)
{ DataSet dataSet = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(this.Sql, con);
da.Fill(dataSet, "info");
dgvlist.DataSource = dataSet.Tables["info"];
} private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务中");
}
// 点播一首歌曲
private void dgvlist_CellClick(object sender, DataGridViewCellEventArgs e)
{
// 创建一个歌曲对象,并将选中的歌曲名和路径赋给该对象
Song song = new Song();
song.SongName = dgvlist.SelectedRows[].Cells["songName"].Value.ToString();
song.SongURL = dgvlist.SelectedRows[].Cells["songURL"].Value.ToString();
song.Singerurl = dgvlist.SelectedRows[].Cells["singerUrl"].Value.ToString();
song.Singername = dgvlist.SelectedRows[].Cells["singer"].Value.ToString();
PlayList.AddSong(song); // 更新数据库,将选中的歌曲点播次数加1
int sId = Convert.ToInt32(dgvlist.SelectedRows[].Cells["songId"].Value);
//string sql = "update song_info set song_play_count=song_play_count+1 where song_id="+sId+"";
string sql = string.Format("update song_info set song_play_count=song_play_count+1 where song_id={0}", sId);
try
{
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
}
catch (Exception)
{ MessageBox.Show("出错!");
}
finally
{
con.Close();
}
}
//返回
private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
}
// 切歌
private void tsbtnCut_Click(object sender, EventArgs e)
{
PlayList.CutSong(-);
}
// 打开已点歌曲窗体
private void tsbtnOrdered_Click(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
}
// 重新播放当前歌曲
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
}
//主界面
private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
} private void frmSongList_MouseDown(object sender, MouseEventArgs e)
{ } private void frmSongList_MouseMove(object sender, MouseEventArgs e)
{ } private void frmSongList_MouseUp(object sender, MouseEventArgs e)
{ } private void pnlTop_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlTop_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlTop_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} }
}
7.字数点歌
01.通过for循环把1-12的数字循环打印出来
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; namespace MyKTVClient
{
public partial class frmOrderByWordCount : Form
{
public frmOrderByWordCount()
{
InitializeComponent();
} private void tsbtnExit_Click(object sender, EventArgs e)
{
this.Close();
}
SqlConnection con = new SqlConnection(DBHelper.str);
private void OrderByWordCountForm_Load(object sender, EventArgs e)
{
// 将字数列表添加到窗体中
for (int i = ; i < ; i++)
{
// 循环生成字数项添加到窗体中
ListViewItem item = new ListViewItem();
item.Text = (i + ) + "个字";
item.Tag = i + ;
lvlist.Items.Add(item);
}
}
// 呼叫服务
private void tsbtnService_Click(object sender, EventArgs e)
{
MessageBox.Show("服务中");
} private void lvlist_Click(object sender, EventArgs e)
{
if (lvlist.SelectedItems[] != null)
{
// 读取数据库,读出该歌手的所有歌曲 StringBuilder sb = new StringBuilder();
sb.Append("select song_id,song_name,singer_info.singer_name,song_url,singer_info.singer_photo_url from song_info inner join singer_info on song_info.singer_id=singer_info.singer_id ");
sb.AppendFormat("where song_word_count={0}", Convert.ToInt32(lvlist.SelectedItems[].Tag));
Console.WriteLine(sb.ToString());
frmSongList frm = new frmSongList();
frm.Sql = sb.ToString();
frm.Onform = FanhuiForm.WordCount;
frm.Show(); }
}
//
private void tsbtnExit_Click_1(object sender, EventArgs e)
{
this.Close();
}
//
private void tsbtnOrdered_Click_1(object sender, EventArgs e)
{
frmOrderedSongList frm = new frmOrderedSongList();
frm.Show();
}
//
private void tsbtnCut_Click_1(object sender, EventArgs e)
{
PlayList.CutSong(-); }
// // 重新播放当前歌曲
private void tsbtnAgain_Click_1(object sender, EventArgs e)
{
PlayList.PlayAgain();
} private void tsbtnHome_Click(object sender, EventArgs e)
{
this.Close();
}
private Point mouseOffset; //记录鼠标指针的坐标
private bool isMouseDown = false; //记录鼠标按键是否按下
private void pnlon_MouseDown(object sender, MouseEventArgs e)
{ int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pnlon_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X + , mouseOffset.Y + );
Location = mousePos;
}
} private void pnlon_MouseUp(object sender, MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
}
}
02.歌曲列表
03.已点列表
8.最后再看看重唱的功能展示以及代码
01.重唱
// 重新播放当前歌曲
private void tsbtnAgain_Click(object sender, EventArgs e)
{
PlayList.PlayAgain();
PlaySong();
}
前台算告一段落了,如果觉得对你有帮助的话,可以关注,如觉得还可以就个你的痕迹。
01.主窗体
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace KTV
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
//新增
private void tsnewadd_Click(object sender, EventArgs e)
{
//新增
frmAddSinger frm = new frmAddSinger();
frm.MdiParent = this;
frm.Show();//以本窗体为父窗体打开
}
//查询歌手
private void tssingerselect_Click(object sender, EventArgs e)
{
//查询歌手信息
FrmSelectSinger frm = new FrmSelectSinger();
frm.MdiParent = this;
frm.Show();//以本窗体为父窗体打开
}
//退出
private void tsexit_Click(object sender, EventArgs e)
{
//退出应用程序
Application.Exit();
}
//查询歌曲
private void tssongselect_Click(object sender, EventArgs e)
{
} private void tslujing_Click(object sender, EventArgs e)
{
} private void tssong_Click(object sender, EventArgs e)
{ } private void tshelping_Click(object sender, EventArgs e)
{
//帮助
MessageBox.Show("帮助规则");
} private void tsAddSong_Click(object sender, EventArgs e)
{
//保存歌曲
FrmAdd frm = new FrmAdd();
frm.MdiParent = this;
frm.Show();
} private void TsSeSong_Click(object sender, EventArgs e)
{
//查询歌曲信息
frmselectSong frm = new frmselectSong();
frm.MdiParent = this;
frm.Show();//以本窗体为父窗体打开
} private void TSsonger_Click(object sender, EventArgs e)
{
//路径
frmAddSongURL frm = new frmAddSongURL();
frm.Show();
} }
}
01.添加歌手
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient; namespace KTV
{
public partial class frmAddSinger : Form
{
public string uname;
public frmAddSinger()
{
InitializeComponent();
}
//默认给原路径赋值
public string OldLoadWays()
{
//测试
SqlConnection con = new SqlConnection(DBHelp.str);
string sql = "select resource_path from resource_path where resource_id=1";
SqlCommand cmd = new SqlCommand(sql, con);
string songUrl = "";
try
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
if (dr.HasRows)
{
while (dr.Read())
{
songUrl = dr["resource_path"].ToString();
}
}
}
}
catch (Exception)
{
MessageBox.Show("网络异常!"); ;
}
finally
{
con.Close();
}
return songUrl;
}
//下拉框
public void Singerselect()
{
string str = DBHelp.str;
//连接数据库
SqlConnection con = new SqlConnection(str);
string sql = "select singertype_id,singertype_name from singer_type";
//数据集和数据库连接
SqlDataAdapter da = new SqlDataAdapter(sql, con);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
//绑定数据源
DataTable dt = ds.Tables[];
DataRow dr = dt.NewRow();
//给该行赋值
dr[] = -;
dr[] = "请选择";
dt.Rows.InsertAt(dr, );
cbotype.DataSource = ds.Tables[];
//下拉框显示值
cbotype.DisplayMember = "singertype_name";
//下拉框隐藏值
cbotype.ValueMember = "singertype_id";
}
catch (Exception)
{
MessageBox.Show("加载失败!");
}
finally
{
con.Close();
}
}
private void frmAddSinger_Load(object sender, EventArgs e)
{
Singerselect();
Commod.DBsongurl=OldLoadWays();
if (this.Text=="修改歌手信息")
{
btnadd.Text = "修改";
//MessageBox.Show(uname);
Load_information();
}
else
{
this.Text = "编辑歌手信息";
btnadd.Text = "保存";
}
}
string fileName = "";
string fullName = ""; private void btnView_Click(object sender, EventArgs e)
{ //浏览
if (this.ofdlist.ShowDialog() == DialogResult.OK)
{ fileName = this.ofdlist.SafeFileName; // 文件名
fullName = this.ofdlist.FileName;
picphoto.Image = Image.FromFile(fullName);
txtdescrp.Text = fullName;
}
}
//添加
public void SongInfoAdd()
{
string name = txtname.Text;//歌手姓名
string type = "";//类别
if (ramale.Checked)
{
type = "男";
}
else if (rafemale.Checked)
{
type = "女";
}
else if (raguoup.Checked)
{
type = "组合";
}
int id = Convert.ToInt32(cbotype.SelectedValue);//类型
string description = txtdescrp.Text;//描述
SqlConnection con = new SqlConnection(DBHelp.str);
string sql = "insert into singer_info values('" + name + "'," + id + ",'" + type + "','" + fileName + "','" + description + "')";
SqlCommand cmd = new SqlCommand(sql,con);
try
{
con.Open();
int count = cmd.ExecuteNonQuery();
if (count > )
{
File.Copy(fullName, Commod.DBsongurl + "\\" + fileName, true);
MessageBox.Show("歌手添加成功");
}
else
{
MessageBox.Show("歌手添加失败");
}
}
catch (Exception)
{ MessageBox.Show("歌手加载失败"); ;
}
finally
{
con.Close();//关闭
}
}
//修改
public void SongInfoUpdate()
{ }
//关闭
private void btnclose_Click(object sender, EventArgs e)
{
this.Close();
} private void btnadd_Click(object sender, EventArgs e)
{
if (this.Text=="修改歌手信息")
{
Update();//修改
}
else
{
SongInfoAdd();//保存功能
} }
//load修改
string ch="";//单选按钮值
int type = ;
public void Load_information()
{ SqlConnection con = new SqlConnection(DBHelp.str);
string sql = "select singer_name,singer_gender,singertype_id,singer_description from singer_info where singer_name ='" + uname + "'";
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader dr = cmd.ExecuteReader();
try
{
if (dr != null)
{
if (dr.HasRows)
{
while (dr.Read())
{
txtname.Text = dr["singer_name"].ToString();
ch = dr["singer_gender"].ToString();
#region MyRegion判断男女,给单选按钮赋值
if (ch == "男")
{
ramale.Checked = true;
}
else if (ch == "女")
{
rafemale.Checked = true;
}
else
{
raguoup.Checked = true;
}
#endregion int type = Convert.ToInt32(dr["singertype_id"]);
#region MyRegion 给下拉框赋值
if (type == )
{
cbotype.Text = "大陆";
}
else if (type == )
{
cbotype.Text = "香港";
}
else if (type == )
{
cbotype.Text = "台湾";
}
else if (type == )
{
cbotype.Text = "欧美";
}
else if (type == )
{
cbotype.Text = "日韩";
}
#endregion txtdescrp.Text = dr["singer_description"].ToString();
}
}
}
}
catch (Exception)
{
MessageBox.Show("歌手个别信息不完善!!!");
}
finally
{
con.Close();
}
}
//修改
public void Update()
{
int songid = Convert.ToInt32(cbotype.SelectedValue);
int num = txtname.Text.Length;
SqlConnection con = new SqlConnection(DBHelp.str);
//singer_id, singer_name, singertype_id, singer_gender, singer_photo_url, singer_description
string sql = @"update singer_info set singer_name='" + txtname.Text + "',singer_gender='" + ch + "',singer_photo_url='" + fileName +
"',singertype_id=" + type + ",singer_description='"+txtdescrp.Text+"' where singer_name ='" + uname + "'";
SqlCommand cmd = new SqlCommand(sql, con);
try
{
con.Open();
int count = cmd.ExecuteNonQuery();
if (count > )
{
MessageBox.Show("修改成功");
}
}
catch (Exception)
{ MessageBox.Show("加载失败"); ;
}
finally
{
con.Close();
}
}
}
}
由于一些问题暂不能帮你们把KTV项目完全展示, 不过后台会很快补回来的,如果想多了解点知识,就多多的来学习吧!博客园都在等你们啊。。。。。。