zoukankan      html  css  js  c++  java
  • windows程序设计——飞机大战笔记(Access数据库的使用)

    //////////////////2015/07/22///////////////////

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

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

    为了登陆界面的注冊用的数据库鼓捣的一天了,必须得写篇文章发泄一下了。

     

    昨天发表的文章还是存在一点bug的。不足之处非常easy就看出来了。这种。今天有改动了一下,是大改哦

     

    int first = 1;
    	while (!Dbset.IsEOF())	// 有没有到表结尾
    	{
    		Dbset.GetFieldValue(_T("Name"), var);
    		Sname = (LPCSTR)var.pbstrVal;
    		Dbset.GetFieldValue(_T("Psw"), var);
    		Spsw = (LPCSTR)var.pbstrVal;
    		Dbset.GetFieldValue(_T("Score"), var);
    		Sscore = (LPCSTR)var.pbstrVal;
    		if (Sname.Compare(m_logname) == 0 && Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致
    		{
    			MessageBox(_T("登入成功!"), _T("温情提示"));
    			CDialog::OnOK();
    			first = 0;
    			break;
    		}
    		else
    		{
    			Dbset.MoveNext();
    		}
    	}
    	if (first)
    	{
    		MessageBox(_T("用户或password错误!"), _T("温情提示"));
    	}

    这就是改动的地方,资料查了半天。才知道MFC调用数据库有这么多方法,这个呢是适合我的。

    由于我的定义是

    CDaoDatabase db;                                       //数据库

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

    头文件 #include "afxdao.h"

    唉,不多说了,直接上完整代码,贴出来好心疼,大家互相交流学习吧,,,。,,

    // 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)
    CDaoDatabase db;                                       //数据库
    
    CDaoRecordset RecSet(&db);                   //记录集
    loading::loading(CWnd* pParent /*=NULL*/)
    	: CDialogEx(loading::IDD, pParent)
    	, open(false)
    	, open1(false)
    	, m_logname(_T(""))
    	, m_logpsw(_T(""))
    {
    	
    	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),Score 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")));//设置初始username和password
    		Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0")));
    		Dbset.Update();
    		Dbset.Close();
    		db.Close();
    	}//这样就创建好了数据库文件,并且设置了初始化账号
    }
    
    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),Score 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")));//设置初始username和password
    		Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0")));
    		Dbset.Update();
    		Dbset.Close();
    		db.Close();
    	}//这样就创建好了数据库文件,并且设置了初始化账号*/
    
    	/*CString sPath;
    	GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
    	sPath.ReleaseBuffer();
    	int nPos;
    	nPos = sPath.ReverseFind('\');
    	sPath = sPath.Left(nPos);
    	CString strFile = sPath + _T("\Database.mdb");
    	db.Open(strFile);               // 打开已创建的demo数据库及DemoTable表
    	RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT* FROM DataTable"), NULL);*/
    
    
    	//UpdateData(TRUE);
    	//CString m_tablefield, m_searchSQL;
    	//if (m_sfield.Compare("姓名") == 0)
    	//{
    	//	m_tablefield.Format("Name");
    	//}
    
    
    
    
    	/*UpdateData(true);
    	CDaoRecordset Dbset(&db);
    	CString Filepath =_T( "Database.mdb");
    	CString Sname, Spsw,Sscore;
    	_variant_t varname, varpsw,varscore;
    	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"));
    	varscore = Dbset.GetFieldValue(_T("Score"));
    	Sname = (LPCSTR)_bstr_t(varname);
    	Spsw = (LPCSTR)_bstr_t(varpsw);
    	Sscore = (LPCSTR)_bstr_t(varscore);
    	Dbset.Close();
    	db.Close();
    	if (Sname.Compare(m_logname)==0&&Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致
    	{
    		MessageBox(_T("登入成功!"), _T("温情提示"));
    		CDialog::OnOK();
    	}
    	else
    	{
    		MessageBox(_T("用户或password错误!"), _T("温情提示"));
    		return;
    	}*/
    	UpdateData(true);
    	COleVariant var;		// 字段类型
    	var.ChangeType(VT_BSTR, NULL);
    	//CString strName, strAge, strFile;
    	CString Sname, Spsw, Sscore;
    	CDaoRecordset Dbset(&db);
    	CString Filepath = _T("Database.mdb");
    	db.Open(Filepath);
    	Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM DataTable"), 0);
    	int first = 1;
    	while (!Dbset.IsEOF())	// 有没有到表结尾
    	{
    		Dbset.GetFieldValue(_T("Name"), var);
    		Sname = (LPCSTR)var.pbstrVal;
    		Dbset.GetFieldValue(_T("Psw"), var);
    		Spsw = (LPCSTR)var.pbstrVal;
    		Dbset.GetFieldValue(_T("Score"), var);
    		Sscore = (LPCSTR)var.pbstrVal;
    		if (Sname.Compare(m_logname) == 0 && Spsw.Compare(m_logpsw) == 0)//假设password和账户与数据库一致
    		{
    			MessageBox(_T("登入成功!"), _T("温情提示"));
    			CDialog::OnOK();
    			first = 0;
    			break;
    		}
    		else
    		{
    			Dbset.MoveNext();
    		}
    	}
    	if (first)
    	{
    		MessageBox(_T("用户或password错误!"), _T("温情提示"));
    	}
    	db.Close();
    	Dbset.Close();
    
    
    	/*UINT nIndex = 0;
    	CString TempStr;
    	COleVariant OleVariant;
    	// 删除列表控件全部记录
    	BookList.DeleteAllItems();
    	// 定义记录集对象,并打开记录集
    	CDaoRecordset Record(&db);
    	Record.Open(dbOpenDynaset, L"SELECT * FROM BOOK");
    	// 移动到第一条记录
    	Record.MoveFirst();
    	while (!Record.IsEOF())
    	{
    		// 在列表控件加入记录
    		TempStr.Format(L"%d", nIndex + 1);
    		this->BookList.InsertItem(nIndex, TempStr);
    		for (int i = 1; i <= 3; i++)
    		{
    			Record.GetFieldValue(i, OleVariant);
    			this->BookList.SetItemText(nIndex, i, OleVariant.bstrVal);
    		}
    		Record.GetFieldValue(4, OleVariant);
    		TempStr.Format(L"%d", OleVariant.uintVal);
    		this->BookList.SetItemText(nIndex, 4, TempStr);
    		// 移到下一条记录Record.MoveNext () ;nIndex++ ;
    	}
    	// 关闭记录集
    	Record.Close();*/
    }
    
    
    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;
    }
    



    中间太多凝视的部分,由于改了又改,不怕辛苦,弄出来了真的非常开心,,。。,,给你们分享了。

    这个注冊部分呢也改动了。;;

    直接上代码吧;;。。

    // zhuce.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include "PlaneGame.h"
    #include "zhuce.h"
    #include "afxdialogex.h"
    #include "afxdao.h"
    
    // zhuce 对话框
    
    IMPLEMENT_DYNAMIC(zhuce, CDialogEx)
    
    zhuce::zhuce(CWnd* pParent /*=NULL*/)
    	: CDialogEx(zhuce::IDD, pParent)
    	, m_regname(_T(""))
    	, m_regpsw(_T(""))
    {
    
    }
    
    zhuce::~zhuce()
    {
    }
    
    void zhuce::DoDataExchange(CDataExchange* pDX)
    {
    	CDialogEx::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, m_regname);
    	DDX_Text(pDX, IDC_EDIT2, m_regpsw);
    }
    
    
    BEGIN_MESSAGE_MAP(zhuce, CDialogEx)
    	ON_BN_CLICKED(IDC_BUTTON1, &zhuce::OnBnClickedButton1)
    	ON_BN_CLICKED(IDOK, &zhuce::OnBnClickedOk)
    END_MESSAGE_MAP()
    
    
    // zhuce 消息处理程序
    
    
    void zhuce::OnBnClickedButton1()
    {
    	// TODO:  在此加入控件通知处理程序代码
    	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
    	{
    		CString Sname;
    		COleVariant var;		// 字段类型
    		var.ChangeType(VT_BSTR, NULL);
    		int first = 1;
    		while (!Dbset.IsEOF())	// 有没有到表结尾
    		{
    			Dbset.GetFieldValue(_T("Name"), var);
    			Sname = (LPCSTR)var.pbstrVal;
    			if (Sname.Compare(m_regname) == 0)//假设password和账户与数据库一致
    			{
    				MessageBox(_T("该用户已存在!"), _T("温情提示"));
    				CDialog::OnOK();
    				first = 0;
    				//break;
    			}
    			else
    			{
    				Dbset.MoveNext();
    			}
    		}
    		if (first)
    		{
    			Dbset.MoveLast();
    			//Dbset.Edit();//由于表里仅仅同意有一个数据,所以就将新数据取代旧数据
    			Dbset.AddNew();
    			Dbset.SetFieldValue(_T("Name"), _variant_t(m_regname));
    			Dbset.SetFieldValue(_T("Psw"), _variant_t(m_regpsw));
    			Dbset.SetFieldValue(_T("Score"), _variant_t(_T("0")));
    			Dbset.Update();
    			MessageBox(_T("用户注冊成功!"), _T("温情提示"));
    		}
    	}
    	Dbset.Close();
    	db.Close();
    }
    
    
    void zhuce::OnBnClickedOk()
    {
    	// TODO:  在此加入控件通知处理程序代码
    	CDialogEx::OnOK();
    }
    


     

    这段代码让我哭笑不得,,出了个bug。在群里跟别人分享都说这要是加上开机自己主动启动就无敌了。事实上没这么可怕。仅仅是死循环。一直显示该用户已存在,避免这个的方法是什么清楚吧。就是不要反复注冊。开玩笑了。你仅仅要把break那个地方取消凝视就好了,千万不要乱用哦。要维护好网络安全哦;;;;;;

    好了,我也是个渣渣,仅仅能整理资料,并不能讲的非常透彻,,,。,,制作登陆账号注冊的能够试试此代码;;;不错的哦。。;

    累死咯,不玩了,,,,接下来弄一下MFC套接字,争取把数据放到server上,用client调用server注冊。,,。,

    有懂的给我留言吧,谢谢啦;;;;

  • 相关阅读:
    Spring Cloud 接口契约测试
    看我玩弄千万日志于股掌
    从哲学层面浅谈计算机学习方法论
    一切互联网优势都是效率优势,一切竞争最终都是效率之争
    Arduino--蜂鸣器
    Arduino--光感应模块--模拟输入
    Arduino---按钮
    Arduino--PWM引脚
    Arduino专用绘图软件Fritzing
    点亮LED灯
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7207223.html
Copyright © 2011-2022 走看看