系统软件实践课程设计报告通讯录管理系统.docx
《系统软件实践课程设计报告通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《系统软件实践课程设计报告通讯录管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
系统软件实践课程设计报告通讯录管理系统
北京化工大学北方学院
课程设计报告
课程名称系统软件实践课程设计
设计题目通讯录管理系统
专业、班级
学号
姓名
指导教师
设计时间
2011年9月30日
一、引言(简要说明设计题目的目的、意义、内容、主要任务等)
1、设计题目的目的及意义:
由于纸制或电子形式的通讯录,携带不方便,或容易忘记等方面的缺点,所以要开发一个网络通讯录管理系统,该系统本着方便,快捷的宗旨,为用户提供更安全,便捷的操作环境。
用户注册、登录功能;登录后,显示出与当前用户相关的联系人名单;添加新联系人;删除联系人;根据联系人类型查找联系人信息。
根据以上要求,开发一个网络通讯录管理系统。
2、设计题目的主要内容:
建立通讯录信息,信息至少包括:
序号,姓名,性别,生日,E-mail,家庭住址,工作单位,手机号码,家庭电话,办公电话等;能够提供添加、删除和修改通讯录信息的功能;能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;将通讯录保存在文件中;能够按表格方式输出通讯录信息。
3、设计题目的主要任务及功能:
主要包含一下多种功能:
用户登录验证;
添加:
添加通讯录记录;
显示:
显示通讯录记录;
删除:
删除通讯录记录;
查询:
查询通讯录记录查找所有联系人;
修改:
修改通讯录记录;按照类别查找联系人;
保存:
将信息保存到文件。
二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。
正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。
)
1、主要内容
本系统为基于VisualC++的网络通讯录管理系统,该通讯录管理系统规划模块如下:
(1)用户登录验证
(2)添加新联系人
(3)删除联系人信息
(4)查找所有联系人
(5)修改联系人
2、系统说明及开发平台:
(1)使用VisualC++6.0作为本次系统的开发工具。
因为VisualC++6.0是功能最为强大可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。
因此VisualC++又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。
(2)使用Access做为本次开发软件的数据库。
因为Access被集成在MicrosoftOffice中。
Access数据库处理的基本结构,采取关系型数据库模式。
与其他的数据库系统相比,Access更加简单易学,一个普通的计算机用户可以很快地掌握它。
Access2000的功能十分强大,利用它可以方便地实现对信息保存、维护、查询、统计、打印、交流、发布,而且它可以十分方便地与Office其他组件交流数据,这些功能对一个一般用户而言已经足够了。
3、本系统功能模块
通讯录管理系统需要实现的功能主要有四大块:
●增加的功能模块
●修改的功能模块
●删除的功能模块
●查询的功能模块
其中增加的功能模块和查询的功能模块是整个系统的核心。
a.增加的功能模块:
(1)编写基本信息和联系方式。
基本信息包括:
序号,姓名,性别,生日,E-mail,家庭住址,工作单位;
联系方式包括:
手机号码,家庭电话,办公电话。
b.修改的功能模块:
c.查询的功能模块:
(1)选择查询类别:
根据相应的类别对所有记录进行所需查询。
此查询包括:
姓名,家庭住址,手机号码,办公电话。
(2)输入关键字:
根据相应的关键字进行所需查询。
(3)精确查询:
根据相应的关键字信息进行所需查询。
(4)模糊查询:
根据相应的不完全的关键字进行所需查询。
d.删除的功能模块:
(1)首先选择将删除的通讯录信息。
(2)确定是否真的删除该项。
(3)数据备份:
对现有的数据库信息的保存。
3、设计说明:
(1)在线通讯录数据库、表设计:
数据库名称:
addresslist
表1:
数据表password
表2:
数据表person
(2)在线通讯录的实体类和功能实现的部分代码:
a、通讯录"关于"对话框
/////////////////////////////////////////////////////////////////////////
//类名:
CAboutDlg
//功能:
通讯录"关于"对话框
/////////////////////////////////////////////////////////////////////////
#include"stdafx.h"
#include"Address.h"
#include"AddressDlg.h"
#include"PswdSet.h"
#include"MainDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//Construction
public:
AboutDlg(CWnd*pParent=NULL);//standardconstructor
//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)
virtualBOOLOnInitDialog();
afx_msgvoidOnSTATICmail();
//}}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)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CAddressDlgdialog
CAddressDlg:
:
CAddressDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CAddressDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CAddressDlg)
m_password=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
count=0;
seconds=23;
}
voidCAddressDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddressDlg)
DDX_Control(pDX,IDC_EDIT1,m_ctrlpassword);
DDX_Text(pDX,IDC_EDIT1,m_password);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAddressDlg,CDialog)
//{{AFX_MSG_MAP(CAddressDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_CLOSE()
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CAddressDlgmessagehandlers
BOOLCAddressDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
m_ctrlpassword.SetFocus();
SetTimer(0,800,NULL);
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCAddressDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCAddressDlg:
:
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.
HCURSORCAddressDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
b、登录验证需要输入密码
///////////////////////////////////////////////////////////////////////////////
//名称:
OnOk
//功能:
要求输入密码
//////////////////////////////////////////////////////////////////////////////
voidCAddressDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
CPswdSet*m_recordset=newCPswdSet(&m_database);
CStringstrSQL;
UpdateData(TRUE);//读入用户输入的密码
strSQL.Format("select*frompasswordwherePASSWORD='%s'",m_password);
m_recordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);//从数据库中查找,输入的密码是否正确
if(m_recordset->GetRecordCount()==0)
{
if(count<2)
{
MessageBox("密码错误!
机会不多了。
","提示",MB_OK|MB_ICONWARNING);
count++;//登录次数加1
m_password.Empty();
m_ctrlpassword.SetFocus();
UpdateData(FALSE);
}
else
{
MessageBox("你无权使用此系统!
","警告",MB_OK|MB_ICONHAND);
m_database.Close();//关闭数据库
CDialog:
:
OnOK();//关闭对话框
}
}
//如果登录成功,则打开通讯录的主界面
else
{
m_database.Close();
CMainDlgm_dlg;
m_dlg.m_database.Open(_T("addresslist"));
KillTimer(0);//关闭定时器
CDialog:
:
OnOK();
m_dlg.DoModal();
}
}
c、关闭登陆界面
////////////////////////////////////////////////////////////////////////
//名称:
OnClosr
//功能:
关闭登陆界面
/////////////////////////////////////////////////////////////////////////
voidCAddressDlg:
:
OnClose()
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
KillTimer(0);
CDialog:
:
OnClose();
}
d、设置登陆界面文字的颜色
/////////////////////////////////////////////////////////////////////////
//名称:
OnCtrlColor
//功能:
设置登陆界面文字的颜色
////////////////////////////////////////////////////////////////////////
HBRUSHCAddressDlg:
:
OnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor)
{
HBRUSHhbr=CDialog:
:
OnCtlColor(pDC,pWnd,nCtlColor);
//TODO:
ChangeanyattributesoftheDChere
pDC->SetTextColor(RGB(255,0,0));
//TODO:
Returnadifferentbrushifthedefaultisnotdesired
returnhbr;
}
BOOLCAboutDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
e、登陆界面,在登陆过程中倒计时20秒,若密码错误或登陆不成功,则自动返回。
/////////////////////////////////////////////////////////////////////////
//名称:
Ontimer
//功能:
实现登陆界面上的倒计时功能
/////////////////////////////////////////////////////////////////////////
voidCAddressDlg:
:
OnTimer(UINTnIDEvent)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CStringstr;
seconds--;
str.Format("%d",seconds);
this->SetWindowText("欢迎进入MY通讯录("+str+")秒");
if(seconds==0)
{
KillTimer(0);
CAddressDlg:
:
OnCancel();
}
CDialog:
:
OnTimer(nIDEvent);
}
4、测试过程中的部分截图:
(1)登陆主界面:
(2)登陆成功后,显示主菜单:
(3)增加记录的界面:
(4)修改记录的界面:
(5)删除界面会给出相应的提示框:
(6)点击“查询记录”,会自动展开下方的“记录查询区”:
(7)查询结果显示如下:
(8)点击“账户”,可以进行修改密码的操作:
(9)密码修改成功:
(10)点击“帮助”菜单,选择“功能概述”:
(11)点击“帮助”菜单,选择“注意事项”:
(12)点击“帮助”菜单,选择“特点展示”:
(13)点击“帮助”菜单,选择“关于通讯录”:
(14)点击“文件”菜单,选择“退出系统”:
三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。
)
首先,经过一周的编程及报告总结,我对VisualC++这门学科有了新的认识,本人实在是获益不浅!
要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。
这次设计,让我重新掌握了java语言,而且还得到了用VisualC++解决实际问题的宝贵经验。
其次,通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的数据库的相关知识。
同时也学到了一些没学过的知识,让我从中收益非浅!
更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!
第三,当我选择通讯录这个题目时,认为是不难的,但在课程设计之初就遇到了许多问题,我深刻体会到老师发挥的重要作用,在匆忙的学习中VisualC++语言程序对我们来说还不熟练,但在老师的帮助下我学会了如何调试,如何查找系统中的错误,并努力尝试连接数据库,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的。
我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
编完此程序后,我体会到学VisualC++和C语言都是不能死记硬背的,一定要灵活的使用才行。
在编写调试程序过程中我遇到了不少问题,也学到了不少东西。
经过两个星期的上机实践学习,使我对VisualC++有了更进一步的认识和了解,要想学好它重在实践,要不断的上机操作才能更好地学好计算机语言。
这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
我相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对VisualC++的操作有了进一步的掌握,还了解到了数据库的重要性。
在学习当中,我认识到学好计算机要重视实践操作,不仅仅是学习VisualC++,C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。
通过这次课程设计我认识了自己,相信对我今后的学习以及将来走向工作岗位打下了稳固的基础。
最后,再次感谢编程过程中老师的帮助和教诲。
四、参考文献
[1]马石安魏文平.VisualC++程序设计与应用教程.清华大学出版社.2009.8.
[2]何玉洁.数据库原理与应用.机械工业出版社.2009.7.
[3]邵兰洁.C++程序设计。
北京邮电大学出版社.2009.9.
五、指导教师评语
签名:
年月日
课程设计成绩(五级分制)