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

上传人:b****6 文档编号:8454178 上传时间:2023-01-31 格式:DOCX 页数:20 大小:233.94KB
下载 相关 举报
基于ODBC数据库的通讯录课程设计报告.docx_第1页
第1页 / 共20页
基于ODBC数据库的通讯录课程设计报告.docx_第2页
第2页 / 共20页
基于ODBC数据库的通讯录课程设计报告.docx_第3页
第3页 / 共20页
基于ODBC数据库的通讯录课程设计报告.docx_第4页
第4页 / 共20页
基于ODBC数据库的通讯录课程设计报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

《基于ODBC数据库的通讯录课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于ODBC数据库的通讯录课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。

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

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

 

程序设计实践训练课程设计报告

 

姓名:

班级:

学号:

指导老师:

日期:

2010.12.20~2010.12.31

 

摘要

计算机网络的快速发展,让我们的生活日新月异,电脑在各个领域占据着越来越重要的地位。

达到有效利用电脑来发现连接在今天的fast-certification人与人之间的社区是一个非常重要的问题。

通讯连结的前提下,我们必须要有联系的人我们想接触。

通讯录是一种工具,广泛用于日常生活,各自的功能引起了极大的方便。

但也正因为此,设计布局,以使系统简单,易于理解,全功能的通讯录是非常重要的。

在这个过程中设计,我们用MicrosoftAccess2003年,以构建一个数据库文件,然后在数据库文件创建一个许多领域数据库文件后,与VisualC++通过视窗XPODBC驱动连接,使用VisualC++文档结构设计数据库应用程序实现添加、修改、删除、查询,记录的功能。

美丽的界面设计让人们可以使用对话框来实现和谐人机交互。

 

目录

1.方案比较与选择…………………………………………………………………4

1.1方案描述………………………………………………………………………4

1.2方案比较………………………………………………………………………5

1.3方案选择………………………………………………………………………5

2.系统分析与设计……………………………………………………………………5

2.1系统分析………………………………………………………………………5

2.2系统框图………………………………………………………………………6

2.3数据库设计……………………………………………………………………7

3系统功能实现与代码编写…………………………………………………………7

3.1准备工作………………………………………………………………………7

3.2界面设计………………………………………………………………………9

3.3连接数据库…………………………………………………………………11

3.4代码编写……………………………………………………………………11

3.5关键技术分析………………………………………………………………21

4.讨论及进一步研究和建议………………………………………………………21

5.成果显示…………………………………………………………………………22

6.课程设计心得与体会……………………………………………………………24

Abstract………………………………………………………………………………25

参考文献……………………………………………………………………………25

 

1.方案比较与选择

1.1方案描述

方案一:

在MFC中进行数据库编程需要涉及4个基本的数据库类:

CDatabase、CRecordest、CRecordView和CDException。

一个CDatabase对象代表与数据源的一个链接。

创建一个CDatabase对象后,就可以调用Open或OpenEx成员函数打开指定的数据源,从而建立起与底层数据源的链接。

应用程序可以通过ExecuteSQL函数向数据源发出一条不需要返回数据的语言。

CDatabase对象在使用完毕后通过Close函数关闭与数据源的连接。

一个CRecordset对象代表从一个数据源检索出的一组记录。

CRecordset类支持多种类型的记录集,常用的是动态集类型dynaset和快照类型snapshot。

动态集类型是数据的动态集合,它支持双向滚动,能够与数据源的其他用户做出的更新保持同步;快照类型则是记录集被填充时数据的静态映像,它也支持双向滚动,但是不能保证与其他用户保持同步。

如果使用快照类型的应用程序需要查看其他用户做出的改动,必须先关闭记录集后再重新打开。

不管使用哪种类型的数据集,在数据集中添加或删除纪录之后都要调用Requery函数来更新数据集。

构造CRecordset对象时需要一个CDatabase对象。

如果将这个参数设置为控制NULL,系统将创建一个临时的CDatabase对象。

通过CDatabase的Open函数能够打开数据集并且执行默认的查询语句从数据源中获取数据,函数Close则用于关闭数据集、切断数据集和数据源的连接。

在数据集中移动当前记录可以通过函数MoveFirst、MoveLast、MoveNext和MovePrev进行。

如果添加和修改记录,需要先将记录集设置为AddNew和Edit状态,然后对数据集的变量进行赋值,最后通过Update函数完成写入操作。

删除记录操作则通过Delete函数来完成。

在执行数据库操作时可能会引发CDBException类型的异常。

CDBException类由异常CException派生而来,成员m_strError指明了造成异常的原因,RecordError函数则能够直接弹出一个对话框说明造成异常的原因。

CRecordView用对话框控件来显示数据库记录,可以把它看作是具有数据库操作功能的试图类,它能够像对话框一样在设计阶段就编辑好资源。

方案二:

采用基本对话框模式,主界面上用列表控件来显示数据库,在方案一的基础上,此方案增加了一个查询功能,可分为精确查询和模糊查询。

此查询方式是通过输入关键字的方法,然后在数据库中寻找数据,在列表控件中显示所查找的结果。

除此之外,此方案对比上一个方案还增加了两个个对话框,例如当点击添加,修改按钮时,会对应弹出一个对话框,可在此对话框中操作。

1.2方案比较:

方案一的设计思路及步骤清晰,程序代码设计思路以及实现的功能也较容易实现。

但是此方案不能实现手动查询功能,而且在实现添加、删除、修改功能时,不能知道是否操作成功,要打开数据库才知道已经操作成功了,这对用户运用不方便。

方案二的设计相对方案一来说详细多了。

查询还分为精确查询和模糊查询,主界面直接显示数据库,直观方便,在增加和修改时另外弹出对话框,层次感强,而且增加和修改后可以马上刷新列表控件中的内容,非常直观。

1.3方案选择:

由于两个方案都没有可以完全实现我们需要的功能,所以我们小组决定结合两个方案。

即是将方案一的设计全部采用,再在方案二上采用其查询功能,但是不分精确查询和模糊查询,只需要查询时显示相对应的数据即可。

还有就是采用方案二中多对话框的方法,也就是在点击添加,修改按键之一时会弹出相对应的对话框供用户操作。

还有就是采用方案二中的添加一个列表控件显示数据,这样方便用户查看。

总而言之,我们的方案是取两个方案中我们需要的功能,将两者结合起来,实现另一个简单却全面的通讯录。

2.系统分析与设计

2.1系统分析

通讯录的功能包括添加、修改、删除、查询四个主要功能,当添加记录时,弹出添加窗口,修改是弹出修改窗口,删除和查询在主界面显示,所以整个系统包括三个对话框。

(1)主界面

通过主界面,可以用来显示通讯录的信息,包括查询和删除功能,当输入查询姓名查询时,系统检测该姓名在通讯录表中是否存在,如果存在,就在主界面的列表控件显示出来。

当选择删除按钮时,如果没有在列表中选中要删除的记录,则系统会提示需要选中记录,如果有,就直接删除该记录,并且刷新通讯录。

(2)增加记录窗口

当点击主界面中的添加按钮时,就会弹出本对话框,用户可以输入新的记录,点击“确定”,完成记录的添加,同时系统刷新通信录。

用户可以在主界面的列表中看到增加的记录。

(3)修改记录窗口

当点击主界面中的修改按钮时,如果用户没有在列表中选中要修改的记录,系统会提示要选中记录,如果有,就弹出本窗口,窗口中将显示所选记录的信息,用户可在其基础上修改,点击“确定”,完成记录的修改,同时系统刷新通讯录,你可以在主界面的列表中看到该记录已被修改。

2.2系统框图

2.3数据库设计

根据系统功能需求,数据库采用MicrosoftAccess2003建立。

MicrosoftAccess2003是一个桌面级的数据库管理系统,简单易用,功能强大。

支持的数据类型较丰富,操作简便。

本通讯录设计为个人的简易通讯录,所以包括的信息较简单,有姓名、电话、地址和e-mail四项。

根据设计要求,本系统的数据库设计如下表1。

表1通讯录信息表

字段名称

数据类型

字段属性

字段大小

描述

必填字段

ID

自动编号

长整型

序号

NAME

文本

50

姓名

TEL

文本

50

电话

ADDRS

文本

50

地址

EMAIL

文本

50

邮箱

3.系统功能的实现和代码编写

3.1准备工作

通过数据库的设计得到一个Access数据库文档:

TXL.mdb。

为了使程序能访问数据库,需要把数据库注册到ODBC驱动程序管理器。

ODBC管理程序把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句提示DBMS(数据库管理系统)完成数据库的访问工作。

(1)打开如图3-1所示的ODBC数据源管理器。

图3-1-1ODBC数据源管理器

(2)在【用户DSN】选项卡中单击【添加】按钮,弹出【创建新数据源】对话框,如图3-2所示。

选择Access数据库对应的驱动程序“MicrosoftAccessDriver(*.mdb)”,并单击【完成】按钮。

图3-1-2选择Access驱动程序

(3)此时弹出【ODBCMicrosoftAccess安装】对话框,如图3-3所示。

单击【选择】按钮,选择要配置的数据库文件TXL.mdb,并输入数据源名称“TXL”。

单击【确定】按钮就可以了。

图3-1-3【ODBCMicrosoftAccess安装】对话框

(4)创建项目

根据需要分析和系统的功能,用VisualC++6.0创建一个基于对话框的MFCAppWizard(exe)项目,项目名为Address。

创建项目后,会呈现出一个对话框,本系统就在该对话框基础上开始设计的。

 

3.2界面设计

(1)主界面设计

通讯录的主界面设计如图3-2-1

图3-2-1主界面设计图

对话框设置为:

IDD_MAIN_DIALOG、宋体、9.

其中主要的控件属性设置以及功能如表2。

表2IDD_MAIN_DIALOG对话框中的主要控件

控件类型

ID

属性设置

Button

IDC_BUTTON_ADD

Caption设为“添加”

Button

IDC_BUTTON_MODIFY

Caption设为“修改”

Button

IDC_BUTTON_DELETE

Caption设为“删除”

Button

IDC_BUTTON_SEARCH

Caption设为“查询”

Button

IDC_BUTTON_EXITSEARCH

Caption设为“退出查询”

StaticText

默认

Caption设为“请输入姓名查询”

GroupBox

默认

Caption设为“功能区”

EditBox

IDC_INPUT

默认

EditBox

IDC_LIST1

View选中Report

(2)增加记录界面设计

当点击主界面中的添加按钮时,就会弹出增加记录的界面,设计图如图3-2-2

3-2-2添加记录界面设计图

对话框设置为:

IDD_ADD_DIALOG,标题为“添加记录”。

其中的主要控件如表3。

表3添加/修改记录界面控件表

控件类型

ID

属性设置

StaticText

默认

Caption设为“姓名”

StaticText

默认

Caption设为“电话”

StaticText

默认

Caption设为“地址”

StaticText

默认

Caption设为“e-mail”

EditBox

IDC_EDIT_NAME

默认

EditBox

IDC_EDIT_TEL

默认

EditBox

IDC_EDIT_ADDRS

默认

EditBox

IDC_EDIT_EMAIL

默认

Button

IDOK

Caption设为“”

Button

IDCANCEL

Caption设为“”

(3)修改记录界面设计

当点击主界面修改按钮时,就会弹出修改记录界面,如图3-3-3

图3-3-3修改记录界面设计图

其对话框设置为:

IDD_MOD_DIALOG,标题为修改记录。

其中主要的控件同增加记录界面一样,如表3.

3.3连接数据库

添加CPersonSet类与数据库中的TXL表连接。

CPersonSet的BaseClass是CRecordSet。

在DatabaseOptions对话框中选择“ODBC”作为数据源,选择已注册的数据源TXL,在SelectDatabaseTables对话框中选择要绑定的表TXL。

3.4代码编写

(1)功能函数RefreshData:

从数据库获取通讯录信息,加入到列表控件中,刷新数据显示。

定义如下:

public:

voidRefreshData();

实现如下:

voidCMAINDLG:

:

RefreshData()

{

//对列表控件的内容更新,清空原来的内容

m_ctrlperson.DeleteAllItems();

m_ctrlperson.SetRedraw(FALSE);

//创建记录集

CPersonSetm_personset(&m_database);

m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);

CDBVariantvarValue;

charbuf[20];

//用来记录当前记录的序号

inti=0;

//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录

if(m_personset.GetRecordCount()!

=0)m_personset.MoveFirst();

while(!

m_personset.IsEOF())

{

inttemp=0;

//对整型数字的处理

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,varValue.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,varValue.m_pstring->GetBuffer

(1));

m_personset.MoveNext();

i++;

}

m_ctrlperson.SetRedraw();

}

(2)初始化对话框。

初始化列表控件,并填充通讯录信息。

代码如下:

BOOLCMAINDLG:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

Addextrainitializationhere

//确定列名

m_ctrlperson.InsertColumn(0,"序号");

m_ctrlperson.InsertColumn(1,"姓名");

m_ctrlperson.InsertColumn(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(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

m_query.Format("select*fromTXLorderbyIDASC");

RefreshData();

returnTRUE;

}

(3)查询功能按钮的代码实现

这个功能的实现通过两个函数完成,首先查询按钮的代码。

当点击查询按钮时,如果没有输入姓名的话,系统会提示要输入姓名查询,如果有输入姓名,则执行SearchData();

“添加”按钮:

voidCMAINDLG:

:

OnButtonSearch()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);

CPersonSetm_personset;//定义CPersonset类的对象

CStringm_tablefield;

m_tablefield.Format("NAME");

if(!

m_input.IsEmpty())

{

m_searchSQL.Format("select*fromTXLwhere%s='%s'",m_tablefield,m_input);

SearchData();

}

else

{

MessageBox("请填写查询关键字","提示",MB_OK|MB_ICONINFORMATION);

GetDlgItem(IDC_INPUT)->SetFocus();

}

}

SearchData()函数根据输入的姓名,在数据库中搜索,当找到时,将查询结果通过列表控件显示。

函数定义如下:

public:

voidSearchData();

代码编写如下:

voidCMAINDLG:

:

SearchData()

{

//对列表控件的内容更新,清空原来的内容

m_ctrlperson.DeleteAllItems();

//创建记录集

CPersonSetm_personset(&m_database);

m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_searchSQL);

CDBVariantvarValue;

charbuf[20];

//用来记录当前记录的序号

inti=0;

//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录

if(m_personset.GetRecordCount()!

=0)m_personset.MoveFirst();

while(!

m_personset.IsEOF())

{

inttemp=0;

//对整型数字的处理

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,varValue.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,varValue.m_pstring->GetBuffer

(1));

m_personset.MoveNext();

i++;

}

}

(4)“添加”功能

当点击添加按钮时,弹出添加对话框,代码实现如下:

voidCMAINDLG:

:

OnButtonAdd()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

m_database.Close();

CADDDLGDLG;//CADDDLG是为添加记录对话框建的类

DLG.m_database.Open(_T("TXL"));

DLG.DoModal();

RefreshData();//添加完成时,要更新数据库显示

}

在添加记录对话框中,输入信息,点击确定按钮实现添加功能。

“添加”功能实现:

voidCADDDLG:

:

OnOK()

{

//TODO:

Addextravalidationhere

UpdateData(TRUE);//得到输入的内容

CStringstrSQL,strchkSQL;

inti=1;

intflag=0;

//从主码为1开始在数据库的相应表中搜索,如果找到记录,则主码值加1,直到数据库中

//无该主码值对应的记录,则将该主码值分配给新的记录

if(!

m_name.IsEmpty())//如果姓名填写了

{

while(!

flag)

{

CPersonSetm_recordset(&m_databa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

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

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