编程实验报告科学计算器设计与实现.docx

上传人:b****2 文档编号:11765403 上传时间:2023-06-02 格式:DOCX 页数:31 大小:102.89KB
下载 相关 举报
编程实验报告科学计算器设计与实现.docx_第1页
第1页 / 共31页
编程实验报告科学计算器设计与实现.docx_第2页
第2页 / 共31页
编程实验报告科学计算器设计与实现.docx_第3页
第3页 / 共31页
编程实验报告科学计算器设计与实现.docx_第4页
第4页 / 共31页
编程实验报告科学计算器设计与实现.docx_第5页
第5页 / 共31页
编程实验报告科学计算器设计与实现.docx_第6页
第6页 / 共31页
编程实验报告科学计算器设计与实现.docx_第7页
第7页 / 共31页
编程实验报告科学计算器设计与实现.docx_第8页
第8页 / 共31页
编程实验报告科学计算器设计与实现.docx_第9页
第9页 / 共31页
编程实验报告科学计算器设计与实现.docx_第10页
第10页 / 共31页
编程实验报告科学计算器设计与实现.docx_第11页
第11页 / 共31页
编程实验报告科学计算器设计与实现.docx_第12页
第12页 / 共31页
编程实验报告科学计算器设计与实现.docx_第13页
第13页 / 共31页
编程实验报告科学计算器设计与实现.docx_第14页
第14页 / 共31页
编程实验报告科学计算器设计与实现.docx_第15页
第15页 / 共31页
编程实验报告科学计算器设计与实现.docx_第16页
第16页 / 共31页
编程实验报告科学计算器设计与实现.docx_第17页
第17页 / 共31页
编程实验报告科学计算器设计与实现.docx_第18页
第18页 / 共31页
编程实验报告科学计算器设计与实现.docx_第19页
第19页 / 共31页
编程实验报告科学计算器设计与实现.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编程实验报告科学计算器设计与实现.docx

《编程实验报告科学计算器设计与实现.docx》由会员分享,可在线阅读,更多相关《编程实验报告科学计算器设计与实现.docx(31页珍藏版)》请在冰点文库上搜索。

编程实验报告科学计算器设计与实现.docx

编程实验报告科学计算器设计与实现

 

《可视化程序编程环境》

实验报告

 

项目名称科学计算器设计与实现

学院计算机学院

专业班级计算机科学与技术0804

 

2010年1月9日

 

一、设计任务与要求

使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在VisualC++6环境下进行可视化程序设计技术。

通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。

二、需求分析

1.功能需求(功能划分、功能描述)

1、二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算

2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运行

3、以角度、弧度两种方式实现上述部分函数

4、具备历史计算的记忆功能

5、对不正确的表达式能指出其错误原因

2.运行需求(用户界面、人机接口、故障处理)

根据计算器要实现的相应功能来布局,分为基本功能区,特殊函数区,进制转换区,度数转换区和输出显示区五大基本模块。

三、实验方案

1、总体设计框图

 

2、计算器平面图

3.基本功能区的设计

在这个模块中主要把0到F各个按键按下去后在输出显示区上显示出来

列举一例:

voidCaysf55Dlg:

:

OnBnClickedButton3()

{if(zuizong=="0")m_str="";

m_str+="1";

UpdateData(0);

if(zuizong=="0")zuizong="";

zuizong+="1";//TODO:

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

}

接下来从输出显示区获得字符串,通过运算符的相应按键处理:

列举加法:

voidCaysf55Dlg:

:

OnBnClickedButton19()/*加法运算*/

{doublezan;

if(m_str=="")MessageBox(L"没有运算数");

elseif(y==1||M==1)MessageBox(L"只能输入数值");

elseif(m_str.GetAt(m_str.GetLength()-1)=='+'||m_str.GetAt(m_str.GetLength()-1)=='-'||m_str.GetAt(m_str.GetLength()-1)=='*'||m_str.GetAt(m_str.GetLength()-1)=='/')

MessageBox(L"不能连续输入运算符!

");

else{{m_str+="+";UpdateData(0);point=0;

if(jinzhi.GetCurSel()==0)zan=S2toN(zuizong);

elseif(jinzhi.GetCurSel()==1)zan=S8toN(zuizong);

elseif(jinzhi.GetCurSel()==2)zan=StoN(zuizong);

elseif(jinzhi.GetCurSel()==3)zan=S16toN(zuizong);}

if(Ds==0&&Ms==0)

{if(As==0&&Ss==0){Ap1=zan;As=1;zuizong="";}

elseif(As==0&&Ss==1){Sp2=zan;Ss=2;jisuan();Ap1=result;As=1;zuizong="";}

elseif(As==1&&Ss==0){Ap2=zan;As=2;jisuan();Ap1=result;As=1;zuizong="";}

}

if(Ms==1){if(As==0&&Ss==0)

{Mp2=zan;Ms=2;jisuan();Ap1=result;As=1;zuizong="";}

elseif(As==1)

{Mp2=zan;Ms=2;jisuan();Ap2=result;As=2;jisuan();Ap1=result;As=1;zuizong="";}

elseif(Ss==1)

{Mp2=zan;Ms=2;jisuan();Sp2=result;Ss=2;jisuan();Ap1=result;As=1;zuizong="";}}

if(Ds==1){if(As==0&&Ss==0)

{Dp2=zan;Ds=2;jisuan();Ap1=result;As=1;zuizong="";}

elseif(As==1)

{Dp2=zan;Ds=2;jisuan();Ap2=result;As=2;jisuan();Ap1=result;As=1;zuizong="";}

elseif(Ss==1)

{Dp2=zan;Ds=2;jisuan();Sp2=result;Ss=2;jisuan();Ap1=result;As=1;zuizong="";}}

}

//TODO:

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

}

4.特殊函数区的设计

特殊函数区各个按键的功能实现主要是通过调用系统函数来实现的

举一例如sin:

voidCaysf55Dlg:

:

OnBnClickedButton27()/*sin*/

{doublep;

if(jiaohu==2)MessageBox(L"请先选择角度或弧度!

");

elseif(m_str==""&&jiaohu==1)MessageBox(L"请输入角度!

");

elseif(m_str==""&&jiaohu==0)MessageBox(L"请输入弧度!

");

else{OnBnClickedButton34();

if(jiaohu==1){if(zhengfan.GetCheck()==1){p=asin(result);p=p*180/3.141592653;}

elseif(zhengfan.GetCheck()==0){p=sin(result*3.141592653/180);}

}

if(jiaohu==0){if(zhengfan.GetCheck()==1){p=asin(result);}

elseif(zhengfan.GetCheck()==0){p=sin(result);}

}

m_str=NtoS(p);zuizong=NtoS(p);UpdateData(0);point=1;//TODO:

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

}

}

其他函数cos,tan,cot,arcsin,arccos,arctan,log,ln实现方法相类似。

Pi函数则通过对Pi置数3.141592653来实现。

4.进制转换区的设计:

在进制转换这个模块中主要涉及二进制,八进制,十进制跟十六进制之间的转换,并相应隐藏基本功能区中相应按键。

举二进制为例:

voidCaysf55Dlg:

:

OnCbnSelchangeCombo2()

{longk;

inta=jinzhi.GetCurSel();

if(As!

=0||Ss!

=0||Ms!

=0||Ds!

=0){m_str="";zuizong="";}

if(a==0){if(m_str!

="")

{if(ya==1){k=S8toN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther

(2);}

elseif(ya==2){k=StoN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther

(2);}

elseif(ya==3){k=S16toN(m_str);m_str=IntNtoS(k);m_str=OnDecToOther

(2);}}

kz1.EnableWindow(true);

kz2.EnableWindow(false);

kz3.EnableWindow(false);

kz4.EnableWindow(false);

kz5.EnableWindow(false);

kz6.EnableWindow(false);

kz7.EnableWindow(false);

kz8.EnableWindow(false);

kz9.EnableWindow(false);

kz0.EnableWindow(true);

kzA.EnableWindow(false);

kzB.EnableWindow(false);

kzC.EnableWindow(false);

kzD.EnableWindow(false);

kzE.EnableWindow(false);

kzF.EnableWindow(false);

kzpi.EnableWindow(false);

kzd.EnableWindow(false);

kzdao.EnableWindow(false);

kzsin.EnableWindow(false);

kzcos.EnableWindow(false);

kztan.EnableWindow(false);

kzcot.EnableWindow(false);

kzx2.EnableWindow(true);

kzx3.EnableWindow(true);

kzxy.EnableWindow(true);

kzlog.EnableWindow(false);

kzln.EnableWindow(false);ya=0;UpdateData(0);zuizong=m_str;}}

longCaysf55Dlg:

:

S2toN(CStringstr)

{//将二进制CString类型字符串转化为十进制数字

String^newStr=gcnewString(str);

longd=Convert:

:

ToInt32(newStr,2);

returnd;

}

其他进制按键设置及类型转换相类似。

5.度数转换区的设计:

这个模块主要是为特殊函数区服务的,即是以度数来转换还是弧度来转换。

通过在特殊函数中判断选择了哪种度数来进行相应计算。

6.输出显示区的设计:

这个模块是用来实现数据输出的,通过设置一个变量来实现显示功能。

 

四.程序清单

#include"stdafx.h"

#include"123asdf.h"

#include"123asdfDlg.h"

#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//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()

/////////////////////////////////////////////////////////////////////////////

//CMy123asdfDlgdialog

CMyMMDlg:

:

CMyMMDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CMyMMDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CMy123asdfDlg)

//NOTE:

theClassWizardwilladdmemberinitializationhere

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

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

//----------------------------------------------

//数据在构造函数初始化

m_lastsystem=10;

m_result=m_num1=m_num2=0;

BOOLm_deg_flag=true;

m_str="";

m_operator=-1;

m_canclean=false;

m_memorysave=="";

}

voidCMyMMDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMy123asdfDlg)

//NOTE:

theClassWizardwilladdDDXandDDVcallshere

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMyMMDlg,CDialog)

//{{AFX_MSG_MAP(CMyMMDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_COMMAND_RANGE(IDC_BTN_0,IDC_BTN_MA,Buttons)

ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit)

ON_BN_CLICKED(IDC_DEC,OnDec)

ON_BN_CLICKED(IDC_BIN,OnBin)

ON_BN_CLICKED(IDC_HEX,OnHex)

ON_BN_CLICKED(IDC_OCT,OnOct)

ON_BN_CLICKED(IDC_RAD,OnRad)

ON_BN_CLICKED(IDC_DEG,OnDeg)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CMy123asdfDlgmessagehandlers

BOOLCMyMMDlg:

:

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

//CButton*p;

CButton*p=(CButton*)GetDlgItem(IDC_DEC);

p->SetCheck

(1);

p=(CButton*)GetDlgItem(IDC_DEG);

p->SetCheck

(1);

SetDlgItemText(IDC_EDIT1,"0.");

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

voidCMyMMDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow

//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

//thisisautomaticallydoneforyoubytheframework.

voidCMyMMDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

//Centericoninclientrectangle

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//Drawtheicon

dc.DrawIcon(x,y,m_hIcon);

}

else

{

CDialog:

:

OnPaint();

}

}

//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags

//theminimizedwindow.

HCURSORCMyMMDlg:

:

OnQueryDragIcon()

{

return(HCURSOR)m_hIcon;

}

//读入数字

voidCMyMMDlg:

:

Read(longdouble&num)

{

CStringtemp;

GetDlgItemText(IDC_EDIT1,temp);

char*endp;

//对上一次是进制数的处理

if(m_lastsystem==10)

{

num=(atof(temp));

}

elseif(m_lastsystem==16)

{

num=strtol(temp,&endp,16);

}

elseif(m_lastsystem==2)

{

num=strtol(temp,&endp,2);

}

elseif(m_lastsystem==8)

{

num=strtol(temp,&endp,8);

}

}

//将结果写在屏幕上

voidCMyMMDlg:

:

Write()

{

CStringtemp;

charbuffer[1024];

if(m_lastsystem==10)

{

if(m_result-(int)m_result)

temp.Format(_T("%f"),m_result);

else

temp.Format(_T("%d"),(int)m_result);

}

elseif(m_lastsystem==16)

{

_itoa((int)m_result,buffer,16);

temp.Format("%s",buffer);

}

elseif(m_lastsystem=

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2