当前位置:文档之家› MFC简单计算器设计正文

MFC简单计算器设计正文

MFC简单计算器设计正文
MFC简单计算器设计正文

实用计算器程序

1.基本功能描述

计算器是人们日常生活中非常实用的计算工具。预期设计目标与实际计算器为标准,Windows 10系统提供的计算器为范例进行设计。

实用计算器要实现单目运算和双目运算。单目运算主要包括阶乘、正弦、余弦;双目运算主要包括加、减、乘、除、乘幂等。计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。实际过程中要能够对不同的数据灵活判断执行。同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。用户的修改包括清屏和退格。程序设计的重点和难点在于:第一,能够对于不同的操作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。

编程环境采用Visual Studio 2017提供的MFC建立对话框应用程序,设计界面要简单大方,并提供程序所有功能的接口。

2.设计思路

表1 操作符优先级设计

优先级操作符

1 阶乘、正弦、余弦

2 乘幂

3 乘、除

4 加、减

对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。由于算法设计为四层优先级,且单目运算的优先级最高。当按下相应单目运算符,首先将当前数据数组的最后一个存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。如果没有按下等号键,则继续执行循环。在按下等号按钮之后,按照先乘幂、再乘除、后加减的运算顺序执行运算,将最后结果保存并显示。(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。

图1 程序流程图

3.软件设计

3.1 设计步骤

1)创建基于对话框的程序

利用AppWizard建立应用程序框架,创建一个基于对话框的MFC工程,命名为“fengwanjincalculator”,如图2所示。在图3显示的应用程序类型中选择基于对话框。创建成功后,系统自动生成相应程序文件。

图2 创建MFC工程图

图3 应用程序类型选择图

2)定义成员变量

添加相应变量和标志位,以方便程序的编写,主要变量如表2所示:

表2 成员变量表

变量名变量类型变量作用

mystr CString 编辑框关联变量m_editFont CFont 设置编辑框字体num float 存储操作数flagdian bool 点号标志位

flagdengyu bool 等号标志位

flagerror bool 错误标志位

Jiajian int 存储加减运算符的位置

4)添加事件处理程序

MFC应用程序是通过消息响应来进行各项操作的,必须在对话类中加入消息处理函数来处理这些事件。当点击相应控件,在进入WinMain函数之前,每个可以响应消息的MFC类都生成了一个消息映射表,程序运行时通过查询该表判断是否需要响应某条消息。

在相应控件单击右键,弹出图4,选择添加事件处理程序,在图5的事件处理程序向导中选择fengwanjincalculatorDlg类,消息类型选择为BN_CLICKED,即左键单击。

图4 添加事件处理程序

图5 选择添加事件处理程序类型

在完成上述操作后 MFC使用ClassWizard帮助实现消息映射,它在源码中添加一些消息映射的内容,并声明和实现消息处理函数。首先,在类的定义(头文件)里,它增加了消息处理函数声明,并添加一行声明消息映射的宏DECLARE_MESSAGE_MAP。在类的实现(实现文件)里,实现消息处理函数,并使用IMPLEMENT_MESSAGE_MAP宏实现消息映射。

BEGIN_MESSAGE_MAP

******

END_MESSAGE_MAP

3.2 界面设计

图5 向对话框添加控件

在项目的资源视图中找到位于Dialog下的对话框,如图4所示。添加相应控件,完成用户界面设计。

图6 用户界面设计

其中编辑框行为下Multiline属性设置为True,作为多行编辑框。第一行显示算式,第二行结果。整体上将控件分为四组,数值控件区NUM,加减乘除一般运算控件区NORMAL,阶乘、乘幂、正余弦科学运算控件区SCIENCE以及清零退格控件。设计完成后的界面如图7所示。

图7 用户界面

设计的界面中只有编辑框关联Cstring类型变量mystr。其余控件关联相应的消息处理函数。

3.3 关键功能的实现

程序主要分为数值、单目运算、双目运算、清除等。

1)数值控件消息处理函数

void CfengwanjincalculatorDlg::OnBnClickedButton1()

{

shuzihanshu(L'1', 1);

}

考虑到0~9数字的处理函数有很大的相似处,所以都采用调用shuzhihanshu函数的方法执行。shuzhihanshu包含两个参数,分别是数值对应字符和相应数值。其具体实现如下:

void CfengwanjincalculatorDlg::shuzihanshu(char shuzi, int shuzhi)//0~9对应函数

{

UpdateData(TRUE);

if (flagdengyu)

{

OnBnClickedButtonClear();

}

flaglast = 0;

mystr += shuzi;

data = shuzhi;

changevalue();

UpdateData(FALSE);

}

首先,判断再点击数值控件之前是否按下等号键,如果按下执行OnBnClickedButtonClear(),即执行清除函数,然后将单击的数值显示在编辑框中。如果之前没有单击等号,则直接将数值添加到显示字符串的最后,通过UpdateData(FALSE)更新编辑框控件。同时需要将数值传递给data,通过changevalue()函数改变数值数组中的数值。

2)双目运算消息处理函数

void CfengwanjincalculatorDlg::OnBnClickedButtonJia()//加

{

sincos();

if ((flaglast == 0)||(flaglast == jiecheng))

{

shuangmusuanfu(L'+', jia);

flaglast = jia;

jiajian[0]++;

jiajian[jiajian[0]] = 1;

}

}

双目运算首先设置相应标志和参数的改变,其主要的函数体部分由shuangmusuanfu函数概括,其中jia参量为用枚举定义的一个常量。枚举定义如下:enum suit{ jia = 1 , jian , cheng , chu , jiecheng , zhishu , Sin , Cos };

shuangmusuanfu中函数实现部分:

函数体中首先对是否按下等号是否有表达式错误进行判断,如果相应标志为1,则转到相应处理函数,否则将算符存储,数值计数器num[0]加一。

3)清除函数

void CfengwanjincalculatorDlg::OnBnClickedButtonClear()

{

UpdateData(TRUE);

mystr = L"";

flagdian = 0;

beishu = 1;

flagerror = 0;

data = 0;

flagdengyu = 0;

for (int i = 0; i < 10; i++)

{

jiajian[i] = 0;

chengchu[i] = 0;

mizhi[i] = 0;

num[i] = 0;

nextdata[i] = 0;

}

num[0] = 1;

flaglast = 0;

UpdateData(FALSE);

}

清除函数中主要讲各个参量重新初始化,同时通过UpdateData(FALSE)更新编辑框控件。

4. 结论与心得体会

1、Windows编程中可能会遇到可能会遇到各种编译问题,例如编译环境的设置,具体函数的调用。同时Windows为程序员提供了大量的库函数,在具体实践的过程中,要充分利用书籍和网络查阅相关函数和环境设置,减轻编程负担。

2、考虑到编程的难度,首先编写了未设置优先级的表达式运算,后又通过在原先程序的基础上,编写了设置优先级的程序。由于两种方式在算法设计上有很大不同,导致了程序改进的困难。

3、由于在编程思想方面并没有参照网上的先例,也没有采取堆栈的方式进行优先级的运算,在具体编程的过程中遇到了很多细节问题。所以在日后的编程中要注意,算法与数据结构的结合。

4、相较于传统的C++编程,MFC的编程不仅要考虑算法和数据结构的问题,还需要考虑环境、用户界面的美观便捷等问题,编程的难度更大,出现的问题也更多,在编程的过程中渐渐提高了自己的耐性和对于新事物的应用能力。

5、从本次编程的结果来看,此次编程需要提高的方面还很多,人机交互界面的设计、程序算法的统一性、可读性都有待提高。在程序的设计过程中主要参考了Windows 10参做系统自带的计算器,交互界面如图8所示:

图8 Windows 10计算器

仅从界面看,差距还很大。但是任何一个程序都不可能是完美的,这款计算器在调试的过程中也发现了一些bug,所以在日后更加重要的学习和工作中的编程过程中,要注意程序的调试和检查,完善任何一个优秀程序都是需要细致耐心的打磨。

5. 思考题

1、程序如何实现小数的显示和运算?

首先,数值数组采用float类型,可以实现整形和浮点型的统一运算。在读取数值的过程中要加入小数点的判断,如果出现了小数点,则在之后读取的每一个数值需要将相应的倍数每次除以10乘以读出的数值与原数值相加得到。例如changevalue 函数:

void CfengwanjincalculatorDlg::changevalue()

{

if (!flagdian)

{

num[(int)num[0]] = data + num[(int)num[0]] * 10;

}

else

{

beishu /= 10;

num[(int)num[0]] = num[(int)num[0]] + data * beishu;

}

}

对于例如阶乘等只能对于整形进行运算的运算符或函数,首先对数值取证判断其是否与原数据相等,如果相等则可以进行相应运算。如果不同,则通过AfxMessageBox 函数弹出错误提示,错误窗口如图9所示:

图9 错误提示窗口

2、描述等号对应的消息处理函数中需要问题及相应实现代码?

点击等号控件,则首先要进行表达式是否正确的判断(本次程序编写过程中,运算符操作的合法性检查放在了每个运算符的函数中,故在等号的消息处理函数中不需要再添加),将结果计算得出并显示在窗口上,同时设置相应的标志。

具体代码如下:

void CfengwanjincalculatorDlg::OnBnClickedButtonDeng()//等于

{

sincos();

CString temp;

calculator();

if (!flagerror)

{

temp.Format(_T("%g"), num[1]);

mystr += L"\r\n";

mystr += temp;

}

flagdian = 0;

beishu = 1;

flagerror = 0;

flagdengyu = 1;

UpdateData(FALSE);

}

在实现过程中,首先通过calculator()执行相应运算得到结果,发生没有错误则将结果显示在编辑框中。同时设置标志位,标志等号消息处理函数已经运算完。6、附录

6.1 调试报告

程序编译运行过程中主要遇到了类型转换问题、函数调用或执行问题、结果错误问题等。

1、类型转换问题

此类问题错误提示比较明确,更改也比较容易,只需要双击错误提示,转到相应的出错代码,进行相应处理即可。例如,num数组设置为float类型,而为了减少变量的个数,采用num数组的第一位作为数组中数值个数的计数器。故采用num[num[0]]表示最后一位数值,程序报错,提示只能为整数下标。改为强制类型转换即可——num[(int)num[0]]。

2、函数调用或执行问题

此类问题一般在编译过程中并不报错或者不能给出有效的错误提示,导致发现的困难性。例如,在CfengwanjincalculatorDlg类自声明了一个函数,而在相应的.cpp 文件中忘记相应函数实现的编写,编译运行过程中仅提示找不到相应的.exe文件。通过pause函数等暂停函数到某一点,找到错误的区间解决问题。

2、结果错误问题

此类问题在本次编程过程中遇到的情况较多,采用的自己模拟程序执行流程发现问题,如果不能通过这种方式发现,则通过设置断点,单步执行观察变量在每一步中的变化,并于自己的设想相比较发现问题。

6.2 测试结果

1、键入表达式125+6*5-8!+7^3点击等号得到表达式的结果,与实际相一致,如图10所示。

图10 键入数值并执行运算

2、点击加号后可以继续执行运算。

图11 点击加号继续运算

3、按下数值9,清屏屏显示数值9

图12 按下数值9

4、清屏

图13 清屏

5、错误提示

图14 错误提示

6.3关键源代码

1、fengwanjincalculatorDlg.h文件中自定义变量和函数的相应声明:public:

int jiajian[10];//第一位为加减算符个数,后面几位的绝对值为位置,+为正,-为负

int chengchu[10];//第一位为乘除算符个数,后面几位的绝对值为位置,+为正,-为负

int mizhi[10];//第一位为乘幂算符个数,后面几位的绝对值为位置,+为正,-为负

float num[10];//操作数数值数组

int flaglast;//判断表达式最后一位为算符或者数值 0为数值,1~8为相应算符float nextdata[10];

CString mystr;//编辑框字符串

CFont m_editFont;//编辑框字体

bool flagdian;//0为没加点1为加了点

float beishu;//倍数

bool flagerror;//0未发生错误1发生错误

int data;//按键数值

bool flagdengyu;//是否按下=

void calculator();//计算函数

void changevalue();//改变操作数

void shuangmusuanfu(char,int);//双目算符对应函数

void shuzihanshu(char, int);//数字对应函数

void sincos();

afx_msg void OnBnClickedButton1();

afx_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 OnBnClickedButtonDian();

afx_msg void OnBnClickedButton0();

afx_msg void OnBnClickedButtonClear();

afx_msg void OnBnClickedButtonBackspace();

afx_msg void OnBnClickedButtonJia();

afx_msg void OnBnClickedButtonDeng();

afx_msg void OnBnClickedButtonJian();

afx_msg void OnBnClickedButtonCheng();

afx_msg void OnBnClickedButtonChu();

afx_msg void OnBnClickedButtonZhishu();

afx_msg void OnBnClickedButtonJiecheng();

afx_msg void OnBnClickedButtonSin();

afx_msg void OnBnClickedButtonCos();

2、在fengwanjincalculatorDlg.cpp文件中声明的枚举类型

enum suit{ jia = 1 , jian , cheng , chu , jiecheng , zhishu , Sin , Cos };

3、CfengwanjincalculatorDlg构造函数中的初始化

CfengwanjincalculatorDlg::CfengwanjincalculatorDlg(CWnd* pParent /*=NULL*/)

: CDialog(IDD_FENGWANJINCALCULATOR_DIALOG, pParent)

, mystr(_T(""))

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

// 自添加

flagdian = 0;

beishu = 1;

flagerror = 0;

data = 0;

flagdengyu = 0;

for (int i = 0; i < 10; i++)

{

jiajian[i] = 0;

chengchu[i] = 0;

mizhi[i] = 0;

num[i] = 0;

nextdata[i] = 0;

}

num[0] = 1;

flaglast=0;

}

4、CfengwanjincalculatorDlg::OnInitDialog()设置编辑框字体

m_editFont.CreatePointFont(180, "宋体");

CEdit *m_Edit = (CEdit *)GetDlgItem(IDC_EDIT);

m_Edit->SetFont(&m_editFont); // 设置新字体

5、清屏函数

void CfengwanjincalculatorDlg::OnBnClickedButtonClear() {

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

mystr = L"";

flagdian = 0;

beishu = 1;

flagerror = 0;

data = 0;

flagdengyu = 0;

for (int i = 0; i < 10; i++)

{

jiajian[i] = 0;

chengchu[i] = 0;

mizhi[i] = 0;

num[i] = 0;

nextdata[i] = 0;

}

num[0] = 1;

flaglast = 0;

UpdateData(FALSE);

}

5、退格函数

void CfengwanjincalculatorDlg::OnBnClickedButtonBackspace()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

//移除最右边一个字符

if (!mystr.IsEmpty())

{

char temp;

temp = mystr[mystr.GetLength() - 1];

if (temp >= 48 && temp <= 57)

{

if (!flagdian)

{

num[(int)num[0]] = (num[(int)num[0]] - (temp - 48)) / 10;

}

else

{

num[(int)num[0]] = num[(int)num[0]] - (temp - 48)*beishu;

beishu *= 10;

}

mystr = mystr.Left(mystr.GetLength() - 1);

}

else if (temp == '.')

{

flagdian = 0;

mystr = mystr.Left(mystr.GetLength() - 1);

}

else

{

num[0]--;

switch (temp)

{

case 43:

case 45:

jiajian[jiajian[0]] = 0;

jiajian[0]--;

mystr = mystr.Left(mystr.GetLength() - 1);

break;

case 42:

case 47:

chengchu[chengchu[0]] = 0;

chengchu[0]--;

mystr = mystr.Left(mystr.GetLength() - 1);

break;

case 33:

num[0]++;

num[(int)num[0]] = nextdata[2 * (int)nextdata[0]];

nextdata[2 * (int)nextdata[0] - 1] = 0;

nextdata[0]--;

mystr = mystr.Left(mystr.GetLength() - 1);

break;

case 94:

mizhi[mizhi[0]] = 0;

mizhi[0]--;

mystr = mystr.Left(mystr.GetLength() - 1);

break;

case 110:

num[0]++;

num[(int)num[0]] = nextdata[2 * (int)nextdata[0]];

nextdata[2 * (int)nextdata[0] - 1] = 0;

nextdata[0]--;

mystr = mystr.Left(mystr.GetLength() - 3);

break;

case 115:

num[0]++;

num[(int)num[0]] = nextdata[2 * (int)nextdata[0]];

nextdata[2 * (int)nextdata[0] - 1] = 0;

nextdata[0]--;

mystr = mystr.Left(mystr.GetLength() - 3);

break;

default:

break;

}

flaglast = 0;

}

}

UpdateData(FALSE);

}

6、改变数值数组

void CfengwanjincalculatorDlg::changevalue()

{

if (!flagdian)

{

num[(int)num[0]] = data + num[(int)num[0]] * 10;

}

else

{

beishu /= 10;

num[(int)num[0]] = num[(int)num[0]] + data * beishu;

}

}

7、表达式求值函数

void CfengwanjincalculatorDlg::calculator()//计算

{

for (; mizhi[0] > 0; mizhi[0]--)

{

num[mizhi[mizhi[0]]] = pow(num[mizhi[mizhi[0]]], num[mizhi[mizhi[0]]+1]);

for (int i = mizhi[mizhi[0]]+1; i < num[0]; i++)

{

num[i] = num[i + 1];

}

num[0]--;

for (int i = 1; i <= chengchu[0]; i++)

{

if (abs(chengchu[i]) > mizhi[mizhi[0]])

{

if (chengchu[i] > 0)

{

chengchu[i] -= 1;

}

else

{

chengchu[i] += 1;

}

}

}

}

for (; chengchu[0] > 0; chengchu[0]--)

{

if (chengchu[chengchu[0]] > 0)

{

num[chengchu[chengchu[0]]] *= num[chengchu[chengchu[0]] + 1];

}

else

{

if (num[-chengchu[chengchu[0]] + 1] == 0)

{

AfxMessageBox(_T("除数不能为0!"));

flagerror = 1;

OnBnClickedButtonClear();

break;

}

else

{

num[-chengchu[chengchu[0]]] /= num[-chengchu[chengchu[0]] + 1];

}

}

for (int i = abs(chengchu[chengchu[0]]) + 1; i < num[0]; i++)

{

num[i] = num[i + 1];

}

num[0]--;

}

float sum = num[1];

for (int i = 2; i <= num[0]; i++)

{

sum += jiajian[i-1] * num[i];

}

for (int i = 0; i < 10; i++)

{

num[i] = 0;

}

num[1] = sum;

num[0] = 1;

}

8、双目算符对应函数

void CfengwanjincalculatorDlg::shuangmusuanfu(char zifu,int shuzhi)// 双目算符对应函数

{

UpdateData(TRUE);

if (flagdengyu == 1)

{

mystr = L"";

flagdian = 0;

beishu = 1;

flagdengyu = 0;

for (int i = 0; i < 10; i++)

{

jiajian[i] = 0;

chengchu[i] = 0;

mizhi[i] = 0;

}

flaglast = 0;

if (!flagerror)

{

mystr.Format(_T("%g"), num[1]);

}

else

{

for (int i = 0; i < 10; i++)

{

num[i] = 0;

}

}

flagdengyu = 0;

}

num[0]++;//数值个数++

if (!flagerror)

{

mystr += zifu;

flagdian = 0;

beishu = 1;

}

flagerror = 0;

UpdateData(FALSE);

}

9、0~9对应函数

void CfengwanjincalculatorDlg::shuzihanshu(char shuzi, int shuzhi)//0~9对应函数

{

UpdateData(TRUE);

if (flagdengyu)

{

OnBnClickedButtonClear();

}

flaglast = 0;

mystr += shuzi;

data = shuzhi;

changevalue();

UpdateData(FALSE);

}

10、各控件消息响应函数

void CfengwanjincalculatorDlg::OnBnClickedButton1()

{

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'1', 1);

}

void CfengwanjincalculatorDlg::OnBnClickedButton2()

{

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'2', 2);

}

void CfengwanjincalculatorDlg::OnBnClickedButton3() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'3', 3);

}

void CfengwanjincalculatorDlg::OnBnClickedButton4() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'4', 4);

}

void CfengwanjincalculatorDlg::OnBnClickedButton5() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'5', 5);

}

void CfengwanjincalculatorDlg::OnBnClickedButton6() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'6', 6);

}

void CfengwanjincalculatorDlg::OnBnClickedButton7() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'7', 7);

}

void CfengwanjincalculatorDlg::OnBnClickedButton8() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'8', 8);

}

void CfengwanjincalculatorDlg::OnBnClickedButton9() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'9', 9);

}

void CfengwanjincalculatorDlg::OnBnClickedButton0() {

// TODO: 在此添加控件通知处理程序代码

shuzihanshu(L'0', 0);

}

void CfengwanjincalculatorDlg::OnBnClickedButtonDian() {

// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);

if (flagdengyu)

{

OnBnClickedButtonClear();

}

else

{

if(flagdian==0)

{

mystr += L".";

flagdian = 1;

}

flaglast = 0;

}

UpdateData(FALSE);

}

void CfengwanjincalculatorDlg::sincos()

{

if (nextdata[2 * (int)nextdata[0] - 1] == Sin)

MFC课程设计报告一个简单的计算器应用程序样本

设计一个简单的计算器应用程序 一、设计目标与内容 1.了解Windows编程的基础知识, 掌握MFC应用程序的基本知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。 5.在程序中注意处理数据和运算符的输入, 计算结果的显示。二,设计要求 1.用VC++进行编码, 实现应用程序的功能。注重编码质量, 代码要有适当的注释; 2.提交设计报告一份( 课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献) 。

一个简单的计算器应用程序 总体设计 能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。在程序中注意处理数据和运算符的输入, 计算结果的显示。 详细设计 ◆新建工程Counter 新建工程, 选择对话框应用程序。 ◆程序运行主界面

图2-1 在对话框内添加相应的控件, 分别给编辑框添加三个变量m_N1,m_N2和m_Result。 然后添加一个组合框, 在里面添加十二个单选按钮设置第一个单选按钮为组, 如图 图2-2 然后给对话框类添加一个int变量Operator用来作相应运算时的标记。 给控件添加相应的函数 1、给单选按钮添加相应的函数 void CCounterDlg::OnRadio1() { Operator=1; } void CCounterDlg::OnRadio2()

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

可视化编程MFC计算器

// cacuDlg.cpp : implementation file // #include "stdafx.h" #include "cacu.h" #include "cacuDlg.h" #include "math.h" #include "cstring" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg)

android简单计算器课程设计.

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

MFC计算器编程课程设计实践报告

中南大学本科生课程设计(实践)设计报告(程序设计基础) 题目MFC编程科学计算器学生学号1104120502 学生姓名郭斌繁 指导教师蔡旭晖 学院交通运输工程学院专业班级交通运输类1205班 计算机基础教学实验中心 2013 年 7 月 1 日

程序设计(C++)实践报告 1.引言 C++语言的主要特点表现在两个方面,一是全面兼容C 语言,二是支持面向对象的程序: (1) C++是一个更好的C,它保持了C 语言的优点,大多数的C 程序代码略作修改或不作修改就可在C++的集成环境下调试和运行。这对于继承和开发当前已在广泛的软件是非常重要的,可以节省大量的人力和物力。 (2) C++是一种面向对象的程序设计语言它使得程序的各个模块的独立性更强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更强。这对于设计、编制和调试一些大型的软件尤为重要。 (3) C++集成环境不仅支持C++程序的编译和调试,而且也支持C 程序的编译和调试。通常,C++程序环境约定:当源程序文件的扩展名为c.时,则为C 程序;而当源程序文件的扩展名为cpp.时,则为C++程序。 (4) C++语句非常简练,对语法限制比较宽松,因此C++语法非常灵活。其优点是给用户编程带来书写上的方便。其缺点是由于编译时对语法限制比较宽松,许多逻辑上的错误。 次课程设计主要在运算过程中,如果通过计算器来完成,就会减少计算量,该程序即可以在简单计算器键面下进行简单运算,也可以在科学计算器键面下进行高级的科学计算。并且可以分别计算弧度、角度的三角函数的计算等较为复杂的运算。 (1).设计目标 利用MFC程序开发工具设计一款可以进行简单计算及部分科学计算的计算器。在设计当中将综合“面向对象程序设计与结构化程序设计”的思想方法和知识点,编制一个小型的应用程序系统。通过此设计进一步提高自己的动手能力,并能使自己清楚的知道开发一个应用程序的思想、方法和流程。 (2).选题分析 此次实践所选题目中除了简单的加减乘除运算程序之外还包括了余弦函数、双曲余弦函数、度分秒的转换和X的y次方及y次根号下x的运算程序。除去四

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

MFC课程设计报告—模拟计算器

计算机MFC课程设计报告 ——模拟计算器 姓名: 学号:02011227 联系电话: 指导教师: 东南大学机械工程学院 2012年10月14日

模拟计算器 摘要 摘要内容:以课本简单计算器为基础,首先实现了加、减、乘、除、求倒数和平方根的混合运算,并能进行清屏及倒退操作,然后自行完善了书中未能实现的乘、除运算的连续操作,最后自行设计并完成了lg、ln 、sin、cos、^、.、pi、e八个按钮控件的消息映射及程序代码的添加和修改。从中学会了制作简单的基于对话框的小工具、掌握了常用控件的使用、明白了消息映射及消息处理、提高了VC++编程水平。 关键词:四则运算小数点计算器 Analog calculator Abstract Content of abstract: Simple calculator in textbooks as the foundation, first realized the addition, subtraction, multiplication, division, and reciprocal and square root of the mixed operation, and can clear screen and reverse operation, and then to improve the book failed to realize the multiplication, division operation of continuous operation, and finally to be designed and completed the eight button control news mapping and program code to add and modify. Learnt how to make simple dialog-based small tools, mastered the use of commonly used controls, see news mapping and information processing, improve the level of programming.

最新单片机简易计算器课程设计

单片机简易计算器课 程设计

引言 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片。 事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台

c面向对象程序设计MFC简单计算器实验报告

计算机与信息工程学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置

主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图

4.2各模块详细设计 4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表 double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。 double m_Dis; //Edit控件上需要显示的数字 BOOL point_flag; //小数点表示位,判定是否是小数,是小数为1,不是小数为0。 double numfirst; //保存计算过程中的前一个数字, double numsecond;//保存计算过程中的第二个数字 char op;//记录当前的计算符号,可以为’+’,’-’,’*’,’/’,’=’,’c’,’n’ 变量初始化: poz=1; m_Dis = 0.0; numfirst=0; numsecond=0; op=0;

C++简单计算器课程设计报告

武汉理工大学《专业课程设计2》课程设计说明书 目录 1 基本功能描述 (1) 2 设计思路 (1) 3 软件设计 (4) 3.1 设计步骤 (4) 4 结论与心得体会 (12) 7 附:设计中的关键源代码 (14) 7.2 测试结果 (15)

简单计算器 1 基本功能描述 简单计算器包括双目运算和单目运算功能。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,阶乘,对数,开方,倒数等运算。可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出相应提示,同时包含清除,退格,退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图是整个计算器的流程图,打开计算器程序,输入数据,调用输入数据子程序。子程序开始时m_num为零。按下数字按钮后,判断m_num的正负号,对其进行相关处理,然后在判断是否有小数点,处理后输出结果。 回到总流程图中,输完第一个操作数后,若按下双目运算符,则把m_num存入num2,按下输入第二个操作数并算出结果。若按下的是单目运算符,则直接对其处理得出结果。若按下清零,则m_num等于0.在运算中还要判断运算是否合法,以及结果是否超出显示范围,以做出相关提示,按下清零。算出后把结果保存至num2。若需用算出的结果继续运算则回到输入完第一个操作数后,若不需要则判断试否需要开始新一轮的运算,不需要则结束。

输入数据子函数 N 图1 输入数据子函数流程图

图2 简单计算器总流程图

3 软件设计 3.1 设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名09107xuzhujie及其所在位置,点击确定,如图3所示。 图3 新建MFC AppWizard[exe]工程 将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成,如图4所示。

简易计算器课程设计

科研训练论文 题目:基于单片机的计算器的设计 目录 一、概述 (3) 1.1设计要求及任务: (3) 1.2设计原理: (3) 二、系统总体方案及硬件设计 (3) 2.1计算器总体思想 (3) 2.2硬件的选择与连接 (4) 2.2.1硬件选择 (4) 2.2.2接口设计 (5) 三、软件设计 (7)

3.2系统流程总图 (8) 3.3显示程序设计 (8) 3.4键盘识别程序设计 (9) 3.4.1原理与分析 (9) 3.4.2流程图 (10) 四、设计体会与总结 (11) 五、参考文献 (11) 附录 基于单片机的计算器的设计 摘要:本设计是一个实现加减乘除的计算器,它的硬件主要由四部分构成,一个8051单片机芯片,两个八段共阴极数码管,一个4*4键盘,它可以实现一位数的加减乘除运算。 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 关键词:LED接口;键盘接口;8255A;汇编语言

一、概述 1.1设计要求及任务: (1)设计4*4的键盘,其中10个数字键0~9,其余六个键“+”、“—”、“*”、“/”、“=”、和“C”键; (2)设计两位LED接口电路; (3)实现1位数的简单运算 1.2设计原理: (1)LED显示器接口技术 LED动态显示接口技术 (2)键盘显示技术 逐行(逐列扫描法) 二、系统总体方案及硬件设计 2.1计算器总体思想 显示部分:采用LED动态显示。 按键部分:采用4*4键盘。采用软件识别键值,并执行相应的操作。 执行过程:开机显示零,等待键入数值,当键入数字,经通过数码管显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在数码管上输出运算结果。

MFC计算器程序报告

C++课程设计实验报告 学号姓名 院系专业

一、课题名称 简易的计算器设计。 二、问题陈述 编写一个计算器程序,能够进行四则运算、取模等运算 要求: 1、个人完成; 2、运用对话框编写,界面上只能有一个输出框,数据通过按钮输入到程序,并显 示在输出框中;当按下运算符后再输入数据,输出框中应显示新数据;运算结果也显示在输出框中。 3、四则运算、取模运算是最低要求,程序能正确执行; 4、界面设计美观、合理; 5、独立完成; 三、设计目标和设计任务 编写一个计算器程序,能够进行四则运算、取模、乘方、立方,并且给计算器程序添加背景。 四、解题算法思想 1.创建一个基于对话框的项目 2. 给对话框加入相应的操作按钮 3. 给按钮加上代码,设置属性 4. 为实现四则运算、取模等操作添加必要函数 五、程序算法过程 ①选择File→New菜单命令,选择Project选项卡,并选择MFC AppWizard(exe), name 命名为calculator;选择应用程序基于对话框,即Dialog based。多次单击next,最后单击Finish后,系统弹出一对话框,如下图:

②使用按钮控件、文本编辑框控件和组控件,将他们加入到对话框中,并通过更改按钮控件的属性中的标题部分。选中所有按钮,在属性中的Extended Style中选中Modal frame,使其达到下图效果:(注意,在布局按钮时,为了使按钮总体整齐美观,可以先创建一行或一列按钮,使他们保持整齐后,按住Ctrl键,选中这一行或一列按钮,再移动鼠标,即可生成另一行或一列按钮;也可以通过Layout菜单中的指令对其进行布局) ③鼠标右击按钮控件,选择属性,即可对其ID进行更改,各ID与标题内容对应如下: ID 标题ID 标题IDC_BUTTON0 0 IDC_BUTTONCLS 清零 IDC_BUTTON1 1 IDC_ADD + IDC_BUTTON2 2 IDC_PLUS -

单片机简易计算器课程设计

单片机简易计算器课程设计 课程设计 题目名称________________ 简易计算器设计____________ 课程名称_____________ 单片机原理及应用____________ 学生姓名________________

班级学号________________ 2018年6月20日

目录 一设计目的 (2) 二总体设计及功能介绍 (2) 三硬件仿真图 (3) 四主程序流程图 (4) 五程序源代码 (5) 六课程设计体会 (28)

设计目的 本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUE仿真。 二总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51 系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(0?9)、符号键(+、-、x、十)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘;

执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。 三硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

MFC简单计算器设计正文

实用计算器程序1.基本功能描述 计算器是人们日常生活中非常实用的计算工具。预期设计目标与实际计算器为标准,Windows10系统提供的计算器为范例进行设计。 实用计算器要实现单目运算和双目运算。单目运算主要包括阶乘、正弦、余弦; 双目运算主要包括加、减、乘、除、乘幂等。计算器要能够对输入的各种数据进行处理,包括小数、整数、负数等数据进行操作。实际过程中要能够对不同的数据灵活判 断执行。同时要能够对不满足运算符的操作数,提示出错信息以方便用户进行处理。 用户的修改包括清屏和退格。程序设计的重点和难点在于:第一,能够对于不同的操 作数和操作符进行连续运算,运算过程中要有优先级的判断,根据优先级执行不同的 运算顺序;第二,能够用一个编辑框实现运算表达式的显示和结果的输出。 编程环境采用VisualStudio2017提供的MFC建立对话框应用程序,设计界面要简 单大方,并提供程序所有功能的接口。 2.设计思路 表1操作符优先级设计 优先级操作符 1 阶乘、正弦、余弦 2 乘幂 3 乘、除 4 加、减 对对话框编辑框关联一个变量从中读取数据,按下数字键时对数据数组num[]进行更新,其中num[0]表示的是当前已经存储变量的个数。由于算法设计为四层优先级, 且单目运算的优先级最高。当按下相应单目运算符,首先将当前数据数组的最后一个 存储(防止按下Backspace退格发生错误),并将此位数据执行运算后重新赋值。但按下双目运算符相应按键后,将计数num[0]++,同时将运算符的类型和位置记录。当按下等于之前,这样就将一个单目双目混合的运算表达式转化为双目运算。如果没有按 下等号键,则继续执行循环。在按下等号按钮之后,按照先乘幂、再乘除、后加减的 运算顺序执行运算,将最后结果保存并显示。(在实际的计算器中,执行完运算之后,按下运算符的操作键,最终结果将按照左操作数的形式出现,故需要保存变量。)如果用户没有结束程序,在运行初始化程序,进行下一次运算,否则直接退出。 图1程序流程图 3.软件设计 设计步骤 1)创建基于对话框的程序 利用AppWizard建立应用程序框架,创建一个基于对话框的MFC工程,命名为“fengwanjincalculator”,如图2所示。在图3显示的应用程序类型中选择基于对话框。创建成功后,系统自动生成相应程序文件。 图2创建MFC工程图 图3应用程序类型选择图

matlab课程设计简单计算器的设计

matlab课程设计报告 题目简易计算器的设计 学院电子信息工程学院 专业电子信息 学生姓名和学号 指导教师

一、选题目的及意义 GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用。人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作,而在matlab有很简单的gui设计工具,我们可以通过这个工具轻松地构建我们想要的程序,从而实现与用户的信息交互。本次课程设计是使用了matlab中的guide生成了简单的计算器程序。 二、源代码 function varargout = Calculator(varargin) %Simple Calculator %@Anhui University % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Calculator_OpeningFcn, ... 'gui_OutputFcn', @Calculator_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);

if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before Calculator is made visible. function Calculator_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Calculator (see VARARGIN) % Choose default command line output for Calculator handles.output = hObject; % Update handles structure guidata(hObject, handles);

MFC简单计算器

信息科学与技术学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:李海东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架 开始 结束 键入第一个按钮 键入第二个按钮 显 示 结 果 加 法 减 法 乘 法 除 法 乘 方 清 零

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置 1

2 主要使用到Layout 菜单中的Align 功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit 控件用于显示数字,Button 控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图 实现文件.cpp 显示计算器界面 开始执行 工程全局对象 资源文件.rc 模块定义文件.def 头文件.h 执行_twinmain() Afxmain() 创建窗口 实现窗口类注册 Set window V oid clc::onpaint() V oid cal::onCE() 点击鼠标发出消息 V oid clce::onmouse() 等待消息处理 V oid clc::onMum0() V oid clc::onAdd() 文本框中显示结果 程序运行结

MFC计算器设计

课程名称:Visual C++面向对象与可视化程序设计 实验项目:计算器设计 姓名: 专业:计算机科学与技术 班级: 学号: 计算机科学与技术学院 实验教学中心 2016 年11月19日

哈尔滨理工大学计算机科学与技术学院实验报告 实验项目名称:计算器设计( 2课时) 一、实验目的 1.灵活使用MFC应用程序设计 2.设计计算器 二、实验内容 设计一个简单的计算器,可以实现加法,减法,除法,乘法,取模,开平方,输入数字要求可以输入小数,可以连加。具有清空,回退功能。 三、实验步骤 1.启动VS打2012开新建项目 2.出现的New对话框的Projects标签内选择MFC应用程序 3.Projects Name指定项目的名字,在Location中指定路径后按OK按钮 4.选择创建类型,(例如基于对话框),确定项目类型后按Finish完成。 5.编写实验代码 四、实验结果

五、程序代码 // project_1Dlg.h : 头文件 // #pragma once #include "afxwin.h" // Cproject_1Dlg 对话框 class Cproject_1Dlg : public CDialogEx { // 构造 public: Cproject_1Dlg(CWnd* pParent = NULL); // 标准构造函数void Equal2(); void Cproject_1Dlg::AddDigit(char numKey); // 对话框数据 enum { IDD = IDD_PROJECT_1_DIALOG };

微机原理课程设计_简易计算器的设计

目录 一前言 (1) 二总体设计 (2) 三硬件设计 (2) 3.1微处理器8086芯片 (2) 3.2可编程并行接口芯片8255A (3) 3.44 3.5 4.1 4.2 五仿真 一前言 1.1 软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。 通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表

达设计思想和结果的能力。 1.2课程设计指导及要求 在课程设计时,2~3名同学组成1个设计小组,分别完成项目的功能设计、电路编辑及调试、编码及调试和课程设计报告编写工作。同批次同学中选择同一题的不超过3组。在教师指导下,可以相互讨论。每设计小组提交1份设计报告,设计报告由设计小组同学独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而

同时使“输入回答”线有效,作为对外设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU 发一个中断请求。CPU 可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且 撤消对CPU 的中断请求。

单片机简易计算器课程设计

课程设计 题目名称简易计算器设计 课程名称单片机原理及应用 学生姓名 班级学号 2018年6 月20日

目录 一设计目的 (2) 二总体设计及功能介绍 (2) 三硬件仿真图 (3) 四主程序流程图 (4) 五程序源代码 (4) 六课程设计体会 (11)

一设计目的 本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUES仿真。 二总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED 显示数据和结果; 另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘; 执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。

三硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

四主程序流程图 程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图 五程序源代码 #include #include #include/* isdigit()函数*/ #include/* atoi()函数*/

相关主题
文本预览
相关文档 最新文档