ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:233.94KB ,
资源ID:8454178      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8454178.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ODBC数据库的通讯录课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于ODBC数据库的通讯录课程设计报告.docx

1、基于ODBC数据库的通讯录课程设计报告程序设计实践训练课程设计报告姓 名: 班 级: 学 号:指导老师: 日期: 2010.12.202010.12.31 摘 要计算机网络的快速发展,让我们的生活日新月异,电脑在各个领域占据着越来越重要的地位。达到有效利用电脑来发现连接在今天的fast-certification人与人之间的社区是一个非常重要的问题。通讯连结的前提下,我们必须要有联系的人我们想接触。通讯录是一种工具,广泛用于日常生活,各自的功能引起了极大的方便。但也正因为此,设计布局,以使系统简单,易于理解,全功能的通讯录是非常重要的。在这个过程中设计,我们用Microsoft Access

2、2003年,以构建一个数据库文件,然后在数据库文件创建一个许多领域数据库文件后,与Visual C + +通过视窗XP ODBC驱动连接,使用Visual C + +文档结构设计数据库应用程序实现添加、修改、删除、查询,记录的功能。美丽的界面设计让人们可以使用对话框来实现和谐人机交互。目 录1. 方案比较与选择41.1 方案描述41.2 方案比较51.3 方案选择52.系统分析与设计5 2.1 系统分析52.2 系统框图62.3 数据库设计73 系统功能实现与代码编写73.1 准备工作73.2 界面设计93.3 连接数据库113.4 代码编写 113.5 关键技术分析214. 讨论及进一步研究

3、和建议215. 成果显示226. 课程设计心得与体会24Abstract25参考文献 251方案比较与选择1.1方案描述方案一: 在MFC中进行数据库编程需要涉及4个基本的数据库类:CDatabase、CRecordest、CRecordView和CDException。一个CDatabase对象代表与数据源的一个链接。创建一个CDatabase对象后,就可以调用Open或OpenEx成员函数打开指定的数据源,从而建立起与底层数据源的链接。应用程序可以通过ExecuteSQL函数向数据源发出一条不需要返回数据的语言。CDatabase对象在使用完毕后通过Close函数关闭与数据源的连接。一个C

4、Recordset对象代表从一个数据源检索出的一组记录。CRecordset类支持多种类型的记录集,常用的是动态集类型dynaset和快照类型snapshot。动态集类型是数据的动态集合,它支持双向滚动,能够与数据源的其他用户做出的更新保持同步;快照类型则是记录集被填充时数据的静态映像,它也支持双向滚动,但是不能保证与其他用户保持同步。如果使用快照类型的应用程序需要查看其他用户做出的改动,必须先关闭记录集后再重新打开。不管使用哪种类型的数据集,在数据集中添加或删除纪录之后都要调用Requery函数来更新数据集。构造CRecordset对象时需要一个CDatabase对象。如果将这个参数设置为控

5、制NULL,系统将创建一个临时的CDatabase对象。通过CDatabase的Open函数能够打开数据集并且执行默认的查询语句从数据源中获取数据,函数Close则用于关闭数据集、切断数据集和数据源的连接。在数据集中移动当前记录可以通过函数MoveFirst、MoveLast、MoveNext和MovePrev进行。如果添加和修改记录,需要先将记录集设置为AddNew和Edit状态,然后对数据集的变量进行赋值,最后通过Update函数完成写入操作。删除记录操作则通过Delete函数来完成。在执行数据库操作时可能会引发CDBException类型的异常。CDBException类由异常CExce

6、ption派生而来,成员m_strError指明了造成异常的原因,RecordError函数则能够直接弹出一个对话框说明造成异常的原因。CRecordView用对话框控件来显示数据库记录,可以把它看作是具有数据库操作功能的试图类,它能够像对话框一样在设计阶段就编辑好资源。方案二: 采用基本对话框模式,主界面上用列表控件来显示数据库,在方案一的基础上,此方案增加了一个查询功能,可分为精确查询和模糊查询。此查询方式是通过输入关键字的方法,然后在数据库中寻找数据,在列表控件中显示所查找的结果。除此之外,此方案对比上一个方案还增加了两个个对话框,例如当点击添加,修改按钮时,会对应弹出一个对话框,可在此

7、对话框中操作。1.2方案比较:方案一的设计思路及步骤清晰,程序代码设计思路以及实现的功能也较容易实现。但是此方案不能实现手动查询功能,而且在实现添加、删除、修改功能时,不能知道是否操作成功,要打开数据库才知道已经操作成功了,这对用户运用不方便。方案二的设计相对方案一来说详细多了。查询还分为精确查询和模糊查询,主界面直接显示数据库,直观方便,在增加和修改时另外弹出对话框,层次感强,而且增加和修改后可以马上刷新列表控件中的内容,非常直观。1.3方案选择: 由于两个方案都没有可以完全实现我们需要的功能,所以我们小组决定结合两个方案。即是将方案一的设计全部采用,再在方案二上采用其查询功能,但是不分精确

8、查询和模糊查询,只需要查询时显示相对应的数据即可。还有就是采用方案二中多对话框的方法,也就是在点击添加,修改按键之一时会弹出相对应的对话框供用户操作。还有就是采用方案二中的添加一个列表控件显示数据,这样方便用户查看。总而言之,我们的方案是取两个方案中我们需要的功能,将两者结合起来,实现另一个简单却全面的通讯录。2.系统分析与设计2.1系统分析通讯录的功能包括添加、修改、删除、查询四个主要功能,当添加记录时,弹出添加窗口,修改是弹出修改窗口,删除和查询在主界面显示,所以整个系统包括三个对话框。(1) 主界面通过主界面,可以用来显示通讯录的信息,包括查询和删除功能,当输入查询姓名查询时,系统检测该

9、姓名在通讯录表中是否存在,如果存在,就在主界面的列表控件显示出来。当选择删除按钮时,如果没有在列表中选中要删除的记录,则系统会提示需要选中记录,如果有,就直接删除该记录,并且刷新通讯录。(2) 增加记录窗口当点击主界面中的添加按钮时,就会弹出本对话框,用户可以输入新的记录,点击“确定”,完成记录的添加,同时系统刷新通信录。用户可以在主界面的列表中看到增加的记录。(3)修改记录窗口当点击主界面中的修改按钮时,如果用户没有在列表中选中要修改的记录,系统会提示要选中记录,如果有,就弹出本窗口,窗口中将显示所选记录的信息,用户可在其基础上修改,点击“确定”,完成记录的修改,同时系统刷新通讯录,你可以在

10、主界面的列表中看到该记录已被修改。2.2系统框图2.3数据库设计根据系统功能需求,数据库采用Microsoft Access 2003建立。Microsoft Access 2003是一个桌面级的数据库管理系统,简单易用,功能强大。支持的数据类型较丰富,操作简便。本通讯录设计为个人的简易通讯录,所以包括的信息较简单,有姓名、电话、地址和e-mail四项。根据设计要求,本系统的数据库设计如下表1。表1 通讯录信息表字段名称数据类型字段属性字段大小描述必填字段ID自动编号长整型序号NAME文本50姓名是TEL文本50电话否ADDRS文本50地址否EMAIL文本50邮箱否3系统功能的实现和代码编写3

11、.1准备工作通过数据库的设计得到一个Access数据库文档:TXL.mdb。为了使程序能访问数据库,需要把数据库注册到ODBC驱动程序管理器。ODBC管理程序把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句提示DBMS(数据库管理系统)完成数据库的访问工作。(1)打开如图3-1所示的ODBC数据源管理器。 图3-1-1 ODBC数据源管理器(2)在【用户DSN】选项卡中单击【添加】按钮,弹出【创建新数据源】对话框,如图3-2所示。选择Access数据库对应的驱动程序“Microsoft Access Driver(*.mdb)”,并单击【完成】按钮。 图3-1-2 选择Acce

12、ss驱动程序(3)此时弹出【ODBC Microsoft Access安装】对话框,如图3-3所示。单击【选择】按钮,选择要配置的数据库文件TXL.mdb,并输入数据源名称“TXL”。单击【确定】按钮就可以了。 图3-1-3 【ODBC Microsoft Access安装】对话框(4)创建项目根据需要分析和系统的功能,用Visual C+6.0创建一个基于对话框的MFC App Wizard(exe)项目,项目名为Address。创建项目后,会呈现出一个对话框,本系统就在该对话框基础上开始设计的。3.2界面设计(1)主界面设计通讯录的主界面设计如图3-2-1 图3-2-1主界面设计图对话框设

13、置为:IDD_MAIN_DIALOG、宋体、9.其中主要的控件属性设置以及功能如表2。 表2 IDD_MAIN_DIALOG对话框中的主要控件控件类型ID属性设置ButtonIDC_BUTTON_ADDCaption设为“添加”ButtonIDC_BUTTON_MODIFYCaption设为“修改”ButtonIDC_BUTTON_DELETECaption设为“删除”ButtonIDC_BUTTON_SEARCHCaption设为“查询”ButtonIDC_BUTTON_EXITSEARCHCaption设为“退出查询”Static Text默认Caption设为“请输入姓名查询”Group

14、 Box默认Caption设为“功能区”Edit BoxIDC_INPUT默认Edit BoxIDC_LIST1View选中Report(2)增加记录界面设计当点击主界面中的添加按钮时,就会弹出增加记录的界面,设计图如图3-2-2 3-2-2 添加记录界面设计图对话框设置为:IDD_ADD_DIALOG,标题为“添加记录”。其中的主要控件如表3。 表3 添加/修改记录界面控件表控件类型ID属性设置Static Text默认Caption设为“姓名”Static Text默认Caption设为“电话”Static Text默认Caption设为“地址”Static Text默认Caption设为

15、“e-mail”Edit BoxIDC_EDIT_NAME默认Edit BoxIDC_EDIT_TEL默认Edit BoxIDC_EDIT_ADDRS默认Edit BoxIDC_EDIT_EMAIL默认ButtonIDOK Caption设为“”ButtonIDCANCELCaption设为“”(3)修改记录界面设计当点击主界面修改按钮时,就会弹出修改记录界面,如图3-3-3 图3-3-3 修改记录界面设计图其对话框设置为:IDD_MOD_DIALOG,标题为修改记录。其中主要的控件同增加记录界面一样,如表3.3.3连接数据库添加CPersonSet类与数据库中的TXL表连接。CPersonS

16、et的Base Class是CRecordSet。在Database Options对话框中选择“ODBC”作为数据源,选择已注册的数据源TXL,在Select Database Tables对话框中选择要绑定的表TXL。3.4代码编写(1)功能函数RefreshData:从数据库获取通讯录信息,加入到列表控件中,刷新数据显示。定义如下:public: void RefreshData();实现如下:void CMAINDLG:RefreshData()/对列表控件的内容更新,清空原来的内容 m_ctrlperson.DeleteAllItems(); m_ctrlperson.SetRedr

17、aw(FALSE); /创建记录集 CPersonSet m_personset(&m_database); m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query); CDBVariant varValue; char buf20; /用来记录当前记录的序号 int i=0; /如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录 if(m_personset.GetRecordCount()!=0) m_personset.MoveFirst(); while(!m_personset.IsEOF() int temp=0;

18、/对整型数字的处理 m_personset.GetFieldValue(temp,varValue); sprintf(buf,%d,varValue.m_lVal);m_ctrlperson.InsertItem(i,buf); /对字符串显示处理 /m_personset.GetFieldValue(0,varValue); /m_ctrlperson.SetItemText(i,0,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(1,varValue); m_ctrlperson.SetItemText(i,1,var

19、Value.m_pstring-GetBuffer(1); m_personset.GetFieldValue(2,varValue); m_ctrlperson.SetItemText(i,2,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(3,varValue); m_ctrlperson.SetItemText(i,3,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(4,varValue); m_ctrlperson.SetItemText(i,4,

20、varValue.m_pstring-GetBuffer(1); m_personset.MoveNext(); i+; m_ctrlperson.SetRedraw();(2)初始化对话框。初始化列表控件,并填充通讯录信息。代码如下:BOOL CMAINDLG:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here /确定列名 m_ctrlperson.InsertColumn(0,序号); m_ctrlperson.InsertColumn(1,姓名); m_ctrlperson.Insert

21、Column(2,电话); m_ctrlperson.InsertColumn(3,地址); m_ctrlperson.InsertColumn(4,e-mail); /重新分配列宽 m_ctrlperson.SetColumnWidth(0,60); m_ctrlperson.SetColumnWidth(1,60); m_ctrlperson.SetColumnWidth(2,100); m_ctrlperson.SetColumnWidth(3,150); m_ctrlperson.SetColumnWidth(4,180); m_ctrlperson.SetExtendedStyle(

22、LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES); m_query.Format(select * from TXL order by ID ASC); RefreshData(); return TRUE; (3)查询功能按钮的代码实现这个功能的实现通过两个函数完成,首先查询按钮的代码。当点击查询按钮时,如果没有输入姓名的话,系统会提示要输入姓名查询,如果有输入姓名,则执行SearchData();“添加”按钮:void CMAINDLG:OnButtonSearch() / TODO: Add your control notification handler

23、 code here UpdateData(TRUE); CPersonSet m_personset;/定义CPersonset类的对象 CString m_tablefield; m_tablefield.Format(NAME); if(!m_input.IsEmpty() m_searchSQL.Format(select * from TXL where %s=%s,m_tablefield,m_input); SearchData(); else MessageBox(请填写查询关键字,提示,MB_OK|MB_ICONINFORMATION); GetDlgItem(IDC_INP

24、UT)-SetFocus(); SearchData()函数根据输入的姓名,在数据库中搜索,当找到时,将查询结果通过列表控件显示。函数定义如下:public: void SearchData();代码编写如下:void CMAINDLG:SearchData() /对列表控件的内容更新,清空原来的内容 m_ctrlperson.DeleteAllItems(); /创建记录集 CPersonSet m_personset(&m_database); m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_searchSQL); CDBVariant varValu

25、e; char buf20; /用来记录当前记录的序号 int i=0; /如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录 if(m_personset.GetRecordCount()!=0) m_personset.MoveFirst(); while(!m_personset.IsEOF() int temp=0; /对整型数字的处理 m_personset.GetFieldValue(temp,varValue); sprintf(buf,%d,varValue.m_lVal);m_ctrlperson.InsertItem(i,buf); /对字符串显示处

26、理 /m_personset.GetFieldValue(0,varValue); /m_ctrlperson.SetItemText(i,0,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(1,varValue); m_ctrlperson.SetItemText(i,1,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(2,varValue); m_ctrlperson.SetItemText(i,2,varValue.m_pstring-GetBuff

27、er(1); m_personset.GetFieldValue(3,varValue); m_ctrlperson.SetItemText(i,3,varValue.m_pstring-GetBuffer(1); m_personset.GetFieldValue(4,varValue); m_ctrlperson.SetItemText(i,4,varValue.m_pstring-GetBuffer(1); m_personset.MoveNext(); i+; (4)“添加”功能当点击添加按钮时,弹出添加对话框,代码实现如下:void CMAINDLG:OnButtonAdd() /

28、TODO: Add your control notification handler code here m_database.Close(); CADDDLG DLG; /CADDDLG是为添加记录对话框建的类 DLG.m_database.Open(_T(TXL); DLG.DoModal(); RefreshData(); /添加完成时,要更新数据库显示在添加记录对话框中,输入信息,点击确定按钮实现添加功能。“添加”功能实现:void CADDDLG:OnOK() / TODO: Add extra validation here UpdateData(TRUE);/得到输入的内容 CString strSQL,strchkSQL; int i=1; int flag=0; /从主码为1开始在数据库的相应表中搜索,如果找到记录,则主码值加1,直到数据库中 /无该主码值对应的记录,则将该主码值分配给新的记录 if(!m_name.IsEmpty()/如果姓名填写了 while(!flag) CPersonSet m_recordset(&m_databa

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1