API计算器的设计与实现(含代码)_第1页
API计算器的设计与实现(含代码)_第2页
API计算器的设计与实现(含代码)_第3页
API计算器的设计与实现(含代码)_第4页
API计算器的设计与实现(含代码)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录摘 要3第一部分 设计总概4一、 设计目的4二、设计要求4三、 设计内容4四、 系统分析与设计4一 . 概要设计4二. 详细设计4第二部分 数据结构设计6一:主系统的函数6二:资源函数6三:头文件7第三部分 功能实现与程序调试7一:程序实现的功能流程图及设计流程图7 1.按钮及事件响应设计流程图72.基于十进制下的普通计算流程图7 3.三角函数计算流程图74.进制转换流程图85. 背景图设计8二:程序实现源代码81. 头文件82.cpp文件代码9三 程序实现截图16第四部分 完成设计17一、 实习日记17二、 实习总结18三、教师评语:18摘 要用所学的mfc知识,写一个简单计算器,要求实

2、现基本的加减乘除以及一系列科学计算。关键字:mfc计算器 第一部分 设计总概1、 设计目的 利用所学到的mfc知识,设计一个基于对话框的计算器,实现常用计算器的基本功能。二、设计要求根据自身的特长,做好设计的选题任务。根据选定的题目,做好系统分析与设计,查阅相关的文献资料,完成系统的测试。写出符合要求的设计报告(打印一份)。3、 设计内容 MFC计算器设计4、 系统分析与设计一 . 概要设计 1.进入计算器界面 A.默认进制为10进制 B.可以在10进制条件下进行加减乘除等操作 C.可以实现三角函数的运算 D.选中其他进制,进行进制之间的转换计算 二. 详细设计 1.进入vs2010,选择MF

3、C应用程序,建立一个基于对话框的程序,进入设计界面 2 界面设计进入界面设计后,利用工具箱,向界面设计框里添加计算器所需要的按钮,编辑框,单选框等、3. 事件响应设计A. 对编辑框添加变量B. 对按钮添加事件响应代码 C. 对单选按钮添加事件响应代码 并默认十进制为初始选项D.在按钮“=”下添加计算代码,将各项计算结果返回到编辑框中第二部分 数据结构设计一:主系统的函数各种按钮,编辑框,单选按钮定义放在主函数cpp里面二:资源函数 界面设计(Dialog) 计算器界面所用到的位图 三:头文件 对话框数据 消息映射函数 第三部分 功能实现与程序调试一:程序实现的功能流程图及设计流程图运算符事件设

4、计 数字按钮事件设计 开始 1.按钮及事件响应设计流程图 结束编辑框事件添加 等号按钮的响应事件添加2.基于十进制下的普通计算流程图 选择运算符数字2 数字1 开始将结果返回编辑框 结束进行 计算进行计算三角函数选择 角度选择 开始 3.三角函数计算流程图 结束将结果返回编辑框4.进制转换流程图进制选择数字输入进制选择 开始将结果返回编辑框 结束进行计算5. 背景图设计位图导入将bmp格式图片保存在同一文件位置下 开始 结束利用代码将其设置为背景图片二:程序实现源代码1. 头文件/ 计算器3Dlg.h : 头文件/#pragma once#include "afxwin.h"

5、;/ C计算器3Dlg 对话框class C计算器3Dlg : public CDialogEx/ 构造public:C计算器3Dlg(CWnd* pParent = NULL);/ 标准构造函数/ 对话框数据enum IDD = IDD_MY3_DIALOG ;CString temp;double first, second; /操作数char op;double a,b,r;double result;int form; char cnum20;CString csnum;protected:virtual void DoDataExchange(CDataExchange* pDX);

6、/ 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()public:afx_msg void OnBnClickedRadio1();CString m_EDTT;afx_msg void OnBnClickedButton1();afx

7、_msg void OnBnClickedButton2();afx_msg void OnBnClickedButton3();afx_msg void OnBnClickedButton4();afx_msg void OnBnClickedButton5();afx_msg void OnBnClickedButton6();afx_msg void OnBnClickedButton7();afx_msg void OnBnClickedButton8();afx_msg void OnBnClickedButton9();afx_msg void OnBnClickedButton1

8、0();afx_msg void OnBnClickedButton11();afx_msg void OnBnClickedButton12();afx_msg void OnBnClickedButton13();afx_msg void OnBnClickedButton14();afx_msg void OnBnClickedButton15();afx_msg void OnBnClickedButton16();afx_msg void OnBnClickedButton17();afx_msg void OnBnClickedButton18();afx_msg void OnB

9、nClickedButton19();afx_msg void OnBnClickedButton20();afx_msg void OnBnClickedButton21();afx_msg void OnBnClickedButton22();afx_msg void OnEnChangeEdit1();afx_msg void OnBnClickedButton23();afx_msg void OnBnClickedRadio2();afx_msg void OnBnClickedRadio4();afx_msg void OnBnClickedRadio3();afx_msg voi

10、d OnBnClickedButton24();afx_msg void OnBnClickedButton25();afx_msg void OnBnClickedButton26();afx_msg void OnBnClickedButton27();afx_msg void OnBnClickedButton28();afx_msg void OnBnClickedButton29();afx_msg void OnBnClickedButton30();afx_msg void OnBnClickedButton31();afx_msg void OnBnClickedButton3

11、2();afx_msg void OnBnClickedButton33();CButton m_jz;2.cpp文件代码/ 计算器3Dlg.cpp : 实现文件/#include "stdafx.h"#include "计算器3.h"#include "计算器3Dlg.h"#include "afxdialogex.h"#include "cmath"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE

12、= _FILE_;#endif/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic:CAboutDlg();/ 对话框数据enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:

13、DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ C计算器3Dlg 对话框C计算器3Dlg:C计算器3Dlg(CWnd* pParent /*=NULL*/): CDialogEx(C计算器3Dlg:IDD, pParent), m_EDTT(_T("")m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void C计算器3Dlg:D

14、oDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_EDTT);DDX_Control(pDX, IDC_RADIO1, m_jz);BEGIN_MESSAGE_MAP(C计算器3Dlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_RADIO1, &C计算器3Dlg:OnBnClickedRadio1)ON_BN_CLICKED(IDC_BUT

15、TON1, &C计算器3Dlg:OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &C计算器3Dlg:OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &C计算器3Dlg:OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON4, &C计算器3Dlg:OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON5, &C计算器3Dlg:OnBnClickedButton5)ON_BN_CLICKED(IDC_BUT

16、TON6, &C计算器3Dlg:OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON7, &C计算器3Dlg:OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON8, &C计算器3Dlg:OnBnClickedButton8)ON_BN_CLICKED(IDC_BUTTON9, &C计算器3Dlg:OnBnClickedButton9)ON_BN_CLICKED(IDC_BUTTON10, &C计算器3Dlg:OnBnClickedButton10)ON_BN_CLICKED(IDC_B

17、UTTON11, &C计算器3Dlg:OnBnClickedButton11)ON_BN_CLICKED(IDC_BUTTON12, &C计算器3Dlg:OnBnClickedButton12)ON_BN_CLICKED(IDC_BUTTON13, &C计算器3Dlg:OnBnClickedButton13)ON_BN_CLICKED(IDC_BUTTON14, &C计算器3Dlg:OnBnClickedButton14)ON_BN_CLICKED(IDC_BUTTON15, &C计算器3Dlg:OnBnClickedButton15)ON_BN_CLI

18、CKED(IDC_BUTTON16, &C计算器3Dlg:OnBnClickedButton16)ON_BN_CLICKED(IDC_BUTTON17, &C计算器3Dlg:OnBnClickedButton17)ON_BN_CLICKED(IDC_BUTTON18, &C计算器3Dlg:OnBnClickedButton18)ON_BN_CLICKED(IDC_BUTTON19, &C计算器3Dlg:OnBnClickedButton19)ON_BN_CLICKED(IDC_BUTTON20, &C计算器3Dlg:OnBnClickedButton20

19、)ON_BN_CLICKED(IDC_BUTTON21, &C计算器3Dlg:OnBnClickedButton21)ON_BN_CLICKED(IDC_BUTTON22, &C计算器3Dlg:OnBnClickedButton22)ON_EN_CHANGE(IDC_EDIT1, &C计算器3Dlg:OnEnChangeEdit1)ON_BN_CLICKED(IDC_BUTTON23, &C计算器3Dlg:OnBnClickedButton23)ON_BN_CLICKED(IDC_RADIO2, &C计算器3Dlg:OnBnClickedRadio2)O

20、N_BN_CLICKED(IDC_RADIO4, &C计算器3Dlg:OnBnClickedRadio4)ON_BN_CLICKED(IDC_RADIO3, &C计算器3Dlg:OnBnClickedRadio3)ON_BN_CLICKED(IDC_BUTTON24, &C计算器3Dlg:OnBnClickedButton24)ON_BN_CLICKED(IDC_BUTTON25, &C计算器3Dlg:OnBnClickedButton25)ON_BN_CLICKED(IDC_BUTTON26, &C计算器3Dlg:OnBnClickedButton26

21、)ON_BN_CLICKED(IDC_BUTTON27, &C计算器3Dlg:OnBnClickedButton27)ON_BN_CLICKED(IDC_BUTTON28, &C计算器3Dlg:OnBnClickedButton28)ON_BN_CLICKED(IDC_BUTTON29, &C计算器3Dlg:OnBnClickedButton29)ON_BN_CLICKED(IDC_BUTTON30, &C计算器3Dlg:OnBnClickedButton30)ON_BN_CLICKED(IDC_BUTTON31, &C计算器3Dlg:OnBnClick

22、edButton31)ON_BN_CLICKED(IDC_BUTTON32, &C计算器3Dlg:OnBnClickedButton32)ON_BN_CLICKED(IDC_BUTTON33, &C计算器3Dlg:OnBnClickedButton33)END_MESSAGE_MAP()/ C计算器3Dlg 消息处理程序BOOL C计算器3Dlg:OnInitDialog()CDialogEx:OnInitDialog();/ 将“关于.”菜单项添加到系统菜单中。/ IDM_ABOUTBOX 必须在系统命令范围内。ASSERT(IDM_ABOUTBOX & 0xFFF0

23、) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->Appe

24、ndMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);m_jz.SetCheck(1);/ 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE);/ 设置大图标SetIcon(m_hIcon, FALSE);/ 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid C计算器3Dlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABO

25、UTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialogEx:OnSysCommand(nID, lParam);/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void C计算器3Dlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc(), 0)

26、;/ 使图标在工作区矩形中居中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();*/CPaintDC dc(this); CBitma

27、p bitmap; bitmap.LoadBitmap(IDB_BITMAP1); /这个IDB_BITMAP1要自己添加 CBrush brush; brush.CreatePatternBrush(&bitmap); CBrush* pOldBrush = dc.SelectObject(&brush); dc.Rectangle(0,0,800,1000); / 这些参数可以调整图片添加位置和大小 dc.SelectObject(pOldBrush); /当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR C计算器3Dlg:OnQueryDragIcon(

28、)return static_cast<HCURSOR>(m_hIcon);void C计算器3Dlg:OnBnClickedButton1()m_EDTT += _T("1");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton2()m_EDTT += _T("2");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton3()m_EDTT += _T("

29、;3");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton4()m_EDTT += _T("4");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton5()m_EDTT += _T("5");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton6()m_EDTT += _T

30、("6");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton7()m_EDTT += _T("7");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton8()m_EDTT += _T("8");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton9()m_EDTT

31、 += _T("9");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton10()m_EDTT += _T("0");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton11()m_EDTT += _T("A");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton1

32、2()m_EDTT += _T("B");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton13()m_EDTT += _T("C");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton14()m_EDTT += _T("D");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClick

33、edButton15()m_EDTT += _T("E");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton16()m_EDTT += _T("F");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton17()m_EDTT += _T(".");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:

34、OnBnClickedButton18()temp=m_EDTT;op='+' /标志,用于等号算法时选择执行m_EDTT=_T("");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton19()temp=m_EDTT;op='-' /标志,用于等号算法时选择执行m_EDTT=_T("");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton2

35、0()temp=m_EDTT;op='*' /标志,用于等号算法时选择执行m_EDTT=_T("");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton21()temp=m_EDTT;op='/' /标志,用于等号算法时选择执行m_EDTT=_T("");UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton22()double tmp;tmp=

36、(double)atof(m_EDTT);tmp*=-1;m_EDTT.Format("%g",tmp);UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnEnChangeEdit1()/ TODO: 如果该控件是 RICHEDIT 控件,它将不/ 发送此通知,除非重写 CDialogEx:OnInitDialog()/ 函数并调用 CRichEditCtrl().SetEventMask(),/ 同时将 ENM_CHANGE 标志“或”运算到掩码中。/ TODO: 在此添加控件通知处理程序代码void C计算器

37、3Dlg:OnBnClickedButton23() a = atof(temp); /十进制下的运算,输出十进制格式%f b = atof(m_EDTT); /a、b、r定义成double型,可以进行小数的操作 switch (op) /判断op标志的值,不同值进行不同的运算 case '': r=pow(a,b); m_EDTT.Format("%f",r); UpdateData(FALSE); break; case '+': r=a+b; m_EDTT.Format("%f",r); UpdateData(FAL

38、SE); break; case '-': r=a-b; m_EDTT.Format("%f",r); UpdateData(FALSE); break; case '*': r=a*b; m_EDTT.Format("%f",r); UpdateData(FALSE); break; case '/':if(b=0) MessageBox("除数不能为0!","ERROR!"); m_EDTT=_T(""); else r=a/b; m_EDTT

39、.Format("%f",r); UpdateData(FALSE); break; UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedRadio1()/10if(_tcstoul(m_EDTT, 0, 16) /判断输入是否为空 switch(form) /判断输入的进制,同时选择转换后的格式 case 'A': m_EDTT.Format("%d",_tcstoul(m_EDTT, 0, 16); break; case 'C': m_ED

40、TT.Format("%d",_tcstoul(m_EDTT, 0, 8); break; case 'B': m_EDTT.Format("%d",_tcstoul(m_EDTT, 0, 2); break; default: return; UpdateData(false);else m_EDTT=_T("");UpdateData(false);form='D'/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedRadio2()/8if(_tcstoul

41、(m_EDTT, 0, 16) /判断输入是否为空 switch(form) /判断输入的进制,同时选择转换后的格式 case 'A': m_EDTT.Format("%o",_tcstoul(m_EDTT, 0, 16); break; case 'D': m_EDTT.Format("%o",_tcstoul(m_EDTT, 0, 10); break; case 'B': m_EDTT.Format("%o",_tcstoul(m_EDTT, 0, 2); break; defau

42、lt: return; UpdateData(false);else m_EDTT=_T("");UpdateData(false);form='C'/ TODO: 在此添加控件通知处理程序代码/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedRadio4()/16if(atof(m_EDTT)!=0) /判断输入是否为空switch(form) /判断输入的进制,同时选择转换后的格式 case 'D': m_EDTT.Format("%X",_tcstoul(m_EDTT, 0

43、, 10); break; case 'C': m_EDTT.Format("%X",_tcstoul(m_EDTT, 0, 8); break; case 'B': m_EDTT.Format("%X",_tcstoul(m_EDTT, 0, 2); break; default: return; UpdateData(false);else m_EDTT=_T(""); UpdateData(false);form='A'/ TODO: 在此添加控件通知处理程序代码void C计算器

44、3Dlg:OnBnClickedRadio3()/2int X;char binch50;if(_tcstoul(m_EDTT, 0, 16) /判断输入是否为空 switch(form) /判断输入的进制,同时选择转换后的格式 case 'A': X=_tcstoul(m_EDTT, 0, 16); itoa(X,binch,2); m_EDTT.Format("%s",binch); break; case 'C': X=_tcstoul(m_EDTT, 0, 8); itoa(X,binch,2); m_EDTT.Format(&quo

45、t;%s",binch); break; case 'D': X=_tcstoul(m_EDTT, 0, 10); itoa(X,binch,2); m_EDTT.Format("%s",binch); break; default: return; UpdateData(false);else m_EDTT=_T(""); UpdateData(false);form='B'/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton24()/Cm_EDTT=m_E

46、DTT.Left(m_EDTT.GetLength()-1);UpdateData(false);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton25()m_EDTT=_T("");UpdateData(false);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton26()temp=m_EDTT;op='' /标志,用于等号算法时选择执行m_EDTT=_T(""); UpdateData(FALSE);/ TODO: 在此添加控件通知处理程序代码void C计算器3Dlg:OnBnClickedButton27()double logtemp;int logt;char logch50; logtemp=atof(m_EDTT);if(logtemp>0) m_EDTT.Format("%f",log10(logtemp); UpdateData(false);else MessageBox("操作数应大于零","ERROR!"); /弹出错误对话框 m_EDTT=_T("&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论