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

来源:互联网 发布:淘宝网小额贷款 编辑:程序博客网 时间:2024/05/17 07:35

////////////////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文件而发生错误。

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

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

 

 

 

0 0