收藏 分享(赏)

基于visual c++的数字键盘式简单计算器课程设计.doc

上传人:buyk185 文档编号:6426200 上传时间:2019-04-12 格式:DOC 页数:35 大小:3.02MB
下载 相关 举报
基于visual c++的数字键盘式简单计算器课程设计.doc_第1页
第1页 / 共35页
基于visual c++的数字键盘式简单计算器课程设计.doc_第2页
第2页 / 共35页
基于visual c++的数字键盘式简单计算器课程设计.doc_第3页
第3页 / 共35页
基于visual c++的数字键盘式简单计算器课程设计.doc_第4页
第4页 / 共35页
基于visual c++的数字键盘式简单计算器课程设计.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、西安建筑科技大学大作业(论文)第 1 页 共 35 页大作业课程名称: 软件技术基础 题 目: 简单计算器 院 (系): 信息与控制工程学院 专业班级: 电子信息工程 0801 姓 名: 李芃博 学 号: 080640116 指导教师: 周方晓 2011 年 7 月 6 日西安建筑科技大学大作业(论文)第 2 页 共 35 页西安建筑科技大学大作业设计(论文)任务书专业班级: 电子0801 学生姓名: 李芃博 指导教师(签名): 一、大作业题目 简单计算器二、本次大作业应达到的目的具有简单计算功能的计算器,输入被计算的数据及运算操作,输出正确计算结果。三、本次大作业任务的主要内容和要求(包括原

2、始数据、技术参数、设计要求等) 系统的主要功能有: 窗口界面的计算器; 通过按钮键输入数据; 能够完成加、减、乘、除、求倒数、开方等一般运算; 输出结果具有一定精度四、应收集的资料及主要参考文献: 1 宋金珂编著, VC+程序设计基础教程,清华大学出版社2 谭浩强.c 语言程序设计.清华大学出版社3 辛长安编著.VC+编程技术与难点剖析.清华大学出版社4 陈恭和编著.数据库 Access 2002 应用教程.清华大学出版社5 王瑞编著.Visual C+数据库系统开发完全手册.人民邮电出版社6 王春才编著.Visual Basic 数据库系统开发完全手册.人民邮电出版社7 高春艳.Visual

3、 Basic 数据库系统开发案例精选.人民邮电出版社8 李晓黎编著.Visual Basic +SQL Server 数据库应用系统开发与实例. 人民邮电出版社9 启明工作室编著.Visual Basic+Access 数据库应用系统开发与实例. 人民邮电出版社10 启明工作室编著.Visual C+ + SQL Server 数据库应用系统开发与实例. 人民邮电出版社五、审核批准意见教研室主任(签字) 西安建筑科技大学大作业(论文)第 3 页 共 35 页目录一、需求分析1.1 开发背景41.2 项目目标41.3 运行环境41.4 项目任务书5二、技术路线2.1 制作界面52.2 总体方案5

4、2.3 详细设计8三、编程实现3.1 核心代码193.2 运行结果29四、测试分析30五、个人总结34六、参考文献35简单计算器西安建筑科技大学大作业(论文)第 4 页 共 35 页1 需求分析1.1 开发背景软件不同于硬件的最主要特点就在于它的不确定性,软件产品很难满足用户的需要,所以就需要不断的进行更新.随着科技的发展,人们在很多地方都要用到计算器来进行工程和商业上的运算,计算器在日常生活中的重要地位已经举足轻重.计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用 VC+的知识编写程序来解决此问题。该计算器大大的降低了数字计算的

5、难度及提高了计算的准确度和精确度。该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。1.2 项目目标在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是面向对象程序设计方法。由于多个函数均需要访问某些数据,这些数据常被设计为全局变量。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为 C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。1.3

6、运行环境硬件::计算机(CPU 主频 1.81GHz、512MB 内存)软件:Windows XP 操作系统,Visual C+6.0 是 Microsoft 公司在1998 年推出的基于 Windows 9X 和 Windows NT 的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问 C+源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C+6.0 不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在 Visual C+6.0 集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试

7、等各项工作。VC+6.0 是 Windows 95/98、XP 或 Windows NT 下的一个应用程序,本身对软硬件没有特殊要求。就是说它对环境的要求与 Windows 95/98、Windows NT 要求是一致的。硬件要求:一般在 586 以上的处理器、16MB 以上内存、100MB 以上西安建筑科技大学大作业(论文)第 5 页 共 35 页的硬盘。软件要求:Windows 95/98 或 Windows NT3.51 以上版本。VC+ 6.0 系统可以在一张 CD 盘上,也可以在“Visual Studio( Visual C+、Visual Foxpro)”等产品的第一张 CD 盘

8、上。一般都有一个 VC 的自动安装程序,也可以执行 VC6 目录下的 setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。在安装好 VC 6.0 系统后,有时根据需要添加或删除某些部件,可插入CD 盘重新执行 setup.exe 安装程序,安装程序会检测当前系统安装 VC6 的足件,用户单击“添加删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual studio 6.0 中文版”子菜单中的“Microsoft Visual

9、C+ 6.0 中文版”程序。(2)用户也可以使用命令行启动 VC。单击“开始”按钮后选择 “运行”命令,在“运行”对话框中输入 c:Program FilesMicrosoft Visual StudioVC98VC6.exe(按默认盘符和路径安装)即可。1.4 项目任务书(1).软件功能描述:系统的主要功能有: 窗口界面的计算器; 通过按钮键输入数据; 能够完成加、减、乘、除、求倒数、开方等一般运算; 输出结果具有一定精度。(2)工程进度安排如下:第一周:系统框架设计;编码和单元测试;第二周:集成系统将个子系统组合起来;测试阶段;2 技术路线2.1 制作界面我们采用了当前最流行的 VC+6.

10、0 作为开发工具,运行平台是WINDOW 西安建筑科技大学大作业(论文)第 6 页 共 35 页2000/XP。通过 C+提供的 MFC 类库,各成员按照分工和进度完成各自任务。最后再将各功能模块集成起来。2.2 总体方案2.2.1 窗体设计2.2.2 编辑对话框及控件资源西安建筑科技大学大作业(论文)第 7 页 共 35 页按钮控件资源清单按钮名称 按钮 ID 用途0 IDC_0_BUTTON 按键 01 IDC_1_BUTTON 按键 12 IDC_2_BUTTON 按键 23 IDC_3_BUTTON 按键 34 IDC_4_BUTTON 按键 45 IDC_5_BUTTON 按键 56

11、 IDC_6_BUTTON 按键 67 IDC_7_BUTTON 按键 78 IDC_8_BUTTON 按键 89 IDC_9_BUTTON 按键 9. IDC_DECIMAL_BUTTON 小数点= IDC_EQUAL_BUTTON 求值西安建筑科技大学大作业(论文)第 8 页 共 35 页2.2.3 功能模块图点击加减乘除等选项进行操作选择点击数字键,输入第二个操作数点击数字键,输入第一个操作数点击“=”键,输出运算结果运行程序显示运算结果2.3 详细设计2.3.1 利用 appwizard 建立对话框工程西安建筑科技大学大作业(论文)第 9 页 共 35 页建立新工程,选中 MFCAPP

12、Wizardexe,输入工程名字并保存路径。选中工程类型为对话框工程单击 OK 键完成新工程建立西安建筑科技大学大作业(论文)第 10 页 共 35 页2.3.2 设计计算器窗口新建编辑框和数字键西安建筑科技大学大作业(论文)第 11 页 共 35 页编辑列选框“操作类型”西安建筑科技大学大作业(论文)第 12 页 共 35 页2.3.3 设置数字键盘上按钮的名称和属性2.3.4 添加变量给编辑框添加的变量名字为“m_result” ,类型为“Cstring” ;给列表框添加的变量名字为“m_Operatorbox”类型为“ClistBox” ;除此之外定义全局变量如下:int math_i;

13、double count=10;char buffer10;double input_int=0,input_dec=0;double input1=0,input2=0;double value=0;bool decimal=FALSE;西安建筑科技大学大作业(论文)第 13 页 共 35 页2.3.5 给数字键按钮添加处理函数各个处理函数列表如下:按钮名称 函数0 On0Button1 On1Button2 On2Button3 On3Button4 On4Button5 On5Button6 On6Button7 On7Button8 On8Button9 On9Button. OnDe

14、cimalButton= OnEqualButton西安建筑科技大学大作业(论文)第 14 页 共 35 页2.3.6 为按钮添加代码西安建筑科技大学大作业(论文)第 15 页 共 35 页为数字键 0 添加代码如下:void CMyDlg:On0Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+0/count;count=count*10;else input_int=input_int*10+0;value=input_int+input_dec;_g

15、cvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);为数字键 1 填加代码如下:void CMyDlg:On1Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+1/count;count=count*10;else input_int=input_int*10+1;value=input_int+input_dec;_gcvt(value,10,buffer);m_Resu

16、ltEdit=(LPCTSTR)buffer;UpdateData(FALSE);其余数字键代码基本相同,本文省略。为小数点代码添加代码西安建筑科技大学大作业(论文)第 16 页 共 35 页在 OnInitDialog 中添加代码如下:m_Operatorbox.AddString(“乘“);m_Operatorbox.AddString(“除“);m_Operatorbox.AddString(“加“);m_Operatorbox.AddString(“减“);m_Operatorbox.AddString(“求倒数“);m_Operatorbox.AddString(“开方“);在函数

17、OnSelchangeOperatorList()代码如下:void CMyDlg:OnSelchangeOperatorList() / TODO: Add your control notification handler code hereinput1=input_int+input_dec;decimal=FALSE;input_int=0;input_dec=0;count=10;math_i=m_Operatorbox.GetCurSel();填加等于键的运算代码如下:void CMyDlg:OnEqualButton() / TODO: Add your control noti

18、fication handler code hereinput2=input_int+input_dec;decimal=FALSE;西安建筑科技大学大作业(论文)第 17 页 共 35 页input_int=0;input_dec=0;count=10;switch(math_i)case 2:value=input1+input2;break;case 3:value=input1-input2;break;case 0:value=input1*input2;break;case 1:value=input1/input2;break;case 5:value=1/input1;brea

19、k;case 4:value=sqrt(input1);break;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);2.3.7 保存完成的工程西安建筑科技大学大作业(论文)第 18 页 共 35 页2.3.8 编译与运行编译界面运行界面西安建筑科技大学大作业(论文)第 19 页 共 35 页3 编程实现3.1 核心代码本设计的简单计算器的全部如下:/ 数字键盘式计算器 Dlg.cpp : implementation file/#include “stdafx.h“#include “数字键盘式计算器.

20、h“#include “数字键盘式计算器 Dlg.h“#include #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifint math_i;double count=10;char buffer10;double input_int=0,input_dec=0;double input1=0,input2=0;double value=0;bool decimal=FALSE;/ CAboutDlg dialog used for App Aboutclass CAb

21、outDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA西安建筑科技大学大作业(论文)第 20 页 共 35 页/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/

22、Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg,

23、 CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg dialogCMyDlg:CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg:IDD, pParent)西安建筑科技大学大作业(论文)第 21 页 共 35 页/AFX_DATA_INIT(CMyDlg)m_ResultEdit = _T(“);/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent

24、 DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMyDlg: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_MAPBEGIN_MESSAGE_MAP(CMyDlg, CDi

25、alog)/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, On5Bu

26、tton)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, O

27、nEqualButton)/AFX_MSG_MAPEND_MESSAGE_MAP()西安建筑科技大学大作业(论文)第 22 页 共 35 页/ CMyDlg message handlersBOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add “About.“ menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);

28、pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE); / Set big iconSetIcon(m_hIcon, FALSE); / Set small icon/ TODO: Add extra initialization herem_Ope

29、ratorbox.AddString(“乘“);m_Operatorbox.AddString(“除“);m_Operatorbox.AddString(“加“);m_Operatorbox.AddString(“减“);m_Operatorbox.AddString(“求倒数“);西安建筑科技大学大作业(论文)第 23 页 共 35 页m_Operatorbox.AddString(“开方“);return TRUE; / return TRUE unless you set the focus to a controlvoid CMyDlg:OnSysCommand(UINT nID, L

30、PARAM lParam)if (nID dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CMyDlg:OnPaint()

31、if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(int x = (rect.Width() - cxIcon + 1) /

32、2;int y = (rect.Height() - cyIcon + 1) / 2;西安建筑科技大学大作业(论文)第 24 页 共 35 页/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CMyDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CMyD

33、lg:On0Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+0/count;count=count*10;else input_int=input_int*10+0;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On1Button() / TODO: Add your control n

34、otification handler code hereif(decimal)input_dec=input_dec+1/count;count=count*10;西安建筑科技大学大作业(论文)第 25 页 共 35 页else input_int=input_int*10+1;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On2Button() / TODO: Add your control notification h

35、andler code hereif(decimal)input_dec=input_dec+2/count;count=count*10;else input_int=input_int*10+2;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On3Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=inpu

36、t_dec+3/count;count=count*10;else input_int=input_int*10+3;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On4Button() / TODO: Add your control notification handler code here西安建筑科技大学大作业(论文)第 26 页 共 35 页if(decimal)input_dec=input_dec+4/count

37、;count=count*10;else input_int=input_int*10+4;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On5Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+5/count;count=count*10;else input_int=input_int*

38、10+5;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On6Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+6/count;count=count*10;else input_int=input_int*10+6;value=input_int+input_dec;_gcvt(valu

39、e,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);西安建筑科技大学大作业(论文)第 27 页 共 35 页void CMyDlg:On7Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+7/count;count=count*10;else input_int=input_int*10+7;value=input_int+input_dec;_gcvt(value,10,buffer);

40、m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:On8Button() / TODO: Add your control notification handler code hereif(decimal)input_dec=input_dec+8/count;count=count*10;else input_int=input_int*10+8;value=input_int+input_dec;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(F

41、ALSE);void CMyDlg:On9Button() if(decimal)input_dec=input_dec+9/count;count=count*10;else input_int=input_int*10+9;value=input_int+input_dec;_gcvt(value,10,buffer);西安建筑科技大学大作业(论文)第 28 页 共 35 页m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);void CMyDlg:OnDecimalButton() / TODO: Add your control notific

42、ation handler code heredecimal=TRUE;void CMyDlg:OnSelchangeOperatorList() / TODO: Add your control notification handler code hereinput1=input_int+input_dec;decimal=FALSE;input_int=0;input_dec=0;count=10;math_i=m_Operatorbox.GetCurSel();void CMyDlg:OnEqualButton() / TODO: Add your control notificatio

43、n handler code hereinput2=input_int+input_dec;decimal=FALSE;input_int=0;input_dec=0;count=10;switch(math_i)case 2:value=input1+input2;break;case 3:value=input1-input2;break;case 0:西安建筑科技大学大作业(论文)第 29 页 共 35 页value=input1*input2;break;case 1:value=input1/input2;break;case 5:value=1/input1;break;case 4:value=sqrt(input1);break;_gcvt(value,10,buffer);m_ResultEdit=(LPCTSTR)buffer;UpdateData(FALSE);3.2 运行结果西安建筑科技大学大作业(论文)第 30 页 共 35 页4 测试分析求倒数运算测试:开方运算测试:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 大学论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报