今天打算把网站功能的具体实现给总结回顾一下,如果你想了解整个小项目,建议你先看看前面2篇博客。
7.网站主要模块实现
a.在线音乐前台
由于在线音乐网站要提供用户在线音乐的相关服务,当用户打开网站时,引入眼帘的是首页,所以首页的对于整个网站来说是非常重要的一个页面,首页排版和设计的美观与否将直接影响到游客的浏览和用户的注册。首页不仅要实现各种功能的展示,而且还要着眼于系统整体风格,能让首页做到功能完善,页面简洁美观。
网站前台有歌曲排行榜展示、专辑排行榜展示、歌手排行榜展示、用户登录和注册、系统歌曲搜索、试听排行榜歌曲和下载排行榜歌曲、我的收藏等功能。程序运行结果如图5.1所示。
图5.1 前台主界面图
实现过程:
1)在进入音乐排行榜、专辑排行榜、歌手排行榜、我的收藏等功能时,实现AJAX技术效果,不刷新整个页面,只是异步刷新相应的排行表格数据,这样在增强用户体验的同时,也最大化的保证了已经登录的用户信息的安全,关键代码如下:
$(function () { l(1); }) function l(m) { $.ajax({ type: "post", url: "ajaxmlist.aspx", data: "id=" + m, success: function (msg) { if (m == "1") { $("#ltitle").html("音乐排行榜") } if (m == "2") { $("#ltitle").html("专辑排行榜") } if (m == "3") { $("#ltitle").html("歌手排行榜") } if (m == "4") { $("#ltitle").html("我的收藏") } //将数据放入LIST中 $("#mlist").html(msg); } }) }
2)首页的登录区,可以在用户提交登录信息后,将信息与用户数据表中对比,并判断是用户还是管理员,并做出不同的页面跳转动作,关键代码如下:
Session["type"] = ""; Session["userId"] = ""; string sql = "select password,[type] from [user] where [email protected]"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.Add("@userId",SqlDbType.NChar).Value = userId.Text.Trim(); cmd.Connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); string passwd = ""; if (dr.Read()) { passwd = dr.GetString(0); if(passwd.Trim().ToString() == Password.Text.Trim().ToString()) { Session["userId"] = userId.Text.ToString(); if (dr.GetString(1).Trim().ToString() == "admin") Response.Redirect("~/musicChange.aspx?userId=" + userId.Text.ToString() + ""); else Response.Redirect("Default.aspx"); } } else { Session["userId"] = null; Session.Clear(); FailureText.Text = "账号或密码错误,登录失败!"; }
b.歌曲的试听和下载
当用户进入在线音乐网站时,可以试听歌曲排行榜的任何一首歌曲,如下图5.2,同时也可以把它下载到本地电脑上面如图5.3。
图5.2 歌曲试听界面
图5.3 歌曲下载界面
1)试听功能的实现过程
在音乐排行榜数据表格中,定义如下代码:
<a href=‘playlist.aspx?id="+ dt.Rows[i]["id"].ToString() + "‘ target=‘_blank‘ >"
用户点击歌曲名称是进入歌曲试听界面,程序将通过歌曲ID,获取歌曲文件路径,并传递给播放器,关键代码如下:
string path = new DirectoryInfo(Server.MapPath("")).FullName.ToString() + @"\file\" + updateMusic(); string str = path.Replace(‘\\‘, ‘/‘); fileUrl = str; update_album(); update_singer(); SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()); string sql = "select * from [music]"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Connection.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { ListItem listItem = new ListItem { Value = dr.GetString(0), Text = dr.GetString(1) }; Select1.Items.Add(listItem); } Select1.Items[0].Selected = true; dr.Close(); cmd.Connection.Close();
2)下载功能的实现过程
在音乐排行榜数据表格中,定义如下代码:
<a href=‘downLoadList.aspx?id=" + dt.Rows[i]["id"].ToString() + "‘>下载</a>
当用户点击下载按钮后,程序将通过歌曲ID,获取到歌曲的文件路径,并通过Response对象将文件写出,关键代码如下:
string m_name = downMusic(); string path = new DirectoryInfo(Server.MapPath("")).FullName.ToString() + @"\file\" + m_name; string str = path.Replace(‘\\‘, ‘/‘); update_album(); update_singer(); System.IO.FileInfo file = new System.IO.FileInfo(str); if (file.Exists) { Response.Clear(); Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(m_name))); Response.AddHeader("Content-Length", file.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.Filter.Close(); Response.WriteFile(file.FullName); Response.End(); } else { Response.Write("This file does not exist."); } Response.Redirect("Default.aspx");
c. 歌曲模糊搜索功能
当用户只记得歌曲名、专辑、歌手的一部分的时候,在线音乐网站采用了模糊搜索,同样可以搜到你想听的歌曲,如图5.4所示。
图5.4 搜索
实现过程:
用户在搜索框中输出文本时,当点击搜索按钮时,会触发search_btn_Click事件,同时会将文本和搜索类型传入搜索页面的dataBind方法中,通过使用查询数据库含有like ‘%‘的语句,可以实现对歌曲的模糊搜索,关键代码如下:
if (type.Equals("music")) { cmd.CommandText = "SELECT * FROM [music] WHERE(musicName like ‘%‘[email protected]+‘%‘) ORDER BY count DESC"; cmd.Parameters.Add("@musicName", SqlDbType.NChar).Value = name; } else if(type.Equals("singer")) { cmd.CommandText = "SELECT * FROM [music] WHERE(singer like ‘%‘[email protected]+‘%‘) ORDER BY count DESC"; cmd.Parameters.Add("@singer", SqlDbType.NChar).Value = name; } else { cmd.CommandText = "SELECT * FROM [music] WHERE(album like ‘%‘[email protected]+‘%‘) ORDER BY count DESC"; cmd.Parameters.Add("@album", SqlDbType.NChar).Value = name; } SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; SqlCommandBuilder sqlcb = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds, "music"); if (ds.Tables["music"].Rows.Count > 0) { dg.DataSource = ds; dg.DataBind(); } else { dg.Visible = false; msg.Text ="没有找到相关文件!"; } }