一 设计思路

整体概括:

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

(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();  //清空listboxaxWindowsMediaPlayer1.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

梦之翼团队项目(音乐播放器)相关推荐

  1. 微信小程序练手项目-音乐播放器

    微信小程序练手项目-音乐播放器 该项目只适合练手,大佬请绕道 项目展示图: 项目介绍 微信小程序音乐播放器 页面: 音乐推荐.播放器.播放列表 功能: 播放.暂停.上一首.下一首.跳转播放列表.实时进 ...

  2. Java web项目——音乐播放器

    Java web项目--音乐播放器 1,需求分析 ①登录并查看自己的音乐列表 ②从本地上传音乐 ③删除某个音乐 ④删除选中的音乐 ⑤查询音乐(支持模糊查询) ⑥添加音乐到喜欢列表且可进行移除 ⑦可在喜 ...

  3. Linux项目:音乐播放器

    文章目录 1.项目介绍 2.前端代码 1.httplib快速搭建一个http服务器 2.B/S双方的数据交互选择JSON数据格式,http请求和响应的正文中采用jsoncpp开源库 3.前段的js代码 ...

  4. 个人项目——音乐播放器(一)

    1 功能需求及技术可行性分析 1.1编写目的   现今社会生活紧张,而欣赏音乐史其中最好的舒缓压力的方式之一,音乐播放类的软 件数不胜数,为什么我还要再写一个播放器出来呢?因为现有的音乐播放器功能实在 ...

  5. WEB项目-音乐播放器

    音乐播放器 需求分析 数据库设计 实体类 Dao层 Servlet层 补充 需求分析 1.注册登陆 使用post请求,登陆路径为/login,传输的数据为username,password,这里就使用 ...

  6. 梦聆轻量化音乐播放器源码

    源码介绍: 梦聆音乐是一款轻量化的播放器,可以播放多种格式的本地音乐文件,多歌单设计,同时也支持解析包括网易云 qq音乐 在内的多个平台的在线歌单. 源码截图: 下载地址: http://www.by ...

  7. Vue项目 音乐播放器 学习笔记 列表数据 Ⅱ

    Home 组件 1. 创建新 Home 2. 创建 Home 相关组件 3. 编写组件代码 Home 组件 1. 创建新 Home 在 views 文件夹中新建 Home 文件夹用来存放主页的视图,将 ...

  8. 个人项目(一)-- 音乐播放器

    一.需求分析 现在很多音乐播放器并不能找到所有的音乐,所以往往需要下载多个播放器才能完善想听的歌单.如果有一个公共的音乐服务器,可以有不同的人分享自己喜欢的音乐,通过渐渐丰富音乐库,就可以让大家只在网 ...

  9. C语言实现音乐播放器 visual studio 2019

    这是一款基于easyx图形库和C/C++编写的音乐播放器,参考了网上许多大佬友情分享的项目设计,结合自己的理解加以设计和制作,给有同样需求的朋友一点参考.文中放上了个人感觉很有帮助的文章,建议可以参考 ...

最新文章

  1. 1.8 深入解析new运算符
  2. Eclipse 安装 SVN 插件的两种方法
  3. c++预处理命令#pragma 用法
  4. php七牛云储存图片,wordpress使用七牛云存储图片 | 厘米天空
  5. mysql树状查询优化_解析SQL中树形分层数据的查询优化
  6. Shell命令-文件及内容处理之grep(egrep)、join
  7. 【组件】大数据框架安装功能来划分
  8. 分享一个通过项目管理师证书成功办理北京户口的励志经验
  9. 国内半导体发展现状——部分上市公司分类名单
  10. 3624用计算机怎么换算,pa与mpa的换算(压力单位pa与mpa)
  11. win10系统如何启动sql服务器,win10系统打开SQL Server数据库服务的方法
  12. android工程师专业技能,android开发工程师简历中的专业技能怎么写
  13. 「技术选型」Solr与ES难以抉择?且看第一回
  14. 论文阅读 视频生成(vid2vid) || Few-shot Video-to-Video Synthesis
  15. 微信小程序保存图片到手机相册(封装全局使用)
  16. 效果 - 收藏集 - 掘金
  17. 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析
  18. 【JS】 # js获取当前日期,比较日期大小
  19. 火狐浏览器自动加滚动条,如何去除?
  20. 一句代码让电脑定时重启,关机,取消关机

热门文章

  1. fd_set 的用法
  2. 拍乐云远程视频银行解决方案,为金融数字化注入“新活力”
  3. 运行在树莓派上的android 模拟器
  4. go get下载第三方包问题的解决
  5. 长沙理工大学c语言程序设计作业答案,长沙理工大学2014年上期期末c语言编程题库...
  6. c type 笔记本 芯片方案_请问笔记本的type-c接口有什么作用?
  7. 机器人学之动力学笔记【10】—— 双旋转自由度机械臂
  8. Auto CAD:CAD三维建模设计之渲染工具(光源、阳光和位置、材质、渲染)之详细攻略
  9. 2022-1024节日快乐,里程碑纪念
  10. 如何禁止电脑里软件开机自动启动?