河南机电高等专科学校
学生课程设计报告
实验课程名称 C++语言程序设计教程与实验
实验项目名称 计算器
系、部计科系 年级2013级专业班级软件132(对口)
学生姓名 贾永翔 学 号 1310124
实验时间 2013年6月16日-6月19日
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。
实现一个简单计算器。其类似于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 各按钮和编辑框等对象的属性
完成后界面如图所示。
计算器界面
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 && -1==cs_Num[0].Find('.'))
{
CString temp;
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",&num);
temp.Format("%g",num);
//AfxMessageBox(temp);
SetDlgItemText(IDC_EDIT_SHOW,b_Hasport?temp:temp+".");
}
经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。
认识到不能马虎经常犯犯小错误。要提高自己找错纠错能力,通常错误总是那几种,多练习就熟练了。
要善于查找资料提高自己的资料查询能力,要善于利用网络来获得知识,获得帮助。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的头脑来完成它了。
要善于思考。程序中有些实现难点和最初完成程序时免不了的许多不足就需要自己根据代码认真思考来解决。只有这样才能纠正程序的不足并使其更加人性化。
华东交通大学课程设计华东交通大学课程设计课程设计题目计算器设计课程题目年级专业学号姓名组员指导教师Java程序设计信息一班1华东交…
计算机综合课程设计报告小组编号06课题名称趣味贪吃蛇小组成员20xx年10月计算机综合课程设计报告目录目录11项目背景112系统目…
MFC计算器课程设计报告计算机应用3班黄锦湫罗洁饶益指导老师蒋鹏20xx315一题目利用MFC框架编写简易计算器要求使用MFC框架…
计算机网络课程设计报告一.课程设计的题目、目的及要求.......................................…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
附表2C或C语言课程设计总结报告源代码学生通讯录管理系统能够实现对通讯录的内容进行创建显示查询删除以及修改等功能includelt…
C课程设计报告题目小学算术运算测试设计者刘星刘俊良凌锋专业班级计算机网络0901班学号343337指导教师任长安所属系部计算机与信…
《C语言程序设计》课程设计报告专业:班级:姓名:指导教师:二零##年十二月二十六日目录一、设计题目2二、设计目的2三、设计内容23…
C语言课程设计报告一问题描述题目七学生成绩管理系统设计学生成绩信息包括学期学号班别姓名四门课程成绩语文数学英语和计算机等主要功能1…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)计算机实践过程与体会题目学生姓名指导教师学院专业班级学生学号祁彦翔…