软件基础课程设计报告C语言计算器设计.docx
《软件基础课程设计报告C语言计算器设计.docx》由会员分享,可在线阅读,更多相关《软件基础课程设计报告C语言计算器设计.docx(29页珍藏版)》请在冰豆网上搜索。
软件基础课程设计报告C语言计算器设计
软件基础课程设计报告
一、需求分析
系统目标:
设计的计算器至少能够进行简单的四则运算和求倒数求反以及开方运算。
主体功能:
程序能实现:
加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。
另外还可以实现多种科学计算的功能,如:
三角函数的计算,弧度与角度间的转换,对数指数的计算等。
开发环境:
操作系统:
WindowsXP
编程环境:
Microsoft Visual C++ 6.0
二、功能说明
(1)包含的功能有:
加、减、乘、除运算,开方、求倒数、三角函数、弧度与角度间的转换、对数指数的计算等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)给对话框添加菜单。
(4)计算功能基本上是用系统内部函数。
(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(6)“CE”按钮可以清除所有已输入的数据从头计算,“Back”按钮可以实现退位功能。
(7)能够显示时间、日期。
三、详细设计
(1)流程图
(2)编辑资源
(3)效果图
四、程序附录
计算器Dlg.cpp:
#include"stdafx.h"
#include"计算器.h"
#include"计算器Dlg.h"
#include"math.h"
#include"FirstDlg.h"
#include
#definePI3.14;
#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()
/////////////////////////////////////////////////////////////////////////////
//CMyDlgdialog
CMyDlg:
:
CMyDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_result=0.0;
//}}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_EDIT1,m_EDIT);
DDX_Text(pDX,IDC_EDIT1,m_result);
//}}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_NUM0,OnNum0)
ON_BN_CLICKED(IDC_NUM1,OnNum1)
ON_BN_CLICKED(IDC_NUM2,OnNum2)
ON_BN_CLICKED(IDC_NUM3,OnNum3)
ON_BN_CLICKED(IDC_NUM4,OnNum4)
ON_BN_CLICKED(IDC_NUM5,OnNum5)
ON_BN_CLICKED(IDC_NUM6,OnNum6)
ON_BN_CLICKED(IDC_NUM7,OnNum7)
ON_BN_CLICKED(IDC_NUM8,OnNum8)
ON_BN_CLICKED(IDC_NUM9,OnNum9)
ON_BN_CLICKED(IDC_DOT,OnDot)
ON_BN_CLICKED(IDC_CE,OnCe)
ON_BN_CLICKED(IDC_jia,Onjia)
ON_BN_CLICKED(IDC_jian,Onjian)
ON_BN_CLICKED(IDC_cheng,Oncheng)
ON_BN_CLICKED(IDC_chu,Onchu)
ON_BN_CLICKED(IDC_dengyu,Ondengyu)
ON_BN_CLICKED(IDC_daoshu,Ondaoshu)
ON_BN_CLICKED(IDC_zhengfu,Onzhengfu)
ON_BN_CLICKED(IDC_BACKSPACE,OnBackspace)
ON_BN_CLICKED(IDC_Ln,OnLn)
ON_BN_CLICKED(IDC_log,Onlog)
ON_BN_CLICKED(IDC_RADIO2,OnRadio2)
ON_BN_CLICKED(IDC_RADIO1,OnRadio1)
ON_BN_CLICKED(IDC_sqrt,Onsqrt)
ON_BN_CLICKED(IDC_sin,Onsin)
ON_BN_CLICKED(IDC_cos,Oncos)
ON_BN_CLICKED(IDC_tan,Ontan)
ON_BN_CLICKED(IDC_pingfang,Onpingfang)
ON_BN_CLICKED(IDC_lifang,Onlifang)
ON_BN_CLICKED(IDC_mi,Onmi)
ON_BN_CLICKED(IDC_Exp,OnExp)
ON_BN_CLICKED(IDC_10demi,On10demi)
ON_BN_CLICKED(IDC_jiecheng,Onjiecheng)
ON_COMMAND(ID_TIME,OnTime)
ON_COMMAND(ID_DATE,OnDate)
ON_COMMAND(ID_EXIT,OnExit)
ON_COMMAND(ID_HELP,OnHelp)
//}}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
CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);
UpdateData(FALSE);
quan2=1;
dotflag=0;
numflag=0;
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMyDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCMyDlg:
:
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.
HCURSORCMyDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMyDlg:
:
OnNum0()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=0/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+0;
}
elsem_result=0;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum1()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=1/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+1;
}
elsem_result=1;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum2()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=2/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+2;
}
elsem_result=2;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum3()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=3/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+3;
}
elsem_result=3;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum4()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=4/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+4;
}
elsem_result=4;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum5()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=5/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+5;
}
elsem_result=5;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum6()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=6/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+6;
}
elsem_result=6;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum7()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=7/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+7;
}
elsem_result=7;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum8()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=8/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+8;
}
elsem_result=8;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnNum9()
{
UpdateData();
if(dotflag)
{
quan2*=10;
m_result+=9/(double)quan2;
}
else
{
if(numflag)
{
m_result=m_result*10+9;
}
elsem_result=9;
}
numflag=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnDot()
{
UpdateData();
dotflag=1;
m_result+=0.0;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnCe()
{
UpdateData();
m_EDIT.SetSel(0,-1);
m_EDIT.ReplaceSel("");
m_result=0;
num1=0;
num2=0;
numflag=0;
dotflag=0;
quan2=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
Onjia()
{
UpdateData();
num1=m_result;
cal='+';
numflag=0;
dotflag=0;
quan2=1;
}
voidCMyDlg:
:
Onjian()
{
UpdateData();
num1=m_result;
cal='-';
numflag=0;
dotflag=0;
quan2=1;
}
voidCMyDlg:
:
Oncheng()
{
UpdateData();
num1=m_result;
cal='*';
numflag=0;
dotflag=0;
quan2=1;
}
voidCMyDlg:
:
Onchu()
{
UpdateData();
num1=m_result;
cal='/';
numflag=0;
dotflag=0;
quan2=1;
}
voidCMyDlg:
:
Ondengyu()
{
UpdateData();
num2=m_result;
switch(cal)
{
case'+':
m_result=num1+num2;break;
case'-':
m_result=num1-num2;break;
case'*':
m_result=num1*num2;break;
case'/':
m_result=num1/num2;break;
case'x':
m_result=pow(num1,num2);break;
}
numflag=0;
dotflag=0;
quan2=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
Ondaoshu()
{
UpdateData();
m_result=1/m_result;
numflag=0;
dotflag=0;
quan2=1;
UpdateData(FALSE);
}
voidCMyDlg:
:
Onzhengfu()
{
UpdateData();
m_result=0-m_result;
UpdateData(FALSE);
}
voidCMyDlg:
:
OnBackspace()
{
UpdateData();
staticintdotquan=quan2;
longtemp;
if(dotflag&&numflag)
{
if(dotquan>=10)
{
temp=(long)(m_result*dotquan);
m_result=(double)(temp/10);
dotquan/=10;
m_result=m_result/dotquan;
}
}
else
{
//UpdateData();
if(numflag&&m_result)
{
m_result=(long)m_result/10;
}
}
UpdateData(FALSE);
}
voidCMyDlg:
:
OnLn()
{
UpdateData();
m_result=log(m_result);
numflag=0