MyKTV系统,哎呦,不错哦

转眼之间,已经到了2016年,即新的一年了!S1也结束了,收获的也不多 ,想想最后留给大家的就一个KTV项目了。

                                                     前台管理

主界面的运行效果:

主要代码:

 1
 2         private void MainForm_Load(object sender, EventArgs e)
 3         {
 4             // 加载时,运行播放窗体
 5             FrmPlay playForm = new FrmPlay();
 6             playForm.Show();
 7
 8             // 启动定时器
 9             this.timer1.Start();
10
11             // 读取资源路径
12             DBHelper dbHelper = new DBHelper();
13             string sql = "select resource_path from resource_path where resource_type = ‘singer_photo‘";
14             SqlCommand command = new SqlCommand(sql, dbHelper.Connection);
15
16             // 读取歌手照片路径
17             try
18             {
19                 dbHelper.OpenConnection();
20                 KTVUtil.singerPhotoPath = command.ExecuteScalar().ToString();
21             }
22             catch (Exception ex)
23             {
24                 MessageBox.Show("资源路径发生错误!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
25             }
26             finally
27             {
28                 dbHelper.CloseConnection();
29             }
30
31             // 读取歌曲路径
32             sql = "select resource_path from resource_path where resource_type = ‘song‘";
33             command.CommandText = sql;
34             try
35             {
36                 dbHelper.OpenConnection();
37                 KTVUtil.songPath = command.ExecuteScalar().ToString();
38             }
39             catch (Exception ex)
40             {
41                 MessageBox.Show("路径错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
42             }
43             finally
44             {
45                 dbHelper.CloseConnection();
46             }
47         }
1 /// <summary>
2 /// 显示当前播放的歌曲名字
3 /// </summary>
4 public void ShowPlayingSongName()
5 {
6 this.lblPlayingSong.Text = PlayList.PlayingSongName();
7 this.lblNextSong.Text = PlayList.NextSongName();
8 }

同一窗体显示不同界面

如果在一个窗体中显示不同的界面呢?

我们可以转换一下思路,所谓界面不同就是容器不同

解决方案:通过控制Form窗体中ListView控件的显示和隐藏来实现多界面窗体

歌星点歌的运行效果:

点击第一个LIstView,弹出第二个ListView解析:1.隐藏第一个ListView,显示第二个ListView 的代码

 1         // 点击后,显示歌手类别
 2         private void lvOrder_Click(object sender, EventArgs e)
 3         {
 4             if (lvOrder.SelectedItems[0] != null)
 5             {
 6                 // 隐藏歌手性别,显示歌手类别
 7                 pnlSingerSex.Visible = false;
 8                 pnlSingerType.Location = pnlSingerSex.Location;
 9                 pnlSingerType.Dock = DockStyle.Fill;
10                 pnlSingerType.Visible = true;
11                 this.singerSex = Convert.ToString(lvOrder.SelectedItems[0].Tag);  // 记录选择的性别
12             }
13
14             // 读取歌手类别
15             DBHelper dbHelper = new DBHelper();
16             string sql = "select * from singer_type";
17             try
18             {
19                 // 查询数据库
20                 SqlCommand command = new SqlCommand(sql, dbHelper.Connection);
21                 dbHelper.OpenConnection();//相当于con.open
22                 SqlDataReader reader = command.ExecuteReader();
23
24                 // 循环将类别读取出来添加到ListView中
25                 lvSingerType.Items.Clear();
26                 int i = 0;
27                 while (reader.Read())
28                 {
29                     ListViewItem item = new ListViewItem();
30                     item.Text = Convert.ToString(reader["singertype_name"]);
31                     item.Tag = Convert.ToInt32(reader["singertype_id"]);
32                     item.ImageIndex = i;
33                     lvSingerType.Items.Add(item);
34                     i++;
35                 }
36                 reader.Close();
37             }
38             catch (Exception ex)
39             {
40                 Console.WriteLine(ex.Message);
41                 MessageBox.Show("错误!");
42
43             }
44             finally
45             {
46                 dbHelper.CloseConnection();
47             }
48         }

 需要将【男歌手】汉字传递到第二个ListView上 显示5个国家的信息(包括文本和图片)

 需要将【男歌手】汉字传递到第二个ListView上   .显示5个国家的信息(包括文本和图片)

点击第二个ListVIew,填出第三个ListView

效果:

    // 点击类别后,显示对应类别下的歌手列表
        private void lvSingerType_Click(object sender, EventArgs e)
        {
            // 隐藏歌手类别,显示歌手列表
            pnlSingerType.Visible = false;
            pnlSingerList.Location = pnlSingerSex.Location;
            pnlSingerList.Dock = DockStyle.Fill;
            pnlSingerList.Visible = true;
            this.singerTypeId = Convert.ToInt32(lvSingerType.SelectedItems[0].Tag); // 保存选中的类别编号

            // 读取数据库,读出歌手信息
            DBHelper dbHelper = new DBHelper();
            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.singerSex);

            try
            {
                SqlCommand command = new SqlCommand(sql.ToString(),dbHelper.Connection);
                dbHelper.OpenConnection();
                SqlDataReader reader = command.ExecuteReader();

                int imageIndex = 0; // 代表歌手头像的索引
                ilSinger.Images.Clear();

                // 循环读出歌手信息添加到窗体中显示
                lvSinger.Items.Clear();
                while (reader.Read())
                {
                    // 将歌手头像放在ImageList控件中
                    string photoURL = KTVUtil.singerPhotoPath + "\\" + Convert.ToString(reader["singer_photo_url"]);
                    ilSinger.Images.Add(Image.FromFile(photoURL));

                    // 将歌手添加到ListView中
                    ListViewItem item = new ListViewItem();
                    item.Text = Convert.ToString(reader["singer_name"]);
                    item.Tag = Convert.ToString(reader["singer_id"]);
                    item.ImageIndex = imageIndex;
                    lvSinger.Items.Add(item);

                    imageIndex++;
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                MessageBox.Show("错误!");
            }
            finally
            {
                dbHelper.CloseConnection();
            }
        }
第三个ListView出来后,点击其中的一个歌手,弹出该歌手演唱的所有歌曲效果:
  1.  1   // 点击歌手姓名,打开歌曲列表窗口
     2         private void lvSinger_Click(object sender, EventArgs e)
     3         {
     4             // 读取数据库,读出该歌手的所有歌曲
     5             DBHelper dbHelper = new DBHelper();
     6             StringBuilder sb = new StringBuilder();
     7             sb.AppendFormat("select song_id,song_name, singer_name=‘{0}‘,song_url  from song_info where singer_id={1}",
     8                 lvSinger.SelectedItems[0].Text, Convert.ToInt32(lvSinger.SelectedItems[0].Tag));
     9
    10             FrmSongList songList = new FrmSongList();
    11             songList.Sql = sb.ToString();
    12             songList.Previous = PrevioisForm.Singer; // 指定返回的窗体是按歌手点歌
    13             songList.Show();
    14             this.Close();
    15         }

 我们都知道ListView绑定首列的数据是通过

 1 ListViewItem lvitem = new ListViewItem(stuno);
 2 显示地区图片的代码:  SqlDataReader dr = command.ExecuteReader();
 3
 4
 5
 6                 // 循环将类别读取出来添加到ListView中
 7
 8                 lvlisttwo.Items.Clear();
 9
10                 int i = 0;
11
12                 while (dr.Read())
13
14                 {
15
16                     ListViewItem item = new ListViewItem();
17
18                     item.Text = Convert.ToString(dr["singertype_name"]);
19
20                     item.Tag = Convert.ToInt32(dr["singertype_id"]);
21
22                     item.ImageIndex = i;
23
24                     lvlisttwo.Items.Add(item);
25
26                     i++;
27
28                 }
29
30       dr.Close();

 详细分析:

显示歌手的图片的代码

 1 SqlDataReader dr = cmd.ExecuteReader();
 2
 3                 int imageIndex = 0; // 代表歌手头像的索引
 4
 5                 imglistthree.Images.Clear();
 8
 9                 // 循环读出歌手信息添加到窗体中显示
10
11                 lvlistthree.Items.Clear();
12
13                 while (dr.Read())
14
15                 {
16
17                     // 将歌手头像放在ImageList控件中
18
19                     string photoURL = KTVUtil.singerPhotoPath + "\\" + Convert.ToString(dr["singer_photo_url"]);
20
21                     imglistthree.Images.Add(Image.FromFile(photoURL));
24
25                     // 将歌手添加到ListView中
26
27                     ListViewItem item = new ListViewItem();
28
29                     item.Text = Convert.ToString(dr["singer_name"]);
30
31                     item.Tag = Convert.ToString(dr["singer_id"]);
32
33                     item.ImageIndex = imageIndex;
34
35                     lvlistthree.Items.Add(item);
36
37
38
39                     imageIndex++;
40
41                 }
42
43                 dr.Close();
44
45             }

ListView控件首列不能居中问题

我也没找到解决方法,能做的,也许就是把第一列宽度设为 0,不用第一列,从第二列开始用。

此时 ListView1.Items[i].Text 也不能用了,因为它对应的是 ListView1[i].SubItems[0].Text。

设置ToolStrip对应项图片的大小,通过ImageScalingSize来设置。

04.Panel不能实现同一窗体不同界面。

17. 实现播放歌曲功能 

01.点击某歌曲后,将选择的歌曲添加到已点列表

02.在已点列表中放入一个Timer控件,实时检测每首歌曲的状态

03.在播放窗口中放入一个Timer控件,实时检测需要播放的歌曲

 1      private void PlayForm_Load(object sender, EventArgs e)
 2         {
 3             this.PlaySong();
 4             this.timer1.Start();
 5         }
 6
 7         /// <summary>
 8         /// 播放歌曲
 9         /// </summary>
10         private void PlaySong()
11         {
12             this.song = PlayList.GetPlayingSong(); // 获取当前要播放的歌曲
13             if (song != null)
14             {
15                 this.song.SetSongPlayed();             // 将当前歌曲播放状态设为已播放
16                 this.wmpSong.URL = KTVUtil.songPath + "\\" + this.song.SongURL;  // 得到当前播放歌曲的路径
17             }
18         }
19
20         private void timer1_Tick(object sender, EventArgs e)
21         {
22             if(this.song == null)
23             {
24                 this.PlaySong();
25             }
26             if (this.wmpSong.playState == WMPLib.WMPPlayState.wmppsStopped)
27             {
28                 this.song = null; // 将歌曲设为空
29                 PlayList.MoveOn();
30             }
31             // 切歌
32             if (this.song != null && this.song.PlayState == SongPlayState.cut)
33             {
34                 this.wmpSong.URL = "";
35                 this.song = null;
36             }
37         }

实现播放列表操作:

   1.KTVUtil 类:

1 class KTVUtil
2
3     {
4
5         public static string singerPhotoPath = "";  // 歌手照片路径
6
7         public static string songPath = "";         // 歌曲路径
8
9     }

2.编写歌曲类(Song)

 1 代码例子:enum SongPlayState
 2
 3     {
 4
 5         unplayed, played, again, cut
 6
 7     }
 8
 9     // 歌曲类
10
11     class Song
12
13     {
14
15         //歌曲名称
16
17         public string SongName
18
19         {
20
21             get { return songName; }
22
23             set { songName = value; }
24
25         }
26
27         //歌曲存放路径
28
29         public string SongURL
30
31         {
32
33             get { return songURL; }
34
35             set { songURL = value; }
36
37         }
38
39         // 歌曲播放状态
40
41         internal SongPlayState PlayState
42
43         {
44
45             get { return playState; }
46
47             set { playState = value; }
48
49         }
50
51         private string songName;
52
53         private string songURL;
54
55         // 歌曲播放状态,默认为未播放状态
56
57         private SongPlayState playState = SongPlayState.unplayed;
58
59         //将歌曲状态改为已播放
60
61         public void SetSongPlayed()
62
63         {
64
65             this.playState = SongPlayState.played;
66
67         }
68
69         // 将歌曲状态改为再拨放一次
70
71         public void SetPlayAgain()
72
73         {
74
75             this.playState = SongPlayState.again;
76
77         }
78
79         // 将歌曲状态改为切歌
80
81         public void SetSongCut()
82
83         {
84
85             this.playState = SongPlayState.cut;

3.编写播放列表类(PlayList),提供播放列表的各种方法

代码例子:// 播放列表管理

  1
  2     class PlayList
  3
  4     {
  5
  6         // 歌曲播放列表数组
  7
  8         private static Song[] songList = new Song[50];
  9
 10         // 当前播放的歌曲在数组中的索引
 11
 12         private static int songIndex = 0;
 13
 14  // 播放列表数组
 15
 16         public static Song[] SongList
 17
 18         {
 19
 20             get { return PlayList.songList; }
 21
 22         }
 23
 24         //当前播放歌曲的索引
 25
 26         public static int SongIndex
 27
 28         {
 29
 30             get { return PlayList.songIndex; }
 31
 32         }
 33
 34         // 当前播放的歌曲名称
 35
 36         public static string PlayingSongName()
 37
 38         {
 39
 40             string songName = ""; // 歌曲名称
 41
 42             if (SongList[SongIndex] != null)
 43
 44             {
 45
 46                 songName = SongList[SongIndex].SongName;
 47
 48             }
 49
 50             return songName;
 51
 52         }
 53
 54         //获取当前播放的歌曲
 55
 56         public static Song GetPlayingSong()
 57
 58         {
 59
 60             if (SongList[songIndex] != null)
 61
 62            {
 63                return SongList[songIndex];
 64             }
 65
 66             else
 67
 68             {
 69                 return null;
 70
 71             }
 72
 73         }
 74
 75         //下一首要播放的歌曲名称
 76
 77         public static string NextSongName()
 78
 79         {
 80
 81             string songName = ""; // 歌曲名称
 82
 83             if (SongList[SongIndex + 1] != null)
 84
 85             {
 86                 songName = SongList[SongIndex + 1].SongName;
 87             }
 88             return songName;
 89
 90         }
 91
 92
 93
 94         // 点播,及添加播放,一首歌曲
 95
 96         public static bool AddSong(Song song)
 97
 98         {
 99
100             //默认为没有添加播放歌曲
101
102             bool success = false;
103
104             //for遍历Song[],
105
106             for (int i = 0; i < SongList.Length; i++)
107             {
108                 if (SongList[i] == null)
109
110                 {
111
112                     SongList[i] = song;
113
114                     // Console.WriteLine(song.SongName);
115
116                     //返回要播放的歌曲,
117
118                     success = true;
119
120                     break;
121                 }
122             }
123     return success;
124
125         }
126     // 切歌 要切歌曲的编号,如果是切当前播放的歌曲传入-1
127
128         public static void CutSong(int index)
129
130         {
131
132             int i;  // 循环变量,代表切歌的位置
133
134             if (index == -1)
135
136             {
137                 i = SongIndex;
138             }
139             else
140             {
141                 i = index; // 从切歌的位置开始,将歌曲逐个向前移一个位置
142             }
143                     SongList[i].SetSongCut();
144             while (SongList[i] != null)
145             {
146                 SongList[i] = SongList[i + 1];
147                 i++;
148           // 如果到达数组最后一个元素,就将最后一个元素指向空
149                 if (i == SongList.Length)
150                 {
151                     SongList[i] = null;
152                 }
153
154             }
155
156         }
157    // 重放当前歌曲
158         public static void PlayAgain()
159         {
160             if (SongList[songIndex] != null)
161             {
162                 SongList[songIndex].SetPlayAgain();
163             }
164         }
165 // 播放下一首
166         public static void MoveOn()
167
168         {
169             if (SongList[songIndex] != null && SongList[songIndex].PlayState == SongPlayState.again)
170             {
171                 SongList[songIndex].SetSongPlayed();
172             }
173             else
174             {
175                 songIndex++;
176
177             }    }

 去Time控件:在Tick事件中写代码

代码例子:  // 定时扫描歌曲列表,显示当前播放歌曲的名称

 1   private void PlaySong()
 2
 3         {
 4             this.song = PlayList.GetPlayingSong(); // 获取当前要播放的歌曲
 5
 6             if (song != null)
 7             {
 8
 9                 this.song.SetSongPlayed();             // 将当前歌曲播放状态设为已播放
10                 this.Winplaymedia.URL = KTVUtil.songPath + "\\" + this.song.SongURL;  // 得到当前播放歌曲的路径
11
12             }
13
14         }
15  private void timer1_Tick(object sender, EventArgs e)
16
17         {
18
19             // 在文本框中显示当前播放的歌曲名字
20
21             this.txtplay.Text = PlayList.PlayingSongName();
22
23             this.txtnextsong.Text = PlayList.NextSongName();
24
25             if (this.song == null)
26
27             {
28                 this.PlaySong();
29             }
30
31             if (this.Winplaymedia.playState == WMPLib.WMPPlayState.wmppsStopped)
32
33             {
34
35                 this.song = null; // 将歌曲设为空
36
37                 PlayList.MoveOn();
38
39             }
40
41             // 切歌
42
43             if (this.song != null && this.song.PlayState == SongPlayState.cut)
44
45             {
46
47                this.Winplaymedia.URL = "";
48
49                 this.song = null;
50
51             }

在Load时中启动计时器:

代码例子:

  this.time.Start();

01:切歌:

1 代码例子:  DialogResult re = MessageBox.Show("确定要切歌吗?", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
2
3             if (re == DialogResult.OK)
4
5             {
6
7                 PlayList.CutSong(-1);
8
9             }

02:重唱:

代码例子: 

1 PlayList.PlayAgain();
2
3             PlaySong();
4
5  

移动窗体的代码: 

 1   private Point mouseOffset;        //记录鼠标指针的坐标
 2
 3         private bool isMouseDown = false; //记录鼠标按键是否按下
 4
 5         private void pnlon_MouseDown(object sender, MouseEventArgs e)
 6
 7         {
 8
 9             int xOffset;
10
11             int yOffset;
12
13             if (e.Button == MouseButtons.Left)
14
15             {
16                 xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
17
18                 yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
19
20                 mouseOffset = new Point(xOffset, yOffset);
21
22                 isMouseDown = true;
23
24             }
25
26         }
27    private void pnlon_MouseMove(object sender, MouseEventArgs e)
28
29         {
30             if (isMouseDown)
31
32             {
33                 Point mousePos = Control.MousePosition;
34
35                 mousePos.Offset(mouseOffset.X + 5, mouseOffset.Y + 30);
36                 Location = mousePos;
37
38             }
39
40         }
41
42
43
44         private void pnlon_MouseUp(object sender, MouseEventArgs e)
45
46         {
47             // 修改鼠标状态isMouseDown的值
48
49             // 确保只有鼠标左键按下并移动时,才移动窗体
50
51             if (e.Button == MouseButtons.Left)
52
53             {
54
55                 isMouseDown = false;
56
57             }
58
59         }
60

拼音点歌

 1  // 查询歌曲显示在窗体中
 2         private void btnSearch_Click(object sender, EventArgs e)
 3         {
 4             DBHelper dbHelper = new DBHelper();
 5             DataSet dataSet = new DataSet();
 6             StringBuilder sb = new StringBuilder();
 7             sb.Append("select song_id,song_name,singer_name,song_url  from song_info inner join singer_info on singer_info.singer_id=song_info.singer_id ");
 8             sb.AppendFormat("where song_name like ‘%{0}%‘ or song_ab like ‘{0}‘",this.txtSongName.Text);
 9
10             Console.WriteLine(sb.ToString());
11
12             SqlDataAdapter adapter = new SqlDataAdapter(sb.ToString(), dbHelper.Connection);
13
14              // 清空当前列表
15             if (dataSet.Tables["songList"] != null)
16             {
17                 dataSet.Tables["songList"].Clear();
18             }
19
20             adapter.Fill(dataSet, "songList");
21             this.dgvSong.DataSource = dataSet.Tables["songList"];
22         }
23
24         private void tsbtnExit_Click(object sender, EventArgs e)
25         {
26             this.Close();
27         }
28
29         private void dgvSong_CellClick(object sender, DataGridViewCellEventArgs e)
30         {
31             if (dgvSong.SelectedRows[0].Cells["songName"]!=null)
32             {
33                 // 创建一个歌曲对象,并将当权选中的歌曲名和路径赋给该对象
34                 Song song = new Song();
35                 song.SongName = dgvSong.SelectedRows[0].Cells["songName"].Value.ToString();
36                 song.SongURL = dgvSong.SelectedRows[0].Cells["songURL"].Value.ToString();
37                 PlayList.AddSong(song);
38
39                 // 更新数据库,将选中的歌曲点播次数加1
40                 int songId = Convert.ToInt32(dgvSong.SelectedRows[0].Cells["songId"].Value);
41                 string sql = string.Format("update song_info set song_play_count=song_play_count+1 where song_id={0}", songId);
42                 DBHelper dbHelper = new DBHelper();
43                 try
44                 {
45                     SqlCommand command = new SqlCommand(sql, dbHelper.Connection);
46                     dbHelper.OpenConnection();
47                     command.ExecuteNonQuery();
48                 }
49                 catch (Exception ex)
50                 {
51                     Console.WriteLine(ex.Message);
52                     MessageBox.Show("错误!");
53                 }
54                 finally
55                 {
56                     dbHelper.CloseConnection();
57                 }
58             }
59         }

实现分类点歌功能

 1         // 窗体加载时,显示歌曲类别
 2         private void OrderBySongTypeForm_Load(object sender, EventArgs e)
 3         {
 4             // 读取歌曲类别
 5             DBHelper dbHelper = new DBHelper();
 6             string sql = "select * from song_type";
 7             try
 8             {
 9                 // 查询数据库
10                 SqlCommand command = new SqlCommand(sql, dbHelper.Connection);
11                 dbHelper.OpenConnection();
12                 SqlDataReader reader = command.ExecuteReader();
13
14                 // 循环将类别读取出来添加到ListView中
15                 this.lvSongType.Items.Clear();
16                 int i = 0;
17                 while (reader.Read())
18                 {
19                     ListViewItem item = new ListViewItem();
20                     item.Text = Convert.ToString(reader["songtype_name"]);
21                     item.Tag = Convert.ToInt32(reader["songtype_id"]);
22                     item.ImageIndex = i;
23                     this.lvSongType.Items.Add(item);
24                     i++;
25                 }
26                 reader.Close();
27             }
28             catch (Exception ex)
29             {
30                 Console.WriteLine(ex.Message);
31                 MessageBox.Show("cuowu!");
32
33             }
34             finally
35             {
36                 dbHelper.CloseConnection();
37             }
38         }
39
40         private void lvSongType_Click(object sender, EventArgs e)
41         {
42             // 读取数据库,读出该歌手的所有歌曲
43             DBHelper dbHelper = new DBHelper();
44             StringBuilder sb = new StringBuilder();
45             sb.Append("select song_id,song_name, singer_name,song_url  from song_info inner join singer_info on song_info.singer_id=singer_info.singer_id ");
46             sb.AppendFormat("where songtype_id={0}",Convert.ToInt32(lvSongType.SelectedItems[0].Tag));
47             Console.WriteLine(sb.ToString());
48             FrmSongList songList = new FrmSongList();
49             songList.Sql = sb.ToString();
50             songList.Previous = PrevioisForm.SongType;
51             songList.Show();
52             this.Close();
53         }

字数点歌

 1   private void OrderByWordCountForm_Load(object sender, EventArgs e)
 2         {
 3             // 将字数列表添加到窗体中
 4             for (int i = 0; i < 12; i++)
 5             {
 6                 // 循环生成字数项添加到窗体中
 7                 ListViewItem item = new ListViewItem();
 8                 item.Text = (i + 1)+"个字";
 9                 item.Tag = i + 1;
10                 lvWordCount.Items.Add(item);
11             }
12
13         }
14
15         private void lvWordCount_Click(object sender, EventArgs e)
16         {
17             if (lvWordCount.SelectedItems[0] != null)
18             {
19                 // 读取数据库,读出该歌手的所有歌曲
20                 DBHelper dbHelper = new DBHelper();
21                 StringBuilder sb = new StringBuilder();
22                 sb.Append("select song_id,song_name, singer_name,song_url  from song_info inner join singer_info on song_info.singer_id=singer_info.singer_id ");
23                 sb.AppendFormat("where song_word_count={0}", Convert.ToInt32(lvWordCount.SelectedItems[0].Tag));
24                 Console.WriteLine(sb.ToString());
25                 FrmSongList songList = new FrmSongList();
26                 songList.Sql = sb.ToString();
27                 songList.Previous = PrevioisForm.WordCount;
28                 songList.Show();
29                 this.Close();
30             }
31         }

已点歌曲:

 1      //刷新歌曲列表
 2
 3   private void timer1_Tick(object sender, EventArgs e){
 4
 5  this.newSonglist();
 6
 7 }
 8
 9    private void newSonglist()
10
11         {
12
13             // 清空原列表
14
15             lvlist.Items.Clear();
16
17             int index = 0;
18
19             while (PlayList.SongList[index] != null)
20
21             {
22
23                 ListViewItem item = new ListViewItem();
24
25                 //获取歌曲的名称
26
27                 item.Text = PlayList.SongList[index].SongName;
28
29                 item.Tag = index;
30
31                 //歌曲的播放状态
32
33                 string playState = PlayList.SongList[index].PlayState == SongPlayState.unplayed ? "未播放" : "已播放";
34
35                 item.SubItems.Add(playState);
36
37                 lvlist.Items.Add(item);
38
39                 index++;
40
41             }
42
43         }
44
45 //切割
46
47         private void tsbtnCut_Click_1(object sender, EventArgs e)
48
49         {
50
51             int songId = -1;  // 切歌的编号
52
53             DialogResult re = MessageBox.Show("确定要切歌吗?", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
54
55             if (re == DialogResult.OK)
57             {
58
59                 if (this.lvlist.SelectedItems.Count > 0)
60
61                 {
62
63                     songId = Convert.ToInt32(this.lvlist.SelectedItems[0].Tag);
64
65                 }
66
67                 PlayList.CutSong(songId);
68
69                 this.newSonglist();
70
71             }
72
73  

歌曲列表:

 1    // 窗体加载时查询歌曲列表
 2         private void SongListForm_Load(object sender, EventArgs e)
 3         {
 4             DBHelper dbHelper = new DBHelper();
 5             DataSet dataSet = new DataSet();
 6             SqlDataAdapter adapter = new SqlDataAdapter(this.Sql,dbHelper.Connection);
 7             adapter.Fill(dataSet, "songList");
 8             dgvSong.DataSource = dataSet.Tables["songList"];
 9         }
10
11         // 点播一首歌曲
12         private void dgvSong_CellClick(object sender, DataGridViewCellEventArgs e)
13         {
14             // 创建一个歌曲对象,并将当权选中的歌曲名和路径赋给该对象
15             Song song = new Song();
16             song.SongName = dgvSong.SelectedRows[0].Cells["songName"].Value.ToString();
17             song.SongURL = dgvSong.SelectedRows[0].Cells["songURL"].Value.ToString();
18             PlayList.AddSong(song);
19
20             // 更新数据库,将选中的歌曲点播次数加1
21             int songId = Convert.ToInt32(dgvSong.SelectedRows[0].Cells["songId"].Value);
22             string sql = string.Format("update song_info set song_play_count=song_play_count+1 where song_id={0}", songId);
23             DBHelper dbHelper = new DBHelper();
24             try
25             {
26                 SqlCommand command = new SqlCommand(sql, dbHelper.Connection);
27                 dbHelper.OpenConnection();
28                 command.ExecuteNonQuery();
29             }
30             catch (Exception ex)
31             {
32                 Console.WriteLine(ex.Message);
33                 MessageBox.Show("错误!");
34             }
35             finally
36             {
37                 dbHelper.CloseConnection();
38             }
39         }

                                                     后台管理

KTVUtil 类:

 1 public   class  KTVUtil
 2
 3     {
 4
 5         //保存歌曲的目录
 6
 7         public static string songURL = "";
 8
 9         //保存歌手图片的目录
10
11         public static string singer_photoURL = "";
12
13 }

主窗体的Load事件:

 1  private void frmKTV_Load(object sender, EventArgs e)
 2
 3         {
 4
 5
 6
 7             // 歌曲路径
 8
 9             string sql = "select resource_path from Resource_path where resource_id=2";
10
11             KTVUtil.songURL = song_path(sql);
12
13             // 歌手图片路径
14
15             string sql1 = "select resource_path from Resource_path where resource_id=1";
16
17             KTVUtil.singer_photoURL = song_path(sql1);
18
19         }
20
21    //路径
22
23         private string song_path(string sql)
24
25         {
26
27             SqlConnection con = new SqlConnection(DBHelp.str);
28
29             SqlCommand cmd = new SqlCommand(sql, con);
30
31             string path = "";
32
33
34
35             con.Open();
36
37             SqlDataReader dr = cmd.ExecuteReader();
38
39
40
41             if (dr != null)
42
43             {
44
45                 if (dr.HasRows)
46
47                 {
48
49                     while (dr.Read())
50
51                     {
52
53                         path = dr["resource_path"].ToString();

增加修改歌手信息:

 1 获取图片的代码:
 2
 3   //相对路径
 4
 5         public string FileName;
 6
 7         //绝对路径
 8
 9         public string Path;
10
11  //获取
12
13         private void btnLiu_Click(object sender, EventArgs e)
14
15         {
16
17             DialogResult result = open.ShowDialog();
18
19
20
21             if (result == DialogResult.OK)//获取路径
22
23             {
24
25                 //相对路径
26
27                 FileName = open.SafeFileName;
28
29                 //绝对路径
30
31                 Path = open.FileName;
32
33                 pic.Image = Image.FromFile(Path);
39             }
40
41         }
42
43 //复制图片的路径
44
45 if (Path != null)
46
47                     {
48
49                         if (Path != KTVUtil.singer_photoURL + FileName)
50
51                         {
52
53                             File.Copy(Path, KTVUtil.singer_photoURL + FileName, true);
54
55                         }
56
57                     }
58
59
60
61   private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
62
63         {
64
65             if (dgvlist.SelectedRows[0].Cells[0].Value.ToString() != "")
66
67             {
68
69                 //获取选中行的歌曲编号
70
71                 int songid = Convert.ToInt32(dgvlist.SelectedRows[0].Cells["song_id"].Value);
72
73                 FrmAddSong frm = new FrmAddSong();
74
75                 frm.songid = songid;
76
77                 frm.Show();
78
79             }
80
81             else
82
83             {
84
85                 MessageBox.Show("选歌曲");
86
87             }

查询,删除,歌手信息

  1    public void deletesonginfo()
  2         {
  3             //获取选中行的歌手编号
  4             singer_id = Convert.ToInt32(dgvlist.SelectedRows[0].Cells["siigid"].Value);
  5             string sql = "delete song_info where singer_id=" + singer_id + "";
  6
  7             SqlCommand cmd = new SqlCommand(sql, con);
  8             con.Open();
  9             cmd.ExecuteNonQuery();
 10             con.Close();
 11
 12         }
 13         //删除歌手
 14         public void deletesingerinfo()
 15         {
 16             //获取选中行的歌手编号
 17             singer_id = Convert.ToInt32(dgvlist.SelectedRows[0].Cells["siigid"].Value);
 18             string sql1 = "select song_id from song_info where singer_id=" + singer_id + "";
 19             SqlConnection con1 = new SqlConnection(DBHelp.str);
 20             SqlCommand cmd1 = new SqlCommand(sql1, con1);
 21             con1.Open();
 22             int song_id = Convert.ToInt32(cmd1.ExecuteScalar());
 23             con1.Close();
 24             if (song_id != 0)
 25             {
 26                 MessageBox.Show("删除该歌手的歌曲信息");
 27
 28             }
 29             else
 30             {
 31                 string sql = "delete dbo.singer_info where singer_id=" + singer_id + " ";
 32
 33                 SqlCommand cmd = new SqlCommand(sql, con);
 34                 con.Open();
 35                 int count = cmd.ExecuteNonQuery();
 36                 if (count > 0)
 37                 {
 38                     MessageBox.Show("成功!");
 39                     string RowFilter = "";
 40                     SelectInfo(RowFilter);
 41                 }
 42                 else
 43                 {
 44                     MessageBox.Show("失败!");
 45                 }
 46
 47                 con.Close();
 48
 49             }
 50
 51         }
 52         //给dgvlist控件绑定数据的方法
 53         public void SelectInfo(string RowFilter)
 54         {
 55             dgvlist.AutoGenerateColumns = false;
 56             //歌手姓名,歌手类型,歌手性别,歌手描述
 57
 58             string sql = "select singer_info.singertype_id,singer_name,singer_id,singertype_name,singer_gender,singer_description from dbo.singer_info,dbo.singer_type where singer_info.singertype_id=singer_type.singertype_id ";
 59             SqlDataAdapter da = new SqlDataAdapter(sql, con);
 60             DataSet ds = new DataSet();
 61             try
 62             {
 63                 da.Fill(ds, "info");
 64                 DataView dv = new DataView(ds.Tables["info"]);
 65                 dv.RowFilter = RowFilter;
 66                 dgvlist.DataSource = dv;
 67             }
 68             catch (Exception)
 69             {
 70
 71                 MessageBox.Show("网络异常!");
 72             }
 73             finally
 74             {
 75                 con.Close();
 76             }
 77         }
 78         private void btnselect_Click(object sender, EventArgs e)
 79         {
 80
 81             if (txtname.Text == "" && cboty.Text == "全部")
 82             {
 83                 string RowFilter = "";
 84                 SelectInfo(RowFilter);
 85             }
 86             else if (txtname.Text != "")
 87             {
 88                 //获取要查询歌手的姓名
 89                 name = txtname.Text;
 90                 //获取要查询的歌手类型
 91                 int type = Convert.ToInt32(cboty.SelectedValue);
 92                 string RowFilter = "singer_name like ‘%" + name + "%‘";
 93                 SelectInfo(RowFilter);
 94
 95             }
 96             else
 97             {
 98
 99                 //获取要查询歌手的姓名
100                 name = txtname.Text;
101                 //获取要查询的歌手类型
102                 int type = Convert.ToInt32(cboty.SelectedValue);
103                 string RowFilter = "singer_name like ‘%" + name + "%‘ and singertype_id=" + type + "";
104                 SelectInfo(RowFilter);
105             }
106
107         }
108         //给歌手类型下拉框绑定数据的方法
109         public void LoadINGO()
110         {
111
112             string sql = "select * from dbo.singer_type";
113             SqlDataAdapter da = new SqlDataAdapter(sql, con);
114             DataSet ds = new DataSet();
115             try
116             {
117                 da.Fill(ds, "info");
118                 cboty.DataSource = ds.Tables["info"];
119                 cboty.DisplayMember = "singertype_name";
120                 cboty.ValueMember = "singertype_id";
121                 DataRow row = ds.Tables["info"].NewRow();
122                 row["singertype_id"] = -1;
123                 row["singertype_name"] = "全部";
124                 ds.Tables["info"].Rows.InsertAt(row, 0);
125                 cboty.SelectedIndex = 0;
126
127
128             }
129             catch (Exception)
130             {
131
132                 MessageBox.Show("网路异常!");
133             }
134             finally
135             {
136                 con.Close();
137             }
138         }
139         private void FrmSelectSinger_Load(object sender, EventArgs e)
140         {
141
142             // 给歌手类型下拉框绑定数据的方法
143             LoadINGO();
144             //给dgvlist控件绑定数据
145             string RowFilter = "";
146             SelectInfo(RowFilter);
147         }
148
149         private void 删除ToolStripMenuItem_Click_1(object sender, EventArgs e)
150         {
151             if (dgvlist.SelectedRows[0].Cells[0].Value.ToString() != "")
152             {
153                 DialogResult result = MessageBox.Show("确定删除?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
154                 if (result == DialogResult.OK)
155                 {
156                     //删除歌手信息的方法
157                     deletesonginfo();
158                     deletesingerinfo();
159                     string RowFilter = "";
160                     SelectInfo(RowFilter);

增加歌曲和修改歌曲:

 1 public int songid;
 2
 3         public string Path;
 4
 5         //相对路径
 6
 7         public string txtxdpath;
 8
 9   //新增歌曲信息的方法
10
11         public void addinfo()
12
13         {
14
15             //获取歌曲名称
16
17             string song_name = txtname.Text;
18
19             //获取拼音缩写信息
20
21             string py = txtsuo.Text;
22
23             //获取歌曲类型对应的隐藏值
24
25             int type_id = Convert.ToInt32(cboty.SelectedValue);
26
27             //获取歌手姓名对应的编号
28
29             int singe_id = Convert.ToInt32(txtsername.Tag);
30
31             //获取歌曲文件名
32
33             string url = txtsongurl.Text;
34
35             //获取歌曲名称的长度
36
37             int length = song_name.Length;
38
39         //拼接sql语句
40
41             string sql = "insert into song_info values(‘" + song_name + "‘,‘" + py + "‘," + length + "," + type_id + "," + singe_id + ",‘" + url + "‘,default)";
42
43       SqlCommand cmd = new SqlCommand(sql, con);
44
45        con.Open();
46
47             int result = cmd.ExecuteNonQuery();
48
49             if (result > 0)
50
51             {
52
53                 MessageBox.Show("保存成功!");
54
55                 if (Path != null)
56
57                 {
58
59                     if (Path != KTVUtil.songURL + txtxdpath)
60
61                     {
62
63                         File.Copy(Path, KTVUtil.songURL + txtxdpath, true);
64
65                     }
66                 }
67
68             }
69
70             else
71
72             {

查询,删除歌曲信息

  1   //删除歌曲信息的方法
  2         public void deletesong()
  3         {
  4
  5             if (dgvlist.SelectedRows[0].Cells[0].Value.ToString() != "")
  6             {
  7                 //获取选中行的歌曲编号
  8                 int song_id = Convert.ToInt32(dgvlist.SelectedRows[0].Cells["song_id"].Value);
  9                 DialogResult result = MessageBox.Show("删除?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
 10                 if (result == DialogResult.OK)
 11                 {
 12                     SqlConnection con = new SqlConnection(DBHelp.str);
 13                     string sql = "delete song_info where song_id=" + song_id + "";
 14                     SqlCommand cmd = new SqlCommand(sql, con);
 15
 16                     con.Open();
 17                     int count = cmd.ExecuteNonQuery();
 18                     if (count > 0)
 19                     {
 20                         MessageBox.Show("成功!");
 21                         string RowFilter="";
 22                         LoadAllINFO(RowFilter);
 23                     }
 24                     else
 25                     {
 26                         MessageBox.Show("失败!");
 27                     }
 28
 29                     con.Close();
 30
 31                 }
 32
 33             }
 34             else
 35             {
 36
 37                 MessageBox.Show("选歌曲");
 38
 39             }
 40         }
 41         //给歌曲类型下拉框赋值的方法
 42         public void LoadINFO()
 43         {
 44
 45             SqlConnection con = new SqlConnection(DBHelp.str);
 46             string sql = "select * from song_type";
 47             SqlDataAdapter da = new SqlDataAdapter(sql, con);
 48             DataSet ds = new DataSet();
 49
 50             da.Fill(ds, "info");
 51             cbolist.DataSource = ds.Tables["info"];
 52             cbolist.DisplayMember = "songtype_name";
 53             cbolist.ValueMember = "songtype_id";
 54
 55             DataRow row = ds.Tables["info"].NewRow();
 56             row["songtype_id"] = -1;
 57             row["songtype_name"] = "全部";
 58             ds.Tables["info"].Rows.InsertAt(row, 0);
 59             cbolist.SelectedIndex = 0;
 60
 61
 62
 63
 64             con.Close();
 65
 66
 67         }
 68
 69         //给dgvlist绑定数据的方法
 70         public void LoadAllINFO(string RowFilter)
 71         {
 72             //取消英文列自动生成
 73             dgvlist.AutoGenerateColumns = false;
 74             SqlConnection con = new SqlConnection(DBHelp.str);
 75             string sql = "select  song_id,song_name,songtype_name,song_play_count,song_info.songtype_id from song_info,song_type where song_info.songtype_id=song_type.songtype_id";
 76             SqlDataAdapter da = new SqlDataAdapter(sql, con);
 77             DataSet ds = new DataSet();
 78
 79             da.Fill(ds, "info");
 80             DataView dv = new DataView(ds.Tables["info"]);
 81             dv.RowFilter = RowFilter;
 82             dgvlist.DataSource = dv;
 83
 84             con.Open();
 85
 86
 87         }
 88         private void btnselect_Click(object sender, EventArgs e)
 89         {
 90
 91
 92             if (txtname.Text == "" && cbolist.Text == "全部")
 93             {
 94                 string RowFilter = "";
 95                 LoadAllINFO(RowFilter);
 96             }
 97             else if (txtname.Text != "")
 98             {
 99                 //获取歌曲名称
100                 string song_name = txtname.Text;
101                 //获取歌曲类型对应的隐藏值
102                 int type_id = Convert.ToInt32(cbolist.SelectedValue);
103                 string RowFilter = "song_name like ‘%" + song_name + "%‘";
104                 LoadAllINFO(RowFilter);
105
106             }
107             else
108             {
109
110                 //获取歌曲名称
111                 string song_name = txtname.Text;
112                 //获取歌曲类型对应的隐藏值
113                 int type_id = Convert.ToInt32(cbolist.SelectedValue);
114                 string RowFilter = "song_name like ‘%" + song_name + "%‘ and songtype_id =" + type_id + "";
115                 LoadAllINFO(RowFilter);
116
117             }
118         }
119
120         private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
121         {
122             if (dgvlist.SelectedRows[0].Cells[0].Value.ToString() != "")
123             {
124                 //获取选中行的歌曲编号
125                 int songid = Convert.ToInt32(dgvlist.SelectedRows[0].Cells["song_id"].Value);
126                 FrmAddSong frm = new FrmAddSong();
127                 frm.songid = songid;
128                 frm.Show();
129             }
130             else
131             {
132                 MessageBox.Show("选歌曲");
133             }
134         }
135
136         private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
137         {
138
139             //删除歌曲信息的方法
140             deletesong();
141         }
142
143         private void frmselectSong_Load(object sender, EventArgs e)
144         {
145             //给歌曲类型下拉框赋值
146             LoadINFO();
147             //给dgvlist绑定数据
148             string RowFilter = "";
149             LoadAllINFO(RowFilter);
150         }

歌曲路径:

 1    private void frmAddSongURL_Load(object sender, EventArgs e)
 2
 3         {
 4
 5             string sql = "select resource_path from Resource_path where resource_id=2";
 6
 7             txtoldurl.Text = song_path(sql);
 8
 9         }
10
11 //给当前路径赋值
12
13         private string song_path(string sql)
14
15         {
16
17
18
19             SqlCommand cmd = new SqlCommand(sql, con);
20
21             string path = "";
22
23             try
24
25             {
26
27                 con.Open();
28
29                 SqlDataReader dr = cmd.ExecuteReader();
30
31
32
33                 if (dr != null)
34
35                 {
36
37                     if (dr.HasRows)
38
39                     {
40
41                         while (dr.Read())
42
43                         {
44
45                             path = dr["resource_path"].ToString();
46
47                         }
48
49
50
51 DialogResult re = MessageBox.Show("修改路径?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
52
53                 if (re == DialogResult.Yes)
54
55                 {
56
57
58
59                     Directory.Delete(txtnewurl.Text);
60
61                     Directory.Move(txtoldurl.Text, txtnewurl.Text);
62
63                     string newUrl = txtnewurl.Text;
64
65                     SqlConnection con = new SqlConnection(DBHelp.str);
66
67                     string sql = "update Resource_path set resource_path=‘" + newUrl + "‘ where resource_type=‘song‘";
68
69                     SqlCommand cmd = new SqlCommand(sql, con);
70
71                     try
72
73                     {
74
75                         con.Open();
76
77                         int count = cmd.ExecuteNonQuery();
78
79                         if (count > 0)
80
81 //浏览新路径
82
83         private void btnLiu_Click(object sender, EventArgs e)
84
85         {
86
87
88
89             DialogResult result = brow.ShowDialog();
90
91             if (result == DialogResult.OK)
92
93             {
94
95                 txtnewurl.Text = brow.SelectedPath + "\\";
96
97             }
 1 //歌曲的文件名:
 2
 3 //浏览
 4
 5   private void btnLiu_Click(object sender, EventArgs e)
 6
 7         {
 8
 9             open.Filter = "歌曲文件|*.mp3;";
10
11             DialogResult result = open.ShowDialog();
12
13             if (result == DialogResult.OK)//获取路径
14
15             {
16
17                 //相对路径
18
19                 txtxdpath = open.SafeFileName;
20
21                 txtsongurl.Text = txtxdpath;
22
23                 //绝对路径
24
25                 Path = open.FileName;
26
27
28
29                 int dot = txtxdpath.LastIndexOf(‘.‘);
30
31                 string fileType = txtxdpath.Substring(dot + 1);
32
33                 if (fileType != "mp3")
34
35                 {
36
37                     MessageBox.Show("文件类型不对!");

歌手图片的路径:

 1 //给当前路径赋值
 2
 3         private string song_path(string sql)
 4
 5         {
 6
 7             SqlConnection con = new SqlConnection(DBHelp.str);
 8
 9             SqlCommand cmd = new SqlCommand(sql, con);
10
11             string path = "";
12
13
14
15             con.Open();
16
17             SqlDataReader dr = cmd.ExecuteReader();
18
19
20
21             if (dr != null)
22
23             {
24
25                 if (dr.HasRows)
26
27                 {
28
29                     while (dr.Read())
30
31                     {
32
33                         path = dr["resource_path"].ToString();
34
35                     }
36
37  private void btnSa_Click(object sender, EventArgs e)
38
39         {
40
41             // 如果新路径为空,提示
42
43             if (this.txtnewurl.Text.Trim() == "")
44
45             {
46
47                 MessageBox.Show("请选择新路径!");
48
49             }
50
51             else
52
53             {
54
55                 // 用户确认修改
56
57                 if (MessageBox.Show("确定要修改路径吗?", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
58
59                 {
60
61
62
63                     Directory.Delete(txtnewurl.Text);
64
65                     Directory.Move(txtoldurl.Text, txtnewurl.Text);
66
67                     string newUrl = txtnewurl.Text;
68
69                     SqlConnection con = new SqlConnection(DBHelp.str);
70
71                     string sql = "update Resource_path set resource_path=‘" + newUrl + "‘ where resource_type=‘singer_photo‘";
72
73                     SqlCommand cmd = new SqlCommand(sql, con);
74
75                     con.Open();
76
77                     int count = cmd.ExecuteNonQuery();
78
79                     if (count > 0)
80
81                     {
82
83 //浏览
84
85 private void btnLiu_Click(object sender, EventArgs e)
86
87         {
88
89             DialogResult result = brow.ShowDialog();
90
91             if (result == DialogResult.OK)
92
93             {
94
95                 txtnewurl.Text = brow.SelectedPath + "\\";
96
97             }

汉字转拼音首字母

 1   public static string GetChineseSpell(string strText)
 2         {
 3             if (strText == null || strText.Length == 0)
 4                 return strText;
 5             System.Text.StringBuilder myStr = new System.Text.StringBuilder();
 6             foreach (char vChar in strText)
 7             {
 8                 // 若是字母则直接输出
 9                 if ((vChar >= ‘a‘ && vChar <= ‘z‘) || (vChar >= ‘A‘ && vChar <= ‘Z‘))
10                     myStr.Append(char.ToUpper(vChar));
11                 else if ((int)vChar >= 19968 && (int)vChar <= 40869)
12                 {
13                     // 若字符Unicode编码在编码范围则 查汉字列表进行转换输出
14                     foreach (string strList in strChineseCharList)
15                     {
16                         if (strList.IndexOf(vChar) > 0)
17                         {
18                             myStr.Append(strList[0]);
19                             break;
20                         }
21                     }
22                 }
23             }
24             return myStr.ToString();
25         }// GetChineseSpell
26
27  

 这可是我辛辛苦苦的成果哦,同时在这提前祝大家 Happy New Year 了  ,

期待大家的好建议哦

时间: 2024-10-12 15:26:30

MyKTV系统,哎呦,不错哦的相关文章

MyKTV系统项目的感想

不粉身碎骨,何以脱胎换骨! 3月11号,我们迎来S1的尾巴.这期间有温暖,默契,有项目.一切刚刚好.刚刚正式接到KTV这个微微型的项目的时候,还是很害怕的,虽然老师在前两天就已经提到也讲到,KTV系统这个项目是怎样的实现过程!,但脑子的细胞都在喊话:这,这,这个太难了!肯定做不出来!! 1.凡事预则立不预则废 : 但是,时间不等人,一周多的时间,抛开抱怨,抛开幻想!每个人都进入了备战状态,我们要认真对待,我们要努力做到最好.即便时间很短,我们还是呈现出我们的用心之作.项目实施的前期准备是项目实施

重装window 7系统,从做一个u盘启动盘,到装系统,很不错

老毛桃U盘启动盘制作工具是现在最流行的U盘装系统和维护电脑的专用工具,一是制作简单,几乎100%支持所有U盘一键制作为启动盘,不必顾虑以前量产U盘考虑专用工具的问题.二是制作后工具功能强大,支持GHO.ISO系统文件,支持原版系统安装.三是兼容性强,支持最新型主板与笔记本,多个PE版本供选择,基本杜绝蓝屏现像. 一.制作前准备(注意:操作前备份好u盘数据) 1.电脑内存不能小于512MB 2.U盘的容量大于512MB 3.下载老毛桃U盘启动盘制作工具Build 20120501 下载地址:htt

西安前端开发工程师待遇|哎呦不错呦

现在学习前端开发这块的人非常多,重要的是根据自己的兴趣爱好选择,从行业的需求来看,前景很不错,技术人才缺乏,培训之后的待遇问题还是需要看自身学习程度,是否能把技术熟练掌握,独立解决问题等,待遇与地域不同而不同. 西安前端开发工程师,这样的一个岗位主要职责 根据设计独立完成HTML5.CSS3.JS(JQuery)的实现,代码编写; 掌握基本及常用的Web动效实现方式; 掌握2个以上的前端界面及开发框架(如Bootstrap.JQueryMobile.ExtJS.AngularJS.ionic.R

【转】android使用File Explorer无法访问系统内部文件--不错

原文网址:http://blog.csdn.net/yangqicong11/article/details/8747042 设备:Samsung GT-P3110 系统:Android 4.1.1 问题:本机在获得ROOT权限后,使用Eclipse自带的File Explorer访问/data/data下各APP的存储文件,均无法打开.更换另外一个设备后,情况正常.Sumsung的有些机型在获得ROOT权限系统后,仍然不能读写系统文件,这个时候就需要我们使用adb为文件夹赋予权限了 解决办法:

为什么ios系统比android系统更为流畅

1优先级别不同:iOS最先响应屏幕 不少人都反应苹果iPhone要比一般Android手机流畅,这是一个现象要说是大问题谈不上,毕竟两者是完全两个不同的系统所以严格来说放在一起对比是不公平的.不过因为Android以及iOS是当下两大主流操作系统,对比抗衡之类的说法自然难以避免.今天我们就来谈谈为什么iOS产品在使用过程中会让人觉得更加流畅一些,而为何一些Android手机则容易出现卡顿延迟的情况. iOS手机为什么比安卓流畅 优先级别不同:iOS最先响应屏幕 当我们使用iOS或者是Androi

网易七鱼智能客服系统使用心得

最近工作中,需要用到一套在线客服系统,经过比较,发现网易七鱼智能客服系统还是挺不错的,现将使用心得整理如下:  使用步骤:          一.打开官网 网易七鱼智能客服 http://qiyukf.com/          二.注册账号           三.登录后台               四.常见问题 网易七鱼Web开发指南 http://qiyukf.com/newdoc/html/Web_SDK_Guide.html 消息接口文档 http://qiyukf.com/newd

2017年免费OA系统选型综合分析

2017年免费OA系统选型综合分析 2017年免费OA系统行业呈现出一片活力.繁荣的景象.在这一年里,免费OA办公系统遍地开花,各说各的好,各有各的理.乱花丛中如何慧眼识英雄,明辨高与低,找出最适合自己的那个"高帅富"? 近日,小编整理了国内免费OA市场中的八大厂商,针对这些免费OA厂商的介绍进行综合分析,看看哪个免费OA厂商值得企业选择使用,成为2017年免费OA系统中的佼佼者. 一:点晴OA 从2010年点晴OA系统出现至今年,点晴OA系统始终都是免费开放给企业用户使用的.点晴OA

业务系统的开发模式

开发主流程:       1.  熟悉系统的整体设计.使用的主要技术集以及运行部署:       2.  持续沟通并理清业务处理逻辑:       3.  开发/测试/持续改进的交替进行:       4.  细致周全地处理异常. 业务处理模式:       1. 读取请求与输入,检测权限与可访问性.检测参数有效性:       2. 业务处理逻辑.日志记录:       3. 格式化处理结果并输出. 业务处理中的代码模式:       1.  从数据库或缓存中读取资源记录并检测是否存在或是否合

IOS 和安卓系统比较

为什么苹果IOS操作系统比安卓系统运行速度快,不少人都反应苹果iPhone要比一般Android手机流畅,这是一个现象要说是大问题谈不上,毕竟两者是完全两个不同的系统所以严格来说放在一起对比是不公平的.不过因为Android以及iOS是当下两大主流操作系统,对比抗衡之类的说法自然难以避免.今天我们就来谈谈为什么iOS产品在使用过程中会让人觉得更加流畅一些,而为何一些Android手机则容易出现卡顿延迟的情况. iOS手机为什么比安卓流畅 优先级别不同:iOS最先响应屏幕 当我们使用iOS或者是A