一期结业KTV项目难点
查询完成后给歌曲便利到一个数组当中
将选中的歌曲对象加入到playlist类中的数组songs.
创建类名称:
class Playlist
{ //定义一个长度为50的数组
public static Song[] songlist = new Song[50];
public static int songIndex = 0;//当前播放的歌曲在数组中的索引
//每点击一次歌曲时,便是将歌曲对象放在数组中
public static bool addsong(Song song)
{
bool success = false;//记录添加歌曲是否成功
for (int i = 0; i < songlist.Length; i++)
{ //找到数组第一个为null的位置2
if (songlist[i] == null)
{
songlist[i] = song;
success = true;
break;
}
}
return success;
}
//获取当前播放的窗体返回值是song类型
public static Song GetPlaysSong()
{
if (songlist[songIndex] != null )
{
return songlist[songIndex];
}
else
{
return null;
}
}
//播放下一首
public static void Moveon()
{
if (songlist[songIndex] != null && songlist[songIndex].PlayState == SongplayState.again)
{
songlist[songIndex].setplayagaun();
}
else
{
songIndex++;
}
切歌功能:
当我们点击切歌按钮时,变会播放下一首歌曲
}
}
在这个类中我们要保存的是数组有二个方法
3:我们查询出的结果添加到数组当中;定义一个索引名称为index
它用来说明当前播放的歌曲在数组当中的位置
4:
5:定义一个Timer空间将Enabled属性改为ture,意思是可用状态
用来记录现在没有播放歌曲时,我们便获取到歌曲路径进行播放和当前歌曲播放完成后,进行下一手歌曲的播放
if (song == null)
{
PlaySong();
}
if (playan.playState ==WMPLib.WMPPlayState.wmppsStopped)//播放器为停止状态
{
song = null;
Playlist.Moveon();//继续播放下一首
}
6:当我们点完歌曲后,便要将其状态也要发生改变
正在播放的便将状态改为已播放,未播放的状态改为未播放
代码在查询窗体中写如下:
private void Bofangzt()//播放歌曲的状态
{
lvlist.Items.Clear();//清空原列表
for (int i = 0; i <Playlist.songlist.Length; i++)//小于数组的长度
{
if (Playlist.songlist[i]!=null)
{
ListViewItem item = new ListViewItem();
item.Text = Playlist.songlist[i].songName;
item.Tag = i;
string playStste = Playlist.songlist[i].playState == SongplayState.unplayed ? "未播放" : "已播放";
item.SubItems.Add(playStste);
lvlist.Items.Add(item);
}
}
}
这变可用将状态进行改变了
切歌功能:我们需要将歌曲的状态进行改变,当点击切歌按钮时,自动切换下一首歌曲
我们可以再playlist类中邪一个切歌的方法:
public static void bofang1()
{
if (FrmMain.song != null)
{
FrmMain.song = null;//歌曲为空
Playlist.Moveon();//继续播放下一首了
}
}
按钮调用该方法便可以进行切歌的操作
重唱也是改变歌曲的状态,
public static void chongchuang()
{
FrmMain.song.setplayagain();
if (FrmMain.song != null && FrmMain.song.playState == SongplayState.again)
{
FrmMain.song = null;
}
}
使用与上面方法一样
已点列表当用户点击已点列表按钮时,自动跳转到已点窗口
在已点列表的DGV控件我们要做的便是在click中
/创建一个对象来保持歌曲路径和歌曲名字
Song song = new Song();
song.SongName = dgvgequ.SelectedRows[0].Cells["SongName"].Value.ToString();//songname是lvtgequ中的名称
song.SongURl = dgvgequ.SelectedRows[0].Cells["SongURl"].Value.ToString();//songurl是歌曲的路径
//将选择的歌曲放在数组中
Playlist.addsong(song);
当我们每点击一个按钮变自动增加到已点列表和并且获取到他的状态
类型选择点歌
在类型选择点歌中,想要实现如上的效果我们要用到二种控件
Picturebox和label或者用listview控件均可实现上面效果
我们每点击一次歌曲,便调用一次已点列表,并将所点击控件的歌曲添加到已点列表
只要调用已点列表,更改where控件便可实现
拼音点歌
用户在文本控件输入歌曲的缩写, 便可以进行查询了
查询完成后,点击歌曲添加到播放列表
SqlConnection con = new SqlConnection(Sqlhelper.str);
DataSet ds = new DataSet();
//Select Singer_name,song_name from singer_info,song_info where Song_ab like '%" + txtsx.Text + "%'
string sql = "select song_name,Singer_name,Song_url from singer_info,song_info where singer_info.singer_id=song_info.singer_id ";
SqlDataAdapter da = new SqlDataAdapter(sql, con);
da.Fill(ds, "SONG_INFO");
this.dgvgequ.DataSource = ds.Tables["SONG_INFO"];
字数点歌
在这里我用的一张图片,运用代码将10个控件添加到窗体中,并对其位置,隐藏添加的文字
当用户点击上面数字时便可以查询到对应数字的歌曲,以及进行播放
int num1 = 1;
private void Form1_Load(object sender, EventArgs e)
{
int num2 = 1;//用来显示字数
for (int i = 0; i <2; i++)
{
for (int j = 0; j <4; j++)
{
Label label = new Label();
num2++;
label.Tag = num1;
num1++;
label.Size = new Size(60, 60);
label.Location = new Point(60+(150)*j, 80+(125)*i);
label.BackColor=Color.Transparent;
this.Controls.Add(label);
label.Click += label_Click;
}
Console.ReadLine();
}
一期结业KTV项目难点的更多相关文章
- KTV项目 SQL数据库的应用 结合C#应用窗体
五道口北大青鸟校区 KTV项目 指导老师:袁玉明 歌曲播放原理 SQL数据库关系图 C#解决方案类图 第一步:创建数据库连接方法和打开方法和关闭方法! public class DBHelper { ...
- KTV项目总结
KTV项目总结 大约一个星期前吧,老湿说我们要开始做KTV项目了,说是KTV项目是贯穿整个学的内容的,会所的,要我们认真去对待,一开始,第一天搭前台界面,总是有不会的,要去问问,这个要用什么控件啊,用 ...
- 小学生之KTV项目文档(bdqn)
第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...
- KTV项目之3个ListView的跳转和加载歌手图片
第一个ListView: 第二个ListView: 第三个ListView: 定义一个KTVUtil类,在里面定义一个静态变量保存歌手图片 //定义一个静态变量保存歌手图片路径 public stat ...
- 平凡的KTV后台,不平凡的KTV数据
之前就是说过“一个项目有很多重要的步骤以及功能”,那我们现在就来看看对于KTV项目来说:后台是处于什么样的重要作用! 首先就得了解KTV后台的一些功能了: 1.歌曲管理 .歌手管理 .设置资源路径 2 ...
- S1293和S2220KTV项目结束
1.界面原型(前台的界面搭建一下) 2.数据库 3.架构设计 4.约定的文件抽取 2015年7月20日下午 歌星点歌三界面的联动,数据动态加载 01.点击第一个LIstView,弹出第二个ListVi ...
- 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~
结对项目:Web复利计算 搭档博客地址:25江志彬 http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...
- MyKTV项目总结
今天和大伙分享一下我的KTV系统,我想大家都有自己独特的魅力,都有自己的风采,都有自己骄傲的一部分. 在这里我就抛砖引玉,聊聊我的KTV项目,希望大家能给出自己的建议.. 首先,我们先了解一下:当我们 ...
- MyKTV项目,走起!
MyKTV项目,走起! 第一部分:这个项目对于新手来说有一点难度,但是当你理清类之间的关系和怎样去实现功能后就会感觉轻松很多. 话不多说,先上类图: 接着是数据库表间关系: 本项目要实现以下功能: 明 ...
随机推荐
- MySQL常用命令(参考资料,部分改动)
一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 . 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- MVC笔记1
测试实体类 public class Test { public int id{get;set;} [Required(ErrorMessage="不能为空喔")] [String ...
- Linux服务器开发/测试环境搭建-流程
1.MariaDB yum 安装/初始化/授远程权限 yum安装 在MariaDB官网根据Linux系统查找您所需要的db版本:https://downloads.mariadb.org/mariad ...
- Mybatis学习(7)spring和mybatis整合
整合思路: 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spr ...
- robotium从入门到放弃 三 基于apk的自动化测试
1.apk重签名 在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...
- YII 数据库,模型,登录验证
//protected/config/main.php //数据库连接设置 'db'=>array( 'connectionString' => 'mysql:host=localhost ...
- Java经典案例之“水仙花数”
/** * 描述:打印出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数,其各位数字立方和等于该数本身.例如: * 153=1^3+5^3+3^3等... * 分析:利用for循环控制100-99 ...
- swift 协议传值的实现
首先呢说下结构 一个ViewController 一个ModelViewController 在ModelViewController中定义了一个协议 这个逻辑 从第一个界面进入第二个界面 从第二个 ...
- Backbone源码解读(一)事件模块
Backbone源码浅读: 前言: Backbone是早起的js前端MV*框架之一,是一个依赖于underscore和jquery的轻量级框架,虽然underscore中基于字符串拼接的模板引擎相比如 ...
- oracle存储过程的基本语法
1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字( 参数1 IN NUMBER, 参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 ...