KTV项目
KTV項目
目錄
- KTV項目
- 理論 數(shù)據(jù)庫 加控件介紹
- 添加
- 切歌
- 暫停
- 狀態(tài)小結(jié)
- 我們的玩法
- 播放暫停停止
- 暫停和播放一起
- 擴展
- 綜合應(yīng)用
- 引入添加文件控件
- openFileDialog過濾文件
- 利用相對路徑播放文件
- 復(fù)制文件
- 判斷文件是否存在
- 刪除文件
- 面板切換
- panel
- 面板切換
- 圖片盒子
- 加載圖片
- 小結(jié)
- 數(shù)據(jù)庫操作
- 思路構(gòu)建
- 數(shù)據(jù)庫設(shè)計
- 歌手表
- 歌曲表
- 歌手類型表
- 關(guān)聯(lián)
- 材料收集
- 網(wǎng)易云項目
- 界面
- 代碼
- 主界面
- 其他工具類
理論 數(shù)據(jù)庫 加控件介紹
添加
切歌
利用數(shù)組拼路徑
暫停
狀態(tài)小結(jié)
正在播放的視頻的顯示 3
暫停的視頻的顯示 2
播放完了顯示的是 1
沒有加載顯示的是 0
我們的玩法
如果狀態(tài)是1 播放玩長了,可以切歌
播放暫停停止
暫停和播放一起
private void timer1_Tick(object sender, EventArgs e){//獲取當(dāng)前狀態(tài)currentState = (int)axWindowsMediaPlayer1.playState;//判斷//修改我的按鈕的文本if (currentState == 3){button3.Text = "暫停";}if (currentState == 2){button3.Text = "播放";}} private void button3_Click(object sender, EventArgs e){//判斷//播放if(currentState == 3){//暫停axWindowsMediaPlayer1.Ctlcontrols.pause();}//暫停if(currentState == 2){//播放axWindowsMediaPlayer1.Ctlcontrols.play();}if(currentState == 1){}}擴展
我們的媒體控件不可以的大小不可控
這里我們要很好額控制大小就要用到 Panel 這個控件
Panel 這個控件和HTML的 div 差不多
填滿
綜合應(yīng)用
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 db11071206媒體控件作業(yè) {public partial class Form1 : Form{//定義一個歌曲數(shù)組public String[] names = {"劉大壯 - 會不會(吉他版).mp3","沈靈七an - 會不會(溫柔女生完整版).mp3","就是南方凱 - 萬拒(吉他版).mp3" ,"薛之謙 - 演員.mp3","許嵩 - 斷橋殘雪.mp3"};//定義一個計數(shù)器public int i;//定義一個顯示當(dāng)前狀態(tài)的成員變量public int currentState;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//調(diào)用音頻加載方法namesArray(i);}private void namesArray(int i){//獲取第一個音頻名稱String fileName = names[i];//文件位置String dirPath = "D:\\CloudMusic";//拼接路徑String filePath = dirPath + "\\" + fileName;//調(diào)用修改 lable 的值 (顯示當(dāng)前播放歌曲名)modifyLableText(names);//給音頻賦值axWindowsMediaPlayer1.URL = filePath;}private void modifyLableText(String[] names){//獲取當(dāng)前播放的歌曲名稱String tamp = names[i];//從中查找 . 的位置int lookup = tamp.LastIndexOf(".");//截取文字String text = tamp.Substring(0, lookup);//給lable 賦值label2.Text = text;}private void button1_Click(object sender, EventArgs e){//判斷我當(dāng)前的下標(biāo)if (i == 0){//讓我的 計數(shù)器 等于數(shù)組長度i = names.Length;}//計數(shù)器減一i--;//重新加載歌曲信息namesArray(i);//給lable 重新賦值modifyLableText(names);}private void timer1_Tick(object sender, EventArgs e){//獲取當(dāng)前狀態(tài)currentState = (int)axWindowsMediaPlayer1.playState;//判斷//修改我的按鈕的文本if (currentState == 3){button3.Text = "暫停";}if (currentState == 2){button3.Text = "播放";}}private void button3_Click(object sender, EventArgs e){//判斷//播放if(currentState == 3){//暫停axWindowsMediaPlayer1.Ctlcontrols.pause();}//暫停if(currentState == 2){//播放axWindowsMediaPlayer1.Ctlcontrols.play();}}private void button2_Click(object sender, EventArgs e){//計數(shù)器加一i++;//判斷我當(dāng)前的下標(biāo)if (i == names.Length){//讓我的 計數(shù)器 等于0i = 0;}//重新加載歌曲信息namesArray(i);//給lable 重新賦值modifyLableText(names);}private void button4_Click(object sender, EventArgs e){//停止axWindowsMediaPlayer1.Ctlcontrols.stop();}private void timer2_Tick(object sender, EventArgs e){//判斷我的歌曲轉(zhuǎn)態(tài) 播放完后切歌if (currentState == 1) { //切換下一首//計數(shù)器加一i++;//判斷我當(dāng)前的下標(biāo)if (i == names.Length){//讓我的 計數(shù)器 等于0i = 0;}//調(diào)用歌曲加載namesArray(i);//給lable 重新賦值modifyLableText(names);}}} }引入添加文件控件
顯示控件
兩個屬性的區(qū)別
讓播放器播放我選中的視頻或者M(jìn)P3
openFileDialog過濾文件
openFileDialog 過濾文件
(媒體文件)|.mkv|mp3|.mp3
方法一:
方法二:
效果
這種模式要選擇
我們可選擇多個
這里可以把括號去掉
效果
利用相對路徑播放文件
用相對路徑播放文件 傳輸文件是可以一起過去 可以不需要很長的路徑
對于代碼只需要加上文件名就可以了
復(fù)制文件
. 是一個字節(jié)
效果
會將文件存進(jìn)Dubug
代碼:
判斷文件是否存在
我要判斷文件是否存在,避免程序報錯
刪除文件
如果用戶要更新文件,所以這邊我們不可以以寫return
想要實現(xiàn)此方法,我們要先刪掉此文件再拷貝過來
面板切換
panel
這個效果像div一樣
利用panel盒子布局
面板切換
點擊我的listView 里面項的的里面應(yīng)該Tag存?zhèn)€一個id,然后給lable
圖片盒子
加載圖片
利用這個方法可以獲得一個圖片
設(shè)置圖片內(nèi)容
### 對象初始化器
小結(jié)
數(shù)據(jù)庫操作
思路構(gòu)建
數(shù)據(jù)庫設(shè)計
歌手表
設(shè)想分類
這里是利用歌手字母查找:
利用歌曲查找
| 1 | 周杰倫 | 男 | 1 | dx | zjl.jpg |
歌曲表
singerId 是外鍵會關(guān)聯(lián)主鍵
| 1 | 一路生花 | 一路生花 | 4.16 | 16 | 200 | 一路生花.mp4 |
歌手類型表
| 1 | 華語 |
| 2 | 日韓 |
| 3 | 歐美 |
關(guān)聯(lián)
三個表的關(guān)聯(lián)
材料收集
收集媒體資源
手機歌手圖片
已面向?qū)ο蟮姆绞教砑?/p>
后臺:
歌手分類管理:添加分類,刪除分類,修改分類,顯示所有分類
歌手管理:添加歌手,修改歌手,查詢歌手,刪除歌手
歌曲管理:增,刪,改,查
前臺:
界面:歌手點歌,歌曲排名,拼音點歌
播放界面,歌單(上一曲,下一曲,頂歌)
播放按鈕,暫停,重新開始,自動下切一首
網(wǎng)易云項目
界面
啟動后
代碼
主界面
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.Data; using System.Data.SqlClient;namespace 網(wǎng)易元音樂項目 {public partial class Form1 : Form{// old sizeSize oldSize;bool isMax = false;//播放列表 當(dāng)前下標(biāo)private int currentIdex;// 當(dāng)前播放狀態(tài)bool isPlay = false;// 播放列標(biāo)轉(zhuǎn)臺bool isPlayList = false;public Form1(){InitializeComponent();}private void pictureBox1_Click(object sender, EventArgs e){// 關(guān)閉窗口this.Close();}private void pbClose_MouseMove(object sender, MouseEventArgs e){//讓鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pictureBox2_Click(object sender, EventArgs e){//讓窗口最小化this.Show();this.ShowInTaskbar = true;this.WindowState = FormWindowState.Minimized;this.BringToFront();}private void pictureBox2_MouseMove(object sender, MouseEventArgs e){//讓鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void panel1_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void splitContainer1_Panel2_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void splitContainer1_Panel1_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void panel2_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void panel3_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void pictureBox1_Click_1(object sender, EventArgs e){if (this.isMax == false){// 改變功能欄圖片String imgFunctionPath = Setting.imgDir + @"\功能欄2.png";Image functionBar = Image.FromFile(imgFunctionPath);plFunctionBar.BackgroundImage = functionBar;// 最大化顯示系統(tǒng)工具欄this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;this.MaximumSize = Screen.PrimaryScreen.WorkingArea.Size;this.MaximumSize = Screen.FromHandle(this.Handle).WorkingArea.Size;// 保存窗口當(dāng)前的大小this.oldSize = this.Size;// 窗口最大化this.WindowState = FormWindowState.Maximized;this.isMax = true;}else{// 改變功能欄圖片String imgFunctionPath = Setting.imgDir + @"\功能欄.png";Image functionBar = Image.FromFile(imgFunctionPath);plFunctionBar.BackgroundImage = functionBar;// 窗口恢復(fù)默認(rèn)this.WindowState = FormWindowState.Normal;this.Size = this.oldSize;this.isMax = false;}}private void Form1_Load(object sender, EventArgs e){// 播放列表隱藏plPlaylist.Visible = false;// 播放列標(biāo)大小設(shè)置plPlaylist.Size = new Size(382, 803);// 播放歌曲歌手文本隱藏lblSongName.Visible = false;lblSingGerrnName.Visible = false;// 讓首頁選中的背景顏色變色lblHomePage.BackColor = Color.FromArgb(246, 246, 247);// 隱藏所有allFormMinimize();// 顯示主界面plHomePage.Visible = true;// 平鋪plHomePage.Dock = DockStyle.Fill;// 初始化 歌單1initSongList1();// 初始化 歌單2initSongList2();// 初始化 歌單3initSongList3();// 初始化 歌單4initSongList4();}private void initSongList3(){// 調(diào)用幫手DbHelper helper = new DbHelper();// 新建 sql 語句String sql = "select Song.id as songId,Song.name as songName,Album.name as songAlbum,times,Singer.name as songSinger,mp3Path,mvkPath,imgs from Song inner join Album on Song.albumId = Album.id inner join Singer on Song.singerId = Singer.id where Singer.name not in ('周杰倫','劉大壯')";// 獲取數(shù)據(jù)郎讀者SqlDataReader reader = helper.getReader(sql);// 循環(huán)while (reader.Read()){// 獲取對應(yīng)的值String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();// 新建一個listViewItem 對象ListViewItem item = new ListViewItem();// 對象賦值Song s = lineToObject(reader);// 橋梁賦值item.Tag = s;// 對應(yīng)賦值item.Text = songName;item.SubItems.Add(songSingerId);item.SubItems.Add(songAlbumld);item.SubItems.Add(songTimes);// 把item添加進(jìn) listView 中lvSongList3.Items.Add(item);}}private void initSongList2(){// 調(diào)用幫手DbHelper helper = new DbHelper();// 新建 sql 語句String sql = "select Song.id as songId,Song.name as songName,Album.name as songAlbum,times,Singer.name as songSinger,mp3Path,mvkPath,imgs from Song inner join Album on Song.albumId = Album.id inner join Singer on Song.singerId = Singer.id where Singer.name = '周杰倫'";// 獲取數(shù)據(jù)朗讀者SqlDataReader reader = helper.getReader(sql);// 循環(huán)while (reader.Read()){// 獲取對應(yīng)的值String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();// 新建一個listViewItem 對象ListViewItem item = new ListViewItem();// 對象賦值Song s = lineToObject(reader);// 橋梁賦值item.Tag = s;// 對應(yīng)賦值item.Text = songName;item.SubItems.Add(songSingerId);item.SubItems.Add(songAlbumld);item.SubItems.Add(songTimes);// 把item添加進(jìn) listView 中lvSongList2.Items.Add(item);}}private void initSongList1(){// 調(diào)用幫手DbHelper helper = new DbHelper();// 新建 slq 語句String sql = "select Song.id as songId,Song.name as songName,Album.name as songAlbum,times,Singer.name as songSinger,mp3Path,mvkPath,imgs from Song inner join Album on Song.albumId = Album.id inner join Singer on Song.singerId = Singer.id where Singer.name = '劉大壯'";// 獲取數(shù)據(jù)朗讀者SqlDataReader reader = helper.getReader(sql);// 循環(huán)while (reader.Read()){// 獲取對應(yīng)的值String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();// 新建一個listViewItem 對象ListViewItem item = new ListViewItem();// 對象賦值Song s = lineToObject(reader);// 橋梁賦值item.Tag = s;// 對應(yīng)賦值item.Text = songName;item.SubItems.Add(songSingerId);item.SubItems.Add(songAlbumld);item.SubItems.Add(songTimes);// 把item添加進(jìn) listView 中lvSongList1.Items.Add(item);}}private void initSongList4(){// 調(diào)用幫手DbHelper helper = new DbHelper();// 新建 slq 語句String sql = "select Song.id as songId,Song.name as songName,Album.name as songAlbum,times,Singer.name as songSinger,mp3Path,mvkPath,imgs from Song inner join Album on Song.albumId = Album.id inner join Singer on Song.singerId = Singer.id";// 獲取數(shù)據(jù)朗讀者SqlDataReader reader = helper.getReader(sql);// 循環(huán)while (reader.Read()){// 獲取對應(yīng)的值String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();// 新建一個listViewItem 對象ListViewItem item = new ListViewItem();// 對象賦值Song s = lineToObject(reader);// 橋梁賦值item.Tag = s;// 對應(yīng)賦值item.Text = songName;item.SubItems.Add(songSingerId);item.SubItems.Add(songAlbumld);item.SubItems.Add(songTimes);// 把item添加進(jìn) listView 中lvSongList4.Items.Add(item);}}private void pictureBox1_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void allFormMinimize(){// 讓所有的lv 隱藏lvSearch.Visible = false;lvSongList1.Visible = false;lvSongList2.Visible = false;lvSongList3.Visible = false;lvSongList4.Visible = false;// 讓首頁隱藏plHomePage.Visible = false;// 讓播放器隱藏plMedia.Visible = false;// 讓播放列表隱藏plPlaylist.Visible = false;}private void label4_Click(object sender, EventArgs e){// 讓所有的lable 文字背景顏色變成白色allLableBackColor();// 讓選中的背景顏色變色lblHomePage.BackColor = Color.FromArgb(246, 246, 247);// 讓其他的lv的隱藏allFormMinimize();// 讓首頁顯示plHomePage.Visible = true;// 平鋪plHomePage.Dock = DockStyle.Fill;}private void allLableBackColor(){// 讓所有的lable恢復(fù)默認(rèn)顏色lblHomePage.BackColor = Color.FromArgb(255, 255, 255);lblSongList1.BackColor = Color.FromArgb(255, 255, 255);lblSongList2.BackColor = Color.FromArgb(255, 255, 255);lblSongList3.BackColor = Color.FromArgb(255, 255, 255);lblSongList4.BackColor = Color.FromArgb(255, 255, 255);}private void pbSongList4_Click(object sender, EventArgs e){// 隱藏所有allFormMinimize();// 顯示歌單4lvSongList4.Visible = true;//設(shè)置平鋪lvSongList4.Dock = DockStyle.Fill;}private void lblSongList4_Click(object sender, EventArgs e){// 讓所有的lable 文字背景顏色變成白色allLableBackColor();// 讓選中的背景顏色變色lblSongList4.BackColor = Color.FromArgb(246, 246, 247);// 讓其他的lv的隱藏allFormMinimize();// 讓首頁顯示lvSongList4.Visible = true;// 平鋪lvSongList4.Dock = DockStyle.Fill;}private void pbSongList1_Click(object sender, EventArgs e){// 隱藏所有allFormMinimize();// 顯示歌單lvSongList1.Visible = true;// 設(shè)置平鋪lvSongList1.Dock = DockStyle.Fill;}private void plHomePage_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)恢復(fù)默認(rèn)this.Cursor = Cursors.Default;}private void lblSongList1_Click(object sender, EventArgs e){// 讓所有的lable 文字背景顏色變成白色allLableBackColor();// 讓選中的背景顏色變色lblSongList1.BackColor = Color.FromArgb(246, 246, 247);// 隱藏所有allFormMinimize();// 顯示歌單lvSongList1.Visible = true;// 設(shè)置平鋪lvSongList1.Dock = DockStyle.Fill;}private void pbSongList3_Click(object sender, EventArgs e){// 隱藏所有allFormMinimize();// 顯示歌單lvSongList3.Visible = true;// 設(shè)置平鋪lvSongList3.Dock = DockStyle.Fill;}private void lblSongList3_Click(object sender, EventArgs e){// 讓所有的lable 文字背景顏色變成白色allLableBackColor();// 讓選中的背景顏色變色lblSongList3.BackColor = Color.FromArgb(246, 246, 247);// 隱藏所有allFormMinimize();// 顯示歌單lvSongList3.Visible = true;// 設(shè)置平鋪lvSongList3.Dock = DockStyle.Fill;}private void pbSongList2_Click(object sender, EventArgs e){// 隱藏所有allFormMinimize();// 顯示歌單lvSongList2.Visible = true;// 設(shè)置平鋪lvSongList2.Dock = DockStyle.Fill;}private void lblSongList2_Click(object sender, EventArgs e){// 讓所有的lable 文字背景顏色變成白色allLableBackColor();// 讓選中的背景顏色變色lblSongList2.BackColor = Color.FromArgb(246, 246, 247);// 隱藏所有allFormMinimize();// 顯示歌單lvSongList2.Visible = true;// 設(shè)置平鋪lvSongList2.Dock = DockStyle.Fill;}private void lblHomePage_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void lblSongList1_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void lblSongList2_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void lblSongList3_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void lblSongList4_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void panel7_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)恢復(fù)默認(rèn)this.Cursor = Cursors.Default;}private void lblKTV_Click(object sender, EventArgs e){// 隱藏所有allFormMinimize();// 顯示歌單plHomePage.Visible = true;// 設(shè)置平鋪plHomePage.Dock = DockStyle.Fill;}private void lblKTV_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pictureBox6_Click(object sender, EventArgs e){if (isPlayList == false){// 顯示播放列表plPlaylist.Visible = true;// 改變歌曲列表的狀態(tài)isPlayList = true;}else{// 隱藏播放列表plPlaylist.Visible = false;// 改變歌曲列表的狀態(tài)isPlayList = false;}}private void butSearch_Click(object sender, EventArgs e){// 獲取文本框內(nèi)容String txtBox = txtSearch.Text;// 清空內(nèi)容lvSearch.Items.Clear();if (txtBox.Trim().Length == 0){MessageBox.Show("請輸入搜索內(nèi)容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);return;}// 隱藏所有allFormMinimize();// 顯示搜索列表lvSearch.Visible = true;// 設(shè)置平鋪lvSearch.Dock = DockStyle.Fill;// 初始化 搜索列表initSongSearch();// 判斷行數(shù)int i = lvSearch.Items.Count;if (i == 0){MessageBox.Show("對不起,沒有您想要的內(nèi)容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);return;}}private void initSongSearch(){// 調(diào)用幫手DbHelper helper = new DbHelper();// 獲取文本框內(nèi)容String txtBox = txtSearch.Text;// 構(gòu)建 sql 語句String sql = String.Format("select Song.id as songId,Song.name as songName,Album.name as songAlbum,times,Singer.name as songSinger,mp3Path,mvkPath,imgs from Song inner join Album on Song.albumId = Album.id inner join Singer on Song.singerId = Singer.id where Song.name like '%{0}%' or Singer.name like '%{1}%';", txtBox, txtBox);// 獲取數(shù)據(jù)朗讀者SqlDataReader reader = helper.getReader(sql);// 循環(huán)while (reader.Read()){// 獲取對應(yīng)的值String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();// 新建一個listViewItem 對象ListViewItem item = new ListViewItem();// 對象賦值Song s = lineToObject(reader);// 橋梁賦值item.Tag = s;// 對應(yīng)賦值item.Text = songName;item.SubItems.Add(songSingerId);item.SubItems.Add(songAlbumld);item.SubItems.Add(songTimes);// 把item添加進(jìn) listView 中lvSearch.Items.Add(item);}}private Song lineToObject(SqlDataReader reader){//獲取數(shù)據(jù)String songId = reader["songId"].ToString();String songName = reader["songName"].ToString();String songAlbumld = reader["songAlbum"].ToString();String songTimes = reader["times"].ToString();String songSingerId = reader["songSinger"].ToString();String songMp3Path = reader["mp3Path"].ToString();String songMvkPath = reader["mvkPath"].ToString();String songImg = reader["imgs"].ToString();//實例化一個歌曲對象Song s = new Song();s.Id = songId;s.SongFullNameMp3 = songMp3Path;s.SongFullName = songMvkPath;s.SongName = songName;s.SingerName = songSingerId;s.AlbumName = songAlbumld;s.SongTimes = songTimes;s.SongImge = songImg;return s;}private void lvSongList4_Click(object sender, EventArgs e){}private void lvSongList1_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void lvSongList2_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void lvSongList3_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void lvSearch_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void lvSongList4_MouseMove(object sender, MouseEventArgs e){// 讓鼠標(biāo)變?yōu)槟J(rèn)this.Cursor = Cursors.Default;}private void lvSongList4_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList4.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSongList4.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();// 獲取當(dāng)前項的數(shù)量int c = lvSongPlayList.Items.Count;// 當(dāng)前數(shù)量減一 currentIdex = c - 1;// 播放下一首歌playMedia();}private void updatePlayList(){//清空lvlvSongPlayList.Items.Clear();//遍歷播單數(shù)組,有一個數(shù)據(jù),就來一個項foreach (Song s in Db.playArry){//排除掉 null 的情況if (s == null){break;}//有一首歌就來一個項ListViewItem item = new ListViewItem();//給想添加屬性item.Text = s.SongName;item.SubItems.Add(s.SingerName);item.SubItems.Add(s.SongTimes);//把項添加進(jìn)lv里面lvSongPlayList.Items.Add(item);}}private bool checkExist(Song[] playArry, Song s){//遍歷數(shù)組foreach (Song tempSong in playArry){if (tempSong == null){break;}//獲取當(dāng)前的歌曲idString tempId = tempSong.Id;String sId = s.Id;//獲取id做比較bool b = tempId.Equals(sId);//如果b 等于 trueif (b){return true;}}return false;}private void 添加進(jìn)播放列表ToolStripMenuItem_Click(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList4.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSongList4.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();}private void timer1_Tick(object sender, EventArgs e){// 獲取播放列表中歌曲的數(shù)量int i = lvSongPlayList.Items.Count;// 判斷播放列表中是否有數(shù)據(jù)if (i > 0){if (isPlay == false){// 改變播放狀態(tài)isPlay = true;// 播放第一首歌playMedia();}}}private void playMedia(){// 有數(shù)組// 找到歌曲對象需要 用到一個下標(biāo)// 當(dāng)前歌曲下標(biāo)// 獲取數(shù)組真實長度int i = ArrayHelper.getRealNum(Db.playArry);// 判斷數(shù)組下標(biāo)是否越界if (currentIdex >= i){currentIdex = 0;}// 從播放列表中找到當(dāng)前對應(yīng)的歌曲對象Song currentSong = Db.playArry[currentIdex];// 非空判斷if (currentSong == null){MessageBox.Show("請在播放列表中添加歌曲!", "提示", MessageBoxButtons.OK);return;}// 從對象獲取歌曲的媒體名稱 列 七里香.mp3String songFullName = currentSong.SongFullNameMp3;// 獲取歌手姓名String singerName = currentSong.SingerName;// 歌曲姓名String songName = currentSong.SongName;// 獲取歌曲圖片String songImge = currentSong.SongImge;// 判斷照片是否為空if (songImge.Equals("")){// 為空 修改成默認(rèn)圖片songImge = "default.jpg";}// 把名稱 拼成 路徑// 目錄路徑 + 媒體名稱String songPath = Setting.mp3Dir + singerName + "\\" + songFullName;// 同步歌曲圖片String imgPath = Setting.mp3ImgeDir + singerName + "\\" + songImge;// 獲取圖片Image image = Image.FromFile(imgPath);// 圖片賦值pbSongImage.BackgroundImage = image;// 歌曲信息賦值lblSongName.Text = songName;lblSongName.Visible = true;// 歌手信息賦值lblSingGerrnName.Text = singerName;lblSingGerrnName.Visible = true;// 播放的功能// 播放器控件URL=路徑axWindowsMediaPlayer1.URL = songPath;//initLvSongColor();lvSongPlayList.Items[currentIdex].BackColor = Color.FromArgb(0, 120, 215);}private void initLvSongColor(){// 遍歷foreach (ListViewItem item in lvSongPlayList.Items){item.BackColor = Color.FromArgb(255, 255, 255);}}private void pictureBox3_Click(object sender, EventArgs e){// 獲取媒體控件的當(dāng)前狀態(tài)int status = (int)axWindowsMediaPlayer1.playState;// 判斷歌曲是否是在播放if (status == 3 || status == 2){// 判斷歌曲狀態(tài)是否是暫停if (status == 2){axWindowsMediaPlayer1.Ctlcontrols.play();// 讓顯示內(nèi)容為暫停// 獲取圖片位置String imgPause = Setting.imgDir + "\\暫停.png";Image pauseImg = Image.FromFile(imgPause);// 讓圖片為暫停的圖片pbPlayAndPause.Image = pauseImg;// 返回值return;}// 讓媒體控件停頓axWindowsMediaPlayer1.Ctlcontrols.pause();// 讓顯示內(nèi)容為播放// 獲取圖片位置String imgPaly = Setting.imgDir + "\\播放.png";Image palyImg = Image.FromFile(imgPaly);// 讓圖片為暫停的圖片pbPlayAndPause.Image = palyImg;}}private void trIsSongFinish_Tick(object sender, EventArgs e){// 判斷當(dāng)前的歌曲狀態(tài)int i = (int)axWindowsMediaPlayer1.playState;// 獲取播放數(shù)組真實長度int len = ArrayHelper.getRealNum(Db.playArry);if (i >= len){i = 0;}if (i == 1){currentIdex++;playMedia();}}private void toolStripMenuItem1_Click(object sender, EventArgs e){// 前端移除// 判斷選中的行數(shù)int i = lvSongPlayList.SelectedItems.Count;// 判斷選中行數(shù)是否為零if (i == 0){return;}// 獲取id 通過 id 移除歌曲int remove = lvSongPlayList.SelectedItems[0].Index;// 移除lvSongPlayList.Items.RemoveAt(remove);// 后端移除ArrayHelper.pop(Db.playArry, remove);// 更新數(shù)據(jù)updateArryNumber();}private void pbNextSong_Click(object sender, EventArgs e){//讓播放的下標(biāo)+1currentIdex++;//數(shù)據(jù)邊界判斷,上限判斷//獲取播放列表的數(shù)組中的真實長度 4 //當(dāng)前下標(biāo)是否大于等于4,數(shù)據(jù)校正,int realNum = ArrayHelper.getRealNum(Db.playArry);//判斷if (currentIdex >= realNum){currentIdex = 0;}//播放下一首playMedia();}private void pbPrev_Click(object sender, EventArgs e){//下標(biāo)自減currentIdex--;//獲取真實長度int realNum = ArrayHelper.getRealNum(Db.playArry);//邊界判斷if (currentIdex < 0){currentIdex = realNum - 1;}//播放下一首playMedia();}private void 移除所有歌曲ToolStripMenuItem_Click(object sender, EventArgs e){// 前端移除// 移除所有歌曲lvSongPlayList.Items.Clear();// 后端移除Db.playArry = new Song[10];// 更新數(shù)據(jù)updateArryNumber();}private void updateArryNumber(){// 獲取數(shù)組真實長度int i = ArrayHelper.getRealNum(Db.playArry);// 更新lablelblSongNumber.Text = i.ToString();}private void toolStripMenuItem2_Click(object sender, EventArgs e){// 判斷選中項的個數(shù)int i = lvSongPlayList.SelectedItems.Count;// 判斷if (i <= 0){return;}// 獲取當(dāng)前選中行的下標(biāo)int indexItem = lvSongPlayList.SelectedItems[0].Index;// 保存選中的數(shù)據(jù)Song s = Db.playArry[indexItem];// 移除數(shù)據(jù)ArrayHelper.pop(Db.playArry, indexItem);// 調(diào)用 數(shù)組工具類 進(jìn)行添加ArrayHelper.insert(Db.playArry, 1, s);// 更新播放列表updatePlayList();}private void lvSongList1_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList1.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSongList1.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();// 獲取當(dāng)前項的數(shù)量int c = lvSongPlayList.Items.Count;// 當(dāng)前數(shù)量減一 currentIdex = c - 1;// 播放下一首歌playMedia();}private void lvSongList2_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList2.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSongList2.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();// 獲取當(dāng)前項的數(shù)量int c = lvSongPlayList.Items.Count;// 當(dāng)前數(shù)量減一 currentIdex = c - 1;// 播放下一首歌playMedia();}private void lvSongList3_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList3.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSongList3.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();// 獲取當(dāng)前項的數(shù)量int c = lvSongPlayList.Items.Count;// 當(dāng)前數(shù)量減一 currentIdex = c - 1;// 播放下一首歌playMedia();}private void lvSearch_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSearch.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項藏著的歌Song s = (Song)(lvSearch.SelectedItems[0].Tag);// 判斷歌曲是否存在bool isExist = checkExist(Db.playArry, s);// 判斷 b 對象if (isExist){return;}// 把這首歌放到播放列表的對象數(shù)組中ArrayHelper.append(Db.playArry, s);// 獲取這個歌數(shù)組的真實長度int len = ArrayHelper.getRealNum(Db.playArry);// 同步數(shù)據(jù)lblSongNumber.Text = len.ToString();// 更新播放列表updatePlayList();// 獲取當(dāng)前項的數(shù)量int c = lvSongPlayList.Items.Count;// 當(dāng)前數(shù)量減一 currentIdex = c - 1;// 播放下一首歌playMedia();}private void 添加進(jìn)歌單3ToolStripMenuItem_Click(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongList2.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中的項ListViewItem item;}private void pbPlayAndPause_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbNextSong_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbPrev_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pictureBox6_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbMV_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbMV_Click(object sender, EventArgs e){// 獲取播放狀態(tài)int i = (int)axWindowsMediaPlayer1.playState;// 獲取當(dāng)前播放歌曲對象Song s = Db.playArry[currentIdex];if (s == null){MessageBox.Show("對不起本視頻沒有MV!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);return;}// 判斷是否有視頻if (s.SongFullName.Equals("")){MessageBox.Show("對不起本視頻沒有MV!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);return;}// 隱藏所有allFormMinimize();// 顯示視頻窗口plMedia.Visible = true;// 視頻窗口平鋪plMedia.Dock = DockStyle.Fill;// 獲取mvk 路徑 String mp4Path = s.SongFullName;// 獲取歌手姓名String singerName = s.SingerName;// 拼接路徑String mp4FullPath = Setting.mp4Dir + singerName + "\\" + mp4Path;// 播放視頻axWindowsMediaPlayer1.URL = mp4FullPath;}private void lvSongPlayList_DoubleClick(object sender, EventArgs e){//判斷選中的行數(shù)int i = lvSongPlayList.SelectedItems.Count;// 判斷選中的行數(shù)if (i == 0){return;}// 獲取選中行的下標(biāo)int indexItem = lvSongPlayList.SelectedItems[0].Index;currentIdex = indexItem;playMedia();}private void pbSongList1_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbSongList2_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbSongList3_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}private void pbSongList4_MouseMove(object sender, MouseEventArgs e){// 鼠標(biāo)變成小手this.Cursor = Cursors.Hand;}} }其他工具類
主入口
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;namespace 網(wǎng)易元音樂項目 {static class Program{/// <summary>/// 應(yīng)用程序的主入口點。/// </summary>[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}} }路徑位置
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 網(wǎng)易元音樂項目 {class Setting{// 平臺界面圖片路徑public static String imgDir = @"ziliao\前端";// 歌曲MP3路徑public static String mp3Dir = @"D:\KTV資源管理\mp3\";// 歌曲圖片路徑public static String mp3ImgeDir = @"D:\KTV資源管理\img\";// 歌曲Mp4路徑public static String mp4Dir = @"D:\KTV資源管理\mp4\";} }播放列表對象數(shù)組
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 網(wǎng)易元音樂項目 {class Db{//播放列表的對象數(shù)組public static Song[] playArry = new Song[10];} }提供共有方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 網(wǎng)易元音樂項目 {class Song{//歌手idprivate String id;public String Id{get { return id; }set { id = value; }}//歌曲路徑全名private String songFullNameMp3;public String SongFullNameMp3{get { return songFullNameMp3; }set { songFullNameMp3 = value; }}//MV路徑全名private String songFullName;public String SongFullName{get { return songFullName; }set { songFullName = value; }}//歌曲姓名private String songName;public String SongName{get { return songName; }set { songName = value; }}//歌手姓名private String singerName;public String SingerName{get { return singerName; }set { singerName = value; }}//專輯名稱private String albumName;public String AlbumName{get { return albumName; }set { albumName = value; }}//歌曲時長private String songTimes;public String SongTimes{get { return songTimes; }set { songTimes = value; }}// 歌曲封面private String songImge;public String SongImge{get { return songImge; }set { songImge = value; }}} }數(shù)據(jù)庫連接工具類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data;namespace 網(wǎng)易元音樂項目{class DbHelper{// 連接字符串public String connStr = "Data Source=.;Initial Catalog=KTV1107;Integrated Security=True";// 獲得連接對象public SqlConnection getConn() {//獲取連接對象SqlConnection conn = new SqlConnection(this.connStr);//打開連接conn.Open();//返回值//返回連接對象return conn;}// 增刪改方法// 返回受影響行數(shù)public int update(String sql) {// 連接對象SqlConnection conn = getConn();// 執(zhí)行者SqlCommand cmd = new SqlCommand(sql,conn);// int i = 執(zhí)行者.執(zhí)行不查詢()int i = cmd.ExecuteNonQuery();//返回值//返回受影響行數(shù)return i;}// 查詢方法// 返回數(shù)據(jù)朗讀者public SqlDataReader getReader (String sql) {// 連接對象SqlConnection conn = getConn();// 執(zhí)行者SqlCommand cmd = new SqlCommand();cmd.CommandText = sql;cmd.Connection = conn;// 執(zhí)行者.executeReader()----》數(shù)據(jù)朗讀者SqlDataReader reader = cmd.ExecuteReader();//返回值//返回數(shù)據(jù)朗讀者return reader;}// 獲取斷開式的表public DataTable getTable(String sql){//獲取連接對象SqlConnection conn = getConn();//獲取倉庫DataSet ds = new DataSet();//數(shù)據(jù)小車SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);//小車卸貨adapter.Fill(ds,"table");//獲取數(shù)據(jù)表DataTable dt = ds.Tables["table"];//返回值//返回數(shù)據(jù)表return dt;}//獲取倉庫public DataSet getDataSet(String sql){//獲取連接對象SqlConnection conn = getConn();//獲取倉庫DataSet ds = new DataSet();//獲取數(shù)據(jù)小車SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);//小車卸貨adapter.Fill(ds,"table");//返回值//返回倉庫return ds;}} }數(shù)組工具類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 網(wǎng)易元音樂項目 {class ArrayHelper{// 求數(shù)組真實長度public static int getRealNum(Object[] objs) {// 定義一個計數(shù)器int len = 0;// 遍歷數(shù)組,獲得下標(biāo)for (int i = 0; i < objs.Length; i++){// i就是下標(biāo)// 獲取下標(biāo)對應(yīng)的值object item = objs[i];// 判斷非法if (item == null) {break;}// 合法情況len++;}return len;}// 未位添加算法public static void append(Object[] objs,object obj) { // 獲取數(shù)據(jù)int realNum = getRealNum(objs);int length = objs.Length;// 非法判斷if (realNum == length) {return;}// 主要邏輯objs[realNum] = obj;}// 未位刪除public static object pop(Object[] objs) {// 獲取相關(guān)數(shù)據(jù)int realNum = getRealNum(objs);// 非法情況if (realNum == 0) {return null;}// 主邏輯// 計算最后一個成員的下標(biāo)int lastIdx = realNum - 1;// 拿到這個下標(biāo)對應(yīng)的值object obj = objs[lastIdx];// 把最后一個成員的下標(biāo)對應(yīng)位置設(shè)置為nullobjs[lastIdx] = null;// 返回這個值return obj;}// 中部插入算法public static void insert(Object[] objs, int insertIndex, Object obj) { // 獲取相關(guān)數(shù)據(jù)int realNum = getRealNum(objs);// 非法驗證if (insertIndex >= realNum) {return;}if (realNum == objs.Length) {return;}// 主邏輯// 1,數(shù)據(jù)后移int lastIdx = realNum - 1;for (int i = lastIdx; i >= insertIndex; i--){// i代表要操做的下標(biāo)了Object o = objs[i];objs[i + 1] = o;}// 2,數(shù)據(jù)填入objs[insertIndex] = obj;}// 中部刪除public static object pop(Object[] objs,int delIndex) {// 獲取相關(guān)數(shù)據(jù)int realNum = getRealNum(objs);// 非法驗證if (delIndex >= realNum) {return null;}// get del itemobject delItem = objs[delIndex];// 主邏輯// 1,位移int lastIndex = realNum - 1; // 最后一個數(shù)據(jù)的下標(biāo)for (int i = delIndex; i <= lastIndex-1; i++){// i代表了要操做的下標(biāo)// 獲取下一個下標(biāo)對應(yīng)的值object o = objs[i + 1];objs[i] = o;}// 2,設(shè)空// 設(shè)置最后一個成員的位置,讓它變?yōu)閚ullobjs[lastIndex] = null;// 返回數(shù)據(jù)return delItem;}} }總結(jié)
- 上一篇: Codeforces Round #73
- 下一篇: 综合布线缆线的敷设要求