标签:
一个项目,一分收获;一个项目,一些资源。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(-1); } } // 服务 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 + 5, mouseOffset.Y + 30); 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 = 0; 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(-1); } // 打开已点歌曲窗体 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[0].Text, Convert.ToInt32(lvlistthree.SelectedItems[0].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[0].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 = 0; // 代表歌手头像的索引 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[0] != null) { // 隐藏歌手性别,显示歌手类别 pnlSingerSex.Visible = false; pnlSingerType.Location = pnlSingerSex.Location; pnlSingerType.Dock = DockStyle.Fill; pnlSingerType.Visible = true; // 记录选择的性别 this.singergender = Convert.ToString(lvlistone.SelectedItems[0].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 = 0; 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 + 5, mouseOffset.Y + 30); 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[0].Cells["songName"].Value.ToString(); song.SongURL = dgvlist.SelectedRows[0].Cells["songURL"].Value.ToString(); song.Singerurl = dgvlist.SelectedRows[0].Cells["singerUrl"].Value.ToString(); song.Singername = dgvlist.SelectedRows[0].Cells["singer"].Value.ToString(); PlayList.AddSong(song); // 更新数据库,将选中的歌曲点播次数加1 int sId = Convert.ToInt32(dgvlist.SelectedRows[0].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(-1); } // 打开已点歌曲窗体 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 + 5, mouseOffset.Y + 30); 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 = 0; 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 = -1; // 切歌的编号 private void lvlist_Click(object sender, EventArgs e) { if (this.lvlist.SelectedItems.Count > 0) { songId = Convert.ToInt32(this.lvlist.SelectedItems[0].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 + 5, mouseOffset.Y + 30); 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[0].Cells["songName"] != null) { // 创建一个歌曲对象,并将当权选中的歌曲名和路径赋给该对象 Song song = new Song(); song.SongName = dgvlist.SelectedRows[0].Cells["songName"].Value.ToString(); song.SongURL = dgvlist.SelectedRows[0].Cells["songURL"].Value.ToString(); song.Singerurl = dgvlist.SelectedRows[0].Cells["singerUrl"].Value.ToString(); PlayList.AddSong(song); //将选中的歌曲点播次数加1 int songId = Convert.ToInt32(dgvlist.SelectedRows[0].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(-1); } } 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 + 5, mouseOffset.Y + 30); Location = mousePos; } } private void pnlon_MouseUp(object sender, MouseEventArgs e) { // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动窗体 if (e.Button == MouseButtons.Left) { isMouseDown = false; } } } }
01.点歌后的效果
4.已点歌曲里的切歌效果
代码:
//删除选中歌曲 int songId = -1; // 切歌的编号 private void lvlist_Click(object sender, EventArgs e) { if (this.lvlist.SelectedItems.Count > 0) { songId = Convert.ToInt32(this.lvlist.SelectedItems[0].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 = 0; 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[0].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(-1); } // 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 + 5, mouseOffset.Y + 30); 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[0].Cells["songName"].Value.ToString(); song.SongURL = dgvlist.SelectedRows[0].Cells["songURL"].Value.ToString(); song.Singerurl = dgvlist.SelectedRows[0].Cells["singerUrl"].Value.ToString(); song.Singername = dgvlist.SelectedRows[0].Cells["singer"].Value.ToString(); PlayList.AddSong(song); // 更新数据库,将选中的歌曲点播次数加1 int sId = Convert.ToInt32(dgvlist.SelectedRows[0].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(-1); } // 打开已点歌曲窗体 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 + 5, mouseOffset.Y + 30); 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 = 0; i < 12; i++) { // 循环生成字数项添加到窗体中 ListViewItem item = new ListViewItem(); item.Text = (i + 1) + "个字"; item.Tag = i + 1; 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[0] != 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[0].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(-1); } // // 重新播放当前歌曲 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 + 5, mouseOffset.Y + 30); 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[0]; DataRow dr = dt.NewRow(); //给该行赋值 dr[0] = -1; dr[1] = "请选择"; dt.Rows.InsertAt(dr, 0); cbotype.DataSource = ds.Tables[0]; //下拉框显示值 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 > 0) { 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 = 0; 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 == 1) { cbotype.Text = "大陆"; } else if (type == 2) { cbotype.Text = "香港"; } else if (type == 3) { cbotype.Text = "台湾"; } else if (type == 4) { cbotype.Text = "欧美"; } else if (type == 5) { 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 > 0) { MessageBox.Show("修改成功"); } } catch (Exception) { MessageBox.Show("加载失败"); ; } finally { con.Close(); } } } }
由于一些问题暂不能帮你们把KTV项目完全展示, 不过后台会很快补回来的,如果想多了解点知识,就多多的来学习吧!博客园都在等你们啊。。。。。。
标签:
原文地址:http://www.cnblogs.com/bdpsc/p/5172908.html