C++简单计算器课程设计报告

C++简单计算器课程设计报告本文简介:学生课程设计报告实验课程名称C++语言程序设计教程与实验实验项目名称计算器系、部计科系年级2013级专业班级软件132(对口)学生姓名学号实验时间2013年6月16日-6月19日成绩教师签名1课程设计的目的在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现
C++简单计算器课程设计报告本文内容:
学
生
课
程
设
计
报
告
实验课程名称
C++语言程序设计教程与实验
实验项目名称
计算器
系、部
计科系
年级2013级
专业班级
软件132(对口)
学
生
姓
名
学
号
实
验
时
间
2013年6月16日-6月19日
成
绩
教师签名
1
课程设计的目的
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
2
课程设计的任务
实现一个简单计算器。其类似于Windows附件中自带的计算器。
注:
1/x
:求x分之1
Sqrt:求当前数的平方根
AC
:清除所有运行数据
C
:清除文本框内数据
+/-
:正负号
3
流程图
软件设计
1、创建控件
在图5所示的Resoure
View选项卡中打开Dialog资源组,双击IDD_
09107xuzhujie_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。
1)在图5中Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit属性对话框,如图所示,在该对话框中输入ID属性。
Edit属性对话框
2)在图3中Controls的“Button”按钮上单击鼠标左键,在对话框上的合适的位置上按下鼠标左键并拖动鼠标画出一个大小合适的下压式按钮。在按钮上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时也弹出Push
Button属性对话框,如图所示,在该对话框中输入控件的ID值和标题属性。
Push
Button属性
按照上面的操作过程编辑其他按钮和编辑框等对象的属性。
表1
各按钮和编辑框等对象的属性
对象
ID
标题或说明
编辑框
IDC_xianshi
结果显示
按钮
IDC_BUTTON0
0
按钮
IDC_BUTTON1
1
按钮
IDC_BUTTON2
2
按钮
IDC_BUTTON3
3
按钮
IDC_BUTTON4
4
按钮
IDC_BUTTON5
5
按钮
IDC_BUTTON6
6
按钮
IDC_BUTTON7
7
按钮
IDC_BUTTON8
8
按钮
IDC_BUTTON9
9
按钮
IDC_change
+/-
按钮
IDC_point
.
按钮
IDC_add
+
按钮
IDC_difference
-
按钮
IDC_multiply
按钮
IDC_devide
/
按钮
IDC_sqrt
sqrt
按钮
IDC_daoshu
1/x
按钮
IDC_Onequal
=
按钮
IDC_backspace
Backspace
按钮
IDC_Onclear
C
完成后界面如图所示。
计算器界面
源代码
void
CCalculatorDemoDlg::OnBtnNo1()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(1);
}
void
CCalculatorDemoDlg::OnBtnNo2()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(2);
}
void
CCalculatorDemoDlg::OnBtnNo3()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(3);
}
void
CCalculatorDemoDlg::OnBtnNo4()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(4);
}
void
CCalculatorDemoDlg::OnBtnNo5()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(5);
}
void
CCalculatorDemoDlg::OnBtnNo6()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(6);
}
void
CCalculatorDemoDlg::OnBtnNo7()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(7);
}
void
CCalculatorDemoDlg::OnBtnNo8()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(8);
}
void
CCalculatorDemoDlg::OnBtnNo9()
{
//
TODO:
Add
your
control
notification
handler
code
here
PutIntoNum(9);
}
void
CCalculatorDemoDlg::OnBtnNo0()
{
//
TODO:
Add
your
control
notification
handler
code
here
//
TODO:
Add
your
control
notification
handler
code
here
//如果第一次输入数字
if
(cs_Num[m_i]==“0“)
{
return
;
}
cs_Num[m_i]+=“0“;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if
(!b_Hasport)
{
CString
temp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=“.“;
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
}
void
CCalculatorDemoDlg::OnBtnPort()
{
//已有小数点时
if
(b_Hasport)
{
return;
}
//无小数点
cs_Num[m_i]+=“.“;
b_Hasport=TRUE;
b_Start=TRUE;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
}
//四则运算符
void
CCalculatorDemoDlg::OnBtnAdd()
{
if
(!b_Start)
{
return;
}
if
(en_LastSignl==en_none)
{
en_LastSignl=en_add;
}
RunOperation(en_LastSignl);
en_LastSignl=en_add;
}
void
CCalculatorDemoDlg::OnBtnSub()
{
if
(!b_Start)
{
return;
}
//
TODO:
Add
your
control
notification
handler
code
here
if
(en_LastSignl==en_none)
{
en_LastSignl=en_sub;
}
RunOperation(en_LastSignl);
en_LastSignl=en_sub;
}
void
CCalculatorDemoDlg::OnBtnMul()
{
if
(!b_Start)
{
return;
}
if
(en_LastSignl==en_none)
{
cs_Num[1]=“1“;
en_LastSignl=en_mul;
}
RunOperation(en_LastSignl);
en_LastSignl=en_mul;
}
void
CCalculatorDemoDlg::OnBtnDiv()
{
if
(!b_Start)
{
return;
}
if
(en_LastSignl==en_none)
{
cs_Num[1]=“1“;
en_LastSignl=en_div;
}
RunOperation(en_LastSignl);
en_LastSignl=en_div;
}
void
CCalculatorDemoDlg::OnBtnEquel()
{
//
TODO:
Add
your
control
notification
handler
code
here
RunOperation(en_LastSignl);
//****特殊****
en_LastSignl=en_none;
b_Start=TRUE;
}
BOOL
CCalculatorDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//
TODO:
Add
extra
initialization
here
InitAllDate();
return
TRUE;
//
return
TRUE
unless
you
set
the
focus
to
a
control
//
EXCEPTION:
OCX
Property
Pages
should
return
FALSE
}
void
CCalculatorDemoDlg::PutIntoNum(int
n)
{
CString
tem_i;
tem_i.Format(“%d“,n);
CString
temp;
//第一次输入
if
(!b_Start)
{
cs_Num[m_i]=tem_i;
b_Start=TRUE;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if
(!b_Hasport)
{
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=“.“;
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
return;
}
cs_Num[m_i]+=tem_i;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]);
if
(!b_Hasport)
{
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=“.“;
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
}
void
CCalculatorDemoDlg::InitAllDate()
{
en_LastSignl=en_none;
b_Hasport=FALSE;
b_Start=FALSE;
b_Hasmul=FALSE;
b_Hasdiv=FALSE;
cs_Num[0]=“0“;
cs_Num[1]=“0“;
m_i=0;
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[m_i]+“.“);
}
void
CCalculatorDemoDlg::RunOperation(eum_signl
e_signl)
{
//
TODO:
Add
your
control
notification
handler
code
here
double
sum;
double
nAdd1;
double
nAdd2;
nAdd1=atof(cs_Num[0]);
nAdd2=atof(cs_Num[1]);
//sum=nAdd1+nAdd2;
switch(e_signl)
{
case
en_add:
sum=nAdd1+nAdd2;
break;
case
en_sub:
sum=nAdd1-nAdd2;
break;
case
en_mul:
sum=nAdd1*nAdd2;
break;
case
en_div:
sum=nAdd1/nAdd2;
break;
}
cs_Num[0].Format(“%g“,sum);
SetDlgItemText(IDC_EDIT_SHOW,cs_Num[0]);
if
(!b_Hasport
GetDlgItemText(IDC_EDIT_SHOW,temp);
temp+=“.“;
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
m_i
=
1;
b_Hasport=FALSE;
b_Start=FALSE;
cs_Num[m_i]=“0“;
}
//void
CCalculatorDemoDlg::RunOperation(eum_signl
en_signl)
//{
//}
void
CCalculatorDemoDlg::OnBtnC()
{
//
TODO:
Add
your
control
notification
handler
code
here
InitAllDate();
}
//
根号
void
CCalculatorDemoDlg::OnBtnSqrt()
{
//
TODO:
Add
your
control
notification
handler
code
here
if
(!b_Start)
{
return;
}
double
num;
CString
temp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
num=atof(temp);
num=sqrt(num);
temp.Format(“%lf“,num);
if
(temp.Find(
.
)==-1)
SetDlgItemText(IDC_EDIT_SHOW,temp+“.“);
else
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
//
%
void
CCalculatorDemoDlg::OnBtnPercent()
{
//
TODO:
Add
your
control
notification
handler
code
here
}
//
1/x
void
CCalculatorDemoDlg::OnBtnDown()
{
//
TODO:
Add
your
control
notification
handler
code
here
if
(!b_Start)
{
return;
}
double
num;
CString
temp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
num=atof(temp);
num=1/num;
temp.Format(“%lf“,num);
if
(temp.Find(
.
)==-1)
SetDlgItemText(IDC_EDIT_SHOW,temp+“.“);
else
SetDlgItemText(IDC_EDIT_SHOW,temp);
}
//
+-
void
CCalculatorDemoDlg::OnBtnNequa()
{
//
TODO:
Add
your
control
notification
handler
code
here
if
(!b_Start)
{
return;
}
double
num;
CString
temp;
GetDlgItemText(IDC_EDIT_SHOW,temp);
num=atof(temp);
num=0-num;
SetDlgItemText(IDC_EDIT_SHOW,b_Hasport
?
temp:temp+“.“);
}
//
退格键
void
CCalculatorDemoDlg::OnBtnSpace()
{
//
TODO:
Add
your
control
notification
handler
code
here
if
(!b_Start)
{
return;
}
double
num;
CString
temp;
int
len;
CHAR
temp_ch[32];
GetDlgItemText(IDC_EDIT_SHOW,temp);
//AfxMessageBox(temp);
num=atof(temp);
sprintf(temp_ch,“%g“,num);
num=0;
//AfxMessageBox(temp_ch);
len=strlen(temp_ch);
int
te_i=len-1;
if(temp_ch[te_i]==
.
)
te_i-=1,b_Hasport=FALSE;
temp_ch[te_i]=
\0
;
//////////////////////////////////////////////////////////////////////////
//AfxMessageBox(temp_ch);
if
(strlen(temp_ch)==0)
{
temp_ch[0]=
0
;
temp_ch[1]=
\0
;
}
//////////////////////////////////////////////////////////////////////////
sscanf(temp_ch,“%lf“,temp.Format(“%g“,num);
//AfxMessageBox(temp);
SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+“.“);
}
5
结论与心得体会
经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。
认识到不能马虎经常犯犯小错误。要提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。
16
