1.软件开发需要准备哪些文档?源码清单
2.VC+++++是什么?
3.ejbç¨åºä»£ç
软件开发需要准备哪些文档?
模块开发卷宗(GB——)
1标题
软件系统名称和标识符
模块名称和标识符(如果本卷宗包含多于一个的模块,则用这组模块的源码清单功能标识代替模块名)
程序编制员签名
卷宗的修改文本序号
修改完成日期
卷宗序号(说明本卷宗在整个卷宗中的序号)
编排日期(说明整个卷宗最近的一次编排日期)
2模块开发情况表
3功能说明
扼要说明本模块(或本组模块)的功能,主要是源码清单输入、要求的源码清单处理、输出。源码清单可以从系统设计说明书中摘录。源码清单源码输出失败同时列出在软件需求说明书中对这些功能的源码清单说明的章、条、源码清单款。源码清单
4设计说明
说明本模块(或本组模块)的源码清单设计考虑,包括:
a. 在系统设计说明书中有关对本模块(或本组模块)设计考虑的源码清单叙述,包括本模块在软件系统中所处的源码清单层次,它同其他模块的源码清单过滤源码介绍接口;
b. 在程序设计说明书中有关对本模块(或本组模块)的设计考虑,包括本模块的源码清单算法、处理流程、源码清单牵涉到的数据文卷设计限制、驱动方式和出错信息等;
c. 在编制目前已通过全部测试的源代码时实际使用的设计考虑。
5原代码清单
要给出所产生的本模块(或本组模块)的第一份无语法错的源代码清单以及已通过全部测试的当前有效的源代码清单。
6测试说明
说明直接要经过本模块(或本组模块)的每一项测试,包括这些测试各自的标识符和编号、进行这些测试的目的、所用的配置和输入、预期的输出及实际的输出。
7复审的结论
把实际测试的结果,同软件需求说明书、flutter底层源码系统设计说明书、程序设计说明书中规定的要求进行比较和给出结论。
VC+++++是什么?
VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,
vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是WinAPI的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。页面爬虫源码
VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以把C++看作为一种“工业标准”,而VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。
VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是git源码量对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,但为了对WINDOWS开发有一个较为全面细致的认识,笔者在这里还是以讲解WIN API的相关内容为主线。
话说到这里可能更多人关心的是学习VC++需要具备什么条件,为什么对于这扇门屡攻不破呢?
要想学习好VC必须具备良好的C/C++的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。
[编辑本段]VC++中播放声音的方法
声音是多媒体的一个重要组成部分,在应用程序中加入声音可以使界面更友好。在VC++中可以根据不同的应用要求,用不同的方法实现声音的播放。
一.播放声音文件的简单方法
在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的.WAV文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.WAV文件的声音播放。
要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件(实现过程并不复杂,这里不在叙述)。假设生成的声音文件资源标识符为IDR_WAVE1。在播放时只需要调用下面的语句:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);
其中MAKEINTRESOURCE()宏将整数资源标识符转变为字符串,AfxGetResourceHandle()函数返回包含资源的模块句柄,
SND_RESOURCE是必须的标志。
作为资源的声音文件的第二种播放方法是把资源读入内存后作为内存数据播放。具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle();
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE"));
3. 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem);
三.播放声音文件的高级方法
在VC++中提供了一组对音频设备及多媒体文件直接进行操作的函数。利用这些函数可以灵活地对声音文件进行各种处理。
首先介绍几个要用到的数据结构。WAVEFORMATEX结构定义了WAVE音频数据文件的格式。WAVEHDR结构定义了波形音频缓冲区。读出的数据首先要填充此缓冲区才能送音频设备播放。WAVEOUTCAPS结构描述了音频设备的性能。MMCKINFO结构包含了RIFF文件中一个块的信息。详细的说明请参考VC++中的帮助。
下面给出程序流程简图及程序源代码清单,在VC++环境下可直接使用:
源程序清单如下:
LPSTR szFileName;//声音文件名
MMCKINFO mmckinfoParent;
MMCKINFO mmckinfoSubChunk;
DWORD dwFmtSize;
HMMIO m_hmmio;//音频文件句柄
DWORD m_WaveLong;
HPSTR lpData;//音频数据
HANDLE m_hData;
HANDLE m_hFormat;
WAVEFORMATEX * lpFormat;
DWORD m_dwDataOffset;
DWORD m_dwDataSize;
WAVEHDR pWaveOutHdr;
WAVEOUTCAPS pwoc;
HWAVEOUT hWaveOut;
//打开波形文件
if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF)))
{
//File open Error
Error("Failed to open the file.");//错误处理函数
return false;
}
//检查打开文件是否是声音文件
mmckinfoParent.fccType =mmioFOURCC(’W’,’A’,’V’,’E’);
if(mmioDescend(m_hmmio,(LPMMCKINFO)&mmckinfoParent,NULL,MMIO_FINDRIFF))
{
//NOT WAVE FILE AND QUIT
}
//寻找 ’fmt’ 块
mmckinfoSubChunk.ckid =mmioFOURCC(’f’,’m’,’t’,’ ’);
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK))
{
//Can’t find ’fmt’ chunk
}
//获得 ’fmt ’块的大小,申请内存
dwFmtSize=mmckinfoSubChunk.cksize ;
m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize));
if(!m_hFormat)
{
//failed alloc memory
}
lpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat);
if(!lpFormat)
{
//failed to lock the memory
}
if((unsigned long)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize)
{
//failed to read format chunk
}
//离开 fmt 块
mmioAscend(m_hmmio,&mmckinfoSubChunk,0);
//寻找 ’data’ 块
mmckinfoSubChunk.ckid=mmioFOURCC(’d’,’a’,’t’,’a’);
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK))
{
//Can’t find ’data’ chunk
}
//获得 ’data’块的大小
m_dwDataSize=mmckinfoSubChunk.cksize ;
m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ;
if(m_dwDataSize==0L)
{
//no data in the ’data’ chunk
}
//为音频数据分配内存
lpData=new char[m_dwDataSize];
if(!lpData)
{
//faile
}
if(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)<0)
{
//Failed to read the data chunk
}
m_WaveLong=mmioRead(m_hmmio,lpData,SoundLong);
if(m_WaveLong<0)
{
//Failed to read the data chunk
}
//检查音频设备,返回音频输出设备的性能
if(waveOutGetDeVCaps(WAVE_MAPPER,&pwoc,sizeof(WAVEOUTCAPS))!=0)
{
//Unable to allocate or lock memory
}
//检查音频输出设备是否能播放指定的音频文件
if(waveOutOpen(&hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0)
{
//Failed to OPEN the wave out devices
}
//准备待播放的数据
pWaveOutHdr.lpData =(HPSTR)lpData;
pWaveOutHdr.dwBufferLength =m_WaveLong;
pWaveOutHdr.dwFlags =0;
if(waveOutPrepareHeader(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0)
{
//Failed to prepare the wave data buffer
}
//播放音频数据文件
if(waveOutWrite(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0)
{
//Failed to write the wave data buffer
}
//关闭音频输出设备,释放内存
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
LocalUnlock(m_hFormat);
LocalFree(m_hFormat);
delete [] lpData;
说明:1)以上使用的音频设备和声音文件操作函数的声明包含在mmsystem.h头文件中,因此在程序中必须用#include "mmsystem.h"语句加入头文件。同时在编译时要加入动态连接导入库winmm.lib,具体实现方法是从Developer Studio的Project菜单中选择Settings,然后在Link选项卡上的Object/Library Modules控制中加入winmm.lib。2)在pWaveOutHdr.lpData中指定不同的数据,可以播放音频数据文件中任意指定位置的声音。3) 以上程序均在VC++6.0中调试通过,在文中省略了对错误及异常情况的处理,在实际应用中必须加入。
四.结论
在VC++中可以根据应用需要采用不同的方法播放声音文件。简单应用可以直接调用声音播放函数。第二种方法可以把声音作为资源加入可执行文件中。如果在播放之前要对声音数据进行处理,可用第三种方法。
ejbç¨åºä»£ç
EJBæ¯J2EEæ¡æ¶ä¸æéè¦çé¨åï¼ä¹æ¯ä¼ä¸åºç¨ä¸æ常ç¨çææ¯ä¹ä¸ï¼ç¶èEJBç客æ·ç«¯ç¼å对äºå¼åè èè¨ä¸æ¯ä¸ä»¶è½»æ¾çäºæ ãæ§ä»¶æ¶æä¸çEJBæ§ä»¶å¤§å¤§çç®åäºEJBèµæºçå¤ææ§ãé¾åº¦ï¼å¼åè åªéè¦éè¿ç®åçç»§æ¿ org.apache.beehive.controls.system.ejb.SessionEJBControlæè org.apache.beehive.controls.system.ejb.EntityEJBControlï¼ç¶åéè¿æä¾ç¸åºç注éå°±å¯ä»¥å®æ EJBèµæºç访é®ã
-------------------------------------------------------------
EJB Beanç±»æºä»£ç âHelloWorld.java
æ¸ å1 ejbsrcorgvivianjbeehivecontrolsexamplesejbhelloworld.java
1. package org.vivianj.beehive.controls.examples.ejb;
2.
3. import javax.ejb.*;
4.
5. public class HelloWorld
6. implements SessionBean
7. {
8. public void ejbCreate() {
9. }
. public String sayHello()
. {
. return âHello World!â;
. }
. }
å ±4页ã
EJB Remoteæ¥å£ç±»æºä»£ç âHelloWorldRemote.java
æ¸ å2 ejbsrcorgvivianjbeehivecontrolsexamplesejbHelloWorldRemote.java
1. package org.vivianj.beehive.controls.examples.ejb;
2.
3. import javax.ejb.EJBObject;
4. import java.rmi.RemoteException;
5.
6. import javax.ejb.*;
7.
8. public interface HelloWorldRemote extends EJBObject {
9.
. public String sayHello() throws RemoteException;
.
. }
EJB Homeæ¥å£ç±»æºä»£ç --HelloWorldHome.java
æ¸ å3 ejbsrcorgvivianjbeehivecontrolsexamplesejbHelloWorldHome.java
1. package org.vivianj.beehive.controls.examples.ejb;
2.
3. import javax.ejb.CreateException;
4. import javax.ejb.EJBHome;
5. import javax.ejb.FinderException;
6. import java.rmi.RemoteException;
7. import java.util.Collection;
8.
9. import javax.ejb.*;
.
. public interface HelloWorldHome extends EJBHome {
.
. public HelloWorldRemote create()
. throws CreateExceptionï¼ RemoteException;
.
. }
EJBå¼åå®æåï¼æ们å¯ä»¥å°EJBæå æä¼ä¸åºç¨ï¼ç¶åå°çæçä¼ä¸åºç¨åå¸å°JBossåºç¨æå¡å¨ä¸ã
å¼åEJBæ§ä»¶
æ们ç°å¨æ¥å¼åä¸ä¸ªEJBæ§ä»¶-- HelloWorldSessionEJBControlï¼éè¿å®æ们è½å¤ç´æ¥è®¿é® 1.å¼åSessionBean ä¸å¼ååé¨ç½²çEJBã
HelloWorldSessionEJBControléè¿JBossæä¾çorg.jnp.interfaces.NamingContextFactoryå·¥åç±»è·åEJB访é®çä¸ä¸æç¯å¢ã
æ¸ å4ä¸æ¯EJBæ§ä»¶çå ¨é¨æºä»£ç ã
æ¸ å4 srcorgvivianjbeehivecontrolsexamplescontrols
HelloWorldSessionEJBControl.java
1. package org.vivianj.beehive.controls.examples.controls;
2.
3. import org.apache.beehive.controls.api.bean.ControlExtension;
4. import org.apache.beehive.controls.system.ejb.SessionEJBControl;
5. import org.vivianj.beehive.controls.examples.ejb.helloworldHome;
6. import org.vivianj.beehive.controls.examples.ejb.helloworldRemote;
7.
8. /
**9. * HelloWorldSessionEJBControl ç¨äºå°è£ 访é®è¿ç¨JBossæå¡å¨ä¸
. * SessionBeançæä½æ¹æ³
. */
. @ControlExtension
. @SessionEJBControl.EJBHome(jndiName = âjndi/helloworldâ)
. @SessionEJBControl.JNDIContextEnv(
. contextFactory = âorg.jnp.interfaces.NamingContextFactoryâï¼
. providerURL = âjnp://localhost:â)
. public interface HelloWorldSessionEJBControl
. extends SessionEJBControlï¼
. HelloWorldHomeï¼ HelloWorldRemote {
. }