第一篇:登录注册对话框实验报告
登录注册对话框实验报告
班 级:10网工三班
学生姓名:谢昊天
学号:1215134046
实验目的和要求: 实验目的
1、加深理解Windows程序设计的基本概念;
2、基于单文档的应用程序的创建;
3、学会对话框及相关控件的创建;
4、熟悉基本的Windows消息映射机制和消息相应过程。实验要求:
1.使用基于对话框应用程序框架; 2.设计对话框中用于用户交互的控件; 3.完成用户注册功能;
4.用户数据可以使用文件或者数据库进行存储; 5.必须完成数据的存储。
实验内容与分析设计:
1.创建一个基于对话框的应用程序,实现具有身份验证的应用程序。2.对话框具有用户注册的功能;
3.系统实现用户输入用户名和密码后,程序能够判断该用户的信息的正确性; 4.在完成身份的验证以后要通知用户结果。
实验步骤与调试过程:
1.打开Visual c++ 6.0编程环境;
2.点击文件->新建、选择建立新的工程;选择MCFAppWizard[exe]选项建立工程名为“Windows程序设计
(一)”的一个空工程;点击确定后,选择基本对话框。3.点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。在右边新增的对话框中,加入静态文本框和文本编辑框。4.鼠标右键单击刚才加进去的第一个静态文本框控件,点击属性。在弹出的标题中填写:“请输入账号:”然后回车,同样在下面的第二个静态文本框的属性标题改为:“请输入密码:”然后回车。
5.在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD。
6.在对话框上的任何空白的地方右键单击,点击建立类向导。选择建立Create a new class,点击OK。在Name中,为该对话框类取个名字:CDlg_login。下面的Base class以及Dialog ID不要随便改动。然后点击OK。这样新的类CDlg_login就与本对话框建立起了联系。点击OK后,点击member variables。7.左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。点击OK。同样也对IDC_EDIT_PWD也取一个名字:m_login_pwd。8.点击确定。这样我们就建立好了登录对话框以及其对应的类CDlg_login。我们在ClassView里面可以看到我们新加入 类CDlg_login。在对话框空白的地方单击右键,点击属性,在标题中输入:请登录。
9.点击右边的FileView,点击source files,双击MainFrm.cpp。这样在右边就打开了该文件。找到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),这是窗体框架创建函数。在该函数的后面(在return 0;的前面)加入语句:
CDlg_login dlg;//生成一个登录对话框对象
dlg.DoModal();//让对话框对象以有模式形式显示出来 10.在MainFrm.cpp文件的前面添加:#include “dlg_login.h”。11.然后对按钮编译响应函数。
12.在组建选项中点击执行【服务器.exe】(或者Ctrl+F5)执行程序;
实验结果:
弹出登录对话框,账号输入“xiehaotian”,密码输入“123456”,可实现登录、并弹出“登陆成功”的对话框,如果输入错误会弹出“登录失败”的对话框,点击“请注册新用户”,弹出注册的对话框,实现注册新用户。并且可以对数据库的读写更新,对数据的用户验证。
疑难小结:
通过本次试验,了解了MFC简单对话框编程的一些基础知识,学习到了用MFC编写基本对话框应用程序。学习到了如何编写登录、注册新用户的对话框,从而实现用户的登录和新用户的注册等功能。从而使我对MFD基本对话框应用程序有了进一步的了解,通过动手试验,更加深刻的理解了MFC基本对话框编程的特点。同时,在实验过程中,回顾书本上的理论知识,巩固了我的知识。学会了简单的控制台应用程序的创建,加深理解Windows程序设计的基本概念;利用基于单文档的应用程序的创建;学会对话框及相关控件的创建;熟悉基本的Windows消息映射机制和消息相应过程。
主要算法和程序清单: 1.编辑登录按钮
void logDlg::OnBUTTONlogbt(){
//判断输入框里的内容和数据库里的内容是否一致
UpdateData(true);CDaoRecordset Dbset(&db);CString Filepath=“Database.mdb”;CString Sname,Spsw;_variant_t varname,varpsw;db.Open(Filepath);Dbset.Open(AFX_DAD_USE_DEFAULT_TYPE.“SELECT * FROM DataTable”,0);varname=Dbset.GetFieldValue(“name”);varpsw=Dbset.GetFieldValue(psw);Sname=(LPCSTR)_bstr_t(varname);Spsw=(LPCSTR)_bstr_t(varpsw);Dbset.Close();db.Close();if(m_logname.IsEmpty()||m_logpsw.IsEmpty())//如果输入对话框中存在空输入
{
MessageBox(“信息不能为空!”,“温馨提示”);
return;} // TODO: Add your control notification handler code here if(Sname.Compare(m_logname)==0&&Spsw.Compare(m_logpsw)==0)//如果密码和账号与数据库一致
{
MessageBox(“登录成功!”,“温馨提示”);
CDialog::OnOK();} else {
MessageBox(“账户或密码错误!”,“温馨提示”);
return;}
} 2.编辑注册按钮
void RegDlg::OnBUTTONregbt1(){ // TODO: Add your control notification handler code here
UpdataData(true);//更新数据库
CString Filepath=“Database.mdb”;CString Sname;_variant_t varname;CDaoRecordset Dbset(&db);db.Open(Filepath);Dbset.Open(AFX_DAD_USE.DEFAULT_TYPE,“SELECT * FROM DataTable”,0);varname=Dbset.GetFieldValue(name);Sname=(LPCSTR)_bstr_t(varname);if(m_regname.IsEmpty()||m_regpsw.IsEmpty()){
MessageBox(“信息不能为空!”,“温馨提示”);
} else {
if(Sname.Conpare(m_regname)!=0)//如果输入框的名字在数据
} { Dbset.Edit();Dbset.SetFieldValue(“name”,_variant_t(m_regname));Dbset.SetFieldValue(“psw”,_variant_t(m_regpsw));Dbset.Update();MessageBox(“注册成功!”,“温馨提示”);} else //如果输入的名字和数据库的一致,则提示村爱该用户 { MessageBox(“该用户已存在”,“温馨提示”);//其实应该添加一个修改密码的功能的,}
第二篇:C# 将窗体显示为模式对话框,登录界面的制作
C# 将窗体显示为模式对话框,登录界面的制作
首先:窗体的两个属性 AcceptButton,和 CancelButton 分别设置为窗体上“确定”和“取消”按钮的名字:bnok 和 bncancel.其次:确定按钮和取消按钮的“DialogResult”属性分别设置为:ok , cancel
然后:窗体上的控件textbox要在类外部读出来那么设置其 modifier属性为public即可
接着:
int errCount = 0;
while(errCount < 3)
{
FrmLogin flog = new frmLogin();
flog.ShowDialog(this);
if(flog.DialogResult == DialogResult.OK)
{
flog.Username = flog.txtusername.Text;
flog.Password = flog.txtpassword.Text;
if(flog.Username == “liumu” &&
flog.Password == “198331622”)
{
MessageBox.Show(“欢迎访问该系统”, “登录成功”);
ShowWelcomePage();
break;
}
else
{
errCount++;
MessageBox.Show(“用户名或密码有误请核对后重新输入”, “错误提示”);}
}
else if(flog.ShowDialog()== DialogResult.Cancel)
{
Application.Exit();
}
}
if(errCount == 3)
{
MessageBox.Show(“您三次输入有误,被迫推出系统,Sorry!”, “退出提示”);Application.Exit();
}
第三篇:unity3d游戏开发之登录注册应用
在注册的时候,输入了数据库已存在的用户名,会显示用户已存在。
//验证用户是否存在
Users u = new Users().register(name);
if(name == u.Name)
{
name = “该用户已存在”;
a =GUI.Button(new Rect(600, 360, 40, 20), “注册”);
}
在登录的时候,当用户输入错误密码或用户名就会出现提示:
章来自狗刨学习网
代码部分:
如果用户名和数据库的不同
就提示:
print(“用户或密码错误”);
name = “";
password = ”";
flag = true;
这篇文章来自狗刨学习网
这篇文
第四篇:会员登录
目录
准备否调用isNameFormar方法判断用户名输入的是否满足要求?是是调用自定义isName方法判断用户名是否已存在?否获取用户填写的登录名,登录密码(使用MD5加密),性别,电子邮箱,QQ用户名已存在,Label控件为红提示“请正确填写信息!”创建SQL语句,该语句用来添加用户的详细信息创建数据库连接,打开数据库连接,创建SqlCommand对象否判断ExecuteNonQuery方法返回的参数是否大于0?是注册成功提示“请正确填写信息!”结束 图4.5 Register_Clink事件实现框图
图4.6 会员注册页面设计图
会员登录
目录
会员登录主要通过判断用户输入的会员名和密码是否与数据库中的会员名和密码相同,如果相同则登录成功。
第五篇:MFC 对话框编程 -- 总结
MFC 对话框编程--总结
一、创建对话框对象
1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:classCTestDlg :public CDialog
2.创建话话框对象
模态对话框的创建:
如:
CTestDlgdlg;
dlg.DoModal();
非模态对话框创建:
如:
CTestDlgdlg;
dlg.Create(IDD_DIALOG, this);
但这样是得不到一个正常显示的非模态对话框的。因为模态与非模态对话框的实现方式并不相同,这里我们还要注意几点。
非模态对话框创建完成后是隐藏着的,必须调用ShowWindow来进行显示。
对于模态对话框,当执行到DoModal 函数以创建对话框时,程序会暂停执行,直至模态对话框关闭。所以创建模态对话框可以采用局部对象。
但是,对于非模态对话框,当执行Create函数时并不会暂停执行,当执行到大括号“}后Dlg局部对象被销毁生命周期结束,于是异常出现了。
解决方法有两个:
一、在View类中定义一个CTestDlg 成员变量。
二、动态创建一个CTestDlg 变量,并重写CTestDlg 类的 PostNcDestroy函数,在该函数里销毁对象 deletethis;
无论创建的是模态对话框,还是非模态对话框,当我们单击确定或取消按钮后对话框都会消失。但这时低层的操作却是不同的。
对于模态对话框,此时对话框对象的确是被销毁了,但对于非模态对话框,这时只是隐藏起来不再显示。这需要我们自己调用DestoryWindow函数来进行销毁工作。
这时我们必须重写 CTestDlg 的 OnOK、OnCancel 两个函数(这两个是基类CDialog的虚函数),在这两个函数内调用DestroyWindow函数,并注意不再调用基类CDialog相应的函数。正确地创建非模态对话框的代码如下:
CTestDlg*pDlg = new CTestDlg;
pDlg->Create(IDD_DIALOG, this);
pDlg->ShowWindow(SW_SHOW);
同时,在CTestDlg 类的 PostNcDestroy函数中销毁对象:deletethis;
二、动态创建按钮
1.在对话框类CTestDlg 中定义一个 CButton 类对象,作为其成员变量。
2.在相应的消息处理中,调用 CButton类的Create函数创建按钮。
要注意两点:
如果在调用CButton::Create创建按钮时没有指定WS_VISIBLE 风格,那么随后一定要调用这个按钮对象的ShowWindow函数,来将该按钮显示出来。
为防止该CButton关联多个按钮,这里需要进行一些设置,如下:
if(!m_btn.m_hwnd)
{
// CButton 对象m_btn 未关联一个按钮
m_btn.Create(....);
}
else
{
// CButton 对象m_btn 已关联一个按钮
其他操作...}
当然,方法并不只这一种。但这是最漂亮的方法。
三、设置控件文本文字
1.下面列举几个用来设置控件文本文字的函数:
// 取得对话框中指定控件的窗口句柄。控件通过ID标识来指定
CWnd*GetDlgItem(int nID)const;
void CWnd::GetDlgItem(int nID, HWND* phWnd)const;
// 取得窗口文本
intGetWindowText(LPTSTR lpszStringBuf, int nMaxCount)const;
voidGetWindowText(CString& rString)const;
// 设置窗口文本
voidSetWindowText(LPCTSTR lpszString);
// 取得指定控件窗口文本。控件通过ID标识来指定
intGetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount)const;
intGetDlgItemText(int nID, CString& rString)const;
// 设置指定控件窗口文本。控件通过ID标识来指定
void SetDlgItemText(int nID, LPCTSTR lpszString);
// 取得指定控件窗口文本,并转化为UINT 类型返回。控件通过ID标识来指定
UINT GetDlgItemInt(int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE)const;// 设置指定控件窗口文本,由UINT类型转化为字符。控件通过ID标识来指定
voidSetDlgItemInt(int nID, UINT nValue, BOOL bSigned = TRUE);
2.可以为对话框控件关联一个变量,在CTestDlg 类的DoDataExchange来完成数据的更新与交换。这里我们需要重点说明 DoDataExChange 函数:
首先引用MSDN的一段解释吧:Called by the framework to exchange and validate dialog data。意指框架调用此函数来改写与确认对话框数据。
其实DoDataExChange函数主要是通过DDX_TEXT(....)或 DDX_CONTROL(....)来实现数据的实时关联的。
我从我的MSDN中随便拿来一个定义:
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, BYTE& value);
其实这个要关联的话也很简单,没有那么复杂。如下:
value = GetDlgItemInt(nIDC);
SetDlgItemInt(nIDC, value);
而DoDataExchange 函数是在UpdateData函数内部调用的。
该函数只有一个布尔型参数,b31.org 它决定了数据传送的方向:
调用UpdateData(TRUE),将数据从对话框的控件中传送到对应的数据成员中。
调用UpdateData(FALSE),则将数据从数据成员中传送给对应的控件。
UpdateData(FALSE)是将变量的值传到控件.UpdateData(TRUE)是从控件中取值到关联的变量
四、对话框伸缩功能的实现
只关联到两个函数:
// 取得指定窗口边框折尺寸
void GetWindowRect(LPRECT lpRect)const;
// 设置指定窗口(控件)的位置同尺寸
BOOL SetWindowPos(const CWnd* pWndInsertAfter, intx, inty, int cx, intcy, UINTnFlags);
五、逃跑按钮的实现
1.创建一个基于对话框的MFC 程序,删除原有的控件后,再添加两个按钮,更改两按钮名为”你能抓到我吗?“
2.打开类视图,定义一个新类CNewButton,这个新类的基类为CButton。并为此类添加一个成员变量:CNewButton*m_pbtn;
3.打开资源视图,分别为两个按钮创建两个CNewButton类关联变量:m_btn1, m_btn2;
4.在CXXXDlg中改写其OnInitDialog函数。主要添加:
m_btn1.m_pbtn = &m_btn2;
m_btn2.m_pbtn = &m_btn1;
5.对于CNewButton 类,必定其OnMouseMove函数。主要添加:
ShowWindow(SW_HIDE);
m_pbtn->ShowWindow(SW_SHOW);
编译,连接。OK
六、属性页、属性表单与向导的建立
1.创建属性页
打开资源编辑器,点击Dialog 资源并在列出的选项中,选择:IDD_PROPPAGE_LARGE。建立属性页资源。
之后,我们就可以其上添加其他控件来完善我们的属性页。关于属性页的完善操作我们在后面会谈到。
属性页资源完善后,再为每一个属性页关联一个类。
2.创建属性表单
打开类视图,添加新类CPropSheet,其基类为CPropertySheet。
之后再为其添加属性页类对象,并在其构造函数中利用AddPage函数将属性页添加到表单上。
3.消息响应
再主菜单的最后再增加一个菜单项,并为此菜单添加消息响应函数。
在此响应函数中创建属性表单:
CPropSheetpropSheet(TEXT(”属性表单"));
propSheet.DoModal();
4.向导的创建
创建一个向导类型的对话框,应该遵循创建一个标准属性表单的步骤来实现。
但在调用属性表单对象的DoModal函数之前,应该先调用SetWizardMode函数,来声明建立的是一个作为向导的属性表单。
所以,应在DoModal函数之前添加如下代码:
propSheet.SetWizardMode();
5.属性页的完善操作
首先我们要注意到属性页,澳门新濠天地官网66bb.org 在三个不同时期的关键性操作:当属性表单中的某属性页被选中,从而成为一个活动的页面时,应用程序框架就会调用OnSetActive函数。
OnSetActive 是其基类的一个虚函数,我们可以重写这个函数并在其中进行一些操作。
假设当前我们处于属性表单中的某属性页,当我们点击下一步并将进入下一个属性页时,应用程序框架会调用OnWizardNext函数。
OnWizardNext 是其基类的一个虚函数,我们可以重写这个函数并在其中进行一些操作。类似的还有OnWizardBack 同 OnWizardFinish函数。
当一个属性页被创建时,会调用其OnInitDialog函数。
我们可以在这个函数里对属性页中的控件进行一些操作。如为列表框或下拉框添加字符串等。