您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页学生通讯录管理系统说明书

学生通讯录管理系统说明书

来源:尚车旅游网
课程设计说明书 学生通讯录管理系统 1课程设计的目的 No.1

计算机有着广泛的应用,通讯录是它的应用之一。计算机本身有着许多传统系统文件无法超越的优点,比如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。利用这些优点提高通信录管理的效率,是企业的高效化、正规化正确选择与世界接轨的重要条件。本次设计主要实现通讯录的查询、添加、修改、删除等功能,进行控件添加、编写代码的程序设计。 人际交往是非常普遍,同时也非常重要的,大量的人员交往和联系,能够达到信息的交流,共同完成合作项目,随着各种信息量的剧增,单独处理好联系通讯录有非常重要的意义,信息分类能使事务处理条理清晰,通讯录可以单独处理人力资源信息,提高管理工作效率。通过通讯录这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。 通讯录使我们每个人必不可少的一个工具,此通讯录系统利用VC++设计完成,ACCESS数据库。本着人性化的设计,此系统包括了联系人的姓名、电话、地址、E-mail、分组、和备注等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的所需。 针对以上要求,简易通讯管理系统具有以下特点:1,操作简单,所有人不需学习就可以用的系统。2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息。3界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。 沈 阳 大 学 课程设计说明书

2设计方案及论证 2.1可行性分析 2.1.1调查分析 No.2

系统的初步调查是系统设计规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。 正式开发管理信息系统之前进行调研是非常必要的,其必要性主要表现在以下几个方面。 (1)明确用户的要求,以便根据调查结果进行可行性分析,确认系统的开发是否可行。 (2)提出新系统的人员并不都是系统研究人员,有些人对功能和处理数据的方法没明确的认识。他们只是根据自已业务工作的需要提出了要求,系统开发人员要对此进行详细的调查和分析,确认用户的要求可以通过现有的计算技术来实现,保证开发的管理信息系统的功能与用户提出的要求相吻合。 2.1.2系统分析 通讯录使我们每个人必不可少的一个工具,此通讯录系统利用VC++设计完成,ACCESS数据库。本着人性化的设计,此系统包括了联系人的 学号,姓名、电话、家庭住址、E-mail、qq、和宿舍等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的所需。对于通讯录功能的实现采用添加控件的方法,在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。 针对以上要求,简易通讯管理系统具有以下特点:1,操作简单,所有人不需学习就可以用的系统。2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息。3界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。 2.1.3系统总体设计 系统的功能结构是根据需求分析的结果来设计的,根据系统详细分析,超市管理系统共分为六个模块,分别为:数据输入、数据添加、数据修改、查找、删除、浏览。 系统功能模块图如图1所示。 沈 阳 大 学 课程设计说明书

通讯录管理系统 No.3

数据输入 数据添加 数据修改 查找 删除 浏览 图1 系统功能模块图 2.2数据库设计 2.2.1实体-属性图 这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。 E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。 将现实世界的实体,属性和联系转化为抽象的概括的概念模型。 构成E-R图的基本要素是实体型、属性和联系。 通讯录管理的实体-属性图,如图2所示。 图2通讯录管理的实体-属性图 2.2.2数据库逻辑设计 将关系模型转换成具体DBMS支持的实际关系数据模型,如下面的几个表格所示。 沈 阳 大 学 课程设计说明书

列名 编号 姓名 性别 手机号码 QQ号码 电子邮件 家庭地址 当前地址 数据类型 int 字符型 字符型 字符型 字符型 字符型 字符型 字符型 是否为空 否 否 否 否 否 否 否 否 字段宽度 20 10 10 10 10 10 10 10 默认值 No.4

说明 主键 图2数据库结构 图3数据库 在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系,即关系模型。设计关系模型并对其进行优化: 确定数据依赖,给出关系模式中的主码,明确其依赖关系。对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。对照数据依赖的理论对各个关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖,确定各个关系模式分别所属的范式类型。按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,对某些模式检查是否有合并或分解的需要。对关系模式进行必要的 沈 阳 大 学 课程设计说明书

分解,提高数据操作效率和存储空间的利用率。 2.2.3连接数据库 #define Provider \"Provider=SQLOLEDB.1;IntegratedSecurity=SSPI; No.5

Persist Security Info=False;Initial Catalog=Catering\" void ADOConn::OnInitADOConn() { try { hr = m_pCon.CreateInstance(\"ADODB.Connection\"); if (SUCCEEDED(hr)) { m_pCon->ConnectionTimeout = 3; HRESULT hr; ::CoInitialize(NULL); // m_pCon->Open(\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Catering.mdb\deUnknown); } m_pCon->Open(_bstr_t(Provider),\"\ } else } catch ( _com_error exp) { } AfxMessageBox(\"数据库未连接\"); AfxMessageBox(exp.Description()); AfxMessageBox(\"创建连接对象失败!\"); 沈 阳 大 学 课程设计说明书

2.3详细设计 图形界面设计主界面如图5所示 No.6

图5主界面 添加的控件 文本框 ID号 IDC_STATIC_SELECT1 (Text Control) 数据窗口 按钮 按钮 按钮 按钮 按钮 按钮 IDC_ADDRESSLIST IDC_ADD IDC_MODIFY IDC_DELETE IDC_SEARCH IDC_BUTTON1 IDOK 标题 通讯录中所有记录如下表所示 IDC_ADDRESSLIST 添加 修改 删除 查找 显示全部 退出 其他属性 主要有实现查询功能的CEx_ODBC29View:: OnButtonQuery()函数,实现添加功能的CEx_ODBC29View::OnRecAdd()函数,实现修改功能的void CEx_ODBC29View::OnRecEdit()函数,实现删除功能的CEx_ODBC29View::OnRecDel() 沈 阳 大 学 课程设计说明书

No.7

OnButtonQuery()函数的内容和功能:m_strQuery是控件IDC_EDIT_QUERY的变量,这个变量用来判断查询的姓名是否为空关闭记录集,m_pSet->m_strFilter.Format(\"pname='%s'\语句用于指定查询的条件,pname是表connection的字段名;m_pSet->m_strSort=\"ptelephone\"语句用于按ptelephone字段从小到大排序,ptelephone是表connection的字段名; UpdateData(FALSE)自动更新表单中控件显示的内容。MessageBox(\"要查询的联系人不能为空!\"), MessageBox(\"没有查到你要找的联系人!\")用于反馈用户操作。 在主界面上选择添加按钮如图6所示 图6添加记录 添加的控件 输入框 下拉列表框 按钮 按钮 文本框 文本框 ID号 IDC_DEIT_NAME IDC_COMBO_GENDER IDOK IDCANCEL IDC_NAME1 IDC_GENTER 标题 IDC_COMBO_GENDER 确定 取消 姓名: 性别: 其他属性 沈 阳 大 学 课程设计说明书

文本框 输入框 文本框 文本框 文本框 文本框 输入框 输入框 输入框 输入框 IDC_TELEPHONE IDC_EDIT_TELE IDC_QQ IDC_EMAIL IDC_HOEMADDRESS IDC_CURRENTADDRESS IDC_EDIT_QQ IDC_EDIT_EAMIL IDC_EDIT_HOME IDC_EDIT_CURRENT 手机号码: QQ号码: 电子邮箱: 家庭地址: 当前地址: No.8

OnRecAdd()函数的内容和功能:由于增加和显示记录在同一个界面出现,容易造成误操作。因此,在修改和添加记录数据之前,往往设计一个对话框用于获得所需要的数据,然后用该数据进行当前记录的编辑。这样就能避免它们的相互影响,且保证代码的相对性。获得所需数据的对话框名为“联系人信息表”,对话框资源的ID号是IDD_INFO_TABLE,对话框资源对应的类名为CInfoDlg,要进行添加操作,首先为这个类添加一个对象[2],以便引用控件变量,添加完信息确定之后,“联系人信息表”的内容传值给主界面对应的变量,如m_pSet->m_ptelephone=dlg.m_strPersonTelephone。 在主界面上点击修改按钮如图7所示 沈 阳 大 学 课程设计说明书

图7修改记录 No.9

OnRecEdit()函数的内容和功能:修改函数首先选中要修改的信息,即把主界面的信息传值给“联系人信息表”如dlg.m_strPersonTelephone=m_pSet->m_ptelephone;确定修改信息,则把“联系人信息表”的信息传值给主界面如m_pSet->m_ptelephone=dlg.m_strPersonTelephone;完成修改操作,也引用了系统功能函数m_pSet->Edit()修改当前记录,m_pSet->Update()将新记录存入数据库 在主界面上点击查找按钮如图8所示 图8查找记录 添加的控件 文本框 ID号 IDC_STATIC_SELECT 标题 请输入姓名: 其他属性 编辑框 单选框 单选框 单选框 按钮 按钮 IDC_EDIT_SELECT IDC_RADIO_NAME IDC_RADIO_TELE IDC_RADIO_QQ IDOK IDCANCEL 姓名 手机号码 QQ号码 确定 取消 在OnRecDel()函数中,m_pSet->GetStatus(status)获取当前记录集状态,m_pSet->Delete()删除当前记录if(status.m_lCurrentRecord==0)若当前记录索引号 沈 阳 大 学 课程设计说明书

UpdateData(FALSE)控件显示成员变量的值。 如操作错误则出现如图9所示提示 No.10

为0 ,m_pSet->MoveNext()下移一记录m_pSet->MoveFirst()移动到第一个记录, 图9错误提示 2.5部分程序代码【1】 // ListTestCtrl.cpp : Defines the class behaviors for the application. // #include \"stdafx.h\" #include \"ListTestCtrl.h\" #include \"ListTestCtrlDlg.h\" #include \"USkin.h\" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CListTestCtrlApp BEGIN_MESSAGE_MAP(CListTestCtrlApp, CWinApp) 沈 阳 大 学 课程设计说明书

//{{AFX_MSG_MAP(CListTestCtrlApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! No.11

//}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CListTestCtrlApp construction CListTestCtrlApp::CListTestCtrlApp() { } ///////////////////////////////////////////////////////////////////////////// // The one and only CListTestCtrlApp object CListTestCtrlApp theApp; ///////////////////////////////////////////////////////////////////////////// // CListTestCtrlApp initialization BOOL CListTestCtrlApp::InitInstance() { // Standard initialization // If you are not using these features and wish to reduce the size AfxEnableControlContainer(); // TODO: add construction code here, // Place all significant initialization in InitInstance 沈 阳 大 学 课程设计说明书

#ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL // of your final executable, you should remove from the following // the specific initialization routines you do not need. No.12

#else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif USkinInit(NULL,NULL,_T(\"skin\\\\Vista.msstyles\")); CListTestCtrlDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } // TODO: Place code here to handle when the dialog is // dismissed with Cancel // TODO: Place code here to handle when the dialog is // dismissed with OK USkinExit(); } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; 沈 阳 大 学 课程设计说明书

3运行结果与分析 3.1 系统界面 主界面如图所示 No.13

图5主界面 “添加”按钮调用函数OnAddRecord()并打开如图对话框,其完整代码如下: void CListTestCtrlDlg::OnAddRecord() { CAddRecordDlg dlg; CString str; if(dlg.DoModal() == IDOK) { int count = m_pRecordset->GetRecordCount(); if(0 == count) { str.Format(\"(%d,'%s','%s','%s','%s','%s','%s','%s')\",1,dlg.m_name,dlg.m_gender,dlg.m_tele,dlg.m_qq, dlg.m_email,dlg.m_homeAddress,dlg.m_currentAdderss); } else { m_pRecordset->MoveLast(); CString strValue; m_pRecordset->GetFieldValue((short)(0),strValue); int id = atoi(strValue.GetBuffer(strValue.GetLength())); str.Format(\"(%d,'%s','%s','%s','%s','%s','%s','%s')\",id+1,dlg.m_name,dlg.m_gender,dlg.m_tele,dlg.m_qq, dlg.m_email,dlg.m_homeAddress,dlg.m_currentAdderss); } 沈 阳 大 学 课程设计说明书

} No.14

m_sqlString = \"Insert into BasicInfo values\"; m_sqlString += str; if(m_pRecordset->IsOpen()) { m_pRecordset->Close(); } try { m_pDatabase->ExecuteSQL(m_sqlString); m_pRecordset->Open(CRecordset::dynaset,_T(\"select* from BasicInfo\")); } catch(CDBException *e) { e->ReportError(); } m_pRecordset->MoveLast(); CString contents; m_pRecordset->GetFieldValue((short)0,contents); m_list.InsertItem(m_list.GetItemCount()+1,contents.GetBuffer(contents.GetLength())); for(int j = 1;jGetODBCFieldCount();++j) { m_pRecordset->GetFieldValue((short)j,contents); m_list.SetItemText(count,j,contents.GetBuffer(contents.GetLength())); } } 其调用界面如下: 图6添加记录 “修改”按钮调用函数OnModifyRecord()并打开如图对话框,其完整代码如下: void CListTestCtrlDlg::OnModifyRecord() 沈 阳 大 学 课程设计说明书

No.15

{ if(m_pos == NULL ) { MessageBox(\"没?有®D选?择?记?录?!\",\"错䨪误¨®提¬¨¢示º?\",MB_OK); return; } m_select = m_list.GetNextSelectedItem(m_pos); CModifyRecordDlg dlg; dlg.m_name = m_list.GetItemText(m_select,1); dlg.m_gender = m_list.GetItemText(m_select,2); dlg.m_tele = m_list.GetItemText(m_select,3); dlg.m_qq = m_list.GetItemText(m_select,4); dlg.m_email = m_list.GetItemText(m_select,5); dlg.m_home = m_list.GetItemText(m_select,6); dlg.m_current = m_list.GetItemText(m_select,7); if(dlg.DoModal() == IDOK) { CString id = m_list.GetItemText(m_select,0); CString str; str.Format(\"手º?机¨²号?码?='%s',QQ号?码?='%s',电Ì?子Á¨®邮®¨º箱?='%s',家¨°庭ª£¤地Ì?址¡¤='%s',当Ì¡À前¡ã地Ì?址¡¤='%s' where 编À¨¤号? = %s\", dlg.m_tele,dlg.m_qq,dlg.m_email,dlg.m_home,dlg.m_current,id); m_sqlString = \"Update BasicInfo set \"; m_sqlString += str; if(m_pRecordset->IsOpen()) { m_pRecordset->Close(); } try { m_pDatabase->ExecuteSQL(m_sqlString); m_pRecordset->Open(CRecordset::dynaset,_T(\"Select * from BasicInfo\")); } catch(CDBException *e) { e->ReportError(); } m_list.SetItemText(m_select,3,dlg.m_tele); m_list.SetItemText(m_select,4,dlg.m_qq); m_list.SetItemText(m_select,5,dlg.m_email); m_list.SetItemText(m_select,6,dlg.m_home); m_list.SetItemText(m_select,7,dlg.m_current); MessageBox(\"修T改?成¨¦功|!\",\"信?息¡é提¬¨¢示º?\"); } } 其调用界面如下: 沈 阳 大 学 课程设计说明书

No.16

图7修改记录 “删除”按钮调用函数OnDelete()其完整代码如下: void CListTestCtrlDlg::OnDelete() { if(m_pos == NULL ) { MessageBox(\"没?有®D选?择?记?录?!\",\"错䨪误¨®提¬¨¢示º?\",MB_OK); return; } m_select = m_list.GetNextSelectedItem(m_pos); CDeleteRecordDlg dlg; if(dlg.DoModal() ==IDOK) { m_sqlString.Format(\"Delete from BasicInfo where 编À¨¤号?=%s\",m_list.GetItemText(m_select,0)); if(m_pRecordset->IsOpen()) { m_pRecordset->Close(); } try { m_pDatabase->ExecuteSQL(m_sqlString); m_pRecordset->Open(CRecordset::dynaset,_T(\"Select * from BasicInfo\")); } catch(CDBException *e) { e->ReportError(); } m_list.DeleteItem(m_select); this->OnShowAllReocrd(); } } “查找”按钮调用函数OnSearch()并打开如图对话框,其完整代码如下: void CListTestCtrlDlg::OnSearch() 沈 阳 大 学 课程设计说明书

{ // TODO: Add your control notification handler code here CSearchRecordDlg dlg; if(dlg.DoModal() ==IDOK) { switch(dlg.m_flag) { case 0: } if(m_pRecordset->IsOpen()) { } try { m_pRecordset->Close(); No.17

m_sqlString.Format(\"Select *from BasicInfo where 姓?名?='%s'\",dlg.m_contents); break; m_sqlString.Format(\"Select *from BasicInfo where 手º?机¨²号?break; m_sqlString.Format(\"Select *from BasicInfo where QQ号?码?='%s'\",dlg.m_contents); break; case 1: 码?='%s'\",dlg.m_contents); case 2: m_pRecordset->Open(CRecordset::snapshot,m_sqlString.GetBuffer(m_sqlString.GetLength())); } catch(CDBException *e) { } int recordCount = m_pRecordset->GetRecordCount(); if(recordCount == 0) { } else { m_selectCtrl.SetWindowText(_T(\"查¨¦找¨°的Ì?记?录?如¨?下?表À¨ª所¨´示º?\")); //清?除y以°?前¡ã的Ì?所¨´有®D记?录? MessageBox(\"不?存ä?在¨²该?记?录?\",\"信?息¡é提¬¨¢示º?\"); return; e->ReportError(); m_list.SetRedraw(TRUE); m_list.DeleteAllItems(); CString str; int nFields = m_pRecordset->GetODBCFieldCount(); 沈 阳 大 学 课程设计说明书

} LV_ITEM m_item; int i= 0; int j =0; m_pRecordset->MoveFirst(); while(!m_pRecordset->IsEOF()) { m_item.mask = LVIF_TEXT; m_item.iSubItem = 0; m_pRecordset->GetFieldValue((short)0,str); No.18

m_item.iItem = i; m_item.pszText = str.GetBuffer(str.GetLength()); m_list.InsertItem(&m_item); for(j =1;jGetFieldValue((short)j,str); m_list.SetItemText(i,j,str); } m_pRecordset->MoveNext(); ++i; } } } 其调用界面如下: 图8查找记录 沈 阳 大 学 课程设计说明书

4设计体会 No.19

通过通讯录管理系统课程设计,我学到了很多东西,感受到计算机的强大功能和巨大用处,在做的过程中遇到的一些困难,在同学热心帮助下顺利解决了,与同学之间的讨论让我受益匪浅,我明白了讨论和思考的重要性,我相信在以后的学习的过程中,我会不断前进。 通讯录管理系统的主要内容有用Microsoft Access 建立一个数据表,用ODBC连接数据源[3],用MFC建立一个单文档应用程序,在对话框设计模板中添加必要的控件,为控件添加相关联变量,选择变量的类型、类别,设定变量的大小,变量的大小。用MFC ClassWizard 为控件添加消息映射,为消息函数OnButtonQuery()、OnRecAdd()、OnRecEdit()、OnRecDel()、OnOK()添加代码,实现查询、添加、修改、删除功能。通过设计基本满足了通讯录系统的需求,但是这个设计比较简单,一些其他方面的功能没有得到体现,比如联系人的生日,日期,记录的统计。 沈 阳 大 学 课程设计说明书

5参考文献 No.20

[1] 安忠,基于VC++的管理信息系统 [M].北京:中国铁道出版社.2007,01:10-51. [2] 陈禹,信息系统分析与设计[M].北京:电子工业出版社.2003,06:105-122 [3] 杨芙清、梅宏、李克勤. Visual C++信息管理程序设计技术[J],电子学报,2004,11:52-97

沈 阳 大 学

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务