MyKTV点歌系统

历时一个多礼拜,终于做完了这个项目.说实话,项目不是很完美.那总结还是要做的,总结下知识还是很有必要的

首先,肯定是先制作窗体

在制作窗体的时候有各种各样的问题,有时候控件不正确,有时候手贱会把之前建好的控件删掉,反正问题不大,都可以自己解决.

在窗体建好了之后呢,就开始正式的写代码了,每个窗体的关联,与数据库的连接,每一步都不能错,错了就得费半天劲才能调好

其实第一天的时候我不知道脑子想什么了,老师明明说的是先写前台,我却写成了后台,这下差距就和别人大了很多.而且在这个时候,我的电脑偏偏出问题了,回家根本就不能写了,只能在学校和Bug做斗争,

先说掉用窗体吧,一个窗体到下一个窗体怎么调用呢?

很简单,两行代码就可以搞定

FrmOrderBySinger frmSinger = new FrmOrderBySinger();

frmSinger.Show();

然后就可以实现窗体跳转

看一下我特别丑的界面吧,但是功能还是很全的哦,不要在意外表美,要注重内在美

接下来就是要实现功能了,一个点歌系统,它的界面必须清楚,明朗,要不点歌的人看着会很烦,别说点歌了,肯定看都不会看

歌星点歌里要有更仔细的分类

要有男女组合分类,在更近一层就是地区分类,最后就是歌手名字了,先看一下效果图吧

点击歌手,里面就是歌手的所有歌曲了.我下载的歌曲少,所以就只有一首歌曲,重点是实现,而不是歌曲的多少,

这些都是利用一个窗体完成的,就是使用了三个listView控件,使它们在运行在一个窗体中,

他们都是层级关系,一个控件调用另一个控件

其实第二个listView开始,就不是窗体上的图片了,而是利用代码搞定的,这就是代码的神奇之处

下面,就仔细的说说是怎么用代码实现的

当你点击男?女?或者组合的时候,就是这些代码带你跳转到下一个ListView控件,图片就是一个路径,然后根据路径就可以把图片调到ListView中,连接数据库,把底下的字就可以调用出来了这些代码就实现了我们所有的需求

if (listView2.SelectedItems[0]!=null)

{

listView2.Visible = false;

lvName.Visible = true;

lvName.Location = listView1.Location;

SingerId = Convert.ToInt32(listView2.SelectedItems[0].Tag);

StringBuilder sb = new StringBuilder();

string sum = SingerType;

if (sum!="组合")

{

sum = SingerType == "女歌手" ? "男" : "女";

}

string sql = string.Format("select singer_name,singer_photo_url,singer_id from singer_info where singertype_id=‘{0}‘ and singer_sex=‘{1}‘", SingerId,sum);

SqlCommand cmd = new SqlCommand(sql, db.Conection);

try

{

db.OpenConnection();

SqlDataReader read = cmd.ExecuteReader();

//歌手头像索引

int imageindex = 0;

//清空图片集合

imageName.Images.Clear();

//清空listview列表集合

lvName.Items.Clear();

if (read.HasRows)

{

while (read.Read())

{

//图片的地址

string path = KtvUtil.FilePath + @"\" + Convert.ToString(read["singer_photo_url"]);

//图片路径装载到imagelist

imageName.Images.Add(Image.FromFile(path));

//将类型装载到集合中去

ListViewItem lvitem = new ListViewItem();

string typename = Convert.ToString(read["singer_name"]);

int typeid = Convert.ToInt32(read["singer_id"]);

lvitem.Text = typename;

lvitem.Tag = typeid;

lvitem.ImageIndex = imageindex;

lvName.Items.Add(lvitem);

imageindex++;

}

read.Close();

}

}

catch (Exception ex)

{

MessageBox.Show("第三个系统报错!" + ex.Message);

}

接下来,点击歌手名字,所属歌手的歌曲就可以显示出来了

比如,点击李宇春,她的歌曲就会显示出来

数据库里,李宇春就一首歌,如果你想点击其他的歌曲,可以用KTV后台来添加,咱们现在这个是前台

如果你点击歌曲的话,歌曲就会同时播放,

先看一下效果图吧

这就是播放歌曲的控件,下面就说代码是怎么实现的

//当前播放的歌曲

private SongList song;

public void palySong()

{

//把播放类的播放方法赋给当前的播放歌曲

this.song = PalyList.GetSong();

//当歌曲不为空的时候

if (song!=null)

{

//调取歌曲的播放状态

this.song.PalyState();

//歌曲的路径

Player1.URL = KtvUtil.SongPath+"\\"+ this.song.SongUl1;

}

}

这个就可以实现歌曲播放了,就这边像是切歌啊,重唱啊,就一块说了吧

如果点击切歌的话,就把当前歌曲-1就可以了,代码如下:

if (MessageBox.Show("确定要切歌吗?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning)==DialogResult.OK)

{

PalyList.CutSong(-1);

}

最好有一个提示框,要是顾客有时候点错了呢,对吧!

重唱呢,就是在把唱歌的方法重复一遍就好了

palySong();

这个就是刚刚播放歌曲的方法   .

然后呢,我们要说的是拼音点歌,其实拼音点歌比较简单,就是利用模糊查询就可以实现

ab = textBox1.Text;
            string sql = "select singer_info.singer_name,song_info.song_name,song_url from singer_info,song_info where singer_info.singer_id=song_info.singer_id";
            if (ab!=string.Empty)
            {
                sql = string.Format(sql+" and song_info.song_ab like ‘{0}%‘",ab);
            }
            sda.SelectCommand = new SqlCommand(sql,db.Conection);
            if (ds.Tables["songinfo"]!=null)
            {
                ds.Tables["songinfo"].Clear();
            }
            sda.Fill(ds,"songinfo");
            DataTable table=ds.Tables["songinfo"];
            this.dataGridView1.DataSource = ds.Tables["songinfo"];
        }

这些代码就可以是实现模糊查询

接下来就说分类点歌吧,分类点歌呢,需要四步来完成,哪四步呢?

先看下效果图吧

点击情歌,就会出现对应的歌曲

第一步判断datagridView有没有选中的行
 第二步从实例化SongList类
第三步调取歌曲song类的字段进行赋值(从datagridview中的列赋值);
第四部把从datagridview中获取到的数据添加到播放类里的数组中

int index = 0;
            string sql = "select songtype_id,songtype_name,songtype_URL from song_type";
            SqlCommand cmd = new SqlCommand(sql, db.Conection);
                db.OpenConnection();
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {

string path = KtvUtil.FilePath + "\\"+Convert.ToString(reader["songtype_URL"]);
                        imageList1.Images.Add(Image.FromFile(path));
                        ListViewItem lvitem = new ListViewItem();
                        string typename = Convert.ToString(reader["songtype_name"]);
                        int typeid = Convert.ToInt32(reader["songtype_id"]);
                        lvitem.Text = typename;
                        lvitem.Tag = typeid;
                        lvitem.ImageIndex = index;
                        this.listView1.Items.Add(lvitem);
                        index++;
                     
                    }
                }
                reader.Close();
            db.CloseConnection();
            this.dataGridView1.Visible = false;

string sql = "SELECT song_name,singer_name FROM singer_info,song_info WHERE singer_info.singer_id=song_info.singer_id AND songtype_id={0}";
            sql = string.Format(sql + " AND songtype_id={0}", Convert.ToInt32(listView1.SelectedItems[0].Tag));
            sda.SelectCommand = new SqlCommand(sql, db.Conection);
            if (ds.Tables["num"] != null)
            {
                ds.Tables["num"].Clear();
            }
            sda.Fill(ds, "num");
            this.dataGridView1.DataSource = ds.Tables["num"];

接下里要说的就是金榜排行

它是呢,根据点击次数排行,利用Order By进行排序,点击次数越多,排行越靠前

if (this.dataGridView1.SelectedRows[0] != null)
            {
                SongList song = new SongList();
                //歌曲名称
                song.SongName1 = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                //歌曲路径
                song.SongUl1 = this.dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
               
                PalyList.AddSong(song);

}

string sql = "select song_name,singer_name,song_play_count,song_url from song_info,singer_info where song_info.singer_id=singer_info.singer_id order by       song_play_count desc";
            if (ds.Tables["sum"]!=null)
            {
                ds.Tables["sum"].Clear();
            }
            sda.SelectCommand = new SqlCommand(sql,db.Conection);
            sda.Fill(ds,"sum");
            this.dataGridView1.DataSource = ds.Tables["sum"];

最后呢,就是字数点歌了

if (ds.Tables["num"] != null)
            {
                ds.Tables["num"].Clear();
            }
            string sql = "select song_info.song_name,singer_info.singer_name,song_info.song_url from song_info,singer_info where song_info.singer_id=singer_info.singer_id ";
            sql = string.Format(sql + " and song_info.song_word_count={0}", mains.ToString());
            sda.SelectCommand = new SqlCommand(sql,db.Conection);
           
            sda.Fill(ds,"num");
            this.dataGridView1.DataSource=ds.Tables["num"];

这就实现了整个TKV前台的操作了,一个完整的KTV就成功了

时间: 2024-11-05 22:58:30

MyKTV点歌系统的相关文章

欢迎进入MyKTV前后台点歌系统展示

一个项目,一分收获:一个项目,一些资源.Ktv项目也是一样的,所以我想分享我的收获,让你们获得你需要的资源. 一. 那MyKTV点歌系统具体的功能有哪些呢?我们就来看看吧! 1.MyKTV前台功能: 01.歌星点歌 .拼音点歌 .数字点歌 .类型选择 .金榜排行 02.切歌 .点歌 .重唱和退出 2.MyKTV后台功能: 01.歌手管理 .歌曲管理 .设置资源路径 02.新增歌手.歌曲 ,查询歌手.歌曲信息,设置歌曲路径和退出 二. 功能已经概括的差不多了,就让我们一起来看看MyKTV的项目吧

KTV点歌系统

巴黎的雨季 博客园 首页 新随笔 联系 订阅 管理 随笔 - 57  文章 - 0  评论 - 37 KTV点歌系统 经过十多天的艰苦奋战,MyKTV点歌系统终于成型,从刚开始接到项目的茫然,到完成项目时的喜悦,整个过程的艰辛和付出只有自己知道.虽然这个项目还有许多需要完善的地方,譬如添加歌词信息,实现窗体的美化等,这些在后续时间里我再一一进行一个完善吧! 首先呢,我先将整个项目所能实现的功能做一个简单的介绍,KTV点歌系统包括了前台和后台两大部分,前台的功能就是能够根据客户的需求来实现点歌操作

夺命雷公狗---微信开发40----微信语言识别接口2(点歌系统)

语音识别时候记住一定要加上中文的“!”号噢,否则一定不会成功 点歌系统开工,index.php代码如下所示: <?php /** * wechat php test */ //define your token require_once "common.php"; //这里是引入curl发送函数的类 require_once 'WeChat.class.php'; define("TOKEN", "twgdh"); //这里让这个类继承了c

KTV点歌系统播放原理

北大青鸟KTV点歌系统播放原理 指导老师--原玉明 1.首先知道有两个类(PlayList   Song) PlayList类中有一方法 public static bool AddSong(Song song) { bool success = false;//记录添加歌曲是否成功 for (int i = 0; i < SongList.Length; i++) { //找到数组中第一个为null的位置 if (SongList[i] == null) { SongList[i] = son

2016年5月14日 厦门 KTV点歌系统数据库修复误格式化 数据库碎片重组找回

今天接到一个Ktv客户打来电话,说因为数据库被误删除了,客户用recover和顶尖数据恢复,恢复了数据库,发给我们我用自己研发的数据库mdf读取工具发现数据库没有有效数据,因为客户数据已经成为碎片,我们使用自主研发的镜像软件,对磁盘做了镜像然后,用碎片扫描数据发现大部分数据都在,数据库结构损坏,鉴于客户比较着急我们现在进行了碎片重组,导出了重要数据,因为客户是KTV点歌系统,如果不抓紧修复好,耽误营业,损失挺大.客户拿到数据很满意. 客户以及代理商数据无价,客户有问题请让客户先联系代理商,不要自

7天撸完KTV点歌系统,含后台管理系统(完整版)

博客园好丑啊,请看掘金文章 7天撸完KTV点歌系统,含后台管理系统(完整版) 最近手有点痒琢磨着做个啥,朝思暮想还是写个KTV点歌系统,模拟了一下KTV开户的思路,7天累死我了,不过技术点还挺多的,希望你可以看完(?^?^)? 用Node(Express)教你写KTV点歌系统,包括前台内容和后台管理系统,整合Express框架和Mongodb数据库服务器开发:教你用Vue.JS,ElementUI和iViewUI写出超漂亮的页面,随心点歌随心听 1 作者原创文章, 转载前请留言或联系作者!!!

安卓盒子点歌系统代码

是一款适用于TV的点歌软件,支持遥控器.安卓.苹果设备进行点歌,支持原伴唱切换,快捷操作等,支持本地歌曲自动导入,是K友的不错之选... 现如今,各类聚餐.聚会哪里少的了去KTV,唱歌不仅等让彼此玩的开心,活跃气氛,还能增进彼此的感情!今天,小编为大家整合了KTV软件合集,便于大家及时的预约KTV场所,方便快捷,需要的朋友快来下载吧! 家庭KTV系统应用软件是一款仅仅为1%高端家庭量身定制!带给您全家齐欢乐的幸福! KTV系统,配套移动端APP让您点歌更方便,更快捷,可多人同时并行点歌,更可分享

KTV 点歌系统------ArrayList

1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 public class KTVByArrayList { 6 7 static Scanner scanner = new Scanner(System.in); 8 9 public static void main(String[] args) { 10 System.out.println("0.添加歌曲 1.置顶歌

MyKTV项目总结

项目名称:KTV点歌系统 --指导老师原玉明 经过一周多的时间,终于完成的我的这个KTV项目,说实话,做这个项目我收获了不少,难点也非常多,不过经过重重磨难,总算是过来了.不简单呀! 这个项目主要分为前后台. 前台主要实现的功能是:歌星点歌,拼音点歌,字数点歌, 类型选择,金曲排行,一些切歌,重唱,已点歌曲列表,主要是这些功能. 后台主要实现的功能是:增加歌手,增加歌曲,修改歌曲路径,修改歌手图片路径. 首先先看前台: 前台核心类: SqlHelper类(负责连接数据库): //连接字符串 pu