第二次作业

一,[实验目的]

1.掌握软件开发的基本流程

2.掌握常用的软件开发方式和工具。

二,[实验内容]

1.设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录(保存数据最好使用数据库)。

 

三,[实验要求]

1.完成软件的UI设计、使用Visio设计软件中所涉及的所有流程图。

2.选择合适的集成开发环境和工具完成计算器软件的开发

3.将开发好软件进行测试并截图

4.将本次实验过程写成实验报告提交在本次作业的链接中

5.关键代码部分以代码块格式粘贴在实验报告正文中

6.软件架构以及开发技术不限

四,[实验步骤及其结果]

1,利用Visual Stdio 2022 MFC框架建立一个登录对话框

流程图如下

界面如下

登录成功界面:

登陆失败界面如下:

实现代码如下:

// LoginDlgDlg.cpp: 实现文件
//

#include "pch.h"
#include "framework.h"
#include "LoginDlg.h"
#include "LoginDlgDlg.h"
#include "afxdialogex.h"


#ifdef _DEBUG
#define new DEBUG_NEW

#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CLoginDlgDlg 对话框

 

CLoginDlgDlg::CLoginDlgDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_LOGINDLG_DIALOG, pParent)
, user(_T(""))
, password(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CLoginDlgDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_NAME, user);
DDX_Text(pDX, IDC_EDIT_PWD, password);
}

BEGIN_MESSAGE_MAP(CLoginDlgDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CLoginDlgDlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CLoginDlgDlg::OnBnClickedCancel)
ON_EN_CHANGE(IDC_EDIT_NAME, &CLoginDlgDlg::OnEnChangeEditName)
ON_EN_CHANGE(IDC_EDIT_PWD, &CLoginDlgDlg::OnEnChangeEditPwd)
END_MESSAGE_MAP()


// CLoginDlgDlg 消息处理程序

BOOL CLoginDlgDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

void CLoginDlgDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CLoginDlgDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CLoginDlgDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}

 

void CLoginDlgDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
CString m_userName="WH";
CString m_userPWD="111";

UpdateData(TRUE);
if (strlen(m_userName) < 1) {
MessageBox("请输入用户名!");
return;
}
if (strlen(m_userPWD) < 1) {
MessageBox("请输入密码!");
return;
}
if (m_userName.Compare(user)||password.Compare(m_userPWD) ){
MessageBox("登录失败");
}
else {
MessageBox("登录成功");
}

}


void CLoginDlgDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}


void CLoginDlgDlg::OnEnChangeEdit1()

void CLoginDlgDlg::OnEnChangeEdit2()

void CLoginDlgDlg::OnEnChangeEditName()

void CLoginDlgDlg::OnEnChangeEditPwd()

 

 

2,计算器运行流程图

计算器运行结果

 

计算器实现代码(第一次作业)

// test_computerDlg.cpp: 实现文件
//
 
#include "pch.h"
#include "framework.h"
#include "test_computer.h"
#include "test_computerDlg.h"
#include "afxdialogex.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
 
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
 
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
 
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
 
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
 
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
//关于对话框
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
 
 
// CtestcomputerDlg 对话框
 
  
 
CtestcomputerDlg::CtestcomputerDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_TEST_COMPUTER_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
//用户界面中的输入框与其变量关联
void CtestcomputerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, mStr);//将mStr变量与输入框IDC_EDIT1关联
DDX_Text(pDX, IDC_EDIT2, mStr1);
DDX_Text(pDX, IDC_EDIT3, mStr2);
DDX_Text(pDX, IDC_EDIT4, mStr3);
DDX_Text(pDX, IDC_EDIT5, mStr4);
DDX_Text(pDX, IDC_EDIT6, mStr5);
DDX_Text(pDX, IDC_EDIT7, mStr6);
DDX_Text(pDX, IDC_EDIT8, mStr7);
DDX_Text(pDX, IDC_EDIT9, mStr8);
}
 
BEGIN_MESSAGE_MAP(CtestcomputerDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON6, &CtestcomputerDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON43, &CtestcomputerDlg::OnBnClickedButton43)
ON_BN_CLICKED(IDC_BUTTON42, &CtestcomputerDlg::OnBnClickedButton42)
ON_BN_CLICKED(IDC_BUTTON36, &CtestcomputerDlg::OnBnClickedButton36)
ON_BN_CLICKED(IDC_BUTTON37, &CtestcomputerDlg::OnBnClickedButton37)
ON_BN_CLICKED(IDC_BUTTON38, &CtestcomputerDlg::OnBnClickedButton38)
ON_BN_CLICKED(IDC_BUTTON30, &CtestcomputerDlg::OnBnClickedButton30)
ON_BN_CLICKED(IDC_BUTTON31, &CtestcomputerDlg::OnBnClickedButton31)
ON_BN_CLICKED(IDC_BUTTON32, &CtestcomputerDlg::OnBnClickedButton32)
ON_BN_CLICKED(IDC_BUTTON24, &CtestcomputerDlg::OnBnClickedButton24)
ON_BN_CLICKED(IDC_BUTTON25, &CtestcomputerDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON26, &CtestcomputerDlg::OnBnClickedButton26)
ON_BN_CLICKED(IDC_BUTTON1, &CtestcomputerDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON3, &CtestcomputerDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON2, &CtestcomputerDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON45, &CtestcomputerDlg::OnBnClickedButton45)
ON_BN_CLICKED(IDC_BUTTON44, &CtestcomputerDlg::OnBnClickedButton44)
ON_BN_CLICKED(IDC_BUTTON10, &CtestcomputerDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON11, &CtestcomputerDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON12, &CtestcomputerDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CtestcomputerDlg::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON14, &CtestcomputerDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CtestcomputerDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON39, &CtestcomputerDlg::OnBnClickedButton39)
ON_BN_CLICKED(IDC_BUTTON33, &CtestcomputerDlg::OnBnClickedButton33)
ON_BN_CLICKED(IDC_BUTTON27, &CtestcomputerDlg::OnBnClickedButton27)
ON_BN_CLICKED(IDC_BUTTON21, &CtestcomputerDlg::OnBnClickedButton21)
ON_BN_CLICKED(IDC_BUTTON20, &CtestcomputerDlg::OnBnClickedButton20)
ON_BN_CLICKED(IDC_BUTTON19, &CtestcomputerDlg::OnBnClickedButton19)
ON_BN_CLICKED(IDC_BUTTON18, &CtestcomputerDlg::OnBnClickedButton18)
ON_BN_CLICKED(IDC_BUTTON17, &CtestcomputerDlg::OnBnClickedButton17)
ON_BN_CLICKED(IDC_BUTTON16, &CtestcomputerDlg::OnBnClickedButton16)
ON_BN_CLICKED(IDC_BUTTON23, &CtestcomputerDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON34, &CtestcomputerDlg::OnBnClickedButton34)
ON_BN_CLICKED(IDC_BUTTON41, &CtestcomputerDlg::OnBnClickedButton41)
ON_BN_CLICKED(IDC_BUTTON35, &CtestcomputerDlg::OnBnClickedButton35)
ON_BN_CLICKED(IDC_BUTTON29, &CtestcomputerDlg::OnBnClickedButton29)
ON_BN_CLICKED(IDC_BUTTON28, &CtestcomputerDlg::OnBnClickedButton28)
ON_BN_CLICKED(IDC_BUTTON40, &CtestcomputerDlg::OnBnClickedButton40)
ON_BN_CLICKED(IDC_BUTTON22, &CtestcomputerDlg::OnBnClickedButton22)
ON_BN_CLICKED(IDC_BUTTON4, &CtestcomputerDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CtestcomputerDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON7, &CtestcomputerDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CtestcomputerDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CtestcomputerDlg::OnBnClickedButton9)
END_MESSAGE_MAP()
 
 
// CtestcomputerDlg 消息处理程序
 
BOOL CtestcomputerDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
 
// 将“关于...”菜单项添加到系统菜单中。
 
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
 
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
 
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
 
// TODO: 在此添加额外的初始化代码
 
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
 
void CtestcomputerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
 
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
 
void CtestcomputerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
 
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
 
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
 
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CtestcomputerDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
 
 
//B->D按钮
void CtestcomputerDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_BD;
}
 
//按钮0
void CtestcomputerDlg::OnBnClickedButton43()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//获取输入框中的值并且赋值给输入框关联的变量
mStr += L"0";
UpdateData(FALSE);//将更改后的值返回给输入框
}
 
//按钮“.”
void CtestcomputerDlg::OnBnClickedButton42()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//如果没有小鼠点,则加上小数点,如果找到小鼠点,则忽略此次点击
if (-1 == mStr.Find(L'.'))
{
mStr += _T(".");
}
UpdateData(FALSE);
}
 
//按钮1
void CtestcomputerDlg::OnBnClickedButton36()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"1";
UpdateData(FALSE);
}
 
//按钮2
void CtestcomputerDlg::OnBnClickedButton37()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"2";
UpdateData(FALSE);
}
 
//按钮3
void CtestcomputerDlg::OnBnClickedButton38()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"3";
UpdateData(FALSE);
}
 
//按钮4
void CtestcomputerDlg::OnBnClickedButton30()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"4";
UpdateData(FALSE);
}
 
 
void CtestcomputerDlg::OnBnClickedButton31()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"5";
UpdateData(FALSE);
}
 
 
void CtestcomputerDlg::OnBnClickedButton32()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"6";
UpdateData(FALSE);
}
 
 
void CtestcomputerDlg::OnBnClickedButton24()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"7";
UpdateData(FALSE);
}
 
 
void CtestcomputerDlg::OnBnClickedButton25()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"8";
UpdateData(FALSE);
}
 
 
void CtestcomputerDlg::OnBnClickedButton26()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"9";
UpdateData(FALSE);
}
 
//返回按钮(消去输入框中最后一个字符)
void CtestcomputerDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if (!mStr.IsEmpty()) {//判断是否为空,若不空,则
mStr = mStr.Left(mStr.GetLength() - 1);//去掉字符串最后一个字符,left从左边开始取
}
UpdateData(FALSE);
}
 
//清除按钮
void CtestcomputerDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//获取输入框
mStr = L"";
mNum1 = 0.0f;
mNum2 = 0.0f;
mFlag = FLAG_JIA;
UpdateData(FALSE);//输出到输入框
}
 
//清除所有按钮
void CtestcomputerDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//获取输入框
mStr1 = L"";
mStr2 = L"";
mStr3 = L"";
mStr4 = L"";
mStr5 = L"";
mStr6 = L"";
mStr7 = L"";
mStr8 = L"";
mStr = L"";
mNum1 = 0.0f;
mNum2 = 0.0f;
mFlag = FLAG_JIA;
UpdateData(FALSE);//输出到输入框
}
//保存第一个输入值
void CtestcomputerDlg::SaveFirstValue()
{
UpdateData(TRUE);
mNum1 = _wtof(mStr);//第一个运算数
mTempStr = mStr;//中间变量 为了构建历史记录
mStr = L"";//至空输入框 为了输入第二个运算数
UpdateData(FALSE);
}
//计算
void CtestcomputerDlg::Calculator()
{
UpdateData(TRUE);
mNum2 = _wtof(mStr);//第二个运算数 _wtof把字符串内容转换为浮点数
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;
case FLAG_NFANG: // n次方
result = pow(mNum1, 1.0/mNum2);
mTempStr = mTempStr + _T("^") + mStr + _T("=");
break;
case FLAG_KAINFANG://开n方
result = pow(mNum1, mNum2);
mTempStr = mTempStr + _T("^") + mStr + _T("=");
break;
case FLAG_MOD://模运算
result = (int)mNum1 % (int)mNum2;//模运算必须是整数
mTempStr = mTempStr + _T("%") + mStr + _T("=");
break;
case FLAG_LOGNX://对数运算
result = log(mNum2) / log(mNum1);
mTempStr = _T("log") + mTempStr + _T("(") + mStr + _T(")") + _T("=");
break;
case FLAG_PINGFANG://平方
result = mNum2 * mNum2;
mTempStr = mStr + _T("^2=");
break;
case FLAG_KAIFANG://开平方
result = sqrt(mNum2);
mTempStr = _T("根号") + mStr + _T("=");
break;
case FLAG_LIFANG://立方
result = mNum2 * mNum2 * mNum2;
mTempStr = mStr + _T("^3=");
break;
case FLAG_KAILIFANG://开立方
result = pow(mNum2, 1.0 / 3);
mTempStr = _T("开立方") + mStr + _T("=");
break;
case FLAG_SIN: // 正弦
result = sin(mNum2);
mTempStr = _T("sin(") + mStr + _T(")=");
break;
case FLAG_COS://余弦
result = cos(mNum2);
mTempStr = _T("cos(") + mStr + _T(")=");
break;
case FLAG_TAN://正切
result = tan(mNum2);
mTempStr = _T("tan(") + mStr + _T(")=");
break;
case FLAG_EX://e的x次方
{
double e = exp(1.0);
result = pow(e, mNum2);
mTempStr = _T("e^") + mStr + _T("=");
}
break;
case FLAG_N://计算n的阶乘
{
int n = (int)mNum2;
if (n == 0)
{
result = 1;
mTempStr = mStr + _T("!=");
}
else if (n < 0)
{
mTempStr = _T("负数没有阶乘");
}
else {
result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
mTempStr = 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;//将结果与表达式拼接
mStr8 = mStr7;
mStr7 = mStr6;
mStr6 = mStr5;
mStr5 = mStr4;
mStr4 = mStr3;
mStr3 = mStr2;
mStr2 = mStr1;
mStr1 = mTempStr;
UpdateData(FALSE);
mNum1 = result;
mNum2 = 0.0f;
}
//点击+按钮
void CtestcomputerDlg::OnBnClickedButton45()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();//保存第一个运算数
mFlag = FLAG_JIA;//设置运算符
}
 
 
//点击=按钮
void CtestcomputerDlg::OnBnClickedButton44()
{
// TODO: 在此添加控件通知处理程序代码
Calculator();//调用运算方法
}
 
//点击A按钮
void CtestcomputerDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"A";
UpdateData(FALSE);
}
 
//点击B按钮
void CtestcomputerDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"B";
UpdateData(FALSE);
}
 
//点击C按钮
void CtestcomputerDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"C";
UpdateData(FALSE);
}
 
//点击D按钮
void CtestcomputerDlg::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"D";
UpdateData(FALSE);
}
 
//点击E按钮
void CtestcomputerDlg::OnBnClickedButton14()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"E";
UpdateData(FALSE);
}
 
//点击F按钮
void CtestcomputerDlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
mStr += L"F";
UpdateData(FALSE);
}
 
//点击-按钮
void CtestcomputerDlg::OnBnClickedButton39()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();//保存第一个运算数
mFlag = FLAG_JIAN;//设置运算符
}
 
//点击x按钮
void CtestcomputerDlg::OnBnClickedButton33()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();//保存第一个运算数
mFlag = FLAG_CHENG;//设置运算符
}
 
//点击/按钮
void CtestcomputerDlg::OnBnClickedButton27()
{//双目运算符
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();//保存第一个运算数
mFlag = FLAG_CHU;//设置运算符
}
 
//点击x^2按钮
void CtestcomputerDlg::OnBnClickedButton21()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_PINGFANG;//设置运算符
}
 
//点击2/x按钮
void CtestcomputerDlg::OnBnClickedButton20()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_KAIFANG;
}
 
//点击x^3按钮
void CtestcomputerDlg::OnBnClickedButton19()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_LIFANG;//单目运算符
}
 
//点击3/x按钮
void CtestcomputerDlg::OnBnClickedButton18()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_KAILIFANG;
}
 
//点击x^n
void CtestcomputerDlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();
mFlag = FLAG_KAINFANG;
}
 
 
//点击n/x
void CtestcomputerDlg::OnBnClickedButton16()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();//双目运算符,先保存第一个运算数
mFlag = FLAG_NFANG;
}
 
//点击%按钮
void CtestcomputerDlg::OnBnClickedButton23()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();
mFlag = FLAG_MOD;
}
 
//点击lognX
void CtestcomputerDlg::OnBnClickedButton34()
{
// TODO: 在此添加控件通知处理程序代码
SaveFirstValue();
mFlag = FLAG_LOGNX;
}
 
//点击tanX
void CtestcomputerDlg::OnBnClickedButton41()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_TAN;
}
 
//点击cosX
void CtestcomputerDlg::OnBnClickedButton35()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_COS;
}
 
//点击sinX
void CtestcomputerDlg::OnBnClickedButton29()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_SIN;
}
 
//点击lnX
void CtestcomputerDlg::OnBnClickedButton28()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_LNX;
}
 
//点击e^x
void CtestcomputerDlg::OnBnClickedButton40()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_EX;
}
 
//点击n!按钮
void CtestcomputerDlg::OnBnClickedButton22()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_N;
}
 
//H->D按钮
void CtestcomputerDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_HD;
}
 
//O->D
void CtestcomputerDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
mFlag = FLAG_OD;
}
 
//Hex
void CtestcomputerDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
}
 
//Oct
void CtestcomputerDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
}
 
//Bin
void CtestcomputerDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// test_computerDlg.h: 头文件
//
 
#pragma once
//运算符
enum Calculator_Flag {
    FLAG_JIA,
    FLAG_JIAN,
    FLAG_CHENG,
    FLAG_CHU,
 
 
    FLAG_NFANG,  //n方
    FLAG_KAINFANG,  //开n方
    FLAG_PINGFANG,//平方
    FLAG_KAIFANG,//开方
    FLAG_LIFANG,//立方
    FLAG_KAILIFANG,//开立方
    FLAG_EX, //e的x次方
 
    FLAG_SIN,//正弦
    FLAG_COS,//余弦
    FLAG_TAN,//正切
 
    FLAG_MOD, //模运算
    FLAG_N,  //n的阶乘
    FLAG_LNX,  //以10为低的对数
    FLAG_LOGNX,//对数运算
 
    FLAG_HD,//十六进制到十进制
    FLAG_OD,//八进制到十进制
    FLAG_BD,//二进制到十进制
    FlAG_HEX,//十六进制
    FLAG_OCT,//八进制
    FLAG_BIN//二进制
};
 
 
// CtestcomputerDlg 对话框  用户界面类以及类中的函数和变量
class CtestcomputerDlg : public CDialogEx
{
// 构造
public:
    CtestcomputerDlg(CWnd* pParent = nullptr);  // 标准构造函数
    void SaveFirstValue();//保存第一个输入值
    void Calculator();//计算
 
// 对话框数据
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_TEST_COMPUTER_DIALOG };
#endif
 
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
 
 
// 实现
protected:
    HICON m_hIcon;
 
    // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
//控件的变量,,,即输入框的变量  在这里声明后需要在test_computerDlg.cpp文件中关联
private:
    CString mStr;//编辑框1内的字符串
    CString mStr1;//编辑框2内的字符串
    CString mStr2;
    CString mStr3;
    CString mStr4;
    CString mStr5;
    CString mStr6;
    CString mStr7;
    CString mStr8;
    CString mTempStr;///中间变量
    double mNum1;//运算数
    double mNum2;
    Calculator_Flag mFlag;//运算符号
public:
    //点击按钮自动生成的函数声明,函数原型在test_computerDlg.cpp文件中
    //这些都是按钮你的消息处理函数
    afx_msg void OnBnClickedButton6();
    afx_msg void OnBnClickedButton43();
    afx_msg void OnBnClickedButton42();
    afx_msg void OnBnClickedButton36();
    afx_msg void OnBnClickedButton37();
    afx_msg void OnBnClickedButton38();
    afx_msg void OnBnClickedButton30();
    afx_msg void OnBnClickedButton31();
    afx_msg void OnBnClickedButton32();
    afx_msg void OnBnClickedButton24();
    afx_msg void OnBnClickedButton25();
    afx_msg void OnBnClickedButton26();
    afx_msg void OnBnClickedButton1();
    afx_msg void OnBnClickedButton3();
    afx_msg void OnBnClickedButton2();
    afx_msg void OnBnClickedButton45();
    afx_msg void OnBnClickedButton44();
    afx_msg void OnBnClickedButton10();
    afx_msg void OnBnClickedButton11();
    afx_msg void OnBnClickedButton12();
    afx_msg void OnBnClickedButton13();
    afx_msg void OnBnClickedButton14();
    afx_msg void OnBnClickedButton15();
    afx_msg void OnBnClickedButton39();
    afx_msg void OnBnClickedButton33();
    afx_msg void OnBnClickedButton27();
    afx_msg void OnBnClickedButton21();
    afx_msg void OnBnClickedButton20();
    afx_msg void OnBnClickedButton19();
    afx_msg void OnBnClickedButton18();
    afx_msg void OnBnClickedButton17();
    afx_msg void OnBnClickedButton16();
    afx_msg void OnBnClickedButton23();
    afx_msg void OnBnClickedButton34();
    afx_msg void OnBnClickedButton41();
    afx_msg void OnBnClickedButton35();
    afx_msg void OnBnClickedButton29();
    afx_msg void OnBnClickedButton28();
    afx_msg void OnBnClickedButton40();
    afx_msg void OnBnClickedButton22();
    afx_msg void OnBnClickedButton4();
    afx_msg void OnBnClickedButton5();
    afx_msg void OnBnClickedButton7();
    afx_msg void OnBnClickedButton8();
    afx_msg void OnBnClickedButton9();
};

 

posted @ 2023-12-04 21:05  王K  阅读(31)  评论(0)    收藏  举报