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

////////////////2015/07/21//////////////

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

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

 

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

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

windows程序设计——飞机大战笔记(调用登陆数据库)_第1张图片

windows程序设计——飞机大战笔记(调用登陆数据库)_第2张图片

windows程序设计——飞机大战笔记(调用登陆数据库)_第3张图片

windows程序设计——飞机大战笔记(调用登陆数据库)_第4张图片

windows程序设计——飞机大战笔记(调用登陆数据库)_第5张图片

哈哈,效果还不错吧,下面我就详细说一下怎么调用跟建立数据库,用的是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文件而发生错误。

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

以上为经验之谈,亲身试验……

 

 

 

你可能感兴趣的:(windows程序设计——飞机大战笔记(调用登陆数据库))