文档视界 最新最全的文档下载
当前位置:文档视界 › 软件开发平台实验报告

软件开发平台实验报告

软件开发平台实验报告
软件开发平台实验报告

课程设计报告

课程名称: 软件开发平台与工具任课教师:

姓名:

学号:

1. 引言

1.1. 课程设计项目

1.2. 背景简介

从编程之初,便免不了和方法,类,接口之类的东西打交道。久而久之,自然会对此进行总结,由此而产生了开发平台。而今中国的程序员之中,有很大一部分都是编一些企业MIS、政府MIS之类的程序。其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已。软件开发平台有两种平台模式:一种是传统的C/S架构模式,一种是现在流行的B/S架构模式。B/S架构模式是随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式。这便激发了软件开发者的创造力,形成了软件开发平台的B/S架构模式(web开发平台)。对于web开发平台,我的个人理解是:

1.以web

2.0为基础,基于互联网的B/S架构的软件。它本身也是一个软件,只不过不是最终的软件产品,而是用于二次开发的软件。

2.用于实现各类业务系统,如CRM、MIS、ERP、HIS、OA等等的开发。web开发平台本身就是一个二次开发平台,他不同于诸如eclipse等这样的开发工具,需要写大量的代码来完成各个业务模块,二次开发平台只需要设计好自己的数据结构,进行一些简单的配置、拖拉等操作就可以完成业务系统的开发。

3.能够快速的实现各种报表包括复杂的图表报表的设计制作,传统的编码式开发需要自己去编写想要的各种报表,而运用开发平台就简单多了,可以很轻松的配置出各种报表。

使用web开发平台的目的是为了实现资源共享、节约开发成本、提高开发效率、缩短开发周期。而如今的开发平台大都采用非编码的方式或者是极少编码的方式,这样正好达到了目的。有的甚至可以减少80%的代码量,可见效率会提高多少。

从国内代表性的软件开发平台中[1],我们可以看出这一类产品的大致脉络,亚思捷的TNT平台:TNT平台的核心优势在于低成本的个性化,他可以同时向客户提供T——业务系统模板,即OA、CRM、文档管理、信息门户、在线考试等标准化的应用系统;N——开源组件包,即上述应用系统的源代码;T——开

发工具,即基于微软Jupiter平台的快速开发工具,开发者可以通过界面属性设

定的方法来完成对业务系统的快速开发,自动化生成C#和JAVA的二种语言的系统。显然,TNT中的两个“T”是业务的重点,而杀手锏则是低价。

其他厂家的软件开发平台与上述三种均大同小异,都是提供“标准化+行业化+个性化”的应用模式。

从中我们看出,这些软件开发平台确实都非常具有我们在上文中提到的技术共性,另外我们还都具有一个共同点,那就是他们既提供软件开发平台,又提供基于该平台生成的各种应用系统,两种产品相辅相成。这种模式也是软件开发平台销售的主流模式。

1.3.相关概念

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是

始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年

代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。

UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融

入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。

1.4.编写目的

经过本学期对软件开发平台与工具的学习,对其进行初步的掌握,通过课程设计(音乐播放器)编程,对所学内容进行实际应用并发现学习中存在的问题,也是对自己学习工作的检验和测试,在撰写报告的过程中能够更深刻的了解软件开发平台与工具的理念通过这份文档来记录实践过程中遇到的问题以及改善的

方法。现在对整个过程加以认识、记录和总结,留下经验,汲取教训。为以后的其他工作积攒经验,为以后遇到相同的问题和从事类似项目奠定坚实的基础,以便以后有资可寻、有底可查,增长个人见识。

2部分产品代码解析

2.1简介

本音乐播放器使用visual C++6.0自带的Active Movie Control Object控件,来建立自己的多媒体播放器。并以千千静听为模板,实现播放器最小化托盘的功能。

Active Movie Control Object

微软公司推出的ActiveMovie控件用于多媒体程序设计的控件,该控件提供非常完善的音频和视频媒体文件的播放功能。其能支持多种文件格式:例如最常见的WAV文件、AVI文件、MPEG压缩格式的VCD视频文件等,它都可以正常地进行播放。这个控件可根据文件的后缀名自动判别设备的类型,滞后能完成相应的控制。因为本实例需要提供多媒体支持,所以使用Active Movie控件是很好的一个选择。

事实上,很多优秀的多媒体应用程序,其内部的多媒体播放就是利用Active Movie控件来实现。通过这个控件用户只需要精心地设计应用程序的用户界面,就可以开发出功能齐全、外观漂亮、具有相当水准的媒体播放器。

1. Active Movie的注册方法

现在使用的VC++6.0自带Active Movie控件版本一般都是Active Movie3。用户注册这个控件之前,再VC++6.0集成开发环境中是无法找到Active Movie3控件的。所以应首先注册这个控件。步骤及方法为:

(1)单击“开始”|“运行”按钮。

(2)在弹出的对话框中输入“regsvr32 msdxm.ocx”。

(3)在VC++6.0的集成开发环境候中的菜单栏下执行如下操作“”

Project->Add to Project->Components and Controls->Registered

ActiveX Controls”将弹出空间添加对话框,选择其中的

ActiveMovieControl Object,Inser,单击OK按钮。

(4)将空间拖放到对话框上。

2. ActiveMovie的属性及方法

(1)ActiveMovie的特有属性

CurrentState:指示控件的状态(stopped、paused、running)

DisplayMode:显示模式(时间方式、帧方式)

FileName:指定该控件要操作的源文件的完整名字

Rate:指示媒体流的回放率

ReadyState:指示控件状态,是否已经装入源文件

SelectionStart:指示播放媒体流的开始位置

SelectionEnd:指示播放媒体流的结束位置

CurrentPosition:指示播放媒体流的当前位置

Volume:设置音量

(2)ActiveMovie的方法

ActiveMovie控件常用的方法有RUN/STOP/PAUSE这3个。分别控制流媒体的播放、停止和暂停。使用时直接调用它们即可。其他与通

用方法如Drag、Move、SetFocus等,该控件也支持。此外ActiveMovie

还有一些特有事件的处理方法。

DisplayModeChange:当DisplayMode属性值发生变化时触发

OpenComplete:当源文件完全载入时触发

PositionChange:当流媒体的当前位置改变时触发

ReadyStateChange:当控件的ReadyState属性值改变时触发

StateChange:当播放器的状态改变时触发

Error:处理控件的出错事件

此外ActiveMovie控件还有一些属性操作方法,通过这些方法获取或者设置ActiveMovie控件的各个属性值。ActiveMovie获取属性值

的方法如下:

GetCurrentPosition:获取播放器的播放进度

GetAuthor:获取作者信息

GetBalance:获取声音平衡值

GetFileName:获取操作的源文件的完整名字

GetDisplayMode:获取当期显示模式

GetRate:获取媒体流的回放率

GetVolume:获取当前音量

2.2音乐播放器最小化到托盘的实现方法

当前流行的播放器大大多都支持最小化到托盘事件ain.suoyi本播放器也仿照这些播放器实现这个功能。

1.最小化到托盘的基础

把应用程序最小化到托盘的基本原理就是将应用程序的主窗体隐藏,然后在托盘中绘制应用程序的图标。

Shell_NotifyIcon()函数负责向系统传递消息,以添加、修改或删除托盘区的图标。它的原型如下:

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(

DWORD dwMessage,

PNOTIFYICONDATA pnid

);

该函数返回的是一个布鲁尔值,失败则返回0,返回非0则成功。函数有以下两个参数。

(1)dwMessage:标示该函数的应用功能,是添加、删除,还是修改图标。如果是添加,则它的值为NIM__ADD;如删除则是NIM_DELETE;而修改则是NIM_MODIFY。

(2)pnid:程序最小化到托盘的图标信息结构体

2.实现最小化托盘

最小化按钮及Hide按钮处理函数OnHide(),将播放器最小化到托盘。

void CMusicPlayerDlg::OnHide()

{

NOTIFYICONDATA nid;

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=IDR_MAINFRAME;

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_MUSICPLAYER;//自定义的消息名

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAI NFRAME));

strcpy(nid.szTip,"MusicPlayer");//信息提示条为“计划任务提醒”

Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

ShowWindow(SW_HIDE);//隐藏主窗口

}

最小化到托盘的图标ID为IDR_MAINFRAME。它的消息为

WM_MUSICPLAYEAR。当鼠标移过图标时提示信息为“MusicPlayer”

3.处理托盘图标消息

添加最小化到托盘图标发送的自定义消息WIN_MUSICPLAYER的映射。

ON_MESSAGE(WM_MSICPLAYER,OnShowMusicPlayer)

添加它的处理函数为OnShowMusicPlayer(),代码如下:

LRESULT CMusicPlayerDlg::OnShowMusicPlayer(WPARAM wParam, LPARAM lParam)

{

if(wParam!=IDR_MAINFRAME)

return 1;

switch(lParam)

{

case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”

{

LPPOINT lpoint=new tagPOINT;

::GetCursorPos(lpoint);//得到鼠标位置

CMenu menu;

menu.CreatePopupMenu();//声明一个弹出式菜单

//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已

//隐藏),将程序结束。

menu.AppendMenu(MF_STRING,MY_OPEN,"Open");

menu.AppendMenu(MF_STRING,MY_PLAY,"Play");

menu.AppendMenu(MF_STRING,MY_PAUSE,"Pause");

menu.AppendMenu(MF_STRING,MY_STOP,"Stop");

menu.AppendMenu(MF_STRING,MY_QUITE,"Close");

//确定弹出式菜单的位置

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);

//资源回收

HMENU hmenu=menu.Detach();

menu.DestroyMenu();

delete lpoint;

}

break;

case WM_LBUTTONDBLCLK://双击左键的处理

{

this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿}

break;

}

return 0;

}

3总结

软件开发平台是一种软件开发工具,以通用技术架构为基础,集成常用建模工具、二次开发包、基础解决方案等而成。软件开发工具是很方便地把一种编程语言代码化并编译执行的工具。现在的软件开发工具逐渐显出智能化、网络化、一体化、标准化的趋势。对于很多企业来说,软件开发平台只被定义为信息化工具,但成功进行过企业信息化建设的CIO 们会对软件开发平台有着更为正确的理解,那就是软件开发平台不仅是信息化工具,更是管理思想的沉淀。

随着在企业中发挥出的作用被逐步肯定,目前软件开发平台在国内信息化领域也占据着越来越重要的位置,其应用已经成为一种趋势。相对于传统开发模式,许多软件开发平台具有很多显著优势,包括优化产品基础架构,提升软件开发质量;减少编码率,提高开发效率,提升开发的灵活性;可以充分关注客户需求,实现按需定制;实现配置组件的标准化,提升产品稳定性和兼容性;提升企业开发能力,降低后期维护的时间和成本等,可以使开发者有更多时间关注客户需求,在项目的需求、设计、开发、测试、部署、维护等各个阶段均可提供强大的支持。这些都使得,软件开发平台在企业眼中成为非常给力的信息化工具。

软件开发特别是大型软件是一项浩大的工程,需要几个人、十几个人、几十个人甚至几百个人合作开发几个月、十几个月甚至几年。要保证系统的协调性、统一性和连续性,就需要在开发之前制定严格、详细的开发规范。开发规范的制

定需要花费一定的时间和精力,但是"磨刀不误砍柴功",它相当于把今后开发过程中开发人员都要遇到的问题提前做了一个考虑。有了开发规范,在后续的开发过程中,设计人员就不必每次考虑如何为一个字段命名,编程人员也不必去想某个程序的结构和布局应当怎样,测试人员也有了判断程序对错的标准。开发规范在项目开发工作中起着事前约定的作用,需要所有开发人员共同遵守。它约束开发人员的行为和设计、编程风格,使不同子系统和模块的设计、编程人员达成默契,以便形成整个系统的和谐步调和统一风格,也便于今后的系统维护和扩展工作。

通过这学期的学习,使我们对软件开发平台与工具有了更深入的了解。小组分工式的作业给我们提供了很好的交流学习氛围,让大家能够在交流中学习,在学习中互相了解。但由于自己的水平和经验不足,还存在着一定的问题。还要继续努力,争取获得更大成绩。

4产品完整代码

// MusicPlayerDlg.cpp : implementation file

//

#include "stdafx.h"

#include "MusicPlayer.h"

#include "MusicPlayerDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#define WM_MUSICPLAYER (WM_USER + 102)

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMusicPlayerDlg dialog

CMusicPlayerDlg::CMusicPlayerDlg(CWnd* pParent /*=NULL*/)

: CDialog(CMusicPlayerDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMusicPlayerDlg)

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_bOpen = false;

m_bRepeat = false;

m_changed = 0;

m_titleRect.left = 0;

m_time = 0;

m_curPos = 0;

m_state = 3;

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CMusicPlayerDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMusicPlayerDlg)

DDX_Control(pDX, IDC_SLIDER2, m_voice);

DDX_Control(pDX, IDC_SLIDER1, m_ctlSlider);

DDX_Control(pDX, IDC_ACTIVEMOVIECONTROL1, m_ActiveMovie);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMusicPlayerDlg, CDialog)

//{{AFX_MSG_MAP(CMusicPlayerDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_CTLCOLOR()

ON_BN_CLICKED(MY_OPEN, OnOpen)

ON_BN_CLICKED(MY_PLAY, OnPlay)

ON_BN_CLICKED(MY_PAUSE, OnPause)

ON_BN_CLICKED(MY_STOP, OnStop)

ON_BN_CLICKED(MY_REPEAT, OnRepeat)

ON_BN_CLICKED(MY_HIDE, OnHide)

ON_BN_CLICKED(MY_EXIT, OnExit)

ON_BN_CLICKED(MY_QUITE, OnExit)

ON_BN_CLICKED(MY_MIN, OnHide)

ON_WM_LBUTTONDOWN()

ON_WM_TIMER()

ON_WM_CANCELMODE()

ON_WM_VSCROLL()

//}}AFX_MSG_MAP

ON_MESSAGE(WM_MUSICPLAYER, OnShowMusicPlayer)

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CMusicPlayerDlg message handlers

BOOL CMusicPlayerDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

m_bmBack.DeleteObject();

m_brBack.DeleteObject();

m_bmBack.LoadBitmap(IDB_BACK);

m_brBack.CreatePatternBrush(&m_bmBack);

// TODO: Add extra initialization here

HRGN c;

HRGN r1;

int x,y,i = 0;

x = 37;

y = 115;

COLORREF ForeColor,hoverColor,downColor;

ForeColor = RGB(50, 50, 50);

hoverColor = RGB(120, 120, 120);

downColor = RGB(180, 180, 120);

HRGN min;

min = CreateRectRgn(0,0,20,15);

m_Min.Create("_", WS_CHILD | WS_VISIBLE, CPoint(320, 7), min, this, MY_MIN,

1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE));

m_Max.Create("||", WS_CHILD | WS_VISIBLE | WS_DISABLED, CPoint(346, 7), min, this, MY_MAX, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE));

m_Quite.Create("X", WS_CHILD | WS_VISIBLE, CPoint(372, 7), min, this, MY_QUITE, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE));

c = CreateRectRgn(8, 0, 55, 31);

r1 = CreateEllipticRgn(48, 8, 15 + 48, 15 + 8);

CombineRgn(c, c, r1, RGN_OR);

m_Open.Create("Open", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i++), y), c, this, MY_OPEN, 1,ForeColor,downColor ,hoverColor , GetSysColor(COLOR_BTNFACE));

r1 = CreateEllipticRgn(0, 8, 15, 15 + 8);

CombineRgn(c, c, r1, RGN_DIFF);

m_Play.Create("Play", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i++), y), c, this, MY_PLAY, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

m_Pause.Create("Pause", WS_CHILD | WS_VISIBLE, CPoint(x + 48*(i++), y ), c, this, MY_PAUSE, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

m_Stop.Create("Stop",WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i++), y ), c, this, MY_STOP, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

m_Repeat.Create("Repeat", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i++), y), c, this, MY_REPEAT, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

m_Hide.Create("Hide", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i++), y), c, this, MY_HIDE, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

c = CreateRectRgn(8, 0, 63, 31);

r1 = CreateEllipticRgn(0, 8, 15, 15 + 8);

CombineRgn(c, c, r1, RGN_DIFF);

m_Exit.Create("Exit", WS_CHILD |WS_VISIBLE, CPoint(x + 48*(i++), y ), c, this, MY_EXIT, 1, ForeColor, downColor ,hoverColor, GetSysColor(COLOR_BTNFACE));

DeleteObject(c);

DeleteObject(r1);

m_ctlSlider.SetRange(0,1000);

m_voice.SetRange(0,10);

m_voice.SetPos(7);

SetWindowText("TT-Play");

return TRUE; // return TRUE unless you set the focus to a control

}

void CMusicPlayerDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.

void CMusicPlayerDlg::OnPaint()

{

CPaintDC dc(this); // device context for painting

if(m_bOpen)

{

CSize size;

CDC memDC,maskDC;

CString str;

COLORREF fileColor,timeColor,infoColor;

size = dc.GetTextExtent(m_strMusic);

fileColor = RGB(156,196,94);

timeColor = RGB(255,0,0);

infoColor = RGB(105,121,148);

m_titleRect.left -= 1;

if(m_titleRect.left < -size.cx)

{

m_titleRect.left = size.cx;

m_changed = 0;

Invalidate();

}

m_titleRect.top = 0;

m_titleRect.right = size.cx;

m_titleRect.bottom = size.cy;

memDC.CreateCompatibleDC(&dc);

maskDC.CreateCompatibleDC(&dc);

CBitmap bkbmp;

bkbmp.CreateCompatibleBitmap(&dc,size.cx,size.cy);

memDC.SelectObject(&bkbmp);

maskDC.SelectObject(&bkbmp);

memDC.SetTextColor(RGB(50,250,160));

memDC.DrawText(m_strMusic, &m_titleRect, DT_BOTTOM);

maskDC.SetTextColor(RGB(0,0,0));

maskDC.DrawText(m_strMusic, &m_titleRect, DT_BOTTOM);

dc.SetBkMode(TRANSPARENT);

dc.SetTextColor(fileColor);

if(m_titleRect.left >= 0)

{

dc.BitBlt(30 + m_titleRect.left,30,size.cx - m_titleRect.left ,size.cy,&maskDC,m_titleRect.left,0,MERGEPAINT);

dc.BitBlt(30 + m_titleRect.left,30,size.cx - m_titleRect.left,size.cy,&memDC,m_titleRect.left,0,SRCAND);

}

else

{

dc.BitBlt(30,30,size.cx + m_titleRect.left,size.cy,&maskDC,0,0,MERGEPAINT);

dc.BitBlt(30,30,size.cx + m_titleRect.left,size.cy,&memDC,0,0,SRCAND);

}

dc.SetTextColor(infoColor);

if(m_bRepeat)

{

switch(m_state)

{

case 1:

str.Format("状态:播放- Repeat");

break;

case 2:

str.Format("状态:暂停- Repeat");

break;

case 3:

str.Format("状态:播放- Repeat");

break;

}

}

else

{ switch(m_state)

{

case 1:

str.Format("状态:播放- No Repeat");

break;

case 2:

str.Format("状态:暂停- No Repeat");

break;

case 3:

str.Format("状态:停止- No Repeat");

break;

}

}

dc.TextOut(30,48,str);

dc.SetTextColor(fileColor);

str.Format("%s - %s", m_Author,m_title);

dc.TextOut(30,65,str);

dc.SetTextColor(timeColor);

str.Format("%02d:%02d:%02d/%02d:%02d:%02d",

int(m_curPos) / 360,int(m_curPos) / 60,

int(m_curPos )% 60, int(m_time) / 360,

int(m_time) / 60, int(m_time) % 60);

dc.TextOut(260,50,str);

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CMusicPlayerDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

HBRUSH CMusicPlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

if( nCtlColor == CTLCOLOR_DLG)

return m_brBack;

// TODO: Return a different brush if the default is not desired

return hbr;

}

void CMusicPlayerDlg::OnOpen()

{

char szFileFilter[] = "Mp3 File(*.mp3)|*.mp3|"

"Wma File(*.wma)|*.wma|"

"Video File(*.dat)|*.dat|"

"Wave File(*.wav)|*.wav|"

"AVI File(*.avi)|*.avi|"

"Movie File(*.mov)|*.mov|"

"Media File(*.mmm)|*.mmm|"

"Mid File(*.mid;*,rmi)|*.mid;*.rmi|"

"MPEG File(*.mpeg)|*.mpeg|"

"All File(*.*)|*.*||";//文件类型过滤CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

if(dlg.DoModal()==IDOK)

{

CString PathName=dlg.GetPathName();

PathName.MakeUpper();

m_ActiveMovie.SetFileName(PathName);

m_strMusic = dlg.GetFileName();

//m_ActiveMovie.get

m_bOpen = true;

OnPlay();

m_state = 3;

Invalidate();

}

}

void CMusicPlayerDlg::OnPlay()

{

m_ActiveMovie.Run();//播放文件

SetTimer(0,20,NULL);//设置定时器

m_Author = m_ActiveMovie.GetAuthor();

m_title = m_ActiveMovie.GetTitle();

m_copyRight = m_ActiveMovie.GetCopyright();

m_description = m_ActiveMovie.GetDescription();

double a = m_ActiveMovie.GetSelectionEnd();

double b = m_ActiveMovie.GetSelectionStart();

//Duration

m_time = m_ActiveMovie.GetDuration();

m_ctlSlider.SetRange(b,a);

long Volume=m_ActiveMovie.GetVolume();

m_voice.SetPos(Volume /(-150));

m_state = 1;

Invalidate();

}

void CMusicPlayerDlg::OnPause()

{

m_ActiveMovie.Pause();

m_state = 2;

Invalidate();

}

void CMusicPlayerDlg::OnStop()

{

m_ActiveMovie.Stop();

m_state = 3;

Invalidate();

}

void CMusicPlayerDlg::OnRepeat()

{

m_bRepeat = 1 - m_bRepeat;

Invalidate();

}

void CMusicPlayerDlg::OnHide()

{

NOTIFYICONDATA nid;

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=IDR_MAINFRAME;

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_MUSICPLAYER;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(nid.szTip,"MusicPlayer");//信息提示条为“计划任务提醒”

Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

ShowWindow(SW_HIDE);//隐藏主窗口

}

void CMusicPlayerDlg::OnExit()

{

// TODO: Add your control notification handler code here

NOTIFYICONDATA nid;

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);

nid.hWnd=this->m_hWnd;

nid.uID=IDR_MAINFRAME;

nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;

nid.uCallbackMessage=WM_MUSICPLAYER;//自定义的消息名称

nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(nid.szTip,"MusicPlayer");//信息提示条为“计划任务提醒”

Shell_NotifyIcon(NIM_DELETE,&nid);//在托盘区添加图标

ShowWindow(SW_HIDE);//隐藏主窗口

OnOK();

}

void CMusicPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if (point.y < 26)

PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));

CDialog::OnLButtonDown(nFlags, point);

}

void CMusicPlayerDlg::OnTimer(UINT nIDEvent)

{

m_changed++;

m_curPos = m_ActiveMovie.GetCurrentPosition();

m_ctlSlider.SetPos(m_curPos);

CRect rect;

rect.left = 30;

rect.top = 30;

rect.right = 398;

rect.bottom = 50;

CRgn rgn1,rgn2;

rgn1.CreateRectRgnIndirect(&rect);

rgn2.CreateRectRgn(260,50,350,65);

https://www.docsj.com/doc/538207821.html,bineRgn(&rgn1,&rgn2,RGN_OR);

InvalidateRgn(&rgn1,2);

if(m_curPos ==0 && m_bRepeat)

m_ActiveMovie.Run();

else if(m_curPos ==0 )

m_state = 3;

CDialog::OnTimer(nIDEvent);

}

void CMusicPlayerDlg::OnCancelMode()

{

CDialog::OnCancelMode();

}

void CMusicPlayerDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {

// TODO: Add your message handler code here and/or call default

int value = m_voice.GetPos();

m_ActiveMovie.SetVolume( -1 * value * 150);

CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

LRESULT CMusicPlayerDlg::OnShowMusicPlayer(WPARAM wParam, LPARAM lParam) {

if(wParam!=IDR_MAINFRAME)

return 1;

switch(lParam)

{

case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”

{

LPPOINT lpoint=new tagPOINT;

::GetCursorPos(lpoint);//得到鼠标位置

CMenu menu;

menu.CreatePopupMenu();//声明一个弹出式菜单

//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已

//隐藏),将程序结束。

menu.AppendMenu(MF_STRING,MY_OPEN,"Open");

menu.AppendMenu(MF_STRING,MY_PLAY,"Play");

menu.AppendMenu(MF_STRING,MY_PAUSE,"Pause");

menu.AppendMenu(MF_STRING,MY_STOP,"Stop");

menu.AppendMenu(MF_STRING,MY_QUITE,"Close");

//确定弹出式菜单的位置

menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);

//资源回收

HMENU hmenu=menu.Detach();

menu.DestroyMenu();

delete lpoint;

}

break;

case WM_LBUTTONDBLCLK://双击左键的处理

{

this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿}

break;

}

return 0; }

软件开发实验报告doc

软件开发实验报告 篇一:软件开发实验报告 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:CASE工具PowerDesigner的使用 实验地点:专业班级: 指导教师: XX年10月22日 本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:搭建Visual Studio开发环境,设计实验地点:致远楼B303指导教师:崔秀娟XX年9月28日 篇二:软件开发平台实验报告 课程设计报告 课程名称: 软件开发平台与工具任课教师: 姓名: 学号: 1. 引言 1.1. 课程设计项目 1.2. 背景简介从编程之初,便免不了和方法,类,接口之类的东西打交道。久而久之,自然会对此进行总结,

由此而产生了开发平台。而今中国的程序员之中,有很大一部分都是编一些企业MIS、政府MIS之类的程序。其主要工作就是对数据进行一下增删改查的操作,对MIS系统做一些基础的管理而已。软件开发平台有两种平台模式:一种是传统的C/S架构模式,一种是现在流行的B/S架构模式。B/S 架构模式是随着互联网的流行,自然又要求以互联网为基础,把这些都网络化,以实现网络资源共享,而不是传统的单机模式。这便激发了软件开发者的创造力,形成了软件开发平台的B/S架构模式(web开发平台)。对于web开发平台,我的个人理解是: 1.以web 2.0为基础,基于互联网的B/S架构的软件。它本身也是一个软件,只不过不是最终的软件产品,而是用于二次开发的软件。 2.用于实现各类业务系统,如CRM、MIS、ERP、HIS、OA 等等的开发。web开发平台本身就是一个二次开发平台,他不同于诸如eclipse等这样的开发工具,需要写大量的代码来完成各个业务模块,二次开发平台只需要设计好自己的数据结构,进行一些简单的配置、拖拉等操作就可以完成业务系统的开发。 3.能够快速的实现各种报表包括复杂的图表报表的设计制作,传统的编码式开发需要自己去编写想要的各种报表,而运用开发平台就简单多了,可以很轻松的配置出各种报表。

软件设计报告

软件设计报告 姓名: 学号: 2014年6月23日~2012年7月4日

目录 第一章软件设计介绍 (2) 第二章软件开发平台简介 (3) 第三章软件设计的内容 (4) 3.1 分数统计软件(A1) (4) 3.1.1设计题目及要求 (4) 3.1.2设计思想及程序流程框图 (4) 3.1.3逻辑功能程序 (4) 3.1.4结果及完善方向..................................... 错误!未定义书签。 3.2 打字软件(A2) (9) 3.2.1设计题目及要求 (9) 3.2.2设计思想及程序流程框图 (10) 3.2.3逻辑功能程序 (10) 3.2.4结果及完善方向 (13) 3.3 文本编辑器(A3) (14) 3.3.1设计题目及要求 (14) 3.3.2设计思想及程序流程框图 (15) 3.3.3逻辑功能程序 (15) 3.3.4结果及完善方向 (17) 3.4 加密软件(A4) (19) 3.4.1设计题目及要求 (19) 3.4.2设计思想及程序流程框图 (19) 3.4.3逻辑功能程序 (19) 3.4.4结果及完善方向 (21) 3.5 进制转换器(A5)..................................... 错误!未定义书签。 3.5.1设计题目及要求 (23) 3.5.2设计思想及程序流程框图 (23) 3.5.3逻辑功能程序 (24) 3.5.4结果及完善方向 (27) 3.6 学生成绩核算系统的设计与实现(B1) (30) 3.6.1设计题目及要求 (30) 3.6.2设计思想及程序流程框图 (30) 3.6.3逻辑功能程序 (32) 3.6.4结果及完善方向 (41) 3.7 模拟电信计费系统的设计与实现(B2) (46) 3.7.1设计题目及要求 (46) 3.7.2设计思想及程序流程框图 (46) 3.7.3逻辑功能程序 (48) 3.7.4结果及完善方向..................................... 错误!未定义书签。第四章心得体会............................................. 错误!未定义书签。

电子科技大学软件开发环境实验报告

电子科技大学软件开发 环境实验报告 Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】

本实验总体目的是,通过使用huffman编码算法从而实现文件的压缩和解压,以达到使学生掌握并灵活运用分割函数的三项原则。 五、实验内容: 本实验要求实现一个exe程序。这个程序按照huffman编码方式,同时包含了压缩功能和解压功能。用户通过以下命令进行压缩: C:\> –c uncompress_filename compress_filename 上述命令中,是程序名,-c表示要进行压缩。uncompress_filename是要压缩的文件名,可以包含路径信息,而compress_filename是压缩之后的文件名,同样可以包含路径信息。用户可以通过如下命令进行解压: C:\> –u compress_filename uncompress_filename 上述命令中,-u表示要执行解压命令。compress_filename是要解压的文件名,可以包含路径信息;uncompress_filename就是解压后所得到的文件,同样可以包含路径信息。 提示:在实现程序时,需要考虑如何存储huffman树或者编码表或者词频表等等。 本实验要求实现两个版本的程序,一是C语言版本的,二是C++版本的。对这两个版本的要求如下: 对于每一个版本的程序,需要在实验报告中给出函数调用关系图、流程处理关系 图以及它们的文字说明等内容; 对于每一个版本的程序,都需要在实验报告中给出源代码。为了便于查重,代码 中注释的比例要占到总行数的20%; C++版本的程序,需要给出类关系图。 实验报告的评分标准,包括以下几个方面: 实验报告是否规范

互联网软件开发及应用实验报告

自学考试计算机系列课程实践性环节实验报告本 课程名称互联网软件开发及应用 实验学期 1 至 2 学年第 1 学期 年级 10级专业计算机网络及应用 学生姓名邓希良考号 010********* 指导教师 实验最终成绩 重庆大学计算机学院制

一、实验目的 锻炼和培养学生的实际操作技能和动手能力,使学生通过上机实验,加深对课堂所学理论的理解,最终达到综合锻炼和提高的目的。 二、实验内容 a) 建立一个表单,包含多个对象(文本框、密码框、单选、多选、下拉选择、多行文本输入域等),表单提交时对数据进行验证; b)建立与a)中表单对象对应的数据库和表 c)表单提交的数据在另外的页面中显示并用Session保存 d)通过Session把数据传送到下一个页面后写入到数据库中; e)从数据库中读取信息并在网页中显示出来 三、实验步骤(设计) 步骤 1 创建一个包含文本框、密码框、单选、多选、下拉选择、多行文本输入域的表单。 表单数据验证 数据验证

用户: 密码:

软件开发工具与环境实验报告.

南昌大学实践报告 学生姓名:谢某某学号:0149001506109 专业班级:软件工程2006 实践类型:□验证□综合□设计□创新实践日期:2010-11-30 实践成绩: (以下主要内容由学生完成) 一、实验项目名称 利用VC++设计一个简单的电话薄管理程序 二、实验目的 综合运用面向对象程序设计的基础知识,设计一个小型的应用程序,提高解决问题的能力。 三、实验基本内容 设计一个电话簿管理程序,要求: 〔1〕具有添加、删除、显示、修改和查询联系人电话号码的功能。 〔2〕联系人的信息保存到文件中。 〔3〕可以实现为控制台程序或图形界面程序。 〔4〕按学院实验报告要求格式书写实验报告 四、主要仪器设备及耗材 PC一台,Microsoft Visual C++ 6.0 开发环境 五、实验步骤 该电话薄的实现代码如下: #include #include #include #include #include using namespace std; class book { public:

book();//默认构造函数 char inter_face();//首页 void add_person();//添加 void del_person();//删除 void show_all();//显示 void alter();//修改 void select();//查询 void save_new();//保存 private: string name;//姓名 string number;//电话号码 }; book::book() { name = "\0"; number = "\0"; } //首页 char book::inter_face() { system("cls"); cout <>choose; fflush(stdin); return choose; } //添加联系人 void book::add_person() { cout <>name; fflush(stdin); cout <<"电话 : "; cin >>number; fflush(stdin); save_new(); cout <

软件项目开发可行性分析报告范文

软件开发与设计可行性研究报告 1、引言 编写目的 经过对GIS众创空间微电商平台系统项目进行详细调查研究,初步拟定系统实 现报告,明确开发风险及其所带来的经济效益,对软件开发中将要面临的问题及其 解决方案进行可行性分析。本报告经审核后,交由软件项目经理审查。 项目背景 项目名称:银行储蓄系统 用户:银行 说明:现在的银行储蓄系统工作效率低,越来越不能满足广大储户的需要。银行与客户都迫切希望能更方便更省时就可以办理储蓄业务。现代计算机网络的高速发展使越来越多的人更喜欢网上购物、不出门即可交纳各种费用。在这样的背景下,很明显现行的银行储蓄系统已经不能满足人们越益增长的需求,急切需要建立一个新的、高效的、方便的、互联的银行储蓄系统。 参考资料 《软件工程——原理,方法与应用》吴钦藩编着人民交通出版社出版 《软件工程导论(第四版)》张海藩编着清华大学出版社出版 《软件工程》任胜兵、邢琳编着北京邮电大学出版社 2、可行性研究的前提 要求 功能要求 此系统所要完成的主要功能模块有两部分:取款系统与存款系统。 存款时,储户填写存款单,然后交给银行业务人员键入系统,同时系统还要记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、利率等信息,完成后由系统打印存款凭单给储户。 而取款时,储户填写取款单交给业务人员,业务人员把取款金额输入系统并要求储户输入密码以确认身份,核对密码正确无误后系统计算利息并印出利息清单给储户。 性能要求 为了满足储户的要求,系统必须要有高的运作速度,储户填写的表单输入到系统,系统必须能快速及时作出响应,迅速处理各项数据、信息,显示出所有必需信息并打印出各项清单,所以要求很高的信息量速度和大的主存容量;由于要存贮大量的数据和信息,也还要有足够大的磁盘容量;安全性也是系统最重要的性能需求之一,银行计算机储蓄系统必须有可靠的安全措施,以保证储户的存储安全。 接口要求 业务员键入储户的资料要全部一直显示在屏幕;储户从按键口键入密码到系统以核对;计算机与打印机有高速传输的连接接口,最后以纸张的形式打印出清单给储户。输入要求

软件工程实验报告

软件工程实验报告 姓名:冯巧 学号 实验题目:实验室设备管理系统 1、系统简介: 每天对实验室设备使用情况进行统计,对于已彻底损坏的作报废处理,同时详细记录有关信息。对于有严重问题(故障)的要即时修理,并记录修理日期、设备名、修理厂家、修理费用、责任人等。对于急需但又缺少的设备需以“申请表”的形式送交上级领导请求批准购买。新设备购入后立即对新设备登记(包括类别、设备名、型号、规格、单价、数量、购置日期、生产厂家、购买人等),同时更新申请表的内容。 2、技术要求及限定条件: 采用C#语言设计桌面应用程序,同时与数据库MySql进行交互。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案实施相对容易,成本低,工期短。 一:可行性分析 1、技术可行性分析 计算机硬件设备,数据库,实验室设备管理软件与实验室设备管理系统的操作人员组成,能够实现实验室设备管理的信息化,提高工作效率,实现现代化的实验室设备管理。系统需要满足实验室设备管理(包括对实验设备的报废、维修和新设备的购买)、实验室设备信息查询(包括按类别进行查询和按时间进行查询)、实验室设备信息统计报表(包括对已报废设备的统计、申请新设备购买的统计和现有设备的统计)。这些功能框图如下图所示: 2、经济可行性分析 依据用户的现实需求、技术现状、经济条件、工期以及其他局限性因素等等因素,考虑到工期的长短、技术的成熟可靠、操作方便等因素,本方案具备经济可行性。

3、系统可选择的开发方案 ①方案A用C#开发系统的特点是:开发工具与数据库集成一体,可视化,开发速度较快,但数据库能够管理的数据规模相对较小。系统对硬件的要求低,不需要网络支持,在单机环境下也能运行,在局域网环境下也能使用。方案的实施相对容易,成本低,工期短。 ②方案B:以小型数据库管理系统为后台数据库,该前台操作与数据库分离,也能够实现多层应用系统。系统对硬件的要求居中,特别适合在网络环境下使用,操作方便。但系统得实现最复杂,成本最高,工期也较长。 二:软件需求分析 1.软件系统需求基本描述: 实验室设备管理系统是现代企业资源管理中的一个重要内容,也是资源开发利用的基础性工作。实验室设备在信息化之前,在用户系统管理、设备维修管理、设备的增删改查管理等方面存在诸多不利于管理的地方,不适应现代的企业管理形势和资源的开发利用。 2.软件系统数据流图(由加工、数据流、文件、源点和终点四种元素组成): 1)顶层数据流图 2)二层流程图 3)总数据流图

移动应用开发-实验报告

实验一Android开发基础 实验时间:2018.3.16 实验地点:X501 一、实验目的 1. 掌握Android开发环境的搭建; 2. 了解Android SDK的安装、配置、使用; 3. 熟悉开发工具Android Studio的使用; 4. 了解创建项目并熟悉文件目录结构; 二、实验学时 2学时/次,共2学时 三、实验环境 Android Studio;JDK1.7;PC机 四、实验容和要求 1.Android Studio安装 (1) Android Studio的下载与安装 前提准备工作:安装JDK 并配置JDK 环境变量。 请使用传统的JAVA_HOME 环境变量名称。很多人会被提醒JVM 或者JDK 查找失败,几乎都是因为JDK 版本或者没有使用JAVA_HOME 这个环境变量名称的原因。 ①Android Studio可以从中文社区进行下载,网址为https://www.docsj.com/doc/538207821.html,/。在浏览器中打开该网址,如图1-1所示。 图1-1 Android Studio官方 ②选择合适的平台,进行下载,如图1-2所示。

图1-2 Java platform(JDK) ③安装之前,要确定JDK版本必须是1.7或以上,否则安装之后会报错。双击Android Studio的安装文件,按照提示一步步安装,具体参考教材。不出意外的话,看到图1-3所示的界面,说明Android Studio已经安装成功了。 图1-3 Android Studio已经安装成功 2. 配置Android Studio 安装Android Studio完成之后,运行Android Studio。每一次安装,都会显示图1-4所示的这个界面,用以选择导入Android Studio的配置文件。 第一个选项:使用以前版本的配置文件夹。 第二个选项:导入某一个目录下的配置文件夹。 第三个选项:不导入配置文件夹。 如果你以前使用过Android Studio,可以选择到以前的版本。如果你是第一次使用,可以选择第三项。 图1-4 导入Android Studio配置文件

软件开发设计报告5_12

《软件开发实践》 设计报告 项目名称:打砖块小游戏 姓名学号工作量 何建清2012141463199 80% 廖宇2012141463001 20% 2014 年 5 月 4 日

目录 1.引言........................................................................................................... 错误!未定义书签。 1.1 开发目的......................................................................................... 错误!未定义书签。 1.2 开发背景......................................................................................... 错误!未定义书签。 1.3 参考资料......................................................................................... 错误!未定义书签。2.软件分析设计.. (1) 2.1 游戏描述 (1) 2.1.1 对需求的支持 (1) 2.1.2 游戏目标 (1) 2.2 总体设计 (1) 2.2.1 游戏运行环境 (1) 2.2.2 游戏描述 (1) 2.2.3 游戏框架 (1) 2.3 模块设计 (2) 2.3.1 功能 (2) 2.3.2 算法 (2) 2.4 界面设计 (3) 2.5 代码设计 (3) 2.6 游戏素材展示 (4) 2.7 开发环境 (5) 3. 项目管理和保障 (5) 3.1 项目计划 (5) 3. 2 游戏使用说明 (5)

软件开发实验报告

本科实验报告 课程名称:CASE工具PowerDesiner的使用 实验项目:CASE工具PowerDesiner的使用 实验地点:虎峪区致远楼B301号 专业班级:学号:201100 学生姓名: 指导教师: 2013年10 月15 日

一、实验目的和要求 安装PowerDesiner,并了解掌握PowerDesiner的主要功能和使用方法。 二、实验内容和原理 1.安装PowerDesiner。 2.了解CDM的主要设计元素和设计过程。 3.熟悉模型转换工具的使用。 4.熟悉PDM的主要设计元素和设计过程。 5.了解设计报告的生成方法。 【实验要求】 设计学生学籍管理系统CDM、PDM。要求PDM能方便实现以下功能: 1.学生管理 (1)录入班级、院、专业:可以添加、删除、插入学院、专业、年级信 息 (2)录入学生信息:对学号、姓名、院、专业、性别、年级、班级、出生 年月等内容。可以添加、修改、删除等。 (3)查询:可设置查询条件,对学生信息进行查询。 (4)换宿舍:可进行换房,有原房号,新房号,姓名等项。 2、选课管理 (1)录入教师:对教师姓名,性别,出生日期和参加工作日期进行录入可以添加修改。 (2)录入课程:对课程编号,课程名称,课程介绍,学分,总学时,先修课程进行信息的录入修改和删除。 三、主要仪器设备 PC机+PowerDesiner 三、四、操作方法与实验步骤 1.运行PowerDesiner安装文件。 2.按照安装向导,安装PowerDesiner。 3.安装成功之后,进入PowerDesiner的CDM设计界面,了解CDM的主要设计元素和设计过程。

软件工程导论实验报告

软件工程导论实验报告 一、实验题目: 学生成绩管理系统、图书借阅管理系统、工资管理系统、网络订餐系统、招聘考试成绩管理系统 二、实验目标 通过独立完成项目开发,加深对软件开发分析过程的流程和方法的理解,建立软件工程的思想,同时,明确软件开发的成本和时间管理的相关概念。 实验一 实验要求: ①.在实验题目列出的几个系统中选择一个作为自己要开发的软件系统,要求该系统有明确的功能需求,并建立系统的分析模型。 ②.对系统进行需求分析,掌握ER图、DFD、DD的设计与编写 ③.熟悉Visio环境和基本操作,制作一个简单的系统流程图和数据流图、主要数

据项的数据字典描述及主要加工的逻辑说明(自己选择结构语言、判定树、判定表等)。 ④.撰写需求分析规格说明书 用户需求分析 作为图书管理系统,其主要的需求人员是借阅者,借阅者对其的要求可 以大体概括如下: 1)能按各种方式,比如书名、编号、作者等查询图书馆的藏书情况; 2)能熟悉使用图书管理系统; 3)能方便地借阅图书、续借图书、归还图书; 4)能查询自己的基本资料、借阅图书情况; 5)能方便图书管理员对图书的录入登记、注销; 6)能方便对新生的登记或注销已经毕业学生的信息; 7)能及时发布一些学院学生借阅图书超期情况、馆藏书情况等。 功能说明 1)、读者管理系统 (1)未注册者可以进入注册系统进行注册;

(2)已注册借阅者可按、编号或号登陆进入借阅者检索系统查询借阅者情况; (3)、已注册借阅者可按书名、或作者对图书信息进行检索查询或 提出预约请求; 2)、图书管理员管理系统 (1)图书管理员通过图书管理员身份认证进入图书管理员管理系统; (2)读者可借阅在库图书; (3)在规定期限借阅者归还借阅图书; (4)读者在不违规情况下可继续借阅已借阅图书; (5)读者可以预约图书。 3)、系统管理员管理系统 (1)系统管理员通过系统管理员身份认证进入系统管理员管理系统; (2)系统管理员可以对图书进行图书管理(如:查询、删除、修改图书资料或图书分类查询修改、删除管理); (3)系统管理员可以对借阅者进行学生管理(如:查询、删除、修改借阅者信息或借阅者类别

软件开发设计实训报告

数学与计算机学院 实训报告 课程名称: 软件开发设计实训 课程代码: 题目: 医院门诊管理系统 年级/专业/班: 组员姓名: 组员学号: 开始时间: 年月日 完成时间:年月日 实训成绩: 指导教师签名:年月日

目录 1 需求分析模型重构 (3) 1.1业务需求分析 (3) 1.2非功能性需求分析 (4) 2 业务分析模型 (5) 2.1业务主角 (5) 2.2业务用例分析 (6) 2.3业务用例场景分析 (7) 2.4业务用例实现 (9) 2.5业务用例完整的包图 (10) 3概念分析模型 (11) 3.1核心业务活动图 (11) 3.2关键业务概念用例图 (11) 3.3概念用例分析(活动图) (12) 3.4概念用例实现分析 (13) 3.5概念用例完整的包图 (15) 4 系统分析模型 (15) 4.1系统用户分析 (15) 4.2系统用例分析 (15) 4.3系统用例实现分析 (16) 4.4分析类 (17) 4.5组件模型分析 (20) 4.6系统分析完整的包图 (21) 5系统设计模型 (22) 5.1软件架构/框架选择 (22) 5.2基于架构的设计类 (22) 6设计类优化 (23) 6.1采用的设计模式说明 (23) 7面向对象数据库分析设计 (23) 7.1概念数据模型 (23) 7.2物理数据模型 (24) 附录A 部分生成的SQL语句 (25) 附录B 部分生成的程序结构性代码 (27)

1 需求分析模型重构 1.1 业务需求分析 1.1.1.背景、业务概况 随着计算机产业的发展,计算机在各个行业的应用也越来越普遍.采用计算机软件来管理代替了以前的人工操作。随着医院的发展,当前使用的医院信息管理系统软件已经不能满足当前他们的需要。在软件的升级和外网的访问和管理上都存在一些缺陷,使用比较麻烦。所以考虑设计一个新的的医院信息管理系统软件,来填补当前正在使用的系统的缺陷。 1.1.2业务目标 本系统为医院管理系统的子系统,主要分为四大功能模块: 1、挂号收费功能:医院门诊部工作人员为前来挂号看病的患者,提供挂号服务。医院门诊人员可根据患者的描述,选择适当的科室,选择专家门诊或普通门诊,查看当前值班医生,可以向需要的患者提供必要的医生的信息并进行挂号,并打印挂号凭证。可以对前来咨询医生工作时间或医院药品情况的就诊人员提供必要的咨询服务; 2、划价收费功能:医院门诊部工作人员为持有医生药单或处方前来划价或缴费的人员根据其所持有的药单或处方分别进行划价和收费。医院门诊部工作人员可以向系统输入所有药品名,查看并选择药品规格,输入购买数量,系统将自动进行药品总费用统计,医院门诊部工作人员可根据系统显示的药品总费用进行收费,打印票据。 3、病例管理功能:对与长期在医院进行看病或治疗的患者,系统将保留患者的基本信息及就诊记录,便于医生和患者查询。避免患者病历丢失所带来的损失。 4、权限管理:该系统具有权限管理功能,对进入系统的人员进行权限验证,门诊工作人员在进入系统前,必须输入其工作号及密码,经系统验证成功后方可登陆。在门诊工作人员进行工作时,系统将自动记录其操作情况,统计其收费总额,门诊工作人员可以随时进行查看,便于门诊工作人员向财务部门交账时进行核对。 1.1.3涉众分析 1.1.3.1 涉众 通过需求陈述分析,得出医院门诊管理系统利益相关者(涉众)如图1.1以及涉众的信息如表1-1: 图1.1涉众分析

软件开发实验报告

本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:CASE工具PowerDesigner的使用 实验地点: 致远楼B501 专业班级: 指导教师: 2013年10月22日

2、转换物理模型,学生宿舍管理的PDM如下图:

本科实验报告 课程名称:软件开发环境与工具实验报告 实验项目:搭建Visual Studio开发环境,设计 Windows控制台应用程序 实验地点:致远楼B303 指导教师:崔秀娟 2013年9月28日

namespace Test2__02 { class Program { static void Main(string[] args) { int m=0; int n; long sum=0; Console.WriteLine("请输入n的值:"); n = int.Parse(Console.ReadLine()); for (int i = 1; i <= n; i++) { m += i; sum += m; } Console.WriteLine("sum = {0}",sum); Console.WriteLine("请输出sum的值:{0}", sum); } } } (方法二) namespace Test2__02 { class Program { static void Main(string[] args) { int i, j; int n; long sum=0; Console.WriteLine("请输入n的值:"); n = int.Parse(Console.ReadLine()); for (i = 1; i <= n; i++) for (j = 1; j <= i; j++) sum += j; Console.WriteLine("sum = {0}",sum); Console.WriteLine("请输出sum的值:{0}", sum); } }

软件开发需求 模板

目录

(9) 5

1. 范围 本指南用于指导软件开发者为****的过程,通过规范软件项目承担单位的开发过程达到提高软件质量,降低维护成本的目的。开发者应根据本指南进行软件开发和编制软件开发文档。本指南是对软件项目承担单位的基本要求。在本指南的附录A至E中提供了文档的编写模板供开发者参考,在进行具体软件开发时,开发者可根据实际情况采编写,但必须提供双方约定的文档,文档中约定的内容必须描述清楚。 2. 总体要求 2.1 总体功能要求 网络应用环境以Internet/Intranet技术为核心。 开发者应在充分分析需求的基础上,选择采用B/S结构或者C/S结构。 软件系统的数据库应依照《******规范》进行设计和建设。 本指南中没有规定开发者采用何种具体的软件工程开发方法,开发者可根据项目具体特点、自身擅长来选择采用面向过程的方法、面向对象的方法或面向数据的方法,但建议开发商使用面向对象软件工程的方法,如:采用目前被广泛使用的RUP(Rational Unified Process)方法来进行分析、设计和开发。 2.2 软件开发平台要求 开发者开发的软件必须能够在******规定的软件平台上正常运行。目前软件平台为:数据库管理系统: Oracle 9i以上版本 中间件(应用服务器)系统: IBM WebSphere OA系统: Lotus Domino/Notes 网络架构: 完全支持TCP/IP协议 开发工具或技术体系: 为保证软件的上下兼容性,开发者应选择比较通用的开发工具的较新版本进行开发,如Microsoft Visual ,Borland Delphi,C++ Builder, 或J2EE(Java2 P1atform Enterprise Edition)等。

嵌入式软件开发基础实验报告实时时钟

上海电力学院 嵌入式软件开发基础实验报告 题目:【ARM】实时时钟实验 专业:电子科学与技术 年级: 姓名: 学号:

一、实验目的 1、了解实时时钟的硬件控制原理及设计方法。 2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。 二、实验设备 1、硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。 2、软件:Embest IDE Pro ARM 集成开发环境,Windows 98/2000/NT/XP。 三、实验内容 学习和掌握 Embest EduKit-III 实验平台中RTC 模块的使用,进行以下操作: 1、编写应用程序,修改时钟日期及时间的设置。 2、使用EMBEST ARM 教学系统的串口,在超级终端显示当前系统时间。 四、实验原理 1. 实时时钟(RTC) 实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点,特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息,如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展,RTC 器件的新品也不断推出,这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。 RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIRE和CAN 等串行总线接口。这些串口由2~3 根线连接,分为同步和异步。 2. S3C44B0X 实时时钟(RTC)单元 S3C44B0X 实时时钟(RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部晶振提供,可以实现闹钟(报警)功能。 S3C44B0X 实时时钟(RTC)单元特性: BCD 数据:秒、分、小时、星期、日期、月份和年份 1、闹钟(报警)功能:产生定时中断或激活系统 2、自动计算闰年 3、无2000 年问题 4、独立的电源输入 5、支持毫秒级时间片中断,为RTOS 提供时间基准 读/写寄存器 访问 RTC 模块的寄存器,首先要设RTCCON 的bit0 为1。CPU 通过读取RTC 模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON 和 BCDYEAR 的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒(59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间和日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值(参考程序设计)。

软件工程实验报告(总)

信息工程学院软件工程实验报告 专业: 班级: 学号: 姓名: 指导老师:

实验一:软件开发的过程计划 实验课时:2课时 一、实验目的 项目计划的目的是为项目的研发和管理工作制定合理的行动纲领,以便所有相关人员按照计划有条不紊地开展工作。 ⑴估计项目的总体规模、工作量和成本。 ⑵制定项目计划,重点放在产品生命周期中的主要关键任务。 ⑶制定项目时间表和预算。 二、实验环境 1.硬件环境 P4以上的个人计算机环境,要求内存不少于512MB,硬盘不小于20G.。 2.软件环境 操作系统:Windows XP 数据库:Sql Server 2000以上或Access 2003以上 3.通用工具软件 通用绘图工具:MicroSoft Visio 2003以上 文本编辑工具:MicroSoft Word 2003以上 4.CASE工具 UML建模工具:Rational Rose 2000 三、实验要求、实验内容 1、实验要求: 在进行实验之前,必须掌握软件开发过程的一些基础知识,准备参考资料和阅读相关的过程模型的文档。 2、实验内容 熟悉RUP(Rational Unified Process)软件开发统一过程的思想,RUP(Rational Unified Process)是由Rational公司(现已是IBM公司的一部分)提出的过程模型,它软件工程史上最完整、最成熟、最优秀的过程模型之一。 学习软件开发的组织和管理,将项目开发各阶段的任务明确,掌握各阶段的里程碑,并熟悉相应的工具。

四、思考题 1、项目开发首先要做的事是什么? 答:进行需求分析和定义,了解客户或用户的需求,然后再进行后续。 2、你认为该软件应具备的最重要的特性是什么。 答:安全性、实用性、灵活性。 3、你认为怎样分工是最合理的? 答:该项目已经采取项目经理制,但是在具体开发过程中,情况也许会比预计的复杂,因此,在了解了各组员的工作风格的情况下,根据性格类型进行工作分配,比如:外向而且善于交流的,可以给他安排和客户交流沟通,让客户随时了解我们 的工作情况,并且反应客户的需求改变;为了让项目更好的组织和管理,可以采取 主程序员负责制;这样,在项目经理的带领下,内部安排主程序员和副程序员,工 作员有问题的话,内部自己解决,只要按时汇报工作就可以了。 五、实验内容: 项目背景 项目名称:银行计算机储蓄系统 随着社会经济的发展,XX银行的业务不断增长,传统的依靠手工的存取款业务办理方式已经不能满足不断增长的业务需求。其一,业务需求的增加需要消耗大量人力物力资源;其二,业务复杂化导致人工处理方式出错率增加,从而引起储户不满。一方面可以减轻银行业务员的工作量,另一方面可以减少工作的出错率,从而提高工作效率。现在计算机网络的告诉发现使越来越多的人更喜欢在网购物、在家存款取款。在这样的背景下,很明显现在的银行储蓄系统已经不能满足人们越益增长的需求,急切需要建立一个新的、高效的、方便的、互联的计算机储蓄系统。为解决此问题,拟为其开发计算机储蓄系统。 项目进度: 项目在项目经理的制度下,在整个开发过程中,树立“里程碑”,而且严格按照计划进行,各阶段任务必须完成,现把任务进度历程绘制如下:

软件开发总结报告

软件开发总结报告精选 文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-

软件开发总结报告目录

一.引言 1.编写目的 本项目开发总结报告,主要是总结本软件的开发经验和总结所学到的知识,以及对一个系统的大型的软件设计的总体感悟,并将软件设计过程中遇到的问题加以阐述和说明。 读者对象:开发人员、大赛评委 2.项目背景 系统名称:3D旅游咨询员 任务提出者:山东省齐鲁软件设计大赛委员组 开发者: 面向用户:游客 开发时间:2010年9月1号到2010年9月19号 该软件运行系统:单机版计算计

3.参考资料 A、软件项目开发总结报告书(GB856T—88)国家标准 B、齐鲁软件设计大赛手机游戏创意与实现项目的文档要求 C、互联网上的各类相关资料 二.开发结果 1.产品 名称:3D旅游咨询员 存储媒体的形式:光盘 数量:3份; D 、产品文档名称: 软件开发文档:《需求需求说明书》、《概要设计说明书》、《详细设计说明书》、《软件测试计划》、《软件测试报告》 项目管理文档:《软件项目计划》、《项目进度报告》、《项目开发总结报告》 产品文档:《用户手册》、《演示文件》

2.主要功能: 这是一款关于3d旅游的软件,3D为本软件的一大特色。 模拟现实世界场景,做到真实逼真的效果,增加了视觉冲击力。可以像现实的人物一样随意走动,想到那就到那,想看到那就看那,而且操作简单易行,很方便用户的使用,带给用户一种全新的设计。设计一个以岱庙为背景的软件,软件界面以红色、灰蓝色和土黄色为主,为游客展现一个立体的三维场景,展现岱庙的建筑群和总体的设计,帮助游客大体的了解岱庙的基本信息,更好的完成游览观光的功能。分为四个模块,即操作介绍、查询、推荐信息、进入3D景区。 采用了3D模型建立的技术,碰撞检测技术,数据库连接技术 性能: A、可靠性 在从设计、开发到使用的全过程中,为提供满足用户使用要求的高有效性,软件所采取了提高可靠性的一切措施、方法和活动。 B、可用性 本游戏具有很高的实用性,采取文本和语音同时输出,适合于任何的年龄段人使用,界面简洁,操作简单,很容易上手,帮助用户了解岱庙的知识,并且对岱庙有一个具体的了解。

软件工程实验报告

1.1 实验一结构化需求分析 一.实验类型 图书馆管理系统 假定校图书馆需要你设计一个图书馆管理系统,要求包括以下功能: ●图书管理员可以管理馆藏图书,包括每本图书的藏书编号、书名、编著者、 ISBN号、出版社、出版时间、入馆时间、馆藏数量(如果馆藏数量为1,则标明为孤本图书)、在馆数量、学科类别等(或其它你认为有用的信息); ●管理员可以查询、统计所有图书、每一类图书或每一本书的借阅记录; ●图书管理员可以管理所有读者的信息,包括读者类型(学生、教师、社会人 士)、姓名、图书证编号、办证时间、证件状态(正常、挂失、冻结)等信息; ●图书管理员可以查询和统计所有读者、每一类读者或每一个读者的借阅记录; ●读者可以通过本系统查询馆藏图书; ●读者可以通过本系统借阅读书。但对于孤本图书或在馆数量为1的图书则不 准外借; ●管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年 不归还图书的读者冻结其图书证; ●读者可以通地本系统归还图书。如果图书超期,则自动计算罚款金额。二.实验目的 1.掌握数据流的分析技术 2.掌握软件需求分析的过程和方法。 3.熟悉项目开发计划和需求规格说明书的制定方法。 三.实验内容和要求 1.用结构化数据流分析技术进行软件系统需求分析,得出系统的数据流图和数据字典。 2.正确运用图表工具进行表示。 3.按规范正确编写软件文档。

四.实验步骤 1.理解所承担项目的业务流程和业务内容。 本软件项目是面向中小型学校、单位机构对于图书管理的基于服务的一款便捷式软件。能满足一系列常用图书管理的功能模块,提供简介、准确的操作性,可以很大程度减少人为因素带来的数据错误,统计错误,系统逻辑错误。并且规模小,很容易进行推广。 ●本项目的参与对象有图书管理员及读者。 ●对于读者,能通过该软件浏览馆藏的所有图书。读者在图书馆找到自己喜欢 的书后,能自行通过该软件操作完成借阅操作。若读者是第一次借书,必须通过图书管理员进行添加读者记录,登记读者信息。读者在登陆后方能完成借阅操作,对于孤本图书(即图书馆中馆藏只有一本的图书)则拒绝进行借阅操作。在规定期限内,读者可以通过该软件完成还书操作,对于超期的图书,应将扣除一定罚款金额,对于超期一年不归还图书的读者冻结其图书证。 并且读者能修改个人信息。 ●对于图书管理员,能管理自己和比自己低一级管理权限的管理员。一级管理 员能完成维护管理员的基本信息和二级管理员的一切操作。二级管理员则能维护自己的信息和添加读者、添加图书的功能。管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年不归还图书的读者冻结其图书证; 2.按照系统的功能及性能要求,系统的作业范围等,确定软件系统的开发环境(操作系统、开发工具、程序设计语言等)。 根据软件编程经验,本系统将采用面向对象的设计方法,使用Eclipse开发工具,java窗体应用程序,操作系统使用Win8。 3.绘制数据流图、功能分析图等。

相关文档
相关文档 最新文档