在线音乐网站【04】Part two 功能实现

时间:2022-02-12 10:39:18

  今天把剩余功能的具体实现补充总结,如果你想对整个小项目有清楚的了解,建议去看下前几篇博客。

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

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

3.在线音乐网站(3)Part one 功能实现

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

d.歌曲添加功能的实现

管理员或是被管理员授权的用户可以将自己喜欢的歌曲添加到在线音乐网站的首页排行榜中。如图7.5所示。

在线音乐网站【04】Part two 功能实现

图7.5 歌曲添加

通过在ASP.NET页面定义标签中的错误属性,如下代码:

Display="Dynamic" ErrorMessage="RequiredFieldValidator">歌手信息不为空

歌手信息不为空 在点击添加后,程序将检查各个文本框的内容是否符合要求,并显示相应提示。

在各信息无误的情况下,程序将会把信息通过SQL语言插入到各数据表中,关键代码如下:

 try
{
upload.SaveAs(path + musicname);
conn.Open();
SqlTransaction myTrans = conn.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand();
cmd.Transaction = myTrans;
insert_music(conn, musicname, cmd);
if (!isExisted("album", "album", conn, cmd))
{
insert_album(conn, cmd);
}
if (!isExisted("singer", "singer", conn, cmd))
{
insert_singer(conn, cmd);
}
myTrans.Commit();
msg.Text = "音乐添加成功!";
singer.Text = "";
birthday.Text = "";
hobby.Text = "";
album.Text = "";
profile.Text = "";
}
}

e.歌单不同类型播放的实现

用户可以根据自己喜好来选择播放榜单歌曲的方式(随机播放、顺序播放、单曲重复),如下7.6图。

在线音乐网站【04】Part two 功能实现

图7.6 歌单不同类型播放

在前台页面中将DropDownList中的索引值与内容对应,如下代码:

<asp:DropDownList>
<asp:DropDownList ID="ddlPlayType" runat="server">
<asp:ListItem Value="0">顺序播放</asp:ListItem>
<asp:ListItem Value="1">随机播放</asp:ListItem>
<asp:ListItem Value="2">单曲循环</asp:ListItem>
</asp:DropDownList>

当用户播放下一首歌曲时,程序会通过比较DropDownList当前索引值,来决定传入播放器的音乐文件的ID。关键代码如下:

//顺序播放
if (ddlPlayType.SelectedValue == "")
{
int listCount = Select1.Items.Count;
//这是最后一首的时候
if ((selectIx + ) == listCount)
{
//将最后一首 设置为不可选状态
Select1.Items[selectIx].Selected = false;
//选择第一首歌曲
Select1.Items[].Selected = true;
//ID 为第一首歌的ID
id = Select1.Items[].Value;
}
else
{
//取下一首歌曲ID
id = Select1.Items[Select1.SelectedIndex + ].Value;
Select1.Items[selectIx].Selected = false;
Select1.Items[selectIx + ].Selected = true;
}
}
//随机播放
else if (ddlPlayType.SelectedValue == "")
{
//取随机数
Random rad = new Random();
//在歌曲数目中取个随机数
int radIx = rad.Next(, Select1.Items.Count);
//选择那首选中的随机歌曲的ID
id = Select1.Items[radIx].Value;
Select1.Items[selectIx].Selected = false;
Select1.Items[radIx].Selected = true;
}
//单曲循环
else
{
id = Select1.Items[selectIx].Value;
}

f.管理员维护歌曲

管理员登录到后台后,可以进行音乐、专辑、歌手信息的修改,如下7.7、7.8图。

在线音乐网站【04】Part two 功能实现

图7.7 音乐信息修改

在线音乐网站【04】Part two 功能实现

图7.8 音乐详细信息修改

通过添加按钮btn_Click事件使用更新和删除的SQL语言,将页面发生变更的信息同步到数据库当中去,关键代码如下:

cmd.CommandText = "update [music] set musicName=@musicName,singer=@singer,album=@album,type=@type where id=@id";
cmd.Parameters.Add("@musicName", SqlDbType.NChar).Value = musicName.Text.Trim().ToString();
cmd.Parameters.Add("@singer", SqlDbType.NChar).Value = singer.SelectedValue.Trim().ToString();
cmd.Parameters.Add("@album", SqlDbType.NChar).Value = album.SelectedValue.Trim().ToString();
cmd.Parameters.Add("@type", SqlDbType.NChar).Value = typelist.SelectedValue.Trim().ToString();

g.用户授权和注册

管理员可以授权用户成为管理员来进行网站曲目的维护,如图7.9。游客可以通过注册来成为在线音乐的用户,如图7.10。

在线音乐网站【04】Part two 功能实现

图7.9 管理员授权页面

在线音乐网站【04】Part two 功能实现

图7.10用户注册

1)授权实现过程:

当管理员登录后台,点击授权按钮,触发dg_ItemCommand事件,网站根据授权的用户ID,执行SQL 更新语句,关键代码如下:

if (e.CommandName == "allowUser")
{
msg.Text = "";
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
string userId = dg.DataKeys[e.Item.ItemIndex].ToString();
conn.Open();
try
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "update [user] set type ='admin' where userId=@userId";
cmd.Connection = conn;
cmd.Parameters.Add("@userId", SqlDbType.NChar).Value = userId.Trim();
cmd.ExecuteNonQuery();
dataBind();
}

2)注册实现过程:

用户在输入注册页面的信息的同时,能判断用户名和e_mail的格式是否正确;

在点击添加按钮后,触发 addbtn_Click事件,并将信息插入到用户信息数据表中,关键代码如下:

try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.Parameters.Add("@userId", SqlDbType.NChar).Value = userId.Text.Trim();
cmd.Parameters.Add("@passwd", SqlDbType.NChar).Value = password.Text.Trim();
cmd.Parameters.Add("@name", SqlDbType.NChar).Value = name.Text.Trim();
cmd.Parameters.Add("@sex", SqlDbType.NChar).Value = sex.SelectedValue.ToString();
cmd.Parameters.Add("@mail", SqlDbType.NChar).Value = mail.Text.Trim();
cmd.Parameters.Add("@type", SqlDbType.NChar).Value = "user";
if (!isExisted(cmd))
{
cmd.CommandText = "INSERT INTO [user] VALUES (@userId,@passwd,@name,@sex,@mail,@type)";
cmd.ExecuteNonQuery();
msg.Text = "注册成功!";
userId.Text = "";
name.Text = "";
mail.Text = "";
Response.Redirect("Default.aspx");
}
else
msg.Text = "用户名已经存在!";