KTV點歌系統 KTV點歌系統

KTV點歌系統

 

  通過十多天的艱苦奮戰,MyKTV點歌系統終於成型,從剛開始接到項目的茫然,到完成項目時的喜悅,整個過程的艱辛和付出只有本身知道.雖然這個項目還有許多須要完善的地方,譬如添加歌詞信息,實現窗體的美化等,這些在後續時間裏我再一一進行一個完善吧!html

首先呢,我先將整個項目所能實現的功能作一個簡單的介紹,KTV點歌系統包括了前臺和後臺兩大部分,前臺的功能就是可以根據客戶的需求來實現點歌操做,後臺主要是管理員來添加歌手信息和歌手信息前端

前臺

 

這是前臺的主界面,經過主界面上的一系列操做,分別能夠進入相對應的界面java

這是當我播放歌曲後的主界面,添加歌曲後,主界面就能顯示該歌手的圖片信息,正在播放和下一首也會顯示相應的文本信息,而且,當我切歌后,歌手圖片和文本框也能隨之變化git

這是經過金榜排行進入的界面,歌曲的排列順序都是經過點擊的次數降序排列程序員

這是類型點歌,當客戶點擊任意一個類型時都會根據客戶所選的類型,到數據庫中進行篩選,而後將篩選後的結果在歌曲列表中展現出來面試

這是字數點歌,其中每一個文字都是經過代碼動態生成的,如何生成將在後面寫詳細代碼.當用戶點擊相應的字數時也會在數據庫中進行篩選,而後在歌曲列表中顯示出來,你們能夠很清楚的感受到,歌曲列表這個窗體實際上是幾個功能塊共用的一個窗體.sql

這是拼音點歌,能夠根據用戶輸入的拼音或者是歌曲名字進行模糊查詢.數據庫

 

這是已點列表,這裏面我加了一個右鍵菜單,能夠根據用戶的需求來進行當即播放和刪除編程

這是歌星點歌,這三張圖其實不是三個窗體,而是一個窗體,只是用了三個listview控件,當我須要顯示哪個控件時就將其餘兩個控件給隱藏了.如何操做也將在後面經過代碼進行詳細介紹.設計模式

最後這就是我在主界面經過娛樂添加的一個猜數小遊戲.它能產生一個隨機數,跟你輸入的數進行一個比較,若是大了或者是小了都會有相應的提示,直到你猜中後,又會顯示你一共猜了多少次,用戶就能夠根據你猜的次數的多少來進行相應的懲罰了.並且界面上的圖是可動的,當程序運行起來後就好像一個少女在那兒跳舞.

 

這些基本上就是我整個前臺所能實現的全部功能了,後臺的話在後面再跟你們一一展現了.

下面就給你們展現一些相對應的代碼了

一:怎樣實現無邊框窗體的拖動

複製代碼
 1 private Point mouseOffset;        //記錄鼠標指針的座標        
 2         private bool isMouseDown = false; //記錄鼠標按鍵是否按下   
 3         private void MainMenu_MouseDown(object sender, MouseEventArgs e)
 4         {
 5             int xOffset;
 6             int yOffset;
 7             if (e.Button == MouseButtons.Left)
 8             {
 9                 xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
10                 yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
11                 mouseOffset = new Point(xOffset, yOffset);
12                 isMouseDown = true;
13             }
14 
15         }
16 
17         private void MainMenu_MouseMove(object sender, MouseEventArgs e)
18         {
19             if (isMouseDown)
20             {
21                 Point mousePos = Control.MousePosition;
22                 mousePos.Offset(mouseOffset.X + 5, mouseOffset.Y + 30);
23                 Location = mousePos;
24             }
25 
26         }
27 
28         private void MainMenu_MouseUp(object sender, MouseEventArgs e)
29         {
30             // 修改鼠標狀態isMouseDown的值      
31             // 確保只有鼠標左鍵按下並移動時,才移動窗體       
32             if (e.Button == MouseButtons.Left)
33             {
34                 isMouseDown = false;
35             }
36 
37         }
複製代碼

在窗體中找到相對應的事件,而後copy代碼即可實現

二:實現窗體抖動的代碼

複製代碼
 //實現窗體抖動的效果
            Point first = this.Location;
            for (int i = 0; i < 8; i++)
            {
                Random ran = new Random();
                Point p = new Point(this.Location.X + ran.Next(20) - 4, this.Location.Y +
                    ran.Next(20) - 4);
                System.Threading.Thread.Sleep(25);//當前線程掛起15毫秒
                this.Location = p;
                System.Threading.Thread.Sleep(25);//當前線程再掛起15毫秒


            }
            this.Location = first;   //將窗體還原爲原來的位置    
複製代碼

 

整個KTV點歌系統中,咱們須要定義幾個輔助類.

1:Help類

複製代碼
public  class Help
    {
       public static string str = "data source=.;initial catalog=MyKTV;uid=sa;";

       public static string ways = "";  //保存歌手圖片路徑

       public static string songurl = "";   //保存歌曲路徑
    }
複製代碼

2:PlayBackStatus(播放狀態類)

複製代碼
public enum PlayBackStatus
    {
        PlayBack,   //已播
        NotBroadcast,   //未播
        NowBroadcast,   //正在播放
        Repeat,         //重播
        baoji,          //右鍵菜單的標記
        Cut     //切歌
    }
複製代碼

3:Song(歌曲類)

複製代碼
public  class song
    {
        public  string SongName;  //歌曲名稱
        public  string SongURL;   //歌曲存放路徑
        public PlayBackStatus playback;     //歌曲播放狀態
        public string singerphotourl;  //歌手圖片路徑
      


    }
複製代碼

4:PlayList(播放列表類)

複製代碼
 public   class PlayList
    {
        public static song[] songlist = new song[100];  //定義一個歌曲數組
        public static int SongIndex = 0;        //當前播放歌曲在數組中的索引
        public static string NextSongName = "";    //下一首歌曲
        public static string zhuangtai = "";    //保存是切歌仍是重播

        //將歌曲增長到歌曲數組中去
        public static bool AddSong(song song)
        {
            bool Result = false;    //記錄歌曲是否添加成功
            for (int i = 0; i < songlist.Length;i++ )
            {
                if (songlist[i] == null)
                {
                    songlist[i] = song;
                    Result = true;
                    break;
                }
            }
            return Result;
        }

         //切歌
        public static void CutSong()
        { 
            //獲取到當前播放的歌曲改變播放狀態
            if (songlist[SongIndex] != null)
            {
                songlist[SongIndex].playback = PlayBackStatus.Cut;
                ChargeInde();   //改變歌曲索引,播放下一首
            }
          
        }

         //重唱
        public static void ListenAgain()
        {
            if (songlist[SongIndex] != null)
            {
                songlist[SongIndex].playback = PlayBackStatus.Repeat;   //改變歌曲播放狀態
               
            }
        }
        //獲取下一首歌曲的名稱
        public static string GetNextSongName()
        {
            if (songlist[0]!=null && songlist[SongIndex + 1] == null)
            {
                NextSongName = "待添加....";
                return NextSongName;
            }
            else
            {
                if (songlist[0] != null)
                {
                    NextSongName = songlist[SongIndex + 1].SongName;
                    return NextSongName;
                }
                else
                {
                    return string.Empty;
                }
            }
            

        }

        //得到當前播放的歌曲
        public static song GetPlaySong()
        {
            if (songlist[SongIndex] != null)
            {

                return songlist[SongIndex];
            }
            else
            {
                return null;
            }
        }




         //播放下一首
        public static void ChargeInde()
        {
            SongIndex++;
        }

         //點擊重播時根據歌曲名稱查找該歌曲在歌曲列表中的位置並改變其狀態
        public static void SelectFromSongName(string name)
        { 
            for (int i = 0; i < songlist.Length;i++ )
            {
                if (songlist[i] != null)
                {
                    if (songlist[i].SongName.Equals(name))
                    {
                        if (zhuangtai.Equals("重播"))
                        {
                            songlist[i].playback = PlayBackStatus.Repeat;   //將該歌曲狀態修改爲重播
                            break;
                        }
                        else
                        {

                            if (songlist[i + 1] != null && songlist[i].playback == PlayBackStatus.NowBroadcast)
                            {
                                songlist[i].playback = PlayBackStatus.Cut;   //將該歌曲狀態修改爲切歌
                                songlist[i + 1].playback = PlayBackStatus.NowBroadcast; //將下一首歌狀態改爲正在播放
                            }
                            else
                            {
                                MessageBox.Show("親,最後一首歌曲和不是正在播放的歌曲不能切喲~~^_^");
                            }
                            break;
                        }
                    }
                }
                else
                {
                    break;
                }
            }
        }


         public static bool isRight=false;      //記錄當isRight等於true時就播放選中歌曲


         //點擊已點列表中的播放時,根據歌曲名找到索引
        public static void SelectIndexBySongName(string name)
        {

            for (int i = 0; i < songlist.Length; i++)
            {
                if (songlist[i] != null)
                {
                    if (songlist[i].SongName.Equals(name))
                    {
                         songlist[i].playback = PlayBackStatus.baoji;       //爲選中歌曲作一個標記
                         songlist[SongIndex].playback=PlayBackStatus.PlayBack;   //將當前播放歌曲改成已播狀態
                         SongIndex = i;     //將歌曲索引改變爲所選中的歌曲
                         isRight = true;
                         break;
                    }
                }
                else
                {
                    break;
                }
            }
        }


         //刪除右鍵菜單選中的歌曲
        public static bool delete(string name)
        {
            for (int i = 0; i < songlist.Length; i++)
            {
                if (songlist[i] != null)
                {
                    if (songlist[i].SongName.Equals(name))
                    {
                        if (songlist[i].playback == PlayBackStatus.NowBroadcast)
                        {
                            return false;
                           
                        }
                        while(true)
                        {
                            if (songlist[i + 1] != null)
                            {
                                songlist[i] = songlist[i + 1];
                                i++;
                            }
                            else
                            {
                                songlist[i] = null;
                                break;
                            }
                        }
                        
                            for (int l = 0; l < songlist.Length;l++ )
                        {
                            if (songlist[l] != null)
                            {
                            if (songlist[l].playback == PlayBackStatus.NowBroadcast)
                            {
                                SongIndex = l;
                            }
                            }
                        }
                        
                    }
                }
                else
                {
                    break;
                }
            }
            return true;
        }
         
    }
複製代碼

當咱們將這些輔助類建立好以後,咱們就能夠開始實現其餘功能塊的書寫了.

首先在一進入主界面的時候咱們就要保存歌手圖片路徑和歌曲路徑

複製代碼
private void Form1_Load(object sender, EventArgs e)
        {
            //保存歌手圖片前半部分路徑
            string sql = "select ways from Ways where id=1";
            Help.ways = retunURL(sql);
            //保存歌曲前半部分路徑
            string sql2 = "select ways from Ways where id=2";
            Help.songurl = retunURL(sql2);            
        }


//返回前半部分路徑的方法
        public string retunURL(string sql)
        {
            SqlConnection con = new SqlConnection(Help.str);
            con.Open();
            
            SqlCommand com = new SqlCommand(sql, con);
            string URL = com.ExecuteScalar().ToString();
            con.Close();
            return URL;
        }
複製代碼

第一步完成後,咱們就能夠進如歌星點歌界面,實現歌星圖片的動態加載了,咱們上面歌星點歌的圖片中,第一張是手動添加的,第二張半動態添加的(也可跟第一張同樣手動添加,在這裏是爲了熟練動態加載的代碼),第三張是全動態添加的,手動添加的部分就是,準備一個listview,imagelist 選擇大圖標模式,直接添加圖片索引和Text文本便可,在這裏只展現全動態加載時所寫的代碼

第一步,在load事件中顯示第一個listview隱藏第二第三個listview

複製代碼
 //Load事件
        private void SingerStar_Load(object sender, EventArgs e)
        {
            //隱藏第二第三個窗體
            listView2.Visible = false;
            listView3.Visible = false;
        }
複製代碼

第二步,當我點擊第一個listview時保存所點的記錄的文本或Tag並展現第二個listview

複製代碼
public string singertype = "";    //保存用戶選擇的歌星類型(男,女,組合)
        public int singerdistrictID;        //保存用戶選擇的歌星地區的ID(香港...大陸...臺灣.....)
        public string singerdistrict;       //保存用戶選擇的歌星地區(香港...大陸...臺灣.....)
        public int Number;                  //返回時更具Number的值來判斷顯示哪一個控件,隱藏哪一個控件


//從第一個控件跳轉到第二個控件,第二個控件的文本和圖像都是動態加載的
        public void ShowListView2()
        {
            Number = 2;
            if (listView1.SelectedItems[0] != null)
            {
                listView1.Visible = false;      //隱藏第一個控件
                listView2.Location = listView1.Location;    //讓兩個控件出現的位置相同
                listView2.Visible = true;       //顯示第二個控件
                singertype = listView1.SelectedItems[0].Tag.ToString();
            }
            SqlConnection con = new SqlConnection(Help.str);
            string sql = "select * from singer_type    ";
            SqlCommand com = new SqlCommand(sql, con);
            listView2.Items.Clear();    //清空上次點擊加載的數據
            try
            {
                con.Open();
                SqlDataReader read = com.ExecuteReader();
                if (read != null)
                {
                    if (read.HasRows)
                    {
                        int index = 0;
                      
                        while (read.Read())
                        {
                            int TypeId = Convert.ToInt32(read["singertype_id"]);
                            string TypeName = read["singertype_name"].ToString();

                            ListViewItem list = new ListViewItem();
                            list.Text = TypeName;
                            list.Tag = TypeId;
                            list.ImageIndex = index;
                            listView2.Items.Add(list);
                            index++;
                        }
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("網絡錯誤!");
            }
            finally
            {
                con.Close();
            }
        }
複製代碼

第三步,保存第二個listview中用戶所選擇的記錄,而且顯示第三個listview

複製代碼
 //從第二個控件跳轉到第三個控件,第三個控件的歌星圖片是從電腦硬盤上加載的
        public void ShowListView3()
        {
            Number = 3;
            if (listView2.SelectedItems[0] != null)
            {
                listView2.Visible = false;  //隱藏第二個控件
                listView3.Location = listView2.Location;    //兩個控件的出現位置相同
                listView3.Visible = true;   //第三個控件顯示
                singerdistrictID = Convert.ToInt32(listView2.SelectedItems[0].Tag);   //得到用戶點擊的地區ID
                singerdistrict = listView2.SelectedItems[0].Text;   //得到用戶點擊的歌手地區
            }
            SqlConnection con = new SqlConnection(Help.str);
            con.Open();
            try
            {
                //查詢符合用戶選擇的地區和歌手的類型的歌手名字
                string sql = @"select singer_name ,siinger_photo_url  from singer_info where singer_sex='" 
                    + singertype + "' and singertype_id=" + singerdistrictID + "";
                SqlCommand com = new SqlCommand(sql,con);
               SqlDataReader reader= com.ExecuteReader();
               listView3.Items.Clear(); //清除上次點擊加載的數據
               imageList3.Images.Clear();   //清除imagelist中上一次保存的圖片數據
               if (reader != null)
               {
                   if (reader.HasRows)
                   {
                       int index=0;
                      
                       while (reader.Read())
                       {
                           string singerName = reader["singer_name"].ToString();
                           string singer_phone = reader["siinger_photo_url"].ToString();    //得到圖片名字(後半部分路徑)
                           string lujing = Help.ways + singer_phone;    //得到圖片完整路徑
                           imageList3.Images.Add(Image.FromFile(lujing));   //經過完整路徑將圖片保存到imagelist3中

                           ListViewItem list = new ListViewItem();
                           list.ImageIndex = index;
                           list.Text = singerName;

                           listView3.Items.Add(list);
                           index++;
                       }
                   }
                   else
                   {
                    DialogResult result= MessageBox.Show("沒有" + singerdistrict+"地區 " + singertype + "歌手信息!!!!","用戶提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information);
                    if (result == DialogResult.Yes)
                    {
                        fanhui();
                    }
                   }
               }
              
            }
            catch (Exception)
            {
                MessageBox.Show("網絡異常!!");
            }
            finally
            {
                con.Close();
            }
            
        }
複製代碼

 

這樣就能將咱們的三個listview展現出來,而且可以實現動態加載數據了,到這裏而後咱們就能夠根據用戶第一次,第二次的條件來查找數據庫中的歌手信息,當用戶點擊歌手信息的時候就能夠在歌曲列表中根據歌手名字顯示全部的歌曲信息了

複製代碼
//獲取選中歌星的名字,並將其值傳遞給歌曲列表而後顯示歌曲列表
        private void listView3_Click(object sender, EventArgs e)
        {
            SongList song = new SongList();
            song.SingerName = listView3.SelectedItems[0].Text;
            song.singer = this;
            song.Show();
            this.Hide();
        }


//這是在歌曲列表中定義的一個歌手名字信息,而後經過窗體傳值實現
public string SingerName;   //保存從歌星列表中傳遞過來要查詢其歌曲信息的歌手的名字



string sql = @"select siinger_photo_url,song_name,singer_name , song_url  from song_info,singer_info 
where singer_info.singer_id=song_info.singer_id and singer_name='" + SingerName + "'";
 //根據歌手的名字將用戶選擇的歌手信息展現在LIstView控件中
        public void ShowUserByName(string sql)
        {
            dataGridView1.AutoGenerateColumns = false;
            SqlConnection con = new SqlConnection(Help.str);
            try
            {
                SqlDataAdapter da = new SqlDataAdapter(sql,con);
                DataSet dt = new DataSet();
                da.Fill(dt,"user");
                dataGridView1.DataSource = dt.Tables["user"];
            }
            catch (Exception)
            {
                MessageBox.Show("網絡異常!!");
            }
            finally
            {
                con.Close();
            }
        }
複製代碼

這樣,我就能夠經過歌曲列表中的歌曲信息來點歌了,當我每點擊一首歌,我就將所點的歌增長到我事先定義好的Song類裏面的歌曲數組當中去

複製代碼
//添加歌曲的方法
        public void AddSong()
        {
            if (dataGridView1.SelectedRows[0].Cells[0].Value.ToString() != "")
            {
                song Song = new song();
                Song.SongName = dataGridView1.SelectedRows[0].Cells["songname"].Value.ToString();
                Song.SongURL = dataGridView1.SelectedRows[0].Cells["songurl"].Value.ToString();
                Song.playback = PlayBackStatus.NotBroadcast;//播放狀態爲未播
                Song.singerphotourl = dataGridView1.SelectedRows[0].Cells["siinger_photo_url"].Value.ToString();    //添加歌手圖片路徑
                bool result = PlayList.AddSong(Song); //將歌曲增長到播放列表裏面
                if (result)
                {
                    MessageBox.Show("添加成功!!");
                    AddSongCount(dataGridView1.SelectedRows[0].Cells["songname"].Value.ToString());
                }
                else
                {
                    MessageBox.Show("添加失敗!");
                }
            }
            else
            {
                MessageBox.Show("請選擇正確的歌曲名稱!");
            }
        }
複製代碼

而且,爲了實現金榜排行,用戶每添加一首歌,都在數據庫中將歌曲的點擊次數加1

複製代碼
//每次點擊歌曲後都在數據庫中將該歌曲的點擊次數增長1
        public void AddSongCount(string song_name)
        {
            SqlConnection con = new SqlConnection(Help.str);
            string sql = "update song_info set song_play_count=song_play_count+1 where song_name='"+song_name+"'";
            SqlCommand com = new SqlCommand(sql,con);
            con.Open();
            com.ExecuteNonQuery();
            con.Close();
        }
複製代碼

一旦當咱們的歌曲數組中有了歌曲以後,咱們就能夠進行歌曲的播放了,在播放器控件所在的界面(個人是主界面)就能夠經過獲取到歌曲的完整路徑來播放歌曲

而且動態的給pictureBox添加歌手圖片

複製代碼
public song CurrentSong;   //定義當前播放歌曲

//得到當前播放的歌曲
        public void PlaySong()
        {
            CurrentSong = PlayList.GetPlaySong();//事先定義的類裏的方法
            if (CurrentSong != null)
            {
                CurrentSong.playback = PlayBackStatus.NowBroadcast; //將歌曲改爲正在播放狀態
                Player1.URL = Help.songurl + CurrentSong.SongURL;   //得到歌曲的路徑
                singerimage.Image = Image.FromFile(Help.ways + CurrentSong.singerphotourl);
                textBox1.Text = CurrentSong.SongName;

            }
            else
            {
                //給文本框賦值
                textBox1.Text = ""; 
                textBox2.Text = "";
            }
        }
複製代碼

爲了能夠實現連續播放,而且可以自動播放下一首,咱們能夠加一個計時器控件,每隔一秒掃描一次歌曲信息,判斷時候爲空,若是爲空則進行播放下一首歌曲

複製代碼
public song NextSong;   //定義下一首播放的歌曲

 //得到下一首播放的歌曲名稱
        public void NextPlay()
        {
           textBox2.Text= PlayList.GetNextSongName();   //事先定義的類
        }

 private void timer1_Tick(object sender, EventArgs e)
        {
            NextPlay(); //得到下一首歌曲的名稱
          
            if (CurrentSong == null)
            {
                PlaySong();
               
            }
            if (Player1.playState == WMPLib.WMPPlayState.wmppsStopped)  //判斷歌曲的播放狀態是否爲快要中止也就是是否快要播放完
            {
                if(CurrentSong!=null)
                {
                    CurrentSong.playback = PlayBackStatus.PlayBack; //將該歌曲狀態改爲已播放
                }
                CurrentSong = null;
                PlayList.ChargeInde();  //Playlist中定義的方法
            }
}
複製代碼

這樣就基本實現了整個播放歌曲的全過程了,而且你的歌曲數組中有多少歌曲都可以依次順序播放,以上代碼實現瞭如何經過歌星點歌進行歌曲的播放,可是並無實現切歌和重唱的功能,

切歌和重唱功能是根據歌曲的狀態,在計時器控件中來進行斷定操做的,根據歌曲狀態來執行相對應的方法(這是主界面的切歌和重唱)

複製代碼
  //切歌
        private void pictureBox2_Click(object sender, EventArgs e)
        {
           // PlayList.CutSong();
            if (CurrentSong != null)
            {
                CurrentSong.playback = PlayBackStatus.Cut;
            }
            else
            {
                MessageBox.Show("親~已經沒歌了哦~~");
            }
        }

        //重唱
        private void lenago_Click(object sender, EventArgs e)
        {
           
            if (CurrentSong != null)
            {
                PlayList.ListenAgain();
            }
            else
            {
                MessageBox.Show("親,還沒歌呢~~");
            }
       
        }


//Tick事件
        private void timer1_Tick(object sender, EventArgs e)
        {
            NextPlay(); //得到下一首歌曲的名稱
          
            if (CurrentSong == null)
            {
                PlaySong();
               
            }
            if (Player1.playState == WMPLib.WMPPlayState.wmppsStopped)  //判斷歌曲的播放狀態是否爲快要中止也就是是否快要播放完
            {
                if(CurrentSong!=null)
                {
                    CurrentSong.playback = PlayBackStatus.PlayBack; //將該歌曲狀態改爲已播放
                }
                CurrentSong = null;
                PlayList.ChargeInde();  //Playlist中定義的方法
            }
            if (CurrentSong != null)
            {
                
                if (CurrentSong.playback == PlayBackStatus.Repeat)
                {
                    CurrentSong.playback = PlayBackStatus.PlayBack; //將歌曲改爲已播放狀態
                    PlaySong();
                }
                if (CurrentSong.playback == PlayBackStatus.baoji)
                {

                    CurrentSong.playback = PlayBackStatus.NowBroadcast; //將歌曲改爲正在播放狀態
                    PlaySong();
                }
                if (PlayList.isRight)   //判斷是否播放選中歌曲
                {
                    PlaySong();
                    PlayList.isRight = false;
                }
                if (CurrentSong.playback == PlayBackStatus.Cut)
                {
                    PlayList.CutSong();
                    CurrentSong.playback = PlayBackStatus.PlayBack; //將歌曲改爲播放狀態
                    PlaySong();
                }
                
            }
        }
複製代碼

 在已點列表中的切歌和重唱,還有相對應的右鍵菜單

複製代碼
 //重唱
        private void lenago_Click(object sender, EventArgs e)
        {

            if (listView1.SelectedItems.Count != 0)
            {
                PlayList.zhuangtai = "重播";
                string SongName = listView1.SelectedItems[0].SubItems[0].Text;
                PlayList.SelectFromSongName(SongName);
                listView1.Items.Clear();
                show();
            }
            else
            {
                MessageBox.Show("請選擇一項歌曲!");
            }
               
        }
        
        //切歌
        private void pictureBox2_Click(object sender, EventArgs e)
        {
          
            if (listView1.SelectedItems.Count!= 0)
            {
                PlayList.zhuangtai = "切歌";
                string SongName = listView1.SelectedItems[0].SubItems[0].Text;
                PlayList.SelectFromSongName(SongName);
                listView1.Items.Clear();
                show();
               

            }
            else
            {
                MessageBox.Show("請選擇一項歌曲!");
            }
               
        }

//右鍵菜單點擊播放
        private void 播放ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count != 0)
            {
                string SongName = listView1.SelectedItems[0].SubItems[0].Text;
                PlayList.SelectIndexBySongName(SongName);
                listView1.Items.Clear();
                show();
             
            }
            
        }


        //右鍵菜單刪除
        private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count != 0)
            {
                string SongName = listView1.SelectedItems[0].SubItems[0].Text;
               if( PlayList.delete(SongName)==false)
               {
                   MessageBox.Show("該歌曲正在播放,不能刪除!");
               }
                listView1.Items.Clear();
                show();
               
            }
        }
複製代碼

如何動態產生字數點歌

複製代碼
private void SelectSongFromWords_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 12;i++ )
            {
                ListViewItem li = new ListViewItem();
                li.Text = (i + 1) + "個字";
                li.Tag=(i+1);
                listView1.Items.Add(li);
            }
        }
複製代碼

猜數小遊戲相關代碼

複製代碼
public int num = 0;   //隨機數
        public int count = 0;  //猜的次數

        private void button1_Click(object sender, EventArgs e)
        {
            number.Clear();
            Random r = new Random();
            num = r.Next(1, 100);  //返回0~100的整數,包含1不包含100
            button2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {

            if (Convert.ToInt32(number.Text) > num)
            {
                MessageBox.Show("大了點.再猜!");
                count++;
            }
            else if (Convert.ToInt32(number.Text) < num)
            {
                MessageBox.Show("小了點,再猜!");
                count++;
            }
            else
            {
                count++;
                MessageBox.Show("恭喜你,猜中了!!!一共猜了" + count + "次");
            }
        }
複製代碼

 到這兒,前臺就基本上是寫完了,還有一些其餘功能都很是的簡單,只是一些sql語句的問題了,這裏就不一一展現了.

 

後臺的話因爲時間關係,我就不一一的展現界面圖了,只將一些關鍵代碼作個展現

 

後臺

如何經過button按鈕瀏覽本地資源管理器,並將圖片展現到控件中

複製代碼
 public string Singer_photo_url;     //保存歌手圖片的後半部分路徑
        public string url;       //歌手圖片的絕對路徑

//點擊瀏覽按鈕,添加圖片
        private void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = " bgtr|*.jpg;*.png;*.gif"; //內部篩選符合條件的文件
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)//證實用戶雙擊(選中了)一個文件,我就獲取路徑
            {
                //相對路徑
                Singer_photo_url = openFileDialog1.SafeFileName;
                //絕對路徑
               url = openFileDialog1.FileName;
                //給PictureBox的Image屬性賦值               
                  pictureBox1.Image = Image.FromFile(url);           
                   MessageBox.Show("請選擇正確的文件類型!");
                   Singer_photo_url = null;
            }


        }
複製代碼

如何選擇文件夾目錄

複製代碼
 //瀏覽
        private void btnselect_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                txtNewURL.Text = folderBrowserDialog1.SelectedPath;
            }
        }
複製代碼

如何剪切文件到相應文件夾下

                Directory.Delete(txtNewURL.Text);   //刪除事先存在的文件夾
                Directory.Move(txtNowURL.Text, txtNewURL.Text); //將原文件夾中的內容剪切到新文件夾中
                UpdateSongURl();    //將新路勁保存到數據庫

如何複製文件到指定文件夾下

複製代碼
 // 移動歌手照片文件到指定的目錄
                            if (!string.IsNullOrEmpty(SongURl))
                            {
                                if (url != Help.songurl + SongURl)
                                {
                                    File.Copy(url, Help.songurl + "\\" + SongURl, true);
                                }

                            }
複製代碼

 

以上就是整個MyKTV的全部代碼了,由於我是初學者第一次寫這個算是比較大的項目,因此有寫得很差的地方,和未能實現的功能,你們就見諒哈~^_^. 

 
 
 
好文要頂  關注我  收藏該文   
0
0
 
 
 
« 上一篇: 清空控件中數據所使用的方法
» 下一篇: 數據庫的設計
posted @  2016-01-04 17:36 巴黎的雨季 閱讀(1349) 評論(3) 編輯 收藏
 

 
  
#1樓   2016-01-04 18:43 天盡頭的那片海  
偶!? 
好文章,易出軌..................
  
#2樓   2016-03-10 19:07 遲明洋  
很是不錯的KTV項目!
  
#3樓   2017-02-24 10:26 呆呆丶  
很不錯,很詳細
 
 
 
相關文章
相關標籤/搜索