C++课设报告.docx
- 文档编号:2929626
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:22
- 大小:275.26KB
C++课设报告.docx
《C++课设报告.docx》由会员分享,可在线阅读,更多相关《C++课设报告.docx(22页珍藏版)》请在冰豆网上搜索。
C++课设报告
面向对象程序设计实验报告
实验名称:
数据库应用程序的开发指导老师:
赵敏
班级:
11041324姓名:
刘志建
评分:
日期:
2013/12/11
一、实验目的
设计并制作一个成语字典的数据库应用程序,实现增加,删除,更改,查询。
二、实验原理
1.建立ODBC数据源
2.连接数据源
3.选择和处理记录
4.数据库应用程序中的文档和视图
三、实验步骤
1.用MicrosoftAccess创建一个数据库并建立一个成语表向其中导入6个成语,其字段分别为ID、成语、拼音、缩写拼音、含义、例句如下图所示:
并将ID设置为主键。
2.创建一个MFC应用程序,可以显示Access数据表中的记录,可以向前向后移动一个记录也可以跳到第一个记录或最后一个记录。
如果已达到最后一个记录,用户依然发出向后移动的命令时。
试图将一直显示最后一个数据的记录。
如果已到达数据库最前的一个记录时,用户依然发出向前移动的命令时,视图将显示数据库里第一个数据的记录。
下面介绍这个程序的编写步骤:
用应用程序向导来生产一个单文档的ODBC工程文件。
选中视图文档支持,然后在应用程序向导的第二步中选择数据支持的时候选择“不支持的数据数据库视图”。
然后选择数据源,按下DataSource的按钮。
出现如图13-6所示的对话框,选择已经建好的数据库成语表单,生成工程文件。
如图所示:
3.在CchengyuView.cpp的DoDataExchange(CDataExchange*pDX)函数中加入如下代码,将对话框中的编辑框控件与数据库中的字段关联起来。
voidCchengyuView:
:
DoDataExchange(CDataExchange*pDX)
{
CRecordView:
:
DoDataExchange(pDX);
//可¨¦以°?
在¨²此ä?
处ä|插?
入¨?
DDX_Field*函¡¥数ºy以°?
将?
控?
件t“¡ã连¢?
接¨®”¡À到Ì?
数ºy据Y库a字Á?
段?
,ê?
例¤y如¨?
//DDX_FieldText(pDX,IDC_MYEDITBOX,m_pSet->m_szColumn1,m_pSet);
//DDX_FieldCheck(pDX,IDC_MYCHECKBOX,m_pSet->m_bColumn2,m_pSet);
//有®D关?
详¨º细?
信?
息¡é,ê?
请?
参?
阅?
MSDN和¨ªODBC示º?
例¤y
DDX_FieldText(pDX,IDC_EDIT1,m_pSet->m_ID,m_pSet);
DDX_FieldText(pDX,IDC_EDIT2,m_pSet->column1,m_pSet);
DDX_FieldText(pDX,IDC_EDIT3,m_pSet->column2,m_pSet);
DDX_FieldText(pDX,IDC_EDIT4,m_pSet->column3,m_pSet);
DDX_FieldText(pDX,IDC_EDIT5,m_pSet->column4,m_pSet);
DDX_FieldText(pDX,IDC_EDIT6,m_pSet->column5,m_pSet);
}
编译后运行结果如下:
4.在上述基础上增加“删除一个记录”、“更新一个记录”和“清除域”三个菜单项,并实现相应的操作。
加入菜单项
根据题意,增加相关菜单项,如图所示,并映射消息处理函数到类视图中区。
其中,菜单项“第一个记录”、“前一个记录”、“下一个记录”和“最后一个记录”是系统自动生成的,我们不需要区处理这个。
重载OnMove函数:
在VisualC++中的解决方案选中CchengyuView类后,单击鼠标右键,在弹出的菜单上选着“属性”,在选中OnMove函数后,双击将OnMove函数加入到类视图上,这样就可以重载OnMove函数了。
然后再OnMove函数中加入相应的代码就可以了,以下就是OnMove的代码
BOOLCchengyuView:
:
OnMove(UINTnIDMoveCommand)
{
//TODO:
在¨²此ä?
添¬¨ª加¨®专Á¡§用®?
代䨲码?
和¨ª/或¨°调Ì¡Â用®?
基¨´类¤¨¤
switch(nIDMoveCommand)
{
caseID_RECORD_PREV:
m_pSet->MovePrev();
if(!
m_pSet->IsBOF())
break;
caseID_RECORD_FIRST:
m_pSet->MoveFirst();
break;
caseID_RECORD_NEXT:
m_pSet->MoveNext();
if(!
m_pSet->IsEOF())
break;
if(!
m_pSet->CanScroll())
{m_pSet->SetFieldNull(NULL);
break;}
caseID_RECORD_LAST:
m_pSet->MoveLast();
break;
default:
ASSERT(FALSE);
}
UpdateData(FALSE);
returnTRUE;
//returnCRecordView:
:
OnMove(nIDMoveCommand);
}
添加菜单响应函数:
voidCchengyuView:
:
OnDeleteRecord()
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
处ä|理¤¨ª程¨¬序¨°代䨲码?
CRecordsetStatusm_cStatus;
try
{
m_pSet->Delete();
}
catch(CDBException*m_pEx)
{
AfxMessageBox(m_pEx->m_strError);
m_pEx->Delete();
m_pSet->MoveFirst();
UpdateData(FALSE);
return;
}
m_pSet->GetStatus(m_cStatus);
if(m_cStatus.m_lCurrentRecord==0)
m_pSet->MoveFirst();
else
m_pSet->MoveNext();
UpdateData(FALSE);
}
voidCchengyuView:
:
OnUpdateDeleteRecord(CCmdUI*pCmdUI)
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
更¨¹新?
用®?
户¡ì界?
面?
处ä|理¤¨ª程¨¬序¨°代䨲码?
pCmdUI->Enable(!
m_pSet->IsEOF());
}
voidCchengyuView:
:
OnUpdateRecord()
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
处ä|理¤¨ª程¨¬序¨°代䨲码?
m_pSet->Edit();
UpdateData(TRUE);
if(m_pSet->CanUpdate())
m_pSet->Update();
}
voidCchengyuView:
:
OnUpdateUpdateRecord(CCmdUI*pCmdUI)
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
更¨¹新?
用®?
户¡ì界?
面?
处ä|理¤¨ª程¨¬序¨°代䨲码?
pCmdUI->Enable(!
m_pSet->IsEOF());
}
voidCchengyuView:
:
OnClearDomain()
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
处ä|理¤¨ª程¨¬序¨°代䨲码?
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);}
5.下面我们在之前的基础上增加功能,使得程序能够向数据库中添加新纪录。
a.为了完成这个功能,需要在上图的菜单中增加一个菜单项“增加一个记录”,其ID表示为ID_ADD_RECORD,如图所示:
b.为了增加一个新纪录需要在该数据库中得到最后一条记录的ID号,然后将其加1;然会通过AddNew函数来添加记录,并把刚才得到的新的ID值设置为增加值段ID字段的值,并用Update函数保存新纪录;最后调用Requery函数更新记录;为计算新的ID号需要增加一个CchengyuSet类的成员函数GetMaxID,函数访问权限为public,返回值类型为long,代码如下:
longCchengyuSet:
:
GetMaxID(void)
{
MoveLast();
returnm_ID;
}
c.为刚才添加的菜单项添加消息响应函数OnAddRecord,代码如下:
voidCchengyuView:
:
OnAddRecord()
{//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
处ä|理¤¨ª程¨¬序¨°代䨲码?
CRecordset*pSet=OnGetRecordset();
if(pSet->CanUpdate()&&!
pSet->IsDeleted())
{
pSet->Edit();
if(!
UpdateData())
return;
pSet->Update();
}
longm_lNewID=m_pSet->GetMaxID()+1;
m_pSet->AddNew();
m_pSet->m_ID=m_lNewID;
m_pSet->Update();
m_pSet->Requery();
m_pSet->MoveLast();
UpdateData(FALSE);
}
6.在之前的基础上增加浏览记录功能和对记录进行排序的功能。
为了增加浏览记录的功能,可以通过创建一个对话框资源,通过在对对话框中指定的序号来浏览该条记录的内容。
我们通过资源编辑器增加一个对话框,对话框ID为IDD_MOVE_RECORD,其中的编辑框ID为IDC_RECORD_ID,该对话框如下图所示。
为对话框定义类名为CMoveToRecord,并为编辑框连接一个变量为long类型的m_RecordID,访问类型为public;然后在菜单项增加“移动到第···条记录”,ID为ID_MoveToRecord,并添加COMMAND消息响应函数OnMoveToRecord,代码如下:
voidCchengyuView:
:
OnMovetorecord()
{
//TODO:
在¨²此ä?
添¬¨ª加¨®命¨¹令¢?
处ä|理¤¨ª程¨¬序¨°代䨲码?
CMoveToRecorddlgMoveTo;
if(dlgMoveTo.DoModal()==IDOK)
{
CRecordset*pSet=OnGetRecordset();
if(pSet->CanUpdate()&&!
pSet->IsDeleted())
{
pSet->Edit();
if(!
UpdateData())
return;
pSet->Update();
}
pSet->SetAbsolutePosition(dlgMoveTo.m_RecordID);
Up
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 报告