今天打算把网站功能的具体实现给总结一下,如果你想了解整个小项目,建议你先看看前面2篇博客。

1.在线音乐网站(1)需求和功能结构

2.在线音乐网站(2)数据库和开发环境

项目源码:https://git.oschina.net/LanboEx/online-music.git

7.网站主要模块实现

a.在线音乐前台

由于在线音乐网站要提供用户在线音乐的相关服务,当用户打开网站时,引入眼帘的是首页,所以首页的对于整个网站来说是非常重要的一个页面,首页排版和设计的美观与否将直接影响到游客的浏览和用户的注册。首页不仅要实现各种功能的展示,而且还要着眼于系统整体风格,能让首页做到功能完善,页面简洁美观。

网站前台有歌曲排行榜展示、专辑排行榜展示、歌手排行榜展示、用户登录和注册、系统歌曲搜索、试听排行榜歌曲和下载排行榜歌曲、我的收藏等功能。程序运行结果如图7.1所示。

 
图7.1 前台主界面图

实现过程:

1)在进入音乐排行榜、专辑排行榜、歌手排行榜、我的收藏等功能时,实现AJAX技术效果,不刷新整个页面,只是异步刷新相应的排行表格数据,这样在增强用户体验的同时,也最大化的保证了已经登录的用户信息的安全,关键代码如下:

$(function () {
l();
})
function l(m) {
$.ajax({
type: "post",
url: "ajaxmlist.aspx",
data: "id=" + m,
success: function (msg) {
if (m == "") {
$("#ltitle").html("音乐排行榜")
}
if (m == "") {
$("#ltitle").html("专辑排行榜")
}
if (m == "") {
$("#ltitle").html("歌手排行榜")
}
if (m == "") {
$("#ltitle").html("我的收藏")
}
//将数据放入LIST中
$("#mlist").html(msg);
}
})
}

2)首页的登录区,可以在用户提交登录信息后,将信息与用户数据表中对比,并判断是用户还是管理员,并做出不同的页面跳转动作,关键代码如下:

 Session["type"] = "";
Session["userId"] = "";
string sql = "select password,[type] from [user] where userId=@userId";
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();
if(passwd.Trim().ToString() == Password.Text.Trim().ToString())
{
Session["userId"] = userId.Text.ToString();
if (dr.GetString().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.歌曲的试听和下载 

当用户进入在线音乐网站时,可以试听歌曲排行榜的任何一首歌曲,如下图7.2,同时也可以把它下载到本地电脑上面如图7.3。

图7.2 歌曲试听界面

图7.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(), Text = dr.GetString() };
Select1.Items.Add(listItem);
}
Select1.Items[].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. 歌曲模糊搜索功能

当用户只记得歌曲名、专辑、歌手的一部分的时候,在线音乐网站采用了模糊搜索,同样可以搜到你想听的歌曲,如图7.4所示。

图7.4 搜索

实现过程:

用户在搜索框中输出文本时,当点击搜索按钮时,会触发search_btn_Click事件,同时会将文本和搜索类型传入搜索页面的dataBind方法中,通过使用查询数据库含有like '%'的语句,可以实现对歌曲的模糊搜索,关键代码如下:

if (type.Equals("music"))
{
cmd.CommandText = "SELECT * FROM [music] WHERE(musicName like '%'+@musicName+'%') 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 '%'+@singer+'%') ORDER BY count DESC";
cmd.Parameters.Add("@singer", SqlDbType.NChar).Value = name;
}
else
{
cmd.CommandText = "SELECT * FROM [music] WHERE(album like '%'+@album+'%') 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 > )
{
dg.DataSource = ds;
dg.DataBind();
}
else
{
dg.Visible = false;
msg.Text ="没有找到相关文件!";
}
}

最新文章

  1. hibernate笔记--单(双)向的多对多映射关系
  2. WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)
  3. JS设置cookie、读取cookie、删除cookie
  4. CentOS7 mono环境连接WCF
  5. cocos2d::Vector
  6. Java--&gt;实现群聊功能(C/S模式--TCP协议)
  7. python实现的json数据以HTTP GET,POST,PUT,DELETE方式页面请求
  8. 【BZOJ】【2084】【POI2010】Antisymmetry
  9. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)
  10. General Palindromic Number (进制)
  11. css属性之transform
  12. linux_ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
  13. Linux压缩与解压缩
  14. netty&mdash;&mdash;私有协议栈开发案例
  15. [Chrome] chrome 自动跳转到https
  16. php的2种域名转向写法
  17. thread join和detach的区别
  18. Maven、SpringBoot框架结构优化
  19. 在Delphi中获得唯一32位长字符串
  20. Egret资源管理解决方案

热门文章

  1. [Linux 性能检测工具]IOSTAT
  2. x01.FileProcessor: 文件处理
  3. android中ADT和SDK的关系
  4. Unity3d Asset Server启动问题
  5. 从WinCE到Linux
  6. POJ3666Making the Grade[DP 离散化 LIS相关]
  7. XSS安全性过滤
  8. 调用newtonsoft.json反序列出错
  9. php一句话后门过狗姿势万千之传输层加工(1)
  10. JS获取当前页面的URL信息