梦之翼团队项目

一 设计思路

整体概括:

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

(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:嘿嘿,小自恋一下咯,这个软件还有需要改进的地方,不过,我们团队还会继续加油的!)哈哈,以后我们就可以用自己做的播放为听歌啦!

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

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

二:软件整体功能的架构

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

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

五:知识水平层次不同

...........

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

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

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

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

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

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

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

........

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

时间: 2024-10-04 09:32:11

梦之翼团队项目的相关文章

团队项目及项目介绍

团队名称:梦飞翔 团队简介:我们是由四个男生组成的团队,在开发的过程中,我们会团结合作,相互交流学习,让梦想飞翔. 团队成员: 王钢:逻辑思维好,精通算法,擅长java.博客地址:http://www.cnblogs.com/java-meng/ 孟祥通:善于学习,对细节精益求精,团队合作能力.博客地址:http://www.cnblogs.com/wanggang-java/ 杨程鑫:阳光开朗,考虑问题周全,能及时找出编程漏洞.博客地址:http://www.cnblogs.com/shens

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下-------------答题者:徐潇瑞

10.2: 现代软件工程这门课已经上了好几年了,以前有很多学生做过团队项目(说不定包括本校的学生),请你们找一个以前的团队采访一下 - 当时的项目有多少用户,给用户多少价值? 现在还有人用吗? - 这个项目能否给我们团队继续开发,源代码/文档还有么? - 项目开发有什么经验和教训 - 对学好软件工程有什么建议 写成一个博客   #团队博客作业2 根据老师的作业要求,我们采访了以前本科认识的一个同学,他在读本科的时候出去实习,参与了一些项目.他参与了手机外卖app的开发,根据他的回答,当时用户有1

团队项目利用Msbuild自定义Task实现增量发布

最近一直在做自动部署工具,主要利用到了Msbuild的自定义Task,通过Task我们可以自定义编译.部署过程减少人工直接干预.Msbuild的详细用法,可以去园子里搜一下,有很多的基础教程,这里就不赘述了,还是集中说一下增量发布的问题. 增量主要涉及到三部分内容,程序.配置和静态文件(例如CSS.JS等),程序的增量比较简单,通过版本对比或者TFS的修改记录便可以查询出被修改过的程序集.配置文件增量大致有两种,全增量和部分增量.全增量也很简单,直接把修改过的配置文件复制到发布包就OK了:部分增

团队项目开发特点以及NABCD分析总结

团队项目的特点:开发的这款软件是从我们的日常生活中得到的启发,现在正是大学阶段,刚刚开始管理自己每个月的生活费,并且在大学中每个月的生活费会有很多去处,然而记录在本子上又容易丢,而且不好分类,所以我们想开发这个软件,实现学生的网上记录,并且可以根据输入将这些分类,进行每月的总结. N:解决了大学生生活费管理不够清楚,分类不够细化的问题.生活费不知去向的问题 A:有一定的编程基础,并且可以通过查询资料将代码用安卓开发工具包装成一个安卓版的手机APP B:可以将用户记账难的问题解决,使记账变得不再复

团队项目(一)

团队项目我们组是要做一款局域网聊天工具,是可以允许用户在局域网中创建聊天室并聊天.对于在同一局域网中有聊天.群聊需求的用户十分有帮助,面向高校.企业用户.无需连接因特网,在局域网便可以开启群聊. 具体需求分析如下: 以下数字代表功能需求优先级,最大为10. 业务需求: 私人即时文字交流(10): 一对一的文字交流,一个客户端发送方与一个接收方,发出字符串后接收. 多人即时文字交流(9): 一个客户端发送方与多个接收方,发出字符串(长度<50)后接收. 图形用户界面(10): 提供简洁易懂的图形用

团队项目个人总结

团队项目个人总结 基本内容 工大助手(桌面版) 实现登陆.查成绩.计算加权平均分等功能 团队人员 13070002 张雨帆 13070003 张帆 13070004 崔巍 13070006 王奈 13070045 汪天米 13070046 孙宇辰 总结 经过此次的软件工程团队项目,我对团队软件开发有了更深入的认识.一个团队,想要高效的运转需要组长良好的组织和组内每个人的通力合作,统筹规划十分重要.我们组一开始就遇到了这样的问题.没有良好的组织,大家不知道自己应该做哪些方面的内容,也不知道其他成员

团队项目失败总结

很遗憾 ,这次团队项目失败了.预定的是做一个简易四则运算器,以计算为辅,出题为主.出题包含两部分,小学部分和初中部分.现在只完成了小学部分,计算器部分也完成了.我们团队的基本配置是:一位主编(我).两位副编,一位负责计算器模块另一位负责UI.一人专司文档.一人做需求分析.一人做系统测试.分析此次项目失败,原因很多,主要有二:(1)所选编程语言不熟——Java,此前从未接触过Java,因为做项目的时候要考虑UI,用C语言就不合适了,C++用的也不熟,就选了Java.只能一边学一边用.我选的参考书是

团队项目冲刺第九天

团队项目冲刺第九天个人工作总结如下: 1.昨天干了什么? 昨天将部分整合的界面进行了修改完善,并且连接数据库测试了登录注册的功能. 2.今天准备干什么? 今天准备将后续完成的界面和功能继续从整体的软件中进行添加完善,如各个模块中的功能界面. 3.遇到什么困难? 一些界面的跳转遇到问题,前一时间段的界面整合中,界面的跳转都是用intent对象连接两个有逻辑跳转的界面,但是后续完成的界面用了fragment,activity里面可以包括多个fragment,使用intent对象实现跳转所要求的形参必

团队项目冲刺第七天

团队项目冲刺第七天个人工作总结如下: 1.昨天干了什么? 昨天对团队成员做完的部分界面进行了整合,同时对一些界面进行了优化. 2.今天准备干什么? 今天继续整合界面,将各个界面的主题或者布局进行统一,另外,今天准备做一个欢迎的界面,即一打开app有一个标志性的界面. 3.遇到什么困难? 不知道如何设置全屏界面,改变了theme,课时仍然得不到想要的界面效果,目前还没有解决:另外,对于安卓的MVC模式有点模糊,对于活动的使用不熟悉,浪费了很多的时间.