数据库综合实验讲义.docx
《数据库综合实验讲义.docx》由会员分享,可在线阅读,更多相关《数据库综合实验讲义.docx(32页珍藏版)》请在冰豆网上搜索。
数据库综合实验讲义
数据库综合实验讲义
学院:
电气工程
教研室:
自动化
教师:
2012.03.20
1、建立工程
打开vc++6.0,点击“file->new->mfcappwizard(exe)”,项目名为:
manager,单击“OK”,选择单文档程序,然后点击“下一步”,建立工程。
单击“finish”按钮,并调试运行,生成如下界面
2.修改单文档界面的标题“南通大学电气工程学院”
按照下图,在CLASSVIEW选项卡单击“CManagerApp”
添加代码:
m_pMainWnd->SetWindowText("管理信息系统-南通大学电气工程学院");
然后,调试,运行,看调试结果,如下:
3.为单文档界面添加图画:
复制位图文件,到res文件夹,重新命名为“bg.bmp”,然后单击“resourceview”选项卡,右键单击“managerresources”,如下图
单击“insert”按钮,点击“Bitmap”,并单击“import”选项
并在res文件夹下,选中“bg.bmp”,然后单击“import”。
同时按住“ctrl+w”键,在“Classname”,选择“CManagerView”下选中“WM_PAINT”
单击“Addfunction”,在单击“EditCode”,在
添加如下代码:
CPaintDC*pDC=newCPaintDC(this);//devicecontextforpainting
CBitmapbmp;
RECTRect;
RECTRectView;
POINTptSize;
CDCdcmem;
BITMAPbm;
intb=bmp.LoadBitmap(IDB_BITMAP_BG);//将位图取出;
dcmem.CreateCompatibleDC(pDC);//创建兼容设备上下文。
dcmem.SelectObject(&bmp);//用设备上下文选择位图;
dcmem.SetMapMode(pDC->GetMapMode());//设置映射方式;
GetObject(bmp.m_hObject,sizeof(BITMAP),(LPSTR)&bm);//映射位图;
GetClientRect(&Rect);
ptSize.x=bm.bmWidth;
ptSize.y=bm.bmHeight;
pDC->DPtoLP((LPPOINT)&ptSize,1);//设备单元to逻辑单元;
GetClientRect(&RectView);
CRectRectBmp=RectView;
if((RectView.right-RectView.left)>bm.bmWidth)//位图宽度容纳不下;
{
RectBmp.left=RectView.left+(RectView.right-RectView.left-bm.bmWidth)/2;
RectBmp.right=bm.bmWidth;
}
else
{
RectBmp.left=RectView.left;
RectBmp.right=RectView.right-RectBmp.left;
}
if((RectView.bottom-RectView.top)>bm.bmHeight)
{
RectBmp.top=RectView.top+(RectView.bottom-RectView.top-bm.bmHeight)/2;
RectBmp.bottom=bm.bmHeight;
}
else
{
RectBmp.top=RectView.top;
RectBmp.bottom=RectView.bottom-RectBmp.top;
}
pDC->StretchBlt(RectBmp.left,RectBmp.top,RectBmp.right,\
RectBmp.bottom,&dcmem,0,0,bm.bmWidth,bm.bmHeight,\
SRCCOPY);
dcmem.DeleteDC();
调试,并运行后如下图:
4.添加登录管理界面
4.1单击“ResourceView”选项卡,右键单击“Dialog”,单击“insert”,插入一个对话框文档,
并进行如下设置
4.2插入位图:
复制位图文件,到res文件夹,重新命名为“0003.bmp”,右键点击“Bitmap”,并单击“import”选项,并在res文件夹下,选中“0003.bmp”,然后单击“import”。
并修改位图属性IDB_BITMAP_LOGIN如下:
拖动
picture控件至对话框,设置picture控件的属性Type:
Bitmap
Image:
IDB_BITMAP_LOGIN如下图:
显示如下:
4.3.设置密码登陆:
在对话框上设置文本文件“static”,并对按钮进行设置:
拖动“ComboBox”控件至对话框,设置属性为:
IDC_COMBO1
拖动“EditBox”控件至对话框,设置属性:
IDC_EDIT1,并修改“Styles”选项卡,勾住“Password”选项,如下图
4.4显示登录对话框
同时按住“Ctrl+W”键,创建一个新类,类的名字“CLoginDlg”,单击“ok”按钮,生产如下图:
在CManagerApp中双击InitInstance函数
添加如下代码:
CLoginDlgloginDlg;
if(loginDlg.DoModal()!
=IDOK)
returnFALSE;
代码加载的位置一定在
CSingleDocTemplate*pDocTemplate;之前,切记,同时要添加头文件#include"LoginDlg.h"
单击“登录”或者“退出”按钮后,
4.5.登录界面与数据库相连
同时按住“Ctrl+W”键,创建一个新类,类的名字“CPassWord”,基于数据库“CRecorset”类,如下图
单击“OK”,选中ODBC,点击“OK”,到所在目标下选中数据库。
“manager”文件夹,
点击“OK”,到所在目标下选中数据库。
(例程给出manager.mdb数据库),然后选中password表。
单击“OK”.
Password表设置如下:
其中,passwd为要设置的密码。
对登录对话框设置变量,同时按住“Ctrl+W”键,进行如下设置,在“MemberVariable”选项卡进行设置变量,注意ID号,每一个ID分别设置2个变量,一个CString类型,一个Control类型
设置好变量后,为CLoginDlg添加函数,同时按住“Ctrl+W”键,按照下图进行设置:
在OnInitDialog()函数里加进如下代码:
用于数据库的打开
CPassWordrecordset;
CStringstrSQL;
UpdateData(TRUE);
//strSQL.Format("select*frompasswordwhereuser='%s'ANDpasswd='%s'",m_strUser,m_strPass);
strSQL="select*frompassword";
if(!
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
returnFALSE;
}
while(!
recordset.IsEOF())
{
m_ctrUser.AddString(recordset.m_user);
recordset.MoveNext();
}
recordset.Close();
同时在StdAfx.h头文件里包含如下的头文件代码,如下图
#include//ODBC数据库API头文件
#include
同时按住“Ctrl+W”键,进行如下设置,
单击“EditCode”,在voidCLoginDlg:
:
OnOK()函数里添加如下代码:
CPassWordrecordset;
CStringstrSQL;
CManagerApp*ptheApp=(CManagerApp*)AfxGetApp();
UpdateData(TRUE);
//检查用户名是否输入
if(m_strUser.IsEmpty())
{
AfxMessageBox("请输入用户名!
");
m_ctrUser.SetFocus();
return;
}
if(m_strPass.IsEmpty())
{
AfxMessageBox("请输入密码!
");
m_ctrPass.SetFocus();
return;
}
//从用户表中检查用户名密码是否正确
strSQL.Format("select*frompasswordwhereuser='%s'ANDpasswd='%s'",m_strUser,m_strPass);
if(!
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
if(recordset.GetRecordCount()==0)
{
//密码错误处理
recordset.Close();
MessageBox("密码错误,请重新输入!
");
m_strPass="";
m_ctrPass.SetFocus();
UpdateData(FALSE);
}
else
{
//分配用户权限
ptheApp->m_bIsAdmin=recordset.m_isadmin;
recordset.Close();
CDialog:
:
OnOK();
}
运行后如下图:
在密码框里输入密码“1”,则可以进入界面程序了。
5.添加“用户管理”设置
单击“ResourceView”选项卡,右键单击“Dialog”,单击“insert”,插入一个对话框文档,设置对话框的属性为IDD_DIALOG_USER
5.1设置对话框:
添加“列表”(listcontrol)控件:
设置为:
IDC_LIST_USERNAME
“新增”按钮:
IDC_BUTTON_NEW
“删除”按钮:
IDC_BUTTON_DELETE
“退出”按钮:
IDCANCEL
“保存”按钮:
IDOK
“取消”按钮:
ID_BUTTON_CANCEL
“是否管理员”:
checkBox选框
对三个编辑框按照下图设置:
用户名:
IDC_EDIT1选中“Disabled”
密码:
IDC_EDIT2,选中“password”
确认密码:
IDC_EDIT3,选中“password”
5.2创建新类
同时按住“Ctrl+W”键,创建一个新类,类的名字“CUserDlg”,单击“ok”按钮,
5.3设置菜单
用户设置:
ID_SYS_USER
5.4显示“用户设置”对话框
同时按住“CTRL+W”键,按下图设置:
在OnSysUser()函数里添加如下代码:
并添加头文件#include"UserDlg.h"
CUserDlgUserDlg;
UserDlg.DoModal();
调试后单击“用户设置”菜单,界面运行如下:
5.4区分用户的等级管理功能
添加如下代码:
CManagerApp*ptheApp=(CManagerApp*)AfxGetApp();
pCmdUI->Enable(ptheApp->m_bIsAdmin);
5.5为用户列表显示数据
同时按住“CTRL+W”键,添加变量m_ctrList
同时,为userdlg添加OnInitDialog()函数
同时,为userdlg添加RefreshData()函数,按照下图,单击AddMemberFunction
添加变量:
按照下图设置函数,并单击“OK”按钮
添加变量:
CPassWordm_recordset;
在RefreshData()函数添加如下代码
m_ctrList.SetFocus();
//清空用户列表
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
CStringstrSQL;
UpdateData(TRUE);
//打开记录集
strSQL="select*frompassword";
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
//添加用户名到用户列表中
inti=0;
while(!
m_recordset.IsEOF())
{
m_ctrList.InsertItem(i++,m_recordset.m_user);
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctrList.SetRedraw(TRUE);
调试后,结果如下:
5.6设置变量,
按照下图设置
依次如下设置
5.7为“新增”按钮添加代码:
进行如下设置:
在函数中添加如下代码:
//清空用户资料
m_strUser="";
m_strPass="";
m_strRePass="";
m_bIsAdmin=FALSE;
//设置用户名编辑框为可用
m_ctrUser.EnableWindow(TRUE);
m_ctrUser.SetFocus();
//更新数据到界面
UpdateData(FALSE);
5.8为“保存”按钮添加功能
UpdateData();
if(m_ctrUser.IsWindowEnabled())
{//增加新用户的输入检查
if(m_strUser=="")
{
MessageBox("请填写用户名!
");
m_ctrUser.SetFocus();
return;
}
}
else
{//修改用户信息的输入检查
if(m_strUser=="")
{
MessageBox("请选择一个用户!
");
return;
}
}
//限制密码不能为空
if(m_strPass=="")
{
MessageBox("密码不能为空,请输入密码!
");
m_ctrPass.SetFocus();
return;
}
//验证密码与确认密码是否一致
if(m_strPass!
=m_strRePass)
{
MessageBox("两次输入地密码不一致,请重新输入密码!
");
m_ctrPass.SetFocus();
m_strPass="";
m_strRePass="";
UpdateData(FALSE);
return;
}
//打开记录集
CStringstrSQL;
strSQL.Format("select*frompasswordwhereuser='%s'",m_strUser);
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
if(m_ctrUser.IsWindowEnabled())
{//增加新用户
//判断用户是否已经存在
if(m_recordset.GetRecordCount()!
=0)
{
m_recordset.Close();
MessageBox("该用户已经存在!
");
return;
}
m_recordset.AddNew();
m_recordset.m_user=m_strUser;
m_recordset.m_passwd=m_strPass;
m_recordset.m_isadmin=m_bIsAdmin;
m_recordset.Update();
MessageBox("用户添加成功!
请记住用户名和密码!
");
m_recordset.Close();
}
else
{//修改用户信息
//判断用户是否不存在
if(m_recordset.GetRecordCount()==0)
{
m_recordset.Close();
MessageBox("该用户不存在!
请更新数据库");
return;
}
m_recordset.Edit();
m_recordset.m_user=m_strUser;
m_recordset.m_passwd=m_strPass;
m_recordset.m_isadmin=m_bIsAdmin;
m_recordset.Update();
MessageBox("用户修改成功!
请记住用户名和密码!
");
m_recordset.Close();
}
m_ctrUser.EnableWindow(FALSE);
//更新用户列表
RefreshData();
5.9添加“删除”按钮功能
5.10为“取消”按钮添加功能