创建项目由向导生成的窗体作为工作的主窗体。用户登录、注册窗体添加对话框来实现。

【具体功能】

1、主窗体应该出现在登录窗体成功之后。

2、登录窗体关闭(右上角❌),程序直接退出。

在App.cpp的InitInstance()内起始处加入代码

    //============登录===========//在主程序窗口运行前首先弹出登录对话框
while (TRUE)
{
CLogin login_Dialog;
//模态对话框
int nReturn = login_Dialog.DoModal();//返回IDOK或IDCANCEL。如果返回的是IDCANCEL,则要调用WindowsCommDlgExtendedError函数来确定是否发生了一个错误。IDOK和IDCANCEL都是常量,它表明用户选择的是OK按钮还是Cancel按钮
if (nReturn == IDCANCEL)//点击取消
{
return FALSE;
}
if (nReturn == IDOK)//点击确定
{
//HWND login_Hwnd = GetDlgItem(login_Dialog, IDD_DIALOG1);
CString str_User = login_Dialog.m_strUser;
CString str_Password = login_Dialog.m_strPassword; if (!(str_User == "admin" && str_Password == "admin"))//如果用户名密码不是admin/admin,则报错,提示重新输入,直至正确为止。
{
if (IDOK == MessageBox(NULL, TEXT("用户ID或密码错误!\n 请重新输入!"),TEXT( "登录失败!"), MB_OKCANCEL | MB_ICONERROR))
continue;
else
return FALSE;
}
else
break;
}
}

用户登录对话框

void CMFCApplication17Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//将控件数据复制给控件变量
CString username;
CString password;
//与注册类似操作
bool flag = false;
//char * path = "username.txt";
CString path = TEXT("./username.txt");
CFile file;
file.Open(path, CFile::modeCreate | CFile::modeRead);
file.SeekToBegin();
CArchive ar(&file, CArchive::load);
//去除数据左右空格数据
m_loginName.Trim();
m_loginPwd.Trim(); //校验用户密码,与注册校验相同的操作,这里多验证了一步,即校验密码
while (ar.ReadString(username))
{
if (ar.ReadString(password))
{
username.Trim();
password.Trim();
if (username == m_loginName && password == m_loginPwd)
{
flag = true;
break;
}
}
}
//关闭CFile和CArchive
ar.Close();
file.Close();
if (flag)
{
//m_Login_Result = m_Login_Account + " " + " " + "已登录";//找到则显示的是用户名+性别+已登录
m_loginName = "";//成功登录后把用户框和密码框文本清除
m_loginPwd = "";
UpdateData(FALSE);//将数据从控件变量传递给控件
CWork dlgW;
dlgW.DoModal(); }
else{
MessageBox(TEXT("用户名不存在或密码错误"));//用户密码错误或用户不存在提示
}
}
void CMFCApplication17Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CRegister reg;
reg.DoModal();
}

用户注册对话框

void CRegister::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString username;//从文件中读取用户名进行校验,如果输入的用户名在文件已存在则不进行注册
bool flag = false;//标记
//char * path = "username.txt";//文件路径
CString path = TEXT("username.txt"); CFile fp;//使用MFC的CFile将暑假写入文件
fp.Open(path, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
fp.SeekToBegin();//移动文件指针位置至文件头 CArchive ar(&fp, CArchive::load);//使用CArchive进行读取文件 UpdateData(TRUE);//将数据从控件复制到控件变量 //进行左右空格清除
m_registerName.Trim();
m_registerPwd1.Trim();
m_registerPwd2.Trim(); //校验操作
while (ar.ReadString(username))
{
username.Trim();
if (username == m_registerName)
{
flag = true;//如果已存在用户名,则标记flag为true
break;
}
else
{
ar.ReadString(username);//读取下一行(每一行为一个属性,比如用户名,密码)
ar.ReadString(username);//读取下一行
}
}
ar.Close(); fp.SeekToEnd();//文件写入为追加操作,所以写入前必须将文件指针移动至文件尾 if (!flag)
{
//CFile Write(*str,GetLength())写入
fp.Write(m_registerName, m_registerName.GetLength());
//win虽是\r\n,在写程序只需要\n即可换行
fp.Write("\r\n", sizeof(char));
if (m_registerPwd1 != m_registerPwd2)
{
MessageBox(TEXT("密码不一致"));
}
else
{
fp.Write(m_registerPwd1, m_registerPwd1.GetLength());
fp.Write("\r\n", sizeof(char));
fp.Close();
MessageBox(TEXT("注册成功"));
CDialog::OnOK();
}
}
else
{
MessageBox(TEXT("用户已存在"));//用户已存在提示框,不关闭注册框,可让用户自由选择是否继续注册
}
}

MFC 用户登录、注册、工作主窗体的更多相关文章

  1. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  2. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  3. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  4. 纯JSP实现用户登录注册,记事本

    没有美化,没有格式,没有样式 1.JSP登陆注册 将用户注册的信息保存在application对象中,用于登录时的验证. 首页如下: 如果未登录,在  session 中找不到 currentUser ...

  5. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  6. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  7. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  8. javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. /*用户登录注册页面输入框的设置*/<span>的使用

    <!DOCTYPE html> /*用户登录注册页面输入框的设置*/ <html lang="en"> <head> <meta char ...

  10. flask 开发用户登录注册功能

    flask 开发用户登录注册功能 flask开发过程议案需要四个模块:html页面模板.form表单.db数据库操作.app视图函数 1.主程序 # app.py # Auther: hhh5460 ...

随机推荐

  1. Servlet的request和response

    SERVLET API中forward() 与redirect()的区别?  答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址:后者则是完全的跳转,浏览器将会得到跳转的地址 ...

  2. S03_CH03_AXI_DMA_OV7725摄像头采集系统

    S03_CH03_AXI_DMA_OV7725摄像头采集系统 3.1概述 本课程讲解如何搭建基于DMA的图形系统,方案原理如下. 摄像头采样图像数据后通过DMA送入到DDR,在PS部分产生DMA接收中 ...

  3. 【规律】Growing Rectangular Spiral

    Growing Rectangular Spiral 题目描述 A growing rectangular spiral is a connected sequence of straightline ...

  4. Java 同一个类的不同实例对象竟然可以相互访问各自的private成员

    如题,在看String源码的某个函数时,发现了这个操作是被允许的,而且可以直接改变private字段(不是final按理是可以改变),这与之前的理解有点相背. 接下来试图整理下Google来的结论: ...

  5. Angular7如何动态刷新Echarts图表

    1 概述 echarts是百度的开源图表插件 Angular中引入echarts网上教程很多 Angular引入echarts,并使用动态刷新 2 安装 请参考大神的博客:https://blog.c ...

  6. ZPL语言完成条形码的打印

    近期因为项目的需求,需要使用到打印机来打印业务相关的条形码和其他信息,由于之前有操作其它打印机的经验,Leader就安排我来做这个了(凑哦,这能说我是懵逼的么).于是就开始了我的探索之旅啦,不对,是踩 ...

  7. PHP中RabbitMQ之phpAmqplib实现(五

    本章讲诉如何使用php-amqplib实现RabbitMQ. 环境:CoentOS,PHP 7 简单介绍一下php-amqplib php-amqplib是Advanced Message Queui ...

  8. 不重启linuxVMWare虚拟机添加虚拟光驱、硬盘

    方法/步骤1: VMware找到要添加虚拟光驱位置,先右击点击设置,如图所示: 步骤2: 出现此界面之后点击添加: 步骤3: 直接点击下一步,如下图所示: 点击完成,天机硬盘就完毕了. 磁盘添加完成, ...

  9. 利用Pycharm部署同步更新Django项目文件

    利用Pycharm部署同步更新Django项目文件 这里使用同步更新的前提是你已经在服务器上上传了你的Django项目文件. 在"工具(Tools)"菜单中找到"部署(D ...

  10. “System.Reflection.TargetInvocationException”类型的未经处理的异常在 mscorlib.dll 中发生

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 第一种,权限不够,在项目运行的时候弹出==>解决方法:以管理员权限运行vs ...