家用防盗系统的分析和设计.docx
《家用防盗系统的分析和设计.docx》由会员分享,可在线阅读,更多相关《家用防盗系统的分析和设计.docx(17页珍藏版)》请在冰豆网上搜索。
家用防盗系统的分析和设计
课程设计(
)
题目:
家用防盗系统的分析和设计
专业软件工程
学生姓名
班级学号
指导教师
指导单位信息安全实验室
日期2010年07月02日
教师评语
教师签名:
年月日
成绩评定
备注
一、课题名称
家用防盗系统的分析和设计
二、课题背景
在科技日趋发达的21世纪,人们对安全的要求越来越高。
为了更好了方便人们的生活,让他们更加放心的工作,我提出了家用防盗系统的分析和设计。
三、课题问题描述,详细叙述说明系统的任务和目标,可行性分析
课题问题描述及系统的任务和目标:
家用防盗系统安全功能帮助房主在安装时配置安全系统,检测所有连接到安全系统的传感器,通过internet、计算机或控制面板和房主交互。
在安装时,家用防盗安全系统计算机被用于设计和配置系统,每个传感器被分配一个编号和类型,主任密码被用以控制启动和关闭系统,而且当传感器时间发生时拨打输入的电话号码。
当识别出一个传感事件时,软件激活附于系统上的可发声的警报,在一定能够的延迟时间后,软件拨打监测服务的电话号码并提供关于位置的新型,报告被检测到的事件的性质,电话号码将每20秒重拨一次,直至电话接通。
房主通过控制面板、计算机或浏览器窗口中显示提示信息和系统状态信息。
可行性分析:
随着网络通信技术的迅速发展和信息技术的广泛应用,计算机的应用已普及到经济和社会生活的各个领域。
为了让人们更加放心的工作和学习,家庭安全系统随之出现。
系统的可行性分析
(1)系统实施运行的可行性:
如今大部分的白领都已熟练掌握计算机的基本实用方法和操作技能,对新系统的开发,表现出极大的热情。
提出了很多好的建议和要求。
(2)技术可行性:
internet网已正常运行;开发人员已熟练掌握开发工具。
技术上实现系统是可行的。
(3)经济可行性:
internet网络已经建成;硬件投入不需要很大。
四、选择一种方法(结构化,面向对象)建立系统分析模型,并给出详细的需求分析
说明,测试计划
功能描述:
住宅安全功能应该为各种不希望出现的“情况”提供保护,如非法入侵、火灾、漏水、一氧化碳浓度超标等等。
该功能将使用无线传感器监控每种情况,户主可以编程控制,并且在发现情况时自动电话联系监控部门。
潜在类分析:
房主,传感器,控制面板,安装,系统,编号,主密码,电话号码,传感器事件,发声警报,监测服务
设备:
一个控制面板、若干烟感器、co感应器、热感应器、若干门窗感应器、若干动态检测区、一个警报器、一个已被激活的传感器、一个显示器、一台计算机若干电话号码、一个电话等。
控制面板:
一个安装在墙上的单元,尺寸大概是9*5英寸;控制面板和传感器、计算机之间是无线连接;通过一个12键的键盘与用户交互,通过一个2*2的LCD显示器为用户提供反馈信息;软件将提供交互提示、回显以及类似的功能。
控制面板:
房主使用控制面板的情况:
1.房主观察控制面板,以确定系统是否已准备接受输入。
如果系统未就绪,“notready”消息将显示在LCD显示器上,房主必须亲自动手关闭窗户、门才能使“Notready”消息消失
2.房主使用键盘键入4位密码,改密码和系统中存储的有效密码相比较。
如果密码不正确,控制面板将鸣叫一声并自动复位以等待再次输入;如果密码正确,控制面板等待进一步的操作。
3.房主选择“Stay”或“Away”启动系统。
“stay”只激活外部传感器。
“away”激活所有的传感器。
4.当激活时,房主可以看到一个红色的警报器。
异常情况:
1控制面板未就绪:
房主检查所有的传感器,确定哪些传感器是开着的,并将其关闭。
2密码不正确:
控制面板鸣叫一声,房主需要重新输入密码。
3密码不识别:
必须对检测和响应子系统重新设定密码。
4选择stay:
控制面板鸣叫2声且Stay灯亮,边界传感器被激活。
5选择away:
控制面板鸣叫3声并且away灯亮;所有传感器被激活。
用例图:
初步用例图:
安全功能用例图:
用户流程图:
部署图:
安全功能环境层DFD图:
安全功能第一层DFD:
安全功能2层DFD图:
安全功能3层DFD图:
安全功能顺序图:
整体体系结构图:
五、程序源代码。
该程序实现时对硬件接口的要求较高,才开始没能通过代码实现,不过后来在老师的指点之下,自己尝试将加密这块用代码实现了。
#include"stdafx.h"
#include"加密.h"
#include"加密Dlg.h"
#include"jsq.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}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)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyDlgdialog
CMyDlg:
:
CMyDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_name=_T("");
m_psw=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMyDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Text(pDX,IDC_EDIT1,m_name);
DDX_Text(pDX,IDC_EDIT2,m_psw);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg,CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyDlgmessagehandlers
BOOLCMyDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMyDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCMyDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMyDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMyDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(TRUE);
if(m_name=="admin"&&m_psw=="123456")
{
//MessageBox("登录成功!
");
CDialog:
:
OnOK();//关闭登录界面
}
else
{
MessageBox("登录失败,请重新登录!
");
m_name="";
m_psw="";
UpdateData(FALSE);
}
//
}
voidCMyDlg:
:
OnCancel()
{
//TODO:
Addextracleanuphere
CDialog:
:
OnCancel();
}
六、给出详细的测试方案,编写测试用例
我预设的用户名为:
admin密码123456
如果密码正确,将会自动登录,否则,则会跳出提示密码错误对话框。
测试用例:
1.用户名错误我输入abc,则提示用户名错误,请重新输入。
2.密码错误当用户名输入admin密码输入070032时,则提示密码错误,只有当密码及用户名均输入正确的情况下才能登陆,并进入下一个界面。
七、课题小结
每学年期末都有一次课程设计,这对我们巩固所学的知识有着及其重要的意义。
通过课程设计,我们对以前学过的知识有了更系统的回顾,我们把前两个学年学到的知识重新回顾并用到自己所选择的课题当中。
出于对21世纪人们对安全的要求越来越高,我选择了家用防盗系统的分析和设计。
因为对硬件以其许多别的接口要求较高,我没能用代码来实现整个过程,但是我对各个用例以及分析模型和设计模型进行了详细的分析和设计,在分析和设计的过程中,我熟练的运用Microsoftvisio及RationalRose,加深自己对课题的认识。
总之,这次课程设计收获很大。