课程设计计算器新.docx

上传人:b****9 文档编号:25321846 上传时间:2023-06-07 格式:DOCX 页数:20 大小:180.04KB
下载 相关 举报
课程设计计算器新.docx_第1页
第1页 / 共20页
课程设计计算器新.docx_第2页
第2页 / 共20页
课程设计计算器新.docx_第3页
第3页 / 共20页
课程设计计算器新.docx_第4页
第4页 / 共20页
课程设计计算器新.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

课程设计计算器新.docx

《课程设计计算器新.docx》由会员分享,可在线阅读,更多相关《课程设计计算器新.docx(20页珍藏版)》请在冰豆网上搜索。

课程设计计算器新.docx

课程设计计算器新

课程设计报告

 

课程名称:

面向对象程序设计C++

设计题目:

计算器

专业:

计算机科学与技术

姓名:

学号:

指导教师:

李晓虹

 

2016年1月1日

 

(1)系统需求分析

编写一个程序来实现算术计算器。

通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、-、*、/、等运算符号),然后将其信息存入文件中。

输入一个算术计算式,就在屏幕上显示结果。

(2)总体设计

是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算。

A 创建一个基于对话框的应用程序。

 

B 利用资源编辑器编辑对话框资源,及设计计算器界面并修改对话

框各按钮的ID属性和Caption属性。

 

C 利用ClassWizard为各按钮添加消息映射(代码在下面详细介绍)。

 D 设置对话框文本背景颜色。

(3)详细设计

打开MicrosoftVisualC++6.0,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名计算器及其所在位置,点击确定,如图1-1

图1-1

将弹出MFCAppWizard-step1对话框,选择基本对话框,点击完成,如图1-2

图1-2

这样,MFCAppWizard就建立了一个基于对话窗口的程序框架,如图1-3

图1-3

界面设计

1、创建控件

ResoureView选项卡中打开Dialog资源组,双击IDD_main,在右边的窗口中显示出待编辑的对话框。

开始摆放控件,包括编辑框和按钮的创建。

按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。

1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。

在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,在该对话框中输入ID属性。

如图2-1

图1-4

2)Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。

在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出PushButton属性对话框,在该对话框中输入控件的ID值和标题属性。

如图1-5

图1-5

按照上面的操作过程编辑其他按钮和编辑框等对象的属性。

如表2-1

各按钮和编辑框等对象的属性

对象

ID

标题或说明

编辑框

IDC_EDIT

结果显示

按钮

IDC_0

0

按钮

IDC_1

1

按钮

IDC_2

2

按钮

IDC_3

3

按钮

IDC_4

4

按钮

IDC_5

5

按钮

IDC_6

6

按钮

IDC_7

7

按钮

IDC_8

8

按钮

IDC_9

9

按钮

IDC_CHANGE

+/-

按钮

IDC_DOT

.

按钮

IDC_PLUSS

+

按钮

IDC_SUB

-

按钮

IDC_MUL

*

按钮

IDC_DIV

/

按钮

IDC_SQRT

Sqrt

按钮

IDC_1CX

1/x

按钮

IDC_BFH

%

按钮

IDC_C

C

按钮

IDC_CE

CE

按钮

IDC_BACKSPACE

Backspace

按钮

IDC_STATIC

按钮

IDC_MC

MC

按钮

IDC_MR

MR

按钮

IDC_MS

MS

按钮

IDC_MPLUSS

M+

表2-1

完成后界面如图1-6

图1-6

2、连接变量和代码

1)给编辑框连接变量。

在编辑框上单击鼠标右键,在弹出菜单中选择ClassWizard菜单项,弹出MFCClassWizard对话框,选择MemberVariables选项卡

3、菜单的设计

选择插入/资源命令,将显示插入资源对话框。

选择Menu,点击新建即可。

如图1-7

图1-7

ResoureView选项卡中打开Menu资源组,双击IDR_MENU,如图1-8

图1-8

最终的得到的界面如图1-9

图1-9

(4)系统调试

加减乘除均能正常运行当除数为0时如图1-10

图1-10

证明错误提示功能实现正常。

计算器功能基本实现。

(5)结果分析

①在Windows可视化界面中,消息映射函数十分重要,每个按钮必须与与之对应的消息函数对应,同时,函数的变量也应该在MFCClassWizard里设置准确,否则会影响最终的调试。

②在设置编辑框的变量时要注意与程序中的的变量名保持一致,这样才能保证键入的数值能正确显示在程序框中。

③在初始化列表框的过程中,添加Onintdialog中的代码时要注意各个操作项的顺序,否则会造成操作项的反串

④给对应按键加函数时注意添加到源文件中正确的位置,否则会造成程序产生错误。

(6)总结

通过计算器程序的设计,使我对VC++MFC有了一定了解,使用MFC类库可以大大简化程序的设计,为我们设计程序提供了很大的方便。

我们通过查阅各种介绍MFC编程的书籍,最后学会了从利用MFC的应用程序向导(AppWizard)创建一个应用程序,再到添加控件,再到消息函数的创建,再到控件代码的编辑,最后完成程序。

在程序设计中遇到困难时,我和同学们一起讨论,解决问题,遇到实在是想不通的地方,通过老师的指点答疑,最终共同完成了程序。

在整个过程中,也增进了我发现问题和解决问题的能力。

附源代码

Main.cpp

//计算器.cpp:

Definestheentrypointfortheapplication.

//

#include"stdafx.h"

#include"resource.h"

#include"MainDlg.h"

#include

intAPIENTRYWinMain(HINSTANCEhInstance,

HINSTANCEhPrevInstance,

LPSTRlpCmdLine,

intnCmdShow)

{

//EnableIPAddress、Calendar.etc

InitCommonControls();

DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,Main_Proc);

return0;

}

MainDlg.cpp

#include"stdafx.h"

#include

#include

#include"resource.h"

#include"MainDlg.h"

#include

TCHARtext[50];

TCHARopt='c';

BOOLhave=FALSE,enable=TRUE;

doublenum1=0,num2=0;

BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);

HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);

HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);

}

returnFALSE;

}

BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam)

{

memset(text,'\0',sizeof(TCHAR)*50);

SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."));

returnTRUE;

}

voidtrim()

{

inti=0,j=0;

for(i=0;i

{

if(text[i]!

='\0'&&text[i]!

='0')

{

j=i;

}

}

for(j=j+1;j

{

text[j]='\0';

}

}

voidAppendText(HWNDhwnd,TCHARc)

{

if(lstrlen(text)==1&&text[0]=='0'&&c!

='.')

{

text[0]=c;

}

else

{

text[lstrlen(text)]=c;

}

SetDlgItemText(hwnd,IDC_EDIT,text);

}

voidresult(HWNDhwnd)

{

switch(opt)

{

case'+':

num2=num2+num1;

break;

case'-':

num2=num2-num1;

break;

case'*':

num2=num1*num2;

break;

case'/':

if(num1==0)

{

SetDlgItemText(hwnd,IDC_EDIT,TEXT("除数不能为零."));

enable=FALSE;

return;

}

else

{

num2=num2/num1;

}

break;

default:

num2=num2+num1;

break;

}

num1=0;

sprintf(text,TEXT("%f"),num2);

trim();

SetDlgItemText(hwnd,IDC_EDIT,text);

}

voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)

{

TCHARc[2];

switch(id)

{

caseIDC_0:

caseIDC_1:

caseIDC_2:

caseIDC_3:

caseIDC_4:

caseIDC_5:

caseIDC_6:

caseIDC_7:

caseIDC_8:

caseIDC_9:

{

if(enable)

{

GetDlgItemText(hwnd,id,c,2);

AppendText(hwnd,c[0]);

}

}

break;

caseIDC_DOT:

{

if(!

have&&enable)

{

have=TRUE;

if(lstrlen(text)==0)

{

AppendText(hwnd,'0');

}

AppendText(hwnd,'.');

}

}

break;

caseIDC_PLUSS:

caseIDC_SUB:

caseIDC_MUL:

caseIDC_DIV:

{

if(enable)

{

if(lstrlen(text)!

=0)

{

num1=atof(text);

result(hwnd);

GetDlgItemText(hwnd,id,c,2);

opt=c[0];

memset(text,'\0',sizeof(TCHAR)*50);

have=FALSE;

}

else

{

GetDlgItemText(hwnd,id,c,2);

opt=c[0];

}

}

}

break;

caseIDC_EQUAL:

{

if(lstrlen(text)!

=0&&enable)

{

num1=atof(text);

result(hwnd);

memset(text,'\0',sizeof(TCHAR)*50);

have=FALSE;

}

}

break;

caseIDC_C:

{

memset(text,'\0',sizeof(TCHAR)*50);

num1=0;

num2=0;

have=FALSE;

enable=TRUE;

opt='c';

SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."));

}

break;

caseIDC_CE:

{

memset(text,'\0',sizeof(TCHAR)*50);

num1=0;

have=FALSE;

enable=TRUE;

SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."));

}

break;

caseIDC_CHANGE:

{

if(strlen(text)!

=0&&enable)

{

num1=atof(text);

num1=-num1;

sprintf(text,TEXT("%f"),num1);

trim();

SetDlgItemText(hwnd,IDC_EDIT,text);

}

}

break;

caseIDC_1CX:

{

if(enable)

{

num1=atof(text);

if(num1==0)

{

SetDlgItemText(hwnd,IDC_EDIT,TEXT("除数不能为零."));

enable=FALSE;

}

else

{

num1=1.0/num1;

sprintf(text,TEXT("%f"),num1);

trim();

SetDlgItemText(hwnd,IDC_EDIT,text);

}

}

}

break;

caseIDC_BFH:

{

}

break;

caseIDC_SQRT:

{

if(enable)

{

num1=atof(text);

if(num1<0)

{

SetDlgItemText(hwnd,IDC_EDIT,TEXT("被开方数不能为负数."));

enable=FALSE;

}

else

{

num1=sqrt(num1);

sprintf(text,TEXT("%f"),num1);

trim();

SetDlgItemText(hwnd,IDC_EDIT,text);

}

}

}

break;

caseIDC_BACKSPACE:

{

if(lstrlen(text)>0&&enable)

{

text[lstrlen(text)-1]='\0';

if(lstrlen(text)==0)

{

SetDlgItemText(hwnd,IDC_EDIT,TEXT("0."));

}

else

{

SetDlgItemText(hwnd,IDC_EDIT,text);

}

}

}

break;

caseIDC_MC:

{

}

break;

caseIDC_MR:

{

}

break;

caseIDC_MS:

{

}

break;

caseIDC_MPLUSS:

{

}

break;

caseID_ABOUT:

{

MessageBox(hwnd,TEXT("制作人:

张良莉\t\t\n\nQQ:

1365156880"),TEXT("关于计算器"),MB_OK);

}

break;

caseID_HP:

{

system("startC:

\\windows\\help\\calc.chm");

}

break;

default:

break;

}

}

voidMain_OnClose(HWNDhwnd)

{

EndDialog(hwnd,0);

}

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1