VC++最简单的ODBC应用--登录框设计

昨天百度的一个好友问我怎么设计出登录框,阻止非法用户侵入。 

这是一个困难又简单的问题。困难在于初学者不知道用户名和密码保存在哪才能有记忆功能,或者知道数据保存在数据库中,但不知道如何去访问数据库,所以让一些初学者感到很迷茫。简单在于,当懂得了ODBC(开放式数库互联)方法,在VC向导帮助下实现很简单,而且一但掌握就一通百通了。好了,废话不多说了。请看正文。 
(补充一句,若想让程序有记忆功能并非只能用数据库,用文件也可以实现的,在此之所以介绍数据库方法,是因为数据应用范围相当广泛,数据库的优点初学者可以查查相关资料,在本文章中,我将以一个例子给大家说明,如果高手看见了,别鄙视我哟) 

必要条件:机子上安装Microsoft Access数据库,VC6.0 

第一步:打开VC6.0,新建基于对话框的工程,工程名“LoginTest”,OK,完成程序导向。你将会看到工程的主对话框。当然也许你会认为,我会把这个做为登录框来用。这种想法是很愚蠢的,虽然你也可以这么用。为什么这样说呢?你就需要搞清什么是程序的主对话框。程序的主对话框-----从表面现象来看,就是程序运行时看到的第一个对话框。从本质来说,即是主线程成员m_pMainWnd指针所指的对话框。所以判断到底哪个是主对话框,在应用程序类的InitInstance()方法中找到m_pMainWnd,看它所指的到底是哪个对话框。 也许,以前你不会认为QQ登录框才是程序的主对话,但它的确是。或许,你又要质疑,为什么不用程序向导生成的对话框当做登录框来用?如果你真这样用了,我只能说明你是死脑筋。为什么呢,当你起一个工程名字时,工程名会反应到向导生成的对话框类中。当你看到这个名字时,你大概就会明白这个程序的主导相思,鬼才会把它同登录框联系在一起,至少门面也要有个像样的名字,所以向导生成的对话框,我们把它做为门面用,但它绝不是程序的主对话框。可是向导生成的主对话框就是它呀。m_pMainWnd指的是它,所以我们要新建一个登录对话框,让m_pMainWnd指向它。 
第二步: 把新建对话框的ID改成 :IDD_DIALOG_LOGIN。名字:“登录对话框”。 
在登录框中,加上两个文本框控件,两个编程框,一个按钮。 
文本框一名字设置:“用户名:” 
文本框二名字设置:“密码:” 
编辑框一ID设置:IDC_EDIT_USER 关联字符串:m_csUser 
编辑框二ID设置:IDC_EDIT_PSW 关联字符串:m_csPsw  
属性样式:Password勾上。 
按钮名字:“登录” ID: IDC_BUTTON_LOGIN 
双击对话框,新建一个与此对话框关联的新类,类名:CLogin 
(到此我们已经把对话框界面设计好了,就此打住。然后我们来建一个Access数据库。) 

第三步:我的电脑---打开工程目录,右击新建Microsoft Access数据库。将数据库名字命名为user.mdb。打开数据库,你会看到表设计器,双击打开,建立两个字段,第一个字段名:USER_NANM,文本类型;第二字段名:USER_PASSWORD,文本类型。设置第一个字段为主键。按保存,填上表名:UserPsw。 
(这一步主要是建立一个数据库表,其中有两个字段--用户名---密码,这个表主要就是来存储每个用户名字和密码,相信你已经知道qq里面每个人的信息存储在哪里了吧) 

第四步:建立好数据库以后,这个数据库并不能直接用到程序里。首先要明白程序通过什么访问数据库的。建立好数据库,这个数据库就象仓库一样是个死物,如果没有管理,没有驱动,外部程序就无法识别与访问。这样比喻一下吧,假设这是一个粮库,里面有不同的植物,粮库门前站着一个仓管,当我去取粮食时,我需要和仓管对话,我需要什么植物粮食,他就会从仓库中取出给我。这样我就可以访问粮库了。同理,在计算机中数据库就相当粮库,我就相当于访问数据库的程序,那么谁来充当仓管呢。答案就是时常搞的我们头晕的数据源(数据库驱动),而同一个数据库驱动应用于同一类数据库,所以我们要有个名字来区分它,这就数据源名。还是刚才的比喻,所有仓管都可以做为粮库的驱动,但是我访问那个粮库的仓管却是唯一的,他的名字就是数据源名。 

好了,知道什么是数据源和数据源名了,我们就来为我们的数据库设置数据源及数据源名。 

打开控制面板——管理工具----数据源(ODBC)-----打开数据源管理器。在驱动程序选项中选择Microsoft提拱的Access数据库驱动。然后在用户数据源下,双击Access驱动,在ODBC中添上数据源名“user",接着点击选择用户数据库,找到本工程目标下找到我们建的user.mdb数据库。确定,确定。本程序用到数据源及数据源名就设置好了。 
(下边才涉及到具体的编程) 

第五步:回到我们的工程,在类视图下,右建,新建类,类名:CLoginSet。选择基类CRecordSet(记录集类,关联数据库表的),点确定,会弹出对话框,填上user数据源名,点确定,会让你让选择数据库表,定位到本工程的数据库,选择UserPsw数据库表。OK 

这样记录集CLoginSet就关键上我们的UserPsw表了。 

第六步:(1)打开stdAfx.h文件。添加头文件#include "afxdb.h"//封装ODBC访问数据库类与方法的库。 
(2) 在CTestApp的InitInstance方法中。 

用 
CLogin dlg; 
m_pMainWnd = &dlg; 
替换原来的 
CLoginTestDlg dlg; 
m_pMainWnd= &dlg; 

目的,设置登录框为主对话框。注意在LoginTest.cpp中把包括的#include "LoginTestDlg.h" 替换成#include "Login.h" 
第七步: 

在Login类中声明CDatabase m_database变量。 
在Login类的OnInitDialog方法中添加如下代码打开数据库 

//打开数据库 
if(!m_database.Open(_T("user"))) 

AfxMessageBox(_T("数据库打开失败!")); 
return FALSE; 


打开资源视图,找到登录框。双击登录按钮,为其添加单击消息处理函数。具体代码如下编写。 

//登录 
void CLogin::OnButtonLogin()  

// TODO: Add your control notification handler code here 
UpdateData(TRUE);//将编辑框内容写入变量中 

CString sql=_T("");// 
CLoginSet m_recordset(&m_database);//关联数据库 
  
sql.Format(_T("select * from UserPsw where USER_NAME='%s'and USER_PASSWORD='%s'"),m_csUser,m_csPsw); 

m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,sql);//打开记录集,表视图 

if(m_recordset.GetRecordCount()==0) 

AfxMessageBox(_T("用户名或密码不正确!")); 

else 

CDialog::OnOK(); 
CLoginTestDlg dlg; 
dlg.DoModal(); 


  


在Login.cpp中添加如下头文件 
#include "LoginTestDlg.h" 

到此程序结束。就可以运行了 

总结: 

在处理按钮消息中。 
sql.Format(_T("select * from UserPsw where USER_NAME='%s'and USER_PASSWORD='%s'"),m_csUser,m_csPsw);  
目的是在数据表中搜索用户名,密码,是否等于编辑框中的用户名,密码。 
if(m_recordset.GetRecordCount()==0) 
如果没有找到,就弹出一个消息框,提示输入错误,返回。 
否则就创建CLoginTestDlg对话框。 

好了,整个过程就这样


文章引用: http://hi.baidu.com/qaz574324836/blog/item/4222d85db8197d4afbf2c050.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值