资源描述
课程实验报告
学院 计算机学院
专业 网络工程
班级 16网工3班
题目 音乐播放器
教师 程庆
学生 代应豪
目录
第一章 绪论 4
1.1 简介 4
1.2 开发背景 4
1.3 开发环境 4
第二章 系统设计 5
2.1 需求分析 5
2.1.1 功能需求 5
2.1.2 系统结构和流程图 6
2.2. 界面需求 6
2.3 系统性能及可靠性需求 7
2.3.1 系统性能 7
2.3.2 可靠性 7
第三章 流程图 8
3.1 音乐播放 8
3.2 上一首 8
3.3 列表操作 9
3.4 播放进度控制 9
第四章 测试用例 10
4.1 主界面测试 10
4.5 简要概述优缺点及改进 13
第五章 心得体会 14
附录I 程序代码 16
基于Visual C++6.0实现 简单的音乐播放器
摘要:随着社会的发展,全国人们的生活水平得到了很大的提高,从追求物质生活提升到了精神享受。当我们完成繁重的工作后,我们需要尽情的释放来自各方面的压力。有研究证实,音乐有释放压力、缓解紧张情绪的作用。本系统以多媒体娱乐为主线,采用Visual C++为开发工具。使用成熟的MFC作为开发框架,具有开发速度快、便于管理等诸多优点。实现了添加音乐、删除音乐、音乐的播放顺序、显示音乐歌词、等一系列常用功能。当然程序在功能上还有很多的不足和缺陷。
第一章 绪论
1.1 简介
音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放器等。它们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。当然,符合用户的使用习惯才是软件行业的立足之本。我们这款音乐播放器的设计思想来自我们使用的许多的音乐播放器操作以及我们自己对于软件功能开发的理解。也许,从某种意义上来说我们自己的角度并不能代表最终用户的意见。
1.2 开发背景
随着社会的发展,人们的生活水平得到了飞速发展。从追求物质生活提升到了精神享受层面,当我们完成繁重的工作后,我们需要尽情的释放来自各方面的压力。有研究证实,音乐有释放压力、缓解紧张情绪的作用。同时,现在网络中也存在大量的音乐播放器软件,有的软件是收费的,但是大多数的软件却是打着免费的旗帜,让广告充满了整个软件。这款音乐播放器绿色小巧,可以直接运行。
1.3 开发环境
硬件:Intel 酷睿 i3,8G内存,500G硬盘
系统:Microsoft Windows 7 Professional
软件:Microsoft Visual C++ 6.0
第二章 系统设计
2.1 需求分析
2.1.1 功能需求
根据项目的目标,我们可获得项目系统的基本需求,一下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们从播放器的基本控制需要开始描述
图 2-1 系统功能模块
表 2-1 播放器基本控制 功能需求
用例名称
参与者
目标
前置条件
基本事件流
播放
用户
使得用户可以播放在播放列表中选中的歌曲
播放器运行
点击“播放”按钮;
播放该歌曲
暂停
用户
使得用户可以暂停正在播放的歌曲
歌曲正在播放且未停止
点击“暂停”按钮;
暂停播放该歌曲
停止
用户
使得用户可以停止播放正在播放的歌曲
歌曲正在播放或暂停
点击“停止”按钮;
停止该歌曲
上一首
用户
使得用户可以听上一首歌曲
歌曲正在播放或暂停
点击“上一首”按钮;
播放上一首歌曲
播放列表
用户
使得用户可以选择播放类型
程序运行
点击“播放列表”;
转到该播放列表
2.1.2 系统结构和流程图
图2-2 系统流程图
2.2. 界面需求
播放器界面要求布局合理,颜色舒适,控制按钮友好,为了减少开发工程量,可以借鉴现在流行的播放器的皮肤作为播放器的界面目标需求。主题界面分为三个部分:主界面、播放列表、显示歌词面板。
图 2-3 系统界面需求
2.3 系统性能及可靠性需求
2.3.1 系统性能
1、当要求播放歌曲时,程序的响应时间不得超过0.5秒
2、当要求暂停歌曲时,程序的响应时间不得超过0.5秒
3、当要求停止歌曲时,程序的响应时间不得超过1.0秒
4、当要求切换歌曲时,程序的响应时间不得超过1.5秒
2.3.2 可靠性
系统能持续运行,不影响其他应用程序的使用,不会占用过多的内存,不造成计算机死机等影响用户体验的问题。
第三章 流程图
3.1 音乐播放
图 3-1 音乐播放流程图
3.2 上一首
图 3-2 上一首音乐流程图
3.3 列表操作
图 3-3 列表操作流程图
3.4 播放进度控制
图3-4播放进度控制流程图
第四章 测试用例
4.1 主界面测试
4.5 简要概述优缺点及改进
优点:
使用界面人性化:
播放 暂停 继续 快进 回放 音量 属性 停止 一应俱全
使用方便
缺点:
没有UI设计 只是简单的执行程序
第五章 心得体会
Windows 课程设计实验已经完成了,在这次的课程设计中不仅检验了我们本学期所学习的知识,也培养了我们如何自己动手开发一款难度适中的Windows应用程序,如何去做一件事情,又如何从头到尾完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世,和同学老师交流遇到的问题以及分析自己的心得体会,使得自己少走了很多弯路。课程设计是我们专业课程知识综合应用的实践训练,也是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.通过这次模具设计,我们在多方面都有所提高。通过这次模具设计,综合运用本专业所学课程的理论和生产实际知识进行一次冷冲压模具设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了课程所学的内容,了解了模具的基本结构,提高了计算能力全局掌控能力,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。在此感谢我们的老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于我们还是学生,水平有限在系统的设计上可能存在考虑不周的地方,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,我们将万分感谢。
同时,在这里还要感谢广大互联网的网友,我们系统的设计和实现都遇到过很多问题。其中,大部分都是通过查询互联网而解决的。在此,感谢互联网的网友和你们的博客文章。
参考文献
1、MSDN for Visual Studio 6.0
2、设计模式——可复用面向对象软件的基础,Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides著,李英军/马晓星/蔡敏/刘建中 等译,机械工业出版社
3、深入浅出MFC(第2版),侯俊杰著,华中科技大学出版社
4、Microsoft Visual C++.NET 技术内幕(第6版),George Shepherd/David Kruglinski著,潘爱民译,清华大学出版社
5、C++编程思想,Bruce Eckel著,刘宗田/邢大红/孙慧杰 等译,机械工业出版社
6、21天学通C,Jesse Liberty著,康博创作室译,人民邮电出版社
7、C++标准程序库,Nicolai M.Josuttis著,侯捷/孟岩 译,华中科技大学出版社
8、Windows程序设计,Charles Petzold著,北京博彦科技发展有限公司译,北京大学出版社附录
附录I 程序代码
#include<stdio.h>
#include <afx.h>//CString的头文件
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
int main()
{
MCIERROR re;
FILE *fp;
char slen[256]={0},title[30]={0},artist[30]={0},test,song[30],st;
CString fe;
long here,llen;
int m,n,v,s;
here=clock();//时间函数必须放在循环外面
printf("请输入歌名: ");
fflush(stdin);
gets(song);//输入曲目名称
fe.Format("open %s alias beatit",song);
re=mciSendString(TEXT(fe.GetBuffer(fe.GetLength())),0,0,0);//TEXT是宏变量,alias不能少
printf("\n");
printf("请选择一个命令对应的数字:\n1.播放 2.暂停 3.继续 4.快进 5.回放 6.音量 7.属性 8.停止\n");
while(scanf("%d",&n)!=EOF)
{
if(re!=0)
{
n=7;
}
if(n==1)
{
mciSendString(TEXT("play beatit"),0,0,0);
printf("successful\n\n");
}
else if(n==4)//快进
{
here=here+10000;
fe.Format("seek beatit to %ld",here);
mciSendString(TEXT(fe.GetBuffer(fe.GetLength())),0,0,0);//to后面的long数值必须真的是一个long数值,不能用变量名
mciSendString(TEXT("play beatit"),0,0,0);//seek后还需要继续用open才能播放音乐
printf("successful\n\n");
//增加一个播放状态函数进行测量
}
else if(n==5)//快退
{
here=here-10000;
if(here<0)//快退到开始状态
here=0;
fe.Format("seek beatit to %ld",here);
mciSendString(TEXT(fe.GetBuffer(fe.GetLength())),0,0,0);
mciSendString(TEXT("play beatit"),0,0,0);
printf("successful\n\n");
}
else if(n==8)//停止
{
mciSendString(TEXT("close beatit"),0,0,0);
printf("successful\n\n");
exit(0);
}
else if(n==6)//音量
{
printf("请输入新的音量大小,范围:1 to 1000\n");
scanf("%d",&v);
if(v<0||v>1000)
printf("failed\n\n");
else
{
fe.Format("setaudio beatit volume to %d",v);
mciSendString(TEXT(fe.GetBuffer(fe.GetLength())),0,0,0);
mciSendString(TEXT("play beatit"),0,0,0);
printf("successful\n\n");
}
}
else if(n==2)//暂停
{
mciSendString(TEXT("pause beatit"),0,0,0);
printf("successful\n\n");
}
else if(n==3)//播放
{
mciSendString(TEXT("resume beatit"),0,0,0);
printf("successful\n\n");
}
else if(n==7)//属性
{
if(re!=0)
printf("信息:\n歌曲打开失败\n\n");
else
{
mciSendString(TEXT("status beatit length"),slen,255,0);
llen=strtol(slen,0,0)/1000;//测量出媒体长度,单位为秒,需要转化
m=llen/60;//分
s=llen%60;//秒
fp=fopen(song,"r");
if(fp==NULL)
{
printf("failed\n\n");
exit(0);
}
fseek(fp,-125L,2);//讲指针移动到距离歌曲末尾125个字节处
fgets(title,30,fp);
while((test=fgetc(fp))!='\0');//指针跳跃
fflush(stdin);
fgets(artist,30,fp);
printf("信息:\n");
printf("歌名: %s\n",title);
printf("歌手: %s\n",artist);
if(m>=10&&s>=10)
printf("时长: %d:%d\n",m,s);
else if(m<10&&s>=10)
printf("时长: 0%d:%d\n",m,s);
else if(m>=10&&s<10)
printf("时长: %d:0%d\n",m,s);
else
printf("时长: 0%d:0%d\n",m,s);
printf("\n");
}
}
else
continue;
}
Sleep(10*60*1000);
return 0;
}
展开阅读全文