计算机软件实习(一)简单计算机

实验内容:
(1) 学习图形界面的设计,利用 MFC 应用程序(Java swing 或 QT 框架,或 C#)创
建基于对话框的应用程序,添加按钮、编辑框等控件;
(2) 能通过设计的按钮控件输入并实现简单算术运算,要求表达式在编辑框中显示,
能将运算结果,输出在编辑框内显示;并保存历史的表达式运算记录。
(3) 也能够实现混合运算的算术表达式求解,算术表达式中包括加、减、乘、除、
括号等运算符;并且能够识别括号,优先级正确。
(4) 选做:
①实现三角函数的运算、对数运算、指数运算、进制转换等;
②设计函数,分别求两个一元多项式的乘积与和。

开发心得:
此次简单计算机的开发是基于visual c++6.0的MFC实现。由于是第一次使用MFC,在熟练度上较为欠缺。在功能上目前仅实现简单的四则运算以及结果的显示,因为开发进度较慢,后续的多项式及符号优先级还未完全设置。当然,就目前开发而言,还是收获了许多,例如MFC的图形设计以及对一些控件的使用。

开发流程:
1.首先,是基于MFC的图形界面设计,基于对话框的情况下,删除并添加自己需要的按钮,编辑框,并进行排列。

2.在图形界面设计结束后,就是对按钮的消息响应进行设置,通过双击按钮来生成响应,并写入各个按钮的代码。其中,=的响应代码尤为重要,其他按钮大致相似。

代码实现:


// JISUANDlg.cpp: 实现文件
//#include "pch.h"
#include "framework.h"
#include "JISUAN.h"
#include "JISUANDlg.h"
#include "afxdialogex.h"
#include "math.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{public:CAboutDlg();double buttonDownNum();
// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected: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()// CJISUANDlg 对话框double num1;
double num2;
double result;
CString str;
bool str_flag;
bool continue_flag;
bool downDot;
int count;CJISUANDlg::CJISUANDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_JISUAN_DIALOG, pParent), m_display(0)
{num1 = 0;num2 = 0;result = 0.0;str = "";str_flag = FALSE;continue_flag = FALSE;downDot = FALSE;count = 1;m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}BEGIN_MESSAGE_MAP(CJISUANDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTONDiv, &CJISUANDlg::OnBnClickedButtondiv)ON_BN_CLICKED(IDC_BUTTONMult, &CJISUANDlg::OnBnClickedButtonmult)ON_BN_CLICKED(IDC_BUTTONSub, &CJISUANDlg::OnBnClickedButtonsub)ON_BN_CLICKED(IDC_BUTTONAdd, &CJISUANDlg::OnBnClickedButtonadd)ON_BN_CLICKED(IDC_BUTTONDot, &CJISUANDlg::OnBnClickedButtondot)ON_BN_CLICKED(IDC_BUTTON9, &CJISUANDlg::OnBnClickedButton9)ON_BN_CLICKED(IDC_BUTTON8, &CJISUANDlg::OnBnClickedButton8)ON_BN_CLICKED(IDC_BUTTON7, &CJISUANDlg::OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON6, &CJISUANDlg::OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON5, &CJISUANDlg::OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON4, &CJISUANDlg::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTONBacksp, &CJISUANDlg::OnBnClickedButtonbacksp)ON_BN_CLICKED(IDC_BUTTONRight, &CJISUANDlg::OnBnClickedButtonright)ON_BN_CLICKED(IDC_BUTTONLeft, &CJISUANDlg::OnBnClickedButtonleft)ON_BN_CLICKED(IDC_BUTTONCE, &CJISUANDlg::OnBnClickedButtonce)ON_BN_CLICKED(IDC_BUTTON0, &CJISUANDlg::OnBnClickedButton0)ON_BN_CLICKED(IDC_BUTTONEqual, &CJISUANDlg::OnBnClickedButtonequal)ON_BN_CLICKED(IDC_BUTTON3, &CJISUANDlg::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON2, &CJISUANDlg::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON1, &CJISUANDlg::OnBnClickedButton1)
END_MESSAGE_MAP()double CJISUANDlg::buttonDownNum(int numSize)
{if (!str_flag){if (!continue_flag){num1 = numSize;continue_flag = TRUE;}else{num1 = num1 * pow(10, count) + numSize;if (downDot){num1 = num1 / (pow(10, count));count++;}}return num1;}else{if (!continue_flag){num2 = numSize;continue_flag = TRUE;}else{num2 = num2 * pow(10, count) + numSize;if (downDot){num2 = num2 / pow(10, count);count++;}}return num2;}
}void CJISUANDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT2, m_display);
}// CJISUANDlg 消息处理程序BOOL CJISUANDlg::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 CJISUANDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CJISUANDlg::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 CJISUANDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CJISUANDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(1);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(2);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton3()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(3);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton4()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(4);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(5);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton6()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(6);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton7()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(7);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton8()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(8);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton9()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(9);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtondot()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);if (a.Find(_T(".")) == -1){SetDlgItemText(IDC_EDIT2, a + _T("."));}downDot = TRUE;
}void CJISUANDlg::OnBnClickedButtonadd()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, +_T("+"));str = "+";str_flag = TRUE;continue_flag = FALSE;downDot = FALSE;count = 1;UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtonsub()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, +_T("-"));str = "-";str_flag = TRUE;continue_flag = FALSE;downDot = FALSE;count = 1;UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtonmult()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, +_T("*"));str = "*";str_flag = TRUE;continue_flag = FALSE;downDot = FALSE;count = 1;UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtondiv()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, +_T("/"));str = "/";str_flag = TRUE;continue_flag = FALSE;downDot = FALSE;count = 1;UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtonequal()
{// TODO: 在此添加控件通知处理程序代码if (str == "+") {result = num1 + num2;}else if (str == "-") {result = num1 - num2;}else if (str == "*") {result = num1 * num2;}else if (str == "/") {result = double(num1) / double(num2);}num1 = result;m_display = result;str_flag = FALSE;continue_flag = FALSE;downDot = FALSE;count = 1;UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButton0()
{// TODO: 在此添加控件通知处理程序代码m_display = buttonDownNum(0);UpdateData(FALSE);
}void CJISUANDlg::OnBnClickedButtonce()
{// TODO: 在此添加控件通知处理程序代码num1 = 0;num2 = 0;result = 0;str = _T("");SetDlgItemText(IDC_EDIT2, _T(""));
}void CJISUANDlg::OnBnClickedButtonleft()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, a + _T("("));
}void CJISUANDlg::OnBnClickedButtonright()
{// TODO: 在此添加控件通知处理程序代码CString a;GetDlgItemText(IDC_EDIT2, a);SetDlgItemText(IDC_EDIT2, a + _T(")"));
}void CJISUANDlg::OnBnClickedButtonbacksp()
{// TODO: 在此添加控件通知处理程序代码CString temp, num;GetDlgItemText(IDC_EDIT2, num);temp = num.Left(num.GetLength() - 1);SetDlgItemText(IDC_EDIT2, temp);
}

存留问题:
*多项式运算(符号的优先级问题)
*四则运算符不在屏幕上显示(我考虑过另用一个编辑框去显示符号,应该是可行的,但是不是很美观,就没加。我代码也不知道哪错了,编辑框就是不显示运算符)
*计算的历史记录

计算机软件实习(一)简单计算机相关推荐

  1. 计算机软件cd全称,cd刻录(刻录高音质cd完美教程_计算机软件及应用_IT/计算机_专业资料)...

    cd刻录(刻录高音质cd完美教程_计算机软件及应用_IT/计算机_专业资料),哪吒游戏网给大家带来详细的cd刻录(刻录高音质cd完美教程_计算机软件及应用_IT/计算机_专业资料)介绍,大家可以阅读一 ...

  2. 计算机软件实习日志(三)基于 A*搜索算法迷宫游戏开发

    文章目录 界面展示 前言 一.实验要求? 二.实验准备 三.设计思路 1.A*算法的理解 算法描述 简化搜索区域 简化地图 概述算法步骤 进一步解释 具体寻路过程 F值计算方式: 2.开发思路 使用Q ...

  3. 计算机系素描教材,美术入门级素描的掌握_计算机软件及应用_IT计算机_专业资料...

    美术入门级素描的掌握_计算机软件及应用_IT计算机_专业资料 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 17:19][热度:160 ...

  4. 计算机应用技术备选计划方案,华东理工大学博士研究生培养方案计算机应用技术、计算机软件与理论、计算机系统结构二级学科(学科代码:081203、081202、081201)信息科学与工程学院...

    华东理工大学博士研究生培养方案 计算机应用技术.计算机软件与理论.计算机系统结构二级学科(学科代码:081203.081202.081201) 信息科学与工程学院 2011年7月修订 计算机科学和工程 ...

  5. 计算机专业使用的工具,电子投标工具使用手册计算机软件及应用it计算机专业资料.doc...

    电子投标工具使用手册计算机软件及应用it计算机专业资料 国信创新电子[投标工具]使用手册 PAGE 9 TOC \o "1-3" \h \z \u HYPERLINK \l &qu ...

  6. 金山打字专业文章计算机,文字录入(排版完成)_计算机软件及应用_IT计算机_专业资料...

    文字录入(排版完成)_计算机软件及应用_IT计算机_专业资料 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 目录第一部分:熟练使用键盘 ...

  7. 计算机软件专业入门,类图入门_计算机软件及应用_IT计算机_专业资料

    类图入门_计算机软件及应用_IT计算机_专业资料 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 类图和对象图教程■类(Class )& ...

  8. 将计算机系成绩置零,实验三数据更新操作_计算机软件及应用_IT计算机_专业资料...

    实验三数据更新操作_计算机软件及应用_IT计算机_专业资料 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 杭州电子科技大学实验报告实验 ...

  9. ps计算机软件专用报告,PS笔记_计算机软件及应用_IT计算机_专业资料

    PS笔记_计算机软件及应用_IT计算机_专业资料 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 窗口菜单:1 ?窗口菜单中可以查找文 ...

最新文章

  1. jlinkarm目标程序和boot文件一起刷_华硕游戏手机Rog2代ROOT后wifi不能开启-刷回官方系统实用教程...
  2. 连接端口 配置hive_Hadoop大数据平台数据仓库Hive管理操作
  3. java 百度贴吧 爬虫_JAVA爬虫入门
  4. php编译优化,浅析使用Turck-mmcache编译来加速、优化PHP代码
  5. 第三章用sql语句操作数据
  6. java的jdbc看不到源码_不了解jdbc,何谈Mybatis的源码解析?
  7. java 随机生成图_java – 如何生成随机图?
  8. jQuery自动完成点击html元素
  9. maven-将依赖的 jar包一起打包到项目 jar 包中
  10. LINUX下载编译sqlite-jdbc的jar包
  11. 汉字符号(汉字特殊符号)
  12. PCL学习(四)点云转换为网格
  13. 面试前需要注意的细节点(有需要的朋友可以看看)
  14. SpringCloud学习笔记(五)服务发现Discovery
  15. PS-把长方形图片改为正方形图片
  16. 宁夏新八景[之一]:古峡新韵
  17. 网易云信圈组上线实时互动频道,「破冰」弱关系社交
  18. A - Multiplication Dilemma (思维)( 2018 ACM ICPC Arabella Collegiate Programming Contest)
  19. x264源码分析与应用示例(一)——视频编码基本流程
  20. Mac下安装whistle

热门文章

  1. 阿里智能携手触云发布儿童智能路由器 进入智能细分市场
  2. PDF文件添加水印怎么添加?只需要两步轻松添加水印
  3. eBPF书籍和教程良心推荐
  4. Mac本外接显示器怎么竖过来呢?
  5. Consider defining a bean of type ‘**.Mapper‘ in your configuration
  6. vulkan学习_使用vulkan kompute在gpu中进行机器学习和数据处理
  7. 在昏暗的灯光下看书有损视力
  8. 数据库服务器资源使用周报
  9. 机器学习中的混淆矩阵
  10. 参加历年CTF大赛(2022年起持续更新)