首页 > 其他分享 >基于 visual studio 2022 环境下的“MFC”计算器登录使用

基于 visual studio 2022 环境下的“MFC”计算器登录使用

时间:2023-12-03 23:12:44浏览次数:37  
标签:MFC mTempStr AfxMessageBox char visual studio result mysqlCon mysql

一、前言

1、系统环境:Window10,visual studio 2022,MYSQL Client(MariaDB 5.5(X64))。

2、界面:这是一个MFC界面,通过连接创建的数据库,实现计算器登录、运算以及查看历史记录的功能。

二、设计过程

1、流程图:

2、数据库表格创建与连接

(1)创建用户表“yunzhou”:

(2)创建历史记录表“yunzhou1”:

(3)连接mysql数据库:

①把配置属性的“环境”填写为系统安装mysql的路径下的bin文件夹,即“PATH=D:\mysql\mysql-8.0.23-winx64\bin;”。

②在安装mysql的文件夹中,找到“lib”文件夹下的“libmysql.lib”和“libmysql.dll”,复制这两个文件到创建MFC程序的同级目录下。

③修改“VC++目录”中的 包含目录、引用目录、库目录,其路径分别是你系统里安装mysql路径的include、lib、lib文件夹。
再修改“C/C++”的常规,和 “链接器”的常规和输入,见图。

 3、计算器界面设计:

(1):通过 visual studio 2022 下的MFC进行视图设计如下;

(2):对各个编辑框进行属性定义,实现相关功能。

注:进行属性定义,功能实现时,由于MFC框架下的C++语言自定义代码由系统生成,现展示关键代码如下.

①:登录功能

void CwuzhoujsqDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    // Login Button
    //CDialogEx::OnOK();

        GetDlgItem(IDC_EDIT1)->GetWindowText(username); //获得输入的用户名
        GetDlgItem(IDC_EDIT2)->GetWindowText(password); //获得输入的密码

        const char user[] = "root"; //填写你的 mysql 用户名
        const char pswd[] = "123456";  //填写你的 mysql 密码
        const char host[] = "localhost";
        const char database[] = "test";  //填写你的 mysql 数据库名称
        unsigned int port = 3306;

        MYSQL_RES* res;
        MYSQL_ROW row;
        MYSQL mysqlCon;
        if (username.IsEmpty() || password.IsEmpty())
        {
            MessageBox(_T("用户名或密码不能为空!"), _T("用户登录信息"));
            return;
        }
        mysql_init(& mysqlCon);
        if (!mysql_real_connect(& mysqlCon, host, user, pswd, database, port, NULL, 0))
        {
            AfxMessageBox(_T("访问数据库失败!"));
        }
        else
        {
            mysql_query(& mysqlCon, "SET USER GBK"); //设置字符集
            AfxMessageBox(_T("访问数据库成功!"));
        }
        int ress = mysql_query(& mysqlCon, "select*from yunzhou");
        if (ress == 0) //检测查询成功为0,不成功则非0
        {
            res = mysql_store_result(& mysqlCon); //保存查询到的数据到 res
            if (mysql_num_rows(res) == 0) //查询结果为空
            {
                AfxMessageBox(_T("用户不存在"));
            }
            else
            {
                row = mysql_fetch_row(res);
                if (password == row[1])
                {
                    mysql_free_result(res);
                    MessageBox(_T("已上线!"),L"提示",MB_OK);
                }
                else
                {
                    AfxMessageBox(_T("密码错误!"));
                }
            }
        }
        else
        {
            AfxMessageBox(_T("访问失败!"));
        }
        mysql_close(& mysqlCon);
}

计算器登录过程如下:

②计算功能:

void CwuzhoujsqDlg::Calculator()
{
    UpdateData(TRUE);
    mNum2 = _wtof(mStr);
    double result = 0.0f;
    switch (mFlag)
    {
    case FLAG_JIA:
        result = mNum1 + mNum2;
        mTempStr = mTempStr + _T("+") + mStr + _T("=");
        break;
    case FLAG_JIAN:
        result = mNum1 - mNum2;
        mTempStr = mTempStr + _T("-") + mStr + _T("=");
        break;
    case FLAG_CHENG:
        result = mNum1 * mNum2;
        mTempStr = mTempStr + _T("*") + mStr + _T("=");
        break;
    case FLAG_CHU:
        if (mNum2 == 0) {
            mTempStr = _T("出0错误");
        }
        else
        {
            result = mNum1 / mNum2;
            mTempStr = mTempStr + _T("/") + mStr + _T("=");
        }
        break;
    default:
        break;
    }
    if (result - (int)result <= 1e-5) {
        mStr.Format(L"%d", (int)result);
    }
    else {
        mStr.Format(L"%f", result);
    }
    mTempStr += mStr;//计算记录在mTempStr中
    //SaveMySql(mTempStr);
    //UpdateData(FALSE);
    mNum1 = 0.0f;
    mNum2 = 0.0f;
    SaveMySql(mTempStr);
}

计算过程如下:

③历史记录插入:

void CwuzhoujsqDlg::SaveMySql(CString text)
{
    const char user[] = "root"; //填写你的 mysql 用户名
    const char pswd[] = "123456";  //填写你的 mysql 密码
    const char host[] = "localhost";
    const char database[] = "test";  //填写你的 mysql 数据库名称
    unsigned int port = 3306;
    MYSQL_RES* res;
    MYSQL_ROW row;
    MYSQL mysqlCon;
    mysql_init(&mysqlCon);
    if (!mysql_real_connect(&mysqlCon, host, user, pswd, database, port, NULL, 0))
    {
        AfxMessageBox(_T("访问数据库失败!"));
    }
    else
    {
        mysql_query(&mysqlCon, "SET NAMES GBK"); //设置字符集,确保能够插入中文数据
        CStringW sql;
        sql.Format(_T("INSERT INTO yunzhou1 (test) VALUES ('%s')"), text);
        AfxMessageBox(sql);
        LPCWSTR sqlW = sql.GetString();
        int size_needed = WideCharToMultiByte(CP_UTF8, 0, sqlW, -1, NULL, 0, NULL, NULL);  // 计算所需的缓冲区大小
        char* sql_char = new char[size_needed];
        WideCharToMultiByte(CP_UTF8, 0, sqlW, -1, sql_char, size_needed, NULL, NULL);  // 将宽字符转换为多字节字符
        CString str(sql_char);
        MessageBox(str);
        if (mysql_query(&mysqlCon, sql_char) == 0)
        {
            AfxMessageBox(_T("插入成功!"));
        }
        else
        {
            AfxMessageBox(_T("插入失败!"));
        }
    }
    mysql_close(&mysqlCon);
}

插入过程如下:

mysql数据库中历史记录保存查询如下:

 

标签:MFC,mTempStr,AfxMessageBox,char,visual,studio,result,mysqlCon,mysql
From: https://www.cnblogs.com/lzufe-wjh/p/17873869.html

相关文章

  • MFC 组合框 CComboBox
    7)组合框(下拉框)CComboBox a)获取内容:CComboBox::GetLBText 其它接口和CListBox 的用法几乎一样 b)属性设置 1)data:设置内容,不同内容间同英文的分号“;”分隔 2)type//DropDown之类的选项,可编辑和不可编辑。这个和上一个的列表框比较像,差不多。在BOOLCMFCAp......
  • MFC 列表框 CListBox
    ▲增删改查6)列表框CListBox a)给列表框添加一个字符串CListBox::AddString b)选中列表列表框某一项,自动触发事件:LBN_SELCHANGE 1)获取当前选中项CListBox::GetCurSel 2)获取指定位置的内容CListBox::GetText c)删除指定位置的字符串CListBox::DeleteString d)......
  • VisualStudio 如何调试 VBS 代码
    在调试VBS代码前,需要在VisualStudio(以下简称VS)中配置VBS调试工具,菜单栏工具->外部工具,在弹出的对话框中点击添加,如下:设置的相关参数如下:标题:VBScriptDebug命令:C:\Windows\System32\cscript.exe参数://nologo//X$(ItemPath)初始目录:$(ItemDir)最后确定,这时菜......
  • error: Microsoft Visual C++ 14.0 or greater is required
    1、错误背景python在安装aiohttp库时,出现MicrosoftVisualC++14.0orgreaterisrequired的提示:2、解决方案按照错误提示,访问https://visualstudio.microsoft.com/visual-cpp-build-tools/,下载生成工具:执行下载的exe执行文件:选择使用C++桌面开发,选......
  • Visual Studio2022创建Windows服务程序
    一、打开工具 二、创建新项目     创建后项目结构 三、重命名服务   四、添加安装程序     五、编码服务逻辑  usingSystem.ServiceProcess;usingSystem.Timers;usingSystem.Windows.Forms;namespaceMyAlertWindows......
  • ClickHouse + ClickVisual 构建日志平台
    越来越多的互联网公司开始尝试ClickHouse存储日志,比如映客、快手、携程、唯品会、石墨文档,但是ClickHouse存储日志缺少对应的可视化方案,石墨文档开源了ClickVisual用于解决这个问题。笔者初步尝试了一下ClickVisual,一点小小的实践经验,与各位分享。简介ClickVisual官方宣......
  • Visual Studio 2022:Vulkan 环境配置
    (前置)安装VulkanSDK,并确认安装目录,此后记为%VulkanDir%(例如:C:/VulkanSDK/1.3.261.1)VisualStudio中新建C++项目,进入“项目”>>“[项目名]属性”,上方两个选项设置为“所有配置”“所有平台”C/C++>>常规>>附加包含目录:添加%VulkanDir%/Include(替换%VulkanDir%为实际目录,下同)......
  • MFC 复选框 CheckBox
    复选框CheckBox和RadioButton基本上一样,他们的类型其实都是CButton。BOOLCMFCApplication5Dlg::OnInitDialog()初始化函数中:CheckRadioButton(IDC_CHECK1,IDC_CHECK3,IDC_CHECK1);//设定某一个初始化被选中,和RadioButton一样,要先排好连续的顺序m_Btn_01.SetWi......
  • 【转】如何给 Visual Studio 2022 安装 .NET 4.5 开发者工具包?
    本文转自:https://www.coderbusy.com/archives/2913.html在VS2022打开.net4.5的项目时,可能会遇到编译报错:ErrorMSB3644Thereferenceassembliesfor.NETFramework,Version=v4.5werenotfound.Toresolvethis,installtheDeveloperPack(SDK/TargetingPack)for......
  • MFC的CFile类以追加模式写文件
    CFile类的Open函数有CFile::modeNoTruncate模式,该模式是非截断的意思,再配合CFile::modeCreate,意味着如果文件不存在,则创建,如果文件存在,则不会将文件内容清空。当对文件进行追加写入时,有一个小细节就是打开文件模式中虽然添加了这两种OpenFlag,但是文件指针并未移动到末尾,因此追加出......