梦之翼团队项目(音乐播放器)

一 设计思路

整体概括:

  当我们得到这个项目时,也感觉到了迷茫,不过经过查阅资料,我们还是克服了,我们想做一个类似于酷狗音乐的那样,但是只是能力有限,做到了现在这个程度,我们用的是程序自身的一个插件,这个插件有许多功能都已经有了,(当时我们也想过使用类库,但是能力可能太差了,不过,我们会尝试的),既然插件自身有许多功能,那么我们就对它没有的功能进行了进一步的开发!

(1)软件界面介绍:

上面有:播放,暂停,上一曲,下一曲,音量,添加歌曲及添加歌曲文件夹,单曲循环,随机播放,顺序播放,清空列表,退出程序,添加皮肤等功能

(2) 添加歌曲或者添加歌曲文件夹

当播放列表中为空时,进行添加歌曲,有两种方式,一种是歌曲一首或者多首的交叉选择,一种是整个文件夹的选择

上图:

(3) 添加完歌曲就可以进行相关操作了,自带插件的功能不做过多分析了,接下来就是播放模式的功能分析,播放模式有单曲循环,随机播放,顺序播放等,每次选择之前必须先暂停歌曲,在进行相关的选择,图片说明:

(4) 清空列表和退出程序,当用户不想听这些歌曲了,可以清空列表,进行重新的选择,也可以直接退出程序,

(5)接下来就是一个小功能了,添加皮肤,当用户想更换皮肤时,可以单击右上角的心形图标,即可

二 代码编写

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;

namespace MusicPlayer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string[] musicPath = new string[1000];  //用于保存歌曲目录
        int musicCount = 0;
        private void Form1_Load(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.BeginInit();   //播放器相关属性的设置
            axWindowsMediaPlayer1.settings.autoStart = true;
            axWindowsMediaPlayer1.settings.setMode("shuffle", false);
            axWindowsMediaPlayer1.settings.enableErrorDialogs = true;
            axWindowsMediaPlayer1.settings.balance = 0;
            axWindowsMediaPlayer1.settings.mute = false;
            axWindowsMediaPlayer1.settings.volume = 100;
            if (File.Exists("listbox.txt"))  //如果存在播放列表,那么加载播放列表
            {
                StreamReader reader = new StreamReader("listbox.txt");
                try
                {
                    while (reader.Peek() != -1)
                    {
                        string filepath = reader.ReadLine();
                        if (File.Exists(filepath))
                        {
                            musicPath[musicCount++] = filepath;
                            string filename = Path.GetFileName(filepath);
                            listBox1.Items.Add(filename);  //listbox用来显示歌曲名
                            axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(filepath));
                        }
                    }
                    listBox1.SelectedIndex = 0;
                }
                catch (Exception)
                {
                    listBox1.SelectedIndex = -1;
                    MessageBox.Show("加载播放列表失败或者列表为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    reader.Close();
                }
            }
        }

        private void 添加本地歌曲ToolStripMenuItem_Click(object sender, EventArgs e) //添加本地歌曲的方法
        {

           
            aa.FileName = "";
            aa.Multiselect = true;


            DialogResult dr = aa.ShowDialog();
            if (dr == DialogResult.OK)
            {

                axWindowsMediaPlayer1.URL = aa.FileName;
                string[] filepath = aa.FileNames;
                foreach (string filename in filepath)
                {
                    if (Path.GetExtension(filename) == ".mp3")
                    {
                        string filenam = Path.GetFileName(filename);
                        listBox1.Items.Add(filenam);
                        musicPath[musicCount++] = filename;
                        axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(filename));
                    }
                }
            }

            
        }
       

        private void 添加本地歌曲文件夹ToolStripMenuItem_Click(object sender, EventArgs e)//添加本地歌曲文件夹的方法
        {

            DialogResult dr = folderBrowserDialog1.ShowDialog();
            if (dr == DialogResult.OK)
            {
                string[] filepath = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
                foreach (string s in filepath)
                {
                    if (Path.GetExtension(s) == ".mp3")
                    {
                        string filename = Path.GetFileName(s);
                        listBox1.Items.Add(filename);
                        musicPath[musicCount++] = s;
                        axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(s));
                    }
                }
            }
           
        }
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e) //双击列表歌曲播放的方法
        {
            int j = listBox1.SelectedIndex;
            if (listBox1.Items.Count > 0 && listBox1.SelectedIndex >= 0)
            {
                axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(listBox1.SelectedIndex));
            }
        }
       
        private void button2_Click(object sender, EventArgs e) //添加背景图片的方法
        {
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                pictureBox1.ImageLocation = openFileDialog1.FileName;
            }
        }

        private void 顺序播放ToolStripMenuItem_Click(object sender, EventArgs e) //顺序播放的方法
        {
            axWindowsMediaPlayer1.settings.playCount = 1;
            axWindowsMediaPlayer1.currentPlaylist.clear();
            for (int j = 0; j < musicCount; j++)
            {
                if (musicPath[j] != string.Empty)
                {
                    axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[j]));
                }
            }
            axWindowsMediaPlayer1.settings.setMode("shuffle", false);
            axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
        }

        private void 单曲循环ToolStripMenuItem_Click(object sender, EventArgs e) //单曲循环的方法
        {
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                axWindowsMediaPlayer1.currentPlaylist.clear();
                if (listBox1.SelectedIndex != -1 && listBox1.Items.Count > 0)
                {
                    int k = listBox1.SelectedIndex;
                    for (int i = 0; i < 1000; i++)
                    {
                       axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[k]));
                    }
                }
                axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
            }

        private void 随机播放ToolStripMenuItem_Click(object sender, EventArgs e) //随机播放的方法
        {
                axWindowsMediaPlayer1.settings.playCount = 1;
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                axWindowsMediaPlayer1.currentPlaylist.clear();
                Random rd = new Random(DateTime.Now.Millisecond);
                for (int i = 0; i < 1000; i++)
                {
                    int j = rd.Next(0, musicCount);

                    if (musicPath[j] != string.Empty)
                    {
                        axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[j]));
                    }
                }
                axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
        }

        private void 清空列表ToolStripMenuItem_Click(object sender, EventArgs e) //清空播放列表的方法
        {
                axWindowsMediaPlayer1.Ctlcontrols.stop();  //先停止播放器
                listBox1.Items.Clear();  //清空listbox
                axWindowsMediaPlayer1.currentPlaylist.clear();  //清空播放列表
                for (int j = 0; j < musicCount; j++)
                {
                    musicPath[j] = "";
                }
        }

        private void 退出程序ToolStripMenuItem_Click(object sender, EventArgs e) //退出程序的方法
        {
                axWindowsMediaPlayer1.Ctlcontrols.stop();
                axWindowsMediaPlayer1.close();
                StreamWriter writer = new StreamWriter("listbox.txt", false, Encoding.Unicode);  //保存播放列表
                for (int i = 0; i <= musicCount - 1; i++)
                {
                    if (musicPath[i] != string.Empty)
                    {
                        writer.WriteLine(musicPath[i]);
                    }
                }
                writer.Close();
                Application.Exit(); 
        }
       }
    }

三 软件测试

 软件测试我们遇到许多困难,但是经过成员的努力,也克服了许多,下面直接上图

四 PSP耗时分析

五 团队成员任务分配

六 总结

这是我们第一进行团队项目,整个过程感觉棒棒哒!经过每位成员的不懈努力,我们终于把这个项目拿下来咯,做出来了一个还算完美的播放器(ps:嘿嘿,小自恋一下咯,这个软件还有需要改进的地方,不过,我们团队还会继续加油的!)哈哈,以后我们就可以用自己做的播放为听歌啦!

每一个成功的背后都有无数的艰辛与困难,我们团队中间也遇到了许多问题,例如:

 一:团队整体的运行与成员的相互磨合

 二:软件整体功能的架构

 三:相关控件知识的查询(因为有些控件是第一次接触)

 四:软件测试知识缺乏,不懂测试

 五:知识水平层次不同

 ...........

不过,这些困难经过大家的日夜奋战,我们把其中的大部分都攻破了,现在我真的体会到了,每一个软件的成功发布,都有无数个难以忘记的艰辛所构成,都有一个坚强且伟大的团队所作出的不懈努力!

接下来,我们就对这个软件团队做一个小总结:

一:任何一个团队里面都存在分歧,我们所要做的就是认真商议,拿出优秀的解决方案,积极解决一切问题

二:团队成员的知识能力和编码能力不同,我们一定要把团队结构最优化,每个人做适合自己的任务,并且相互协作,共同完成任务

三:针对知识能力不同,我们每个成员都要认真学习课本知识,打好基础

四:成员之间一定要培养默契度,并且都要有一定的时间观念和执行力,只有这样,才能保证一个软件保质保量保时完成。

五:这样的团队任务很有实际意义,可以增加同学之间的相互交流与团队协作能力,挺好的,么么哒!

........

以上就是我们对这个软件团队项目所作出的总结,希望老师阅读后,批评指正,谢谢老师!

原文地址:https://www.cnblogs.com/good123/p/4944786.html