您的位置:首页 > 数据库

windows程序设计——飞机大战笔记(调用登陆数据库)

2015-07-21 18:36 405 查看
////////////////2015/07/21//////////////

///////////////by xbw/////////////////////

//////////////环境 VS2013///////////



这个数据库的调用是关于登陆界面注册账户的,,,

先上几张图来看一下效果吧,,,,











哈哈,效果还不错吧,下面我就详细说一下怎么调用跟建立数据库,用的是ACCESS数据库

这个呢想一下先,有哪几部分呢,

首先呢这个账号注册这个用的是哪个控件呢,很明显 SysLink ,这个看着是不是很有感觉呢,然后我们建好了再去编辑哦,我们点一下账号注册,可定会有注册对话框的弹出,这样的话,我们就需要在资源视图中创建新的对话框了,

对话框的规划自己来,怎么好看怎么弄,由于时间原因,这个北背景贴图等没有添加,这样只要具备注册账号跟注册密码就好了,再加上确定跟取消。 弄好了之后,要给这个对话框建一个类,这个类呢,还是因为英语不好,我取名了zhuce,浅显易懂吧;;;

然后呢,我们要在编辑框中添加变量, 在控件中改成value,这样,选择CString我们才可以对字符串的存储;;;;

这两个添加变量分别为,m_regname,m_regpsw。这个名字随便弄,但是后边要用到,为了方便操作,跟着我这样起名字吧,,,我们把注册存储数据库编辑在确定按钮中,下面直接上代码了,,

UpdateData(true);
 
UpdateData(true);//这一行怎么断开了,你们知道就好了,跟下边连在一起的;;;
CString Filepath = _T("Database.mdb");
CString Sname;
CDaoDatabase db;
_variant_t varname;
CDaoRecordset Dbset(&db);
db.Open(Filepath);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);
varname = Dbset.GetFieldValue(_T("Name"));
Sname = (LPCSTR)_bstr_t(varname);
if (m_regname.IsEmpty() || m_regpsw.IsEmpty())
{
MessageBox(_T("信息不能为空!"), _T("温情提示"));
}
else
{
if (Sname.Compare(m_regname) != 0)//如果输入框中的名字在数据库里不存在
{
Dbset.Edit();//因为表里只允许有一个数据,所以就将新数据代替旧数据
Dbset.SetFieldValue(_T("Name"), _variant_t(m_regname));
Dbset.SetFieldValue(_T("Psw"), _variant_t(m_regpsw));
Dbset.Update();
MessageBox(_T("用户注册成功!"), _T("温情提示"));
}
else//如果输入的名字和数据库里的一致,则提示存在该用户
{
MessageBox(_T("该用户已存在!"), _T("温情提示"));
//其实应该添加一个修改密码的功能的,这里就不加了,因为修改密码只要光改变密码就可以,不需要改用户名,比注册还简单一步
}
}
Dbset.Close();
db.Close();


别忘了最重要的#include "afxdao.h",这是SQL DAO的头文件,具体什么情况请问度娘;;;;

这样的话,注册就好了;;;

下面呢,我们进行登陆界面的账号跟密码与数据库的对比,如果匹配,那就登入成功,否则,失败;;;

在上一篇文章中,我还建了一个类,这个类是登陆界面对话框的类,

请看上一张,这里呢跟上一张有所不同,上一张直接是固定的密码账号,没办法注册,这里呢仍然差不多,只需稍加修改,还是我的loading类,嘿嘿,

这里呢,编辑框内也需要添加变量,变量的名呢,m_logname,m_logpsw;

请看代码

// loading.cpp : 实现文件
//

#include "stdafx.h"
#include "PlaneGame.h"
#include "loading.h"
#include "afxdialogex.h"
#include "afxdao.h"
#include "zhuce.h"
// loading 对话框

IMPLEMENT_DYNAMIC(loading, CDialogEx)

loading::loading(CWnd* pParent /*=NULL*/)
: CDialogEx(loading::IDD, pParent)
, open(false)
, open1(false)
, m_logname(_T(""))
, m_logpsw(_T(""))
{


}

loading::~loading()
{

}

void loading::DoDataExchange(CDataExchange* pDX)
{

DDX_Text(pDX, IDC_EDIT3, m_logname);
DDX_Text(pDX, IDC_EDIT4, m_logpsw);
}

BEGIN_MESSAGE_MAP(loading, CDialogEx)
ON_WM_NCHITTEST()
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDCANCEL, &loading::OnBnClickedCancel)
ON_BN_CLICKED(IDOK, &loading::OnBnClickedOk)
ON_BN_CLICKED(IDOK2, &loading::OnBnClickedOk2)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, &loading::OnNMClickSyslink1)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK2, &loading::OnNMClickSyslink2)
END_MESSAGE_MAP()

// loading 消息处理程序

//鼠标拖动窗口移动
CDaoDatabase db; //数据库

CDaoRecordset RecSet(&db); //记录集

LRESULT loading::OnNcHitTest(CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
ScreenToClient(&point);

CRect rc;
GetClientRect(&rc);

if (rc.PtInRect(point))
{
return HTCAPTION;
}
else
{
return CDialogEx::OnNcHitTest(point);
}
}

HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

//CFont font;
//font.CreatePointFont(200, _T("宋体"), NULL);
//GetDlgItem(IDC_STATIC)->SetFont(&font);
// TODO: 在此更改 DC 的任何特性

//在OnInitDialog()函数中添加:

// TODO: 在此添加额外的初始化代
if (nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(200, 100, 50));
pDC->SetBkMode(RGB(200, 100, 50)); //设置背景透明
return HBRUSH(GetStockObject(HOLLOW_BRUSH));

}

// TODO: 如果默认的不是所需画笔,则返回另一个画笔
//return hbr;
return 0;

}

void loading::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
open = FALSE;
CDialogEx::OnCancel();
}

void loading::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString Filepath = _T("Database.mdb");
CDaoRecordset Dbset(&db);
CFileFind Ffind;
BOOL flag = Ffind.FindFile(Filepath);
Ffind.Close();
if (!flag)
{
CString sqlcmd = _T("CREATE TABLE DataTable(Name VARCHAR(20),Psw VARCHAR(20))");
db.Create(Filepath);
db.Execute(sqlcmd);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable", 0));
Dbset.AddNew();
Dbset.SetFieldValue(_T("Name"), _variant_t(_T("plucky")));
Dbset.SetFieldValue(_T("Psw"), _variant_t(_T("MFC_py")));//设置初始用户名和密码
Dbset.Update();
Dbset.Close();
db.Close();
}//这样就创建好了数据库文件,而且设置了初始化账号

UpdateData(true);
//CDaoRecordset Dbset(&db);
//CString Filepath =_T( "Database.mdb");
CString Sname, Spsw;
_variant_t varname, varpsw;
db.Open(Filepath);
Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);
varname = Dbset.GetFieldValue(_T("Name"));
varpsw = Dbset.GetFieldValue(_T("Psw"));
Sname = (LPCSTR)_bstr_t(varname);
Spsw = (LPCSTR)_bstr_t(varpsw);
Dbset.Close();
db.Close();
if (Sname.Compare(m_logname) == 0 && Spsw.Compare(m_logpsw) == 0)//如果密码和账户与数据库一致
{
MessageBox(_T("登入成功!"), _T("温情提示"));
CDialog::OnOK();
}
else
{
MessageBox(_T("用户或密码错误!"), _T("温情提示"));
return;
}
}

void loading::OnBnClickedOk2()
{
open1 = FALSE;
// TODO: 在此添加控件通知处理程序代码
}

void loading::OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
zhuce dlg;
//opening = TRUE;
if (dlg.DoModal() == IDOK)
{
Invalidate();
}
*pResult = 0;
}

void loading::OnNMClickSyslink2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
MessageBox(_T("暂无此功能,请联系开发者"), _T("温情提示"));
*pResult = 0;
}


对比一下,与上一张有哪些变化,修改之即可,我们运行一下就会发现很漂亮,当然呢,这个mdb文件要与EXE文件放在一起,否则会找不到mdb文件而发生错误。

与同学共勉,飞机大战心得体会,如果有需要飞机大战完整源码的话请留下邮箱,我会毫无保留的发给您的,与您共同学习,如果有运行不起来的地方也请留言告诉我,我会与您共同解决的。

以上为经验之谈,亲身试验……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: