收藏 分销(赏)

学生通讯录管理系统说明书毕业设计论文.doc

上传人:胜**** 文档编号:2906141 上传时间:2024-06-11 格式:DOC 页数:20 大小:425KB
下载 相关 举报
学生通讯录管理系统说明书毕业设计论文.doc_第1页
第1页 / 共20页
学生通讯录管理系统说明书毕业设计论文.doc_第2页
第2页 / 共20页
学生通讯录管理系统说明书毕业设计论文.doc_第3页
第3页 / 共20页
学生通讯录管理系统说明书毕业设计论文.doc_第4页
第4页 / 共20页
学生通讯录管理系统说明书毕业设计论文.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、No.20课程设计说明书学生通讯录管理系统1课程设计的目的计算机有着广泛的应用,通讯录是它的应用之一。计算机本身有着许多传统系统文件无法超越的优点,比如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。利用这些优点提高通信录管理的效率,是企业的高效化、正规化正确选择与世界接轨的重要条件。本次设计主要实现通讯录的查询、添加、修改、删除等功能,进行控件添加、编写代码的程序设计。人际交往是非常普遍,同时也非常重要的,大量的人员交往和联系,能够达到信息的交流,共同完成合作项目,随着各种信息量的剧增,单独处理好联系通讯录有非常重要的意义,信息分类能使事务处理条理清晰,通讯录可以单独处理

2、人力资源信息,提高管理工作效率。通过通讯录这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。 通讯录使我们每个人必不可少的一个工具,此通讯录系统利用VC+设计完成,ACCESS数据库。本着人性化的设计,此系统包括了联系人的姓名、电话、地址、E-mail、分组、和备注等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的所需。针对以上要求,简易通讯管理系统具有以下特点:1,操作简单,所有人不需学习就可以用的系统。2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息。3界面显示信息完整,界面上每一个编辑框显示一条联系

3、人信息,很清楚地显示了联系人的全部信息。2设计方案及论证2.1可行性分析2.1.1调查分析系统的初步调查是系统设计规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。正式开发管理信息系统之前进行调研是非常必要的,其必要性主要表现在以下几个方面。(1)明确用户的要求,以便根据调查结果进行可行性分析,确认系统的开发是否可行。(2)提出新系统的人员并不都是系统研究人员,有些人对功能和处理数据的方法没明确的认识。他们只是根据自已业务工作的需要提出了要求,系统开发人员要对此进行详细的调查和分析,确认用户的要求可以通过现有的计算技术来实现,保证开发的管理信息系统的功能与

4、用户提出的要求相吻合。2.1.2系统分析通讯录使我们每个人必不可少的一个工具,此通讯录系统利用VC+设计完成,ACCESS数据库。本着人性化的设计,此系统包括了联系人的 学号,姓名、电话、家庭住址、E-mail、qq、和宿舍等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的所需。对于通讯录功能的实现采用添加控件的方法,在程序设计中,采用了面向对象解决问题的方法。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。针对以上要求,简易通讯管理系统具有以下特点:1,操作简单,所有人不需学习就可以用的系统。2,输入简单,输

5、入框都有相关提示,我们可以按照提示输入相关信息。3界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。2.1.3系统总体设计系统的功能结构是根据需求分析的结果来设计的,根据系统详细分析,超市管理系统共分为六个模块,分别为:数据输入、数据添加、数据修改、查找、删除、浏览。系统功能模块图如图1所示。通讯录管理系统数据输入数据修改删除数据添加查找浏览图1 系统功能模块图2.2数据库设计2.2.1实体-属性图这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。E-R图为实体-联系图,提供了表示实体型、属

6、性和联系的方法,用来描述现实世界的概念模型。 将现实世界的实体,属性和联系转化为抽象的概括的概念模型。构成E-R图的基本要素是实体型、属性和联系。通讯录管理的实体-属性图,如图2所示。图2通讯录管理的实体-属性图2.2.2数据库逻辑设计将关系模型转换成具体DBMS支持的实际关系数据模型,如下面的几个表格所示。列名数据类型是否为空字段宽度默认值说明编号int否20主键姓名字符型否10性别字符型否10手机号码字符型否10QQ号码字符型否10电子邮件字符型否10家庭地址字符型否10当前地址字符型否10图2数据库结构图3数据库在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关

7、系,即关系模型。设计关系模型并对其进行优化:确定数据依赖,给出关系模式中的主码,明确其依赖关系。对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。对照数据依赖的理论对各个关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖,确定各个关系模式分别所属的范式类型。按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,对某些模式检查是否有合并或分解的需要。对关系模式进行必要的分解,提高数据操作效率和存储空间的利用率。2.2.3连接数据库#defineProvider Provider=SQLOLEDB.1;IntegratedSecurity=SSPI

8、;Persist Security Info=False;Initial Catalog=Cateringvoid ADOConn:OnInitADOConn() HRESULT hr; :CoInitialize(NULL); try hr = m_pCon.CreateInstance(ADODB.Connection); if (SUCCEEDED(hr) m_pCon-ConnectionTimeout = 3;/ m_pCon-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Catering.mdb,adMo deUnknown);

9、 m_pCon-Open(_bstr_t(Provider), , adModeUnknown); else AfxMessageBox(创建连接对象失败!);catch ( _com_error exp)AfxMessageBox(数据库未连接);AfxMessageBox(exp.Description();2.3详细设计图形界面设计主界面如图5所示图5主界面添加的控件ID号标题其他属性文本框IDC_STATIC_SELECT1 (Text Control)通讯录中所有记录如下表所示数据窗口IDC_ADDRESSLISTIDC_ADDRESSLIST按钮IDC_ADD添加按钮IDC_MOD

10、IFY修改按钮IDC_DELETE删除按钮IDC_SEARCH查找按钮IDC_BUTTON1显示全部按钮IDOK退出主要有实现查询功能的CEx_ODBC29View: OnButtonQuery()函数,实现添加功能的CEx_ODBC29View:OnRecAdd()函数,实现修改功能的void CEx_ODBC29View:OnRecEdit()函数,实现删除功能的CEx_ODBC29View:OnRecDel()OnButtonQuery()函数的内容和功能:m_strQuery是控件IDC_EDIT_QUERY的变量,这个变量用来判断查询的姓名是否为空关闭记录集,m_pSet-m_str

11、Filter.Format(pname=%s,m_strQuery)语句用于指定查询的条件,pname是表connection的字段名;m_pSet-m_strSort=ptelephone语句用于按ptelephone字段从小到大排序,ptelephone是表connection的字段名; UpdateData(FALSE)自动更新表单中控件显示的内容。MessageBox(要查询的联系人不能为空!), MessageBox(没有查到你要找的联系人!)用于反馈用户操作。在主界面上选择添加按钮如图6所示图6添加记录添加的控件ID号标题其他属性输入框IDC_DEIT_NAME下拉列表框IDC_C

12、OMBO_GENDERIDC_COMBO_GENDER按钮IDOK确定按钮IDCANCEL取消文本框IDC_NAME1姓名:文本框IDC_GENTER性别:文本框IDC_TELEPHONE手机号码:输入框IDC_EDIT_TELE文本框IDC_QQQQ号码:文本框IDC_EMAIL电子邮箱:文本框IDC_HOEMADDRESS家庭地址:文本框IDC_CURRENTADDRESS当前地址:输入框IDC_EDIT_QQ输入框IDC_EDIT_EAMIL输入框IDC_EDIT_HOME输入框IDC_EDIT_CURRENTOnRecAdd()函数的内容和功能:由于增加和显示记录在同一个界面出现,容易

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

14、能:修改函数首先选中要修改的信息,即把主界面的信息传值给“联系人信息表”如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单选框ID

15、C_RADIO_NAME姓名单选框IDC_RADIO_TELE手机号码单选框IDC_RADIO_QQQQ号码按钮IDOK确定按钮IDCANCEL取消在OnRecDel()函数中,m_pSet-GetStatus(status)获取当前记录集状态,m_pSet-Delete()删除当前记录if(status.m_lCurrentRecord=0)若当前记录索引号为0 ,m_pSet-MoveNext()下移一记录m_pSet-MoveFirst()移动到第一个记录,UpdateData(FALSE)控件显示成员变量的值。 如操作错误则出现如图9所示提示图9错误提示2.5部分程序代码【1】/ Li

16、stTestCtrl.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_FILEstatic char THIS_FILE = _FILE_;#endif/ CListTestCtrlAppBEGIN_MESSAGE_MAP(CListTestCtrlApp, CWinApp)/AF

17、X_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!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CListTestCtrlApp constructionCListTestCtrlApp:CListTestCtrlApp()/ TODO: add construct

18、ion code here,/ Place all significant initialization in InitInstance/ The one and only CListTestCtrlApp objectCListTestCtrlApp theApp;/ CListTestCtrlApp initializationBOOL CListTestCtrlApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wi

19、sh to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endif USkinI

20、nit(NULL,NULL,_T(skinVista.msstyles);CListTestCtrlDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code here to handle when the dialog is/ dismissed with OKelse if (nResponse = IDCANCEL)/ TODO: Place code here to handle when the dialog is/ dismissed with Can

21、cel USkinExit();/ Since the dialog has been closed, return FALSE so that we exit the/ application, rather than start the applications message pump.return FALSE;3运行结果与分析3.1 系统界面主界面如图所示图5主界面“添加”按钮调用函数OnAddRecord()并打开如图对话框,其完整代码如下:void CListTestCtrlDlg:OnAddRecord() CAddRecordDlg dlg;CString str;if(dlg

22、.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);elsem_pRecordset-MoveLast();CString strValue;m_pRecordset-GetFieldValue(short)(0),strValue

23、);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);m_sqlString = Insert into BasicInfo values; m_sqlString += str;if(m_pRecordset-IsOpen()m_pRecordset-Close

24、();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(content

25、s.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() if(m_pos = NULL )MessageBox(没?有D选?择?记?录?

26、!,错误提示?,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_s

27、elect,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,dl

28、g.m_current,id);m_sqlString = Update BasicInfo set ;m_sqlString += str;if(m_pRecordset-IsOpen()m_pRecordset-Close();trym_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);

29、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改?成功|!,信?息提示?);其调用界面如下:图7修改记录“删除”按钮调用函数OnDelete()其完整代码如下:void CListTestCtrlDlg:OnDelete() if(m_pos = NULL )MessageBox

30、(没?有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();trym_pDatabase-ExecuteSQL(m_sqlString);m_pReco

31、rdset-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 hereCSearchRecordDlg dlg;if(dlg.

32、DoModal() =IDOK)switch(dlg.m_flag)case 0:m_sqlString.Format(Select *from BasicInfo where 姓?名?=%s,dlg.m_contents);break;case 1:m_sqlString.Format(Select *from BasicInfo where 手?机号?码?=%s,dlg.m_contents);break;case 2:m_sqlString.Format(Select *from BasicInfo where QQ号?码?=%s,dlg.m_contents);break;if(m_p

33、Recordset-IsOpen()m_pRecordset-Close();trym_pRecordset-Open(CRecordset:snapshot,m_sqlString.GetBuffer(m_sqlString.GetLength();catch(CDBException *e)e-ReportError();int recordCount = m_pRecordset-GetRecordCount();if(recordCount = 0)MessageBox(不?存?在该?记?录?,信?息提示?);return;elsem_selectCtrl.SetWindowText(

34、_T(查找的?记?录?如?下?表所示?);/清?除y以?前的?所有D记?录? 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.iItem = i; m_item.iSubItem = 0; m_pRe

35、cordset-GetFieldValue(short)0,str); 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设计体会 通过通讯录管理系统课程设计,我学到了很多东西,感受到计算机的强大功能和巨大用处,在做的过程中遇到的一些困难,在同学热心帮助下顺利解决了,与同学之间

36、的讨论让我受益匪浅,我明白了讨论和独立思考的重要性,我相信在以后的学习的过程中,我会不断前进。通讯录管理系统的主要内容有用Microsoft Access 建立一个数据表,用ODBC连接数据源3,用MFC建立一个单文档应用程序,在对话框设计模板中添加必要的控件,为控件添加相关联变量,选择变量的类型、类别,设定变量的大小,变量的大小。用MFC ClassWizard 为控件添加消息映射,为消息函数OnButtonQuery()、OnRecAdd()、OnRecEdit()、OnRecDel()、OnOK()添加代码,实现查询、添加、修改、删除功能。通过设计基本满足了通讯录系统的需求,但是这个设计比较简单,一些其他方面的功能没有得到体现,比如联系人的生日,日期,记录的统计。5参考文献1安忠,基于VC+的管理信息系统 M.北京:中国铁道出版社.2007,01:10-51.2陈禹,信息系统分析与设计M.北京:电子工业出版社.2003,06:105-1223杨芙清、梅宏、李克勤. Visual C+信息管理程序设计技术J,电子学报,2004,11:52-97 沈 阳 大 学

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服