c实现计算器课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
得分:
信电工程学院
课程设计报告
基于VC的表达式计算器软件设计
课程:程序设计综合训练1
班级:12软嵌2班
学号:223
姓名:***
指导教师:**
2013年6 月28日
目录
1引言------------------------------------------------------------------------------- 1 课题背景-----------------------------------------------------------------2
课程设计目的-----------------------------------------------------------3
2需求分析-------------------------------------------------------------------------5 系统功能模块-----------------------------------------------------------5
设计要求-----------------------------------------------------------------6
3系统实现------------------------------------------------------------------------8 对话框界面设计-------------------------------------------------------8
数值计算功能的实现-----------------------------------------------10
4程序关键代码及运行结果-------------------------------------------------12 5总结与体会------------------------------------------------------------------15
1 引言
课题背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具;要实现计算功能,可以用VC++的知识编写程序来解决此问题;该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度;该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用.
课程设计目的
本课程是一门实践性很强的课程,既要熟练掌握相关概念,又要动手编程,还要上机调试运行;同时,本课程也注重提高学生编写技术文档和技术文档阅读的能力;学生通过本课程的学习实践,将学习和强化软件开发的能力、文档写作能力、英语阅读能力、软件使用能力等;为今后计算机编程的学习和工作打下良好、扎实的理论实践基础;
2 需求分析
系统功能模块
1输入的符号,数字从左向右显示; 点击“=”输出结果,在输出行显示
2支持加减乘除运算;
3支持“xˆy”的运算;
4 括号“”“”的使用;
5支持混合运算;
6功能键“ANS” ,“CLEAR” ,“BACKSPACE”的使用;
7计算器的输入方式:支持鼠标点击计算器键输入;
8计算器计算结果的输出方式:在计算器窗口的输出行显示
9算数运算的数据类型:整数和浮点数;
10特殊情况的计算;
11以上所有的运算都是在10进制下进行.
1输入的符号,数字从右向左显示;
先输入“8”
再输入“×”
点击“=”输出结果,在输出行显示.
2支持加减乘除运算.
a.
c. 减法计算
d.除法运算特殊情况见
2)支持求次方x ˆy运算;
求次方x ˆy运算:
“ˆ”为次方x ˆy在输入行中的显示符号
4“”“”的使用;括号的使用
要使用“”“”的时候,先点击“”,再输入数字或符号,内容输入完毕以后,点击“”,完成“”“”的所有功能;
例如:2×2+2=
22+2
22+2
22+2
5支持混合运算;
附:运算符的优先级表 优先级 功能键 显示 结合律
从 高 到 低
、 、 自左向右 x ˆy 、1/x ˆ、~ 自左向右 ×、÷ 、/ 自左向右 ﹢﹣ ﹢﹣
自左向右
例如:5+2×5=
5+25
6功能键“CLEAR ”及“BACKSPACE ”的使用;
a .“CLEAR ”为清0键;只要按下“CLEAR ”键,输入行所有字符清0,输出行回到原始状态; 输入前:
5+25
输入后:
b.“BACKSPACE ”为退格键;当输入任何数字或运算符,只要按下“BACKSPACE ”
混合运算则按优先级表中的运算符优先顺序从左向右计算
键,字符位自右向左消去一位;注:初始的“0”不能被删除输入前:
输入后:
C.“ANS”为变量储存器;当一次结果被清除后,
个结果;
如:
按“CLEAR”键后,再按“ANS”键就会这样
7计算器的输入方式:只支持鼠标点击计算器键输入;
8计算器计算结果的输出方式:在计算器窗口的输出行显示;
9算数运算的数据类型:整数和浮点数;
a.输入行最大显示的字符数32位,每个运算符算一位;
b.“”,“”各占一个字符位;
c.输出行最大显示的字符数为32位;
d.纯小数显示的最大字符数为小数点后30位,整数及小数点各占一位;
若纯小数为负数,则显示最大字符数为小数点后29位,“-”占一位;
e.输入行在未输入任何数字的时候,显示“0”,只占一个字符位;当输入任何数字时;“0”消失,输入的的数字取代“0”;当输入任何运算符时;默认之前输入数字“0”;
f.点击“=”键后方可显示数字或字母或汉字;
10特殊情况的运算
A.运算结果整数部分超出32位,显示Infinity无穷大;出现运算异常
B.除数为0的情况,提示用户被除数不能为零
C.在运算时,若结果为纯小数,小数位超过30位,则超出的字符舍弃;
若舍弃超出部位后,结果全为0,则结果为0
D.在运算时,若结果的整数位不为0
a.总位数在最大字符位内,则直接显示;
b.总位数在最大字符位以外,整数部分在最大字符位以内,则只优先显示整数部位,弃掉32位以后的字符
E.当用户输入“^0”时,若“^0”之前的算式或数字的值为0,点击“=”后,输出界面显示“底数不能为0”
11)以上所有的运算都是在10进制下进行
设计要求
1 了解Windows编程的基础知识,掌握MFC应用程序的基本知识;
2 理解需求分析过程,掌握需求分析文档编写;
3 理解面向对象程序设计的基本思路和方法;
4 掌握用VC++开发MFC应用程序的一般步骤和方法;
5 掌握基于对话框的应用程序的编写,主要包括文本框和按钮等;
6 掌握后缀表达式算法;
7 掌握VC++开发工具的使用;包括资源管理,项目创建,运行调试等;
8 完成表达式的计算器应用程序,实现基本的加、减、乘、除等四则运算,且支持包括括号的表达式运算功能;
3系统实现
对话框界面设计
数值计算实现
例如:2×2+2=
2
2
22+2
22+2
22+2
8
4程序关键代码及运行结果include <iostream>
include <string>
include ""
include <cmath>
using namespace std;
bool jisuandouble a,double b,char c,double& d
{
switch c
{
case '+':
d=a+b;
"
using namespace std;
ifdef _DEBUG
define new DEBUG_NEW
endif
void CCompuetrDlg::OnPaint
{
if IsIconic
{
CPaintDC dcthis; // 用于绘制的设备上下文
SendMessageWM_ICONERASEBKGND, reinterpret_cast<WPARAM>, 0;
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetricsSM_CXICON;
int cyIcon = GetSystemMetricsSM_CYICON;
CRect rect;
GetClientRect▭
int x = - cxIcon + 1 / 2;
int y = - cyIcon + 1 / 2;
// 绘制图标
x, y, m_hIcon;
}
else
{
CRect rect;
CPaintDC dcthis;
GetClientRectrect;
rect,RGB255,0,0;//设置背景颜色
CDialog::OnPaint;
CDialog::OnPaint;
}
}
// : 定义应用程序的类行为;
//
include ""
include ""
include ""
ifdef _DEBUG
define new DEBUG_NEW
endif
// CCompuetrApp
BEGIN_MESSAGE_MAPCCompuetrApp, CWinApp
ON_COMMANDID_HELP, CWinApp::OnHelp
END_MESSAGE_MAP
// CCompuetrApp 构造
CCompuetrApp::CCompuetrApp
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在InitInstance 中
}
// 唯一的一个CCompuetrApp 对象
CCompuetrApp theApp;
// CCompuetrApp 初始化
BOOL CCompuetrApp::InitInstance
{
// 如果一个运行在Windows XP 上的应用程序清单指定要// 使用版本6 或更高版本来启用可视化方式,
//则需要InitCommonControls;否则,将无法创建窗口;
InitCommonControls;
CWinApp::InitInstance;
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey_T"应用程序向导生成的本地应用程序";
CCompuetrDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = ;
if nResponse == IDOK
{
// TODO: 在此放置处理何时用“确定”来关闭
//对话框的代码
}
else if nResponse == IDCANCEL
{
// TODO: 在此放置处理何时用“取消”来关闭
//对话框的代码
}
// 由于对话框已关闭,所以将返回FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵;
return FALSE;
}
//stack
include<iostream>
include<string>
include<new>
using namespace std;
template <class T>
class LinkedStack;
template <class T>
class Node
{
friend LinkedStack<T>; private:
T data;
Node<T> link;
};
template <class T>
class LinkedStack
{
public:
LinkedStack{top=0;length=0;}
~LinkedStack;
bool isEmptyconst
{
return top==0;
}
bool isFullconst;
T Top const;
LinkedStack<T>&Addconst T& x;
LinkedStack<T>&DeleteT& x;
int getLength{return length;} private:
Node<T> top;
int length;
};
template <class T>
LinkedStack<T>::~LinkedStack
{
Node<T> next;
whiletop
{
next=top->link;
delete top;
top=next;
}
}
template <class T>
bool LinkedStack<T>::isFullconst
{
try
{
Node<T> p=new Node<T>;
delete p;
return false;
}
catchbad_alloc& e
{
return true;
}
}
template <class T>
T LinkedStack<T>::Topconst
{
ifisEmpty
throw CString"堆栈空异常";
return top->data;
}
template <class T>
LinkedStack<T>& LinkedStack<T>::Addconst T& x {
Node<T> p=new Node<T>;
p->data=x;
p->link=top;
top=p;
length++;
return this;
}
template <class T>
LinkedStack<T>& LinkedStack<T>::DeleteT& x {
ifisEmpty
throw CString"堆栈空异常";
x=top->data;
Node<T> p=top;
top=top->link;
delete p;
length--;
return this;
}
5总结与体会
计算器虽然是我们生活中常见的一样工具,但不知道实现这样一个工具,说实话不是很简单,对于我这个学习一般的人来说,很难计算器虽小,但包含了一些简单却又重要的功能,包括加减乘除,次方,括号等一些基本功能,它方便了大众的日常生活中遇到的计算问题;完成这个任务,说实话很艰难,但挺了过来,坚持了过来,所谓凡事贵在坚持,所以要学会坚持,坚持就是胜利;一个人的力量是有限的,学会与人合作,积极请教他人谦虚学习是必要的,它只会让你更加的进步,会更好;所以这个任务让我学到了很多,坚持,努力,合作,进取,积极向上,天下无难事,只要肯用心。