精品DVD仿真程序设计面向对象程序毕业论文说明书.docx
《精品DVD仿真程序设计面向对象程序毕业论文说明书.docx》由会员分享,可在线阅读,更多相关《精品DVD仿真程序设计面向对象程序毕业论文说明书.docx(34页珍藏版)》请在冰豆网上搜索。
![精品DVD仿真程序设计面向对象程序毕业论文说明书.docx](https://file1.bdocx.com/fileroot1/2023-4/24/3be30cb9-c4d0-4b3a-8e1d-8d3ee52bbb5d/3be30cb9-c4d0-4b3a-8e1d-8d3ee52bbb5d1.gif)
精品DVD仿真程序设计面向对象程序毕业论文说明书
河南科技大学
课程设计说明书
课程名称面向对象程序课程设计
题目DVD仿真程序设计
院系电子信息工程学院
课程设计任务书
课程设计题目
DVD仿真程序设计
姓名
学号
专业班级
计科101
组别
组长
同组成员
指导
教师
课程设计目的
通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用C++语言进行简单程序的开发,将理论与实际相结合,完成一个小型程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力。
课程设计环境
硬件:
装有Windows操作系统的计算机
软件:
VisualC++6.0
课程设计任务和要求
任务要求:
1.根据实际DVD的运行状况进行需求分析;
2.抽象DVD运行算法;
3.设计DVD运行程序及人机交互界面;
4.模块功能满足要求、界面友好、具有一定的健壮性;
5.撰写出符合要求的课程设计报告。
参考
文献
1.郑秋生、吴庆涛,《CC++程序设计》,北京:
电子工业出版社
2.谭浩强 《C++程序设计》,北京:
清华大学出版社
时间进度安排
序号
起止日期
工作内容
1
3.4-3.5
学生熟悉题目背景,查阅资料
2
3.6-3.13
学生进行功能模块设计、编码、测试
3
3.14-3.15
程序验收
4
3.16
根据设计内容形成课程设计文档,撰写课程设计报告
5
3.17
上交课程设计报告
任课教师:
刘中华、张晓玲、李艳霞时间:
2013.3.3
课程设计报告文档
题目:
DVD仿真程序设计
一.引言
1.编写目的:
实现模拟DVD的功能需要包含①数据显示区域(相当于显示类的产品),②DVD模拟区域,实现模拟DVD的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。
此外模拟了一个接口按钮,用于DVD向显示设备的数据输入。
还模拟了一个DVD的电源开关。
至此,实现此次DVD仿真模拟的设计目的。
2.定义:
MFC(MicrosoftFoundationClasses):
是一个微软公司提供的类库(classlibraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类
3.参考资料:
[1]郑秋生.cc++程序设计教程—面向对象分册.北京:
电子工业出版社,2012
[2]邱勇、肖春宝、白秀玲.《可视化程序设计》.北京:
清华大学出版社
[3]黄维通.visualc++面向对象与可视化程序设计.北京:
清华大学出版社
二.任务的描述
1.目标:
通过本课程设计,使学生巩固面向对象程序设计的基本概念、原理和技术,学会使用C++语言进行简单程序的开发,将理论与实际相结合,完成一个小型程序的设计与实现,并在此基础上强化学生的实践意识,提高其实际动手能力和创新能力。
2.功能描述:
DVD的仿真模拟分为①数据显示区域(相当于显示类的产品),②DVD模拟区域,模拟DVD的快进,快退,播放,暂停,菜单,上一首,下一首,音量的加,音量减的功能。
此外模拟了一个接口按钮,用于DVD向显示设备的数据输入。
模拟了一个DVD的电源开关。
③光碟数据的存储区域模拟。
点击按钮可以打开数据中心仓库,
区域1:
可以点击此按钮打开光碟数据存储仓库,打开后的界面如下图所示。
区域2:
点击鼠标的右键可以打开右键菜单:
{1.添加文件到列表2.删除列表中文件}
区域3:
实现DVD的模拟功能:
点击快进按钮实现快进功能;
点击快退按钮实现快退功能;
点击播放按钮实现播放功能;
点击暂停按钮实现暂停功能;
点击+按钮实现音量的加功能;
点击--按钮实现音量减的功能;
点击菜单按钮可以实现DVD光碟返回到菜单的功能;
模拟了一个接口按钮,相当于DVD像显示接口插入的一条数据线,用于DVD向显示设备的数据输入;
电源开关实现DVD机关闭的功能。
区域1:
可以点击此按钮打开光碟数据然后直接打开播放器小窗口播放,播放器的小窗口如下图。
鼠标右键点击此按钮的可以弹出右键菜单,右键菜单响应的事件功能有,{播放和查看文件的大小属性}。
区域2:
点击鼠标的右键可以打开右键菜单:
{1.添加文件到列表2.删除列表中文件}
区域3:
显示当前播放文件的路径
区域4:
点击可以打开文件选择对话框,实现让用户选择非DVD格式的文件。
这是在DVD基础上对于播放的扩展。
功能的增强。
区域5:
点击此按钮可以查看播放器支持的文件格式。
区域1:
可以点击对应的菜单实现对应的音影的播放功能。
区域2:
点击全屏按钮实现全屏播放
上图播放DVD时候的小窗口播放界面。
上面为DVD文件的播放菜单,DVD文件是用转换工具转换的DVD整个光碟,由于转换的速度较慢,且转换后文件较大,一个大约6G,一个大约2G,转换时间周期较长,用晚上转换的。
转换后的DVD文件没法加入电子档。
总计8G。
在此说明一下。
3.性能描述
(1)数据精确度:
播放的时间在毫秒级
(2)时间特性:
响应时间,更新处理时间,运行时间等都较短。
4.运行环境:
硬件:
Windows7操作系统平台
软件:
VisualC++6.0
5.条件与限制:
条件是由于播放DVD的文件解码较苛刻,系统必须安装有DVD格式的解码器。
三.任务设计
1.类的划分:
(1)类1:
classCAaDlg:
publicCDialog
{
public:
CAaDlg(CWnd*pParent=NULL);standardconstructor
enum{IDD=IDD_AA_DIALOG};
CListBoxm_list;
CButtonm_Open;
CButtonm_Play;
CButtonm_Up;
CButtonm_Stop;
CButtonm_Down1;
intt;
boolt1;
CButtonm_Slow;
CButtonm_VolSmall;
CButtonm_VolBig;
CButtonm_Menu;
CButtonm_JieKou;
CButtonm_Forhead;
CButtonm_Close;
CWMPPlayer4m_WMPlayer;
CWMPControlsm_Control;
CWMPDVDm_wmpDVD;
CWMPSettingsm_set;
CWMPPlaylistm_playlist;
CWMPMediam_media;
CWMPPlayer4m_WMp;
CStringstr1;
Dlg1dlg1;
intk;
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
protected:
HICONm_;
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnBUTTOClose();
afx_msgvoidOnBUTTONForhead();
afx_msgvoidOnBUTTOSlow();
afx_msgvoidOnBUTTONVolBig();
afx_msgvoidOnBUTTONVolSmall();
afx_msgvoidOnBUTTONJIeKou();
afx_msgvoidOnBUTTONDown();
afx_msgvoidOnBUTTOPlay();
afx_msgvoidOnBUTTONStop();
afx_msgvoidOnButtonup();
afx_msgvoidOnBUTTONMenu();
afx_msgvoidOnOpen();
afx_msgvoidOnDblclkList1();
DECLARE_MESSAGE_MAP()
};
CAaDlg类实现了模拟DVD的主界面的功能实现。
成员函数OnBUTTOClose()实现DVD电源的关闭功能,成员函数OnBUTTOPlay()实现播放功能;成员函数OnBUTTONStop()实现音视频的暂停功能;成员函数OnBUTTONForhead()实现快进功能;成员函数OnBUTTOSlow()实现快退功能;成员函数OnBUTTONVolBig()实现音量增加功能;成员函数OnBUTTONVolSmall()实现音量减小功能等;
(2)类2:
classDlg1:
publicCDialog
{
public:
Dlg1(CWnd*pParent=NULL);
enum{IDD=IDD_DIALOG1};
CListBoxm_list;
CButtonm_btn5;
CButtonm_btn4;
CButtonm_btn3;
CButtonm_btn2;
CButtonm_btn1;
SmallPlayersmallplayer;
intp;
CStringm_edit;
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
protected:
afx_msgvoidOnButton1();
virtualBOOLOnInitDialog();
afx_msgvoidOnButton3();
afx_msgvoidOnButton2();
afx_msgvoidOnButton5();
afx_msgvoidOnButton4();
afx_msgvoidOnSelchangeList1();
afx_msgvoidOnDblclkList1();
DECLARE_MESSAGE_MAP()
};
类Dlg1实现把DVD光碟存放区域的显示,光碟在此区域存放。
(3)类3:
classSmallPlayer:
publicCDialog
{
public:
SmallPlayer(CWnd*pParent=NULL);standardconstructor
enum{IDD=IDD_DIALOG2};
CButtonm_btn1;
CButtonm_btn2;
CWMPPlayer4m_ocx1;
CWMPControlsm_control;
CWMPDVDm_dvd;
CWMPPlaylistm_playlist;
CWMPSettingsm_set;
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
protected:
afx_msgvoidOnButton1();
afx_msgvoidOnButton2();
virtualBOOLOnInitDialog();
DECLARE_MESSAGE_MAP()
};
类SmallPlayer实现把DVD光碟的小窗口播放。
2.类的接口设计:
(1)类1:
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
(2)类2:
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
protected:
afx_msgvoidOnButton1();
virtualBOOLOnInitDialog();
afx_msgvoidOnButton3();
afx_msgvoidOnButton2();
afx_msgvoidOnButton5();
afx_msgvoidOnButton4();
afx_msgvoidOnSelchangeList1();
afx_msgvoidOnDblclkList1();
DECLARE_MESSAGE_MAP()
(3)类3:
protected:
afx_msgvoidOnButton1();
afx_msgvoidOnButton2();
virtualBOOLOnInitDialog();
DECLARE_MESSAGE_MAP()
说明protected是windows机制的消息函数。
Windows消息机制Windows系统是一个消息驱动的OS,一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。
当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。
例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。
当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。
一个消息必须由一个窗口接收。
在窗口的过程(WNDPROC)中可以对消息进行分析,对自己感兴趣的消息进行处理。
例如你希望对菜单选择进行处理那么你可以定义对WM_COMMAND进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PAINT进行处理。
也相当于与用户交互的接口。
3.类之间的关系:
类CAboutDlg、类SmallPlayer、类Dlg1、类CAaDlg,都是继承自CDialog类。
类CAaDlg和类Dlg1是包含关系,类Dlg1和类SmallPlayer也是包含关系
四.编写代码
1.问题1
(1)问题描述:
点击按钮新的窗体无法弹出。
(2)解决办法:
新的窗体类没有加到父窗体的头文件中。
且关于模态对话框与非模态对话框的显示机制不同。
模态可以使用Domal()函数实现。
非模态对话框的建立需要dlg1.Create(IDD_DIALOG1,this);即类创建显示的窗体UI;
dlg1.ShowWindow(SW_SHOW);然后显示窗体。
这样才完成一个非模态对话框的建立。
问题得以解决。
2.问题2
(1)问题描述:
播放文件时,列表中选中的文件播放的是列表中其他的文件
(2)解决办法:
使用m_list.SetCurSel()设置列表索引号,这样索引顺序正确,问题得到解决。
五.运行结果与分析
1.程序运行的过程:
程序先执行主对话框,当用户点击代开DVD数据按钮程序响应windows消息映射,通过windows机制在内存中建立新的类dlg1,此类是主窗体中包含的成员函数。
2.类的构造顺序:
先构造类CAaDlg,然后构造类Dlg1.
3.错误描述及其解决办法
(1)问题1:
问题描述:
点击音量增加按钮音量无法增加,代码已经添加。
解决办法:
没有把wmpcontrol类的头文件包含,加入头文件即可。
(2)问题2
问题描述:
点击list区域鼠标点击的位置和右键菜单出现的位置有距离差;
解决办法:
在ClientToScreen(&pt)这一句不需要把坐标转换成客户区域坐标。
………………………………………
6、感想认识
这次课程设计对于面向对象的思想有深刻的体会。
这次课程设计无论是我需找DVD格式文件的创建刻录,等等功能,自己没有接触过刚开始一头雾水自己的想法不好实现。
通过网络的搜索需找,得到解决的途径。
,这样不仅培养了遇到问题的思考方法,而且更培养了我编程中分析问题,解决问题的方法途径等等。
更使得我对于对面向对象的封装,继承以及多态性等特点以及优点理解,也让自己对微软MFC编程有了一定的认识,通过封装类我们把想要现的功能封装起来,通过继承我们可以对已有类进行扩充,通过多态性我可以让不同对象面对同一消息有各自的响应。
这次设计使我进步很大,收获颇丰。
七.程序代码
文件Aadlg.
public:
CAaDlg(CWnd*pParent=NULL);standardconstructor
DialogData
{{AFX_DATA(CAaDlg)
enum{IDD=IDD_AA_DIALOG};
CListBoxm_list;
CButtonm_Open;
CButtonm_Play;
CButtonm_Up;
CButtonm_Stop;
CButtonm_Down1;
intt;
boolt1;
CButtonm_Slow;
CButtonm_VolSmall;
CButtonm_VolBig;
CButtonm_Menu;
CButtonm_JieKou;
CButtonm_Forhead;
CButtonm_Close;
CWMPPlayer4m_WMPlayer;
CWMPControlsm_Control;
CWMPDVDm_wmpDVD;
CWMPSettingsm_set;
CWMPPlaylistm_playlist;
CWMPMediam_media;
CWMPPlayer4m_WMp;
CStringstr1;
Dlg1dlg1;
intk;
}}AFX_DATA
ClassWizardgeneratedvirtualfunctionoverrides
{{AFX_VIRTUAL(CAaDlg)
public:
virtualBOOLPreTranslateMessage(MSG*pMsg);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
virtualBOOLOnCommand(WPARAMwParam,LPARAMlParam);
}}AFX_VIRTUAL
Implementation
protected:
HICONm_;
Generatedmessagemapfunctions
{{AFX_MSG(CAaDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnBUTTOClose();
afx_msgvoidOnBUTTONForhead();
afx_msgvoidOnBUTTOSlow();
afx_msgvoidOnBUTTONVolBig();
afx_msgvoidOnBUTTONVolSmall();
afx_msgvoidOnBUTTONJIeKou();
afx_msgvoidOnBUTTONDown();
afx_msgvoidOnBUTTOPlay();
afx_msgvoidOnBUTTONStop();
afx_msgvoidOnButtonup();
afx_msgvoidOnBUTTONMenu();
afx_msgvoidOnOpen();
afx_msgvoidOnDblclkList1();
}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
文件aadlg.cpp
#include"stdafx.overrides
{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);DDXDDVsupport
}}AFX_VIRTUAL
Implementation
protected:
{{AFX_MSG(CAboutDlg)
}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
{{AFX_DATA_INIT(CAboutDlg)
}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
{{AFX_DATA_MAP(CAboutDlg)
}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
{{AFX_MSG_MAP(CAboutDlg)
NomessagedoesnotrequireasubsequentDestroyIconinWin32
t=1;
t1=true;
m_=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCAaDlg:
:
DoDataExchange(CDataExchange*pDX)