动物园管理系统
1. 准备工作
建立Access数据库zoo.mdb, 于中建表animal,字段如下:
2. 建立基本框架
于Visual C++.Net中建立单文档、不支持文件的数据库视图、ODBC的客户端类型的MFC应用程序。建立数据源zoo,连接表animal.添加控件如图:
在类视图中添加如下代码进行数据库和界面之间的交互作用
void CZooManageView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
DDX_FieldText(pDX,IDC_idedit,m_pSet->m_id,m_pSet);
DDX_FieldText(pDX,IDC_nameedit,m_pSet->m_name,m_pSet);
DDX_FieldText(pDX,IDC_kindedit,m_pSet->m_kind,m_pSet);
DDX_FieldText(pDX,IDC_ageedit,m_pSet->m_age,m_pSet);
DDX_FieldText(pDX,IDC_sexedit,m_pSet->m_sex,m_pSet);
DDX_FieldText(pDX,IDC_placeedit,m_pSet->m_place,m_pSet);
DDX_FieldText(pDX,IDC_inforedit,m_pSet->m_infor,m_pSet);
}
3. 实现添加,修改,删除和查找功能
为实现添加、修改功能,添加对话框,定义类CaddDelete,添加控件如下图,分别将主控页的button控件的ID和Record菜单的子菜单的ID设为相同,从而可以只在一个地点编程而更加轻松。
现在编写程序了:
添加:
void CZooManageView::OnAdd()
{
CAddDelete dlg; // 创建CAddDelete的对象dlg
if(dlg.DoModal( )==IDOK) // 打开对话框
{
if(m_pSet->CanAppend( )) // 可以添加
{
m_pSet->AddNew( ); // 确认添加
// 设置各项
m_pSet->m_id=dlg.m_id;
m_pSet->m_name=dlg.m_name;
m_pSet->m_kind=dlg.m_kind;
m_pSet->m_sex=dlg.m_sex;
m_pSet->m_age=dlg.m_age;
m_pSet->m_place=dlg.m_place;
m_pSet->m_infor=dlg.m_infor;
m_pSet->Update( ); // 提交
AfxMessageBox("恭喜你,添加成功!"); // 弹出确认信息
UpdateData(false); // 更新浏览界面
}
else
AfxMessageBox("对不起,添加记录产生错误,请检查!");
}
}
修改:
void CZooManageView::OnModify()
{
CAddDelete dlg; // 创建CAddDelete的对象dlg
// 初始化对话框
dlg.m_id=m_pSet->m_id;
dlg.m_name=m_pSet->m_name;
dlg.m_kind=m_pSet->m_kind;
dlg.m_sex=m_pSet->m_sex;
dlg.m_age=m_pSet->m_age;
dlg.m_place=m_pSet->m_place;
dlg.m_infor=m_pSet->m_infor;
if(dlg.DoModal( )==IDOK) // 打开对话框
{
if(m_pSet->CanUpdate( )) // 确认能否修改
{
m_pSet->Edit( ); // 置数据库修改状态
// 修改各个属性
m_pSet->m_id=dlg.m_id;
m_pSet->m_name=dlg.m_name;
m_pSet->m_kind=dlg.m_kind;
m_pSet->m_sex=dlg.m_sex;
m_pSet->m_age=dlg.m_age;
m_pSet->m_place=dlg.m_place;
m_pSet->m_infor=dlg.m_infor;
m_pSet->Update( ); // 提交数据库
AfxMessageBox("恭喜你,修改成功!");
UpdateData(false); // 更新浏览界面
}
else
AfxMessageBox("修改失败!");
}
}
删除:
void CZooManageView::OnDelete()
{
if(AfxMessageBox("真的要删除么?",MB_YESNO)==IDYES) // 确认是否真的删除
{
if(m_pSet->CanUpdate( ))
m_pSet->Delete( );
m_pSet->MoveNext( );
// 异常处理
if(m_pSet->IsEOF( ))
m_pSet->MoveLast( );
if(m_pSet->IsBOF( ))
m_pSet->SetFieldNull(NULL);
UpdateData(false);
}
}
查询:
void CZooManageView::OnQuery()
{
CQuery dlg;
if(dlg.DoModal( )==IDOK)
{
if(dlg.m_name.GetLength( )==0) // 判断查询值是否为空
{
AfxMessageBox("请输入查询值!");
return;
}
m_pSet->MoveFirst( ); // 数据指针移动到第一个记录
while(!m_pSet->IsEOF( ))
{
if(m_pSet->m_name==dlg.m_name) // 找到了,赫赫,可以结束查询
{
AfxMessageBox("恭喜你,查找成功!");
UpdateData(false);
return;
}
m_pSet->MoveNext( );
}
AfxMessageBox("对不起,没有找到你要查找的动物!"); // 太可惜了,没找到
return;
}
}
4. 展示整体界面