基于visualc的数字键盘式简单计算器课程设计.docx
《基于visualc的数字键盘式简单计算器课程设计.docx》由会员分享,可在线阅读,更多相关《基于visualc的数字键盘式简单计算器课程设计.docx(35页珍藏版)》请在冰豆网上搜索。
基于visualc的数字键盘式简单计算器课程设计
课程名称:
题目:
简单计算器
院(系):
专业班级:
姓名:
学号:
指导教师:
2011年7月6日
西安建筑科技大学大作业设计(论文)任务书
专业班级:
学生姓名:
指导教师(签名):
一、大作业题目
简单计算器
二、本次大作业应达到的目的
具有简单计算功能的计算器,输入被计算的数据及运算操作,输出正确计算结果。
三、本次大作业任务的主要内容和要求(包括原始数据、技术参数、设计要求等)
系统的主要功能有:
①窗口界面的计算器;
②通过按钮键输入数据;
③能够完成加、减、乘、除、求倒数、开方等一般运算;
④输出结果具有一定精度
四、应收集的资料及主要参考文献:
[1]宋金珂编著,VC++程序设计基础教程,清华大学出版社
[2]谭浩强.《c语言程序设计》.清华大学出版社
[3]辛长安编著.VC++编程技术与难点剖析.清华大学出版社
[4]陈恭和编著.数据库Access2002应用教程.清华大学出版社
[5]王瑞编著.VisualC++数据库系统开发完全手册.人民邮电出版社
[6]王春才编著.VisualBasic数据库系统开发完全手册.人民邮电出版社
[7]高春艳.VisualBasic数据库系统开发案例精选.人民邮电出版社
[8]李晓黎编著.VisualBasic+SQLServer数据库应用系统开发与实例.人民邮电出版社
[9]启明工作室编著.VisualBasic+Access数据库应用系统开发与实例.人民邮电出版社
[10]启明工作室编著.VisualC+++SQLServer数据库应用系统开发与实例.人民邮电出版社
五、审核批准意见
教研室主任(签字)
一、需求分析
1.1开发背景……………………………………………………4
1.2项目目标……………………………………………………4
1.3运行环境……………………………………………………4
1.4项目任务书…………………………………………………5
二、技术路线
2.1制作界面……………………………………………………5
2.2总体方案……………………………………………………5
2.3详细设计……………………………………………………8
三、编程实现
3.1核心代码……………………………………………………19
3.2运行结果……………………………………………………29
四、测试分析……………………………………………………30
五、个人总结……………………………………………………34
六、参考文献……………………………………………………35
简单计算器
1需求分析
1.1开发背景
软件不同于硬件的最主要特点就在于它的不确定性,软件产品很难满足用户的需要,所以就需要不断的进行更新.
随着科技的发展,人们在很多地方都要用到计算器来进行工程和商业上的运算,计算器在日常生活中的重要地位已经举足轻重.
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。
要实现计算功能,可以用VC++的知识编写程序来解决此问题。
该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。
该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。
1.2项目目标
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
在程序设计中,可以用两种方法解决问题:
一是传统的结构化程序设计方法,二是面向对象程序设计方法。
由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。
而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C++程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。
1.3运行环境
硬件:
:
计算机(CPU主频1.81GHz、512MB内存)
软件:
WindowsXP操作系统,VisualC++6.0是Microsoft公司在1998年推出的基于Windows9X和WindowsNT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
VisualC++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在VisualC++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。
VC++6.0是Windows95/98、XP或WindowsNT下的一个应用程序,本身对软硬件没有特殊要求。
就是说它对环境的要求与Windows95/98、WindowsNT要求是一致的。
硬件要求:
一般在586以上的处理器、16MB以上内存、100MB以上的硬盘。
软件要求:
Windows95/98或WindowsNT3.51以上版本。
VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。
与一般的应用软件一样,有以下两种启动方式:
(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。
(2)用户也可以使用命令行启动VC。
单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:
\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。
1.4项目任务书
(1).软件功能描述:
系统的主要功能有:
①窗口界面的计算器;
②通过按钮键输入数据;
③能够完成加、减、乘、除、求倒数、开方等一般运算;
④输出结果具有一定精度。
(2)工程进度安排如下:
第一周:
系统框架设计;
编码和单元测试;
第二周:
集成系统将个子系统组合起来;
测试阶段;
2技术路线
2.1制作界面
我们采用了当前最流行的VC++6.0作为开发工具,运行平台是WINDOW
2000/XP。
通过C++提供的MFC类库,各成员按照分工和进度完成各自任务。
最后再将各功能模块集成起来。
2.2总体方案
2.2.1窗体设计
2.2.2编辑对话框及控件资源
按钮控件资源清单
按钮名称
按钮ID
用途
0
IDC_0_BUTTON
按键0
1
IDC_1_BUTTON
按键1
2
IDC_2_BUTTON
按键2
3
IDC_3_BUTTON
按键3
4
IDC_4_BUTTON
按键4
5
IDC_5_BUTTON
按键5
6
IDC_6_BUTTON
按键6
7
IDC_7_BUTTON
按键7
8
IDC_8_BUTTON
按键8
9
IDC_9_BUTTON
按键9
.
IDC_DECIMAL_BUTTON
小数点
=
IDC_EQUAL_BUTTON
求值
2.2.3功能模块图
2.3详细设计
2.3.1利用appwizard建立对话框工程
建立新工程,选中MFCAPPWizard[exe],输入工程名字并保存路径。
选中工程类型为对话框工程
单击OK键完成新工程建立
2.3.2设计计算器窗口
新建编辑框和数字键
编辑列选框“操作类型”
2.3.3设置数字键盘上按钮的名称和属性
2.3.4添加变量
给编辑框添加的变量名字为“m_result”,类型为“Cstring”;给列表框添加的变量名字为“m_Operatorbox”类型为“ClistBox”;
除此之外定义全局变量如下:
intmath_i;
doublecount=10;
charbuffer[10];
doubleinput_int=0,input_dec=0;
doubleinput1=0,input2=0;
doublevalue=0;
booldecimal=FALSE;
2.3.5给数字键按钮添加处理函数
各个处理函数列表如下:
按钮名称
函数
0
On0Button
1
On1Button
2
On2Button
3
On3Button
4
On4Button
5
On5Button
6
On6Button
7
On7Button
8
On8Button
9
On9Button
.
OnDecimalButton
=
OnEqualButton
2.3.6为按钮添加代码
为数字键0添加代码如下:
voidCMyDlg:
:
On0Button()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(decimal)
{
input_dec=input_dec+0/count;
count=count*10;
}
elseinput_int=input_int*10+0;
value=input_int+input_dec;
_gcvt(value,10,buffer);
m_ResultEdit=(LPCTSTR)buffer;
UpdateData(FALSE);
}
为数字键1填加代码如下:
voidCMyDlg:
:
On1Button()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
if(decimal)
{input_dec=input_dec+1/count;
count=count*10;
}
elseinput_int=input_int*10+1;
value=input_int+input_dec;
_gcvt(value,10,buffer);
m_ResultEdit=(LPCTSTR)buffer;
UpdateData(FALSE);
}
其余数字键代码基本相同,本文省略。
为小数点代码添加代码
在OnInitDialog中添加代码如下:
m_Operatorbox.AddString("乘");
m_Operatorbox.AddString("除");
m_Operatorbox.AddString("加");
m_Operatorbox.AddString("减");
m_Operatorbox.AddString("求倒数");
m_Operatorbox.AddString("开方");
在函数OnSelchangeOperatorList()代码如下:
voidCMyDlg:
:
OnSelchangeOperatorList()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
input1=input_int+input_dec;
decimal=FALSE;
input_int=0;
input_dec=0;
count=10;
math_i=m_Operatorbox.GetCurSel();
}
填加等于键的运算代码如下:
voidCMyDlg:
:
OnEqualButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
input2=input_int+input_dec;
decimal=FALSE;
input_int=0;
input_dec=0;
count=10;
switch(math_i){
case2:
value=input1+input2;
break;
case3:
value=input1-input2;
break;
case0:
value=input1*input2;
break;
case1:
value=input1/input2;
break;
case5:
value=1/input1;
break;
case4:
value=sqrt(input1);
break;}
_gcvt(value,10,buffer);
m_ResultEdit=(LPCTSTR)buffer;
UpdateData(FALSE);
}
2.3.7保存完成的工程
2.3.8编译与运行
编译界面
运行界面
3编程实现
3.1核心代码
本设计的简单计算器的全部如下:
//数字键盘式计算器Dlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"数字键盘式计算器.h"
#include"数字键盘式计算器Dlg.h"
#include
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
intmath_i;
doublecount=10;
charbuffer[10];
doubleinput_int=0,input_dec=0;
doubleinput1=0,input2=0;
doublevalue=0;
booldecimal=FALSE;
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyDlgdialog
CMyDlg:
:
CMyDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_ResultEdit=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMyDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX,IDC_OPERATOR_LIST,m_Operatorbox);
DDX_Text(pDX,IDC_RESULT_EDIT,m_ResultEdit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg,CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_0_BUTTON,On0Button)
ON_BN_CLICKED(IDC_1_BUTTON,On1Button)
ON_BN_CLICKED(IDC_2_BUTTON,On2Button)
ON_BN_CLICKED(IDC_3_BUTTON,On3Button)
ON_BN_CLICKED(IDC_4_BUTTON,On4Button)
ON_BN_CLICKED(IDC_5_BUTTON,On5Button)
ON_BN_CLICKED(IDC_6_BUTTON,On6Button)
ON_BN_CLICKED(IDC_7_BUTTON,On7Button)
ON_BN_CLICKED(IDC_8_BUTTON,On8Button)
ON_BN_CLICKED(IDC_9_BUTTON,On9Button)
ON_BN_CLICKED(IDC_DECIMAL_BUTTON,OnDecimalButton)
ON_LBN_SELCHANGE(IDC_OPERATOR_LIST,OnSelchangeOperatorList)
ON_BN_CLICKED(IDC_EQUAL_BUTTON,OnEqualButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyDlgmessagehandlers
BOOLCMyDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
m_Operatorbox.AddString("乘");
m_Operatorbox.AddString("除");
m_Operatorbox.AddString("加");
m_Operatorbox.AddString("减");
m_Operatorbox.AddString("求倒数");
m_Operatorbox.AddString("开方");
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMyDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//this