基于VC++程序的设计计算器和菜单栏课程设计.docx
《基于VC++程序的设计计算器和菜单栏课程设计.docx》由会员分享,可在线阅读,更多相关《基于VC++程序的设计计算器和菜单栏课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
基于VC++程序的设计计算器和菜单栏课程设计
基于VC++程序的设计
——计算器和菜单栏
摘要
现在软件的输入要求主要是便与用户操作,所以现在人们在编写界面是必须考虑到用户的要求和水平,而且测试必须尽量测试到所有的数据类型和所有的非法输入好来考查软件产品的健壮性,不能因为一些非法的输入就导致软件程序不能用或者给用户带来不期望的后果
本次作业将实现一个简单的计算器,其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的四则运算功能,还实现了相对高级一些的计算功能,包括开方,1/X,以及数字的正负,和小数的运算
此外,在本次作业的另一个文件中,还进行了基于单文档的菜单,工具栏,状态栏,以及对话框的设计,包括菜单的创建,子菜单的创建,工具栏的自主设计,状态栏的显示,鼠标的光标更改等等各种设计。
基于VC++程序的计算器和菜单栏的设计
引言
随着科技的发展,人们在很多地方都要用到计算器进行商业和工程的运算,计算器在日常生活中的重要地位已经举足轻重。
此次作业是做了一个简单的例子,设计了一些比较常用的功能。
另外,在电脑上,文档的各种格式的设计,也是现在学生所必须了解的,所以本次作业也对此做了一些自主的设计。
一、功能介绍
1)本次作业将实现一个简单的计算器,其类似于Windows附件中自带的计算器。
这个计算器不仅实现了简单的四则运算功能,还实现了相对高级一些的计算功能,包括开方,1/X,以及数字的正负,和小数的运算,而且具有简洁大方的图文外观。
它的设计按照软件工程的方法进行,系统具有良好的界面,必要的交互信息,使用人员能快捷简单地进行操作。
系统具有加、减、乘、除、开方、1/X、小数,正负等功能;在主画面上方设计一个结果显示框;
2)本次作业将进行基于单文档的菜单,工具栏,状态栏,以及对话框的设计,主要可以实现的功能如下:
①:
点击菜单栏的的启动:
桌面上的三行字将自左向右循环移动
②:
点击海贼王:
将出现子菜单,例如“路飞”->“草帽小子”,将出现“赏金四亿”,等等;鼠标放在上边时,左下角状态栏将显示相应的文字,如果没有,状态栏左下角显示:
“消息”
③:
按下Ctrl+F5,Ctrl+F6,Ctrl+F7,Ctrl+F8,将分别出现“赏金四亿”,“一亿两千万”“七千七百万”“路飞的哥哥”。
此键设置是快捷键。
④:
按下
将弹出对话框“伙伴就是可以放心的把后背交给他们的人”
⑤:
状态栏右下角可以实时显示鼠标的位置
⑥:
点击“黄金梅利号”弹出对话框,在此可以更改主框架标题,和鼠标所绘制图形的各种属性,点击“欢迎”按钮,出线对话框。
⑦:
在界面里单击鼠标左键,将出现绿色的圆圈,具体值可以改变如上
⑧:
单击鼠标右键,可以使鼠标的图标改变,一共有六种。
二、简单计算器的设计
1、具体设计步骤
打开MicrosoftVisualC++6.0,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名计算器及其所在位置,点击确定,如图
将弹出MFCAppWizard-step1对话框,选择基本对话框,点击完成如图所示:
这样就建立了一个基于对话窗口的程序框架,如图所示:
2、界面设计
2.1创建控件
在对话框的设计界面上添加文本编辑框,在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Edit属性对话框,如下图所示
在上图中Controls的“Button”按钮上点击鼠标,插入按钮控件,并修改其属性中的名称,如下图:
控件
属性
设置
按钮
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_BUTTON_ADD
+
按钮
IDC_BUTTON_MINUS
-
按钮
IDC_BUTTON_MULTIPLY
*
按钮
IDC_BUTTON_DIV
/
按钮
IDC_BUTTON_SIGN
+/-
按钮
IDC_BUTTON_POINT
.
按钮
IDC_BUTTON_CLEAR
C
按钮
IDC_BUTTON_SQRT
sqrt
按钮
IDC_BUTTON_EQUAL
=
按钮
IDC_BUTTONRECIPROCAL
1/X
2.2连接变量和代码
1)给编辑框和各个按钮添加变量,如下图所示:
2)给各个按钮连接代码,例如“1”,在“1”上点击鼠标右键,选择ClassWizard菜单项,在弹出的对话框中选择MessagesMaps选项卡,然后再ObjectIDs列表框中选择IDC_BUTTON1,在选择右边的BN_CLICKED项:
如下图:
依次选择AddFuction->ok->EditCode;然后编辑代码如下:
voidCMyDlg:
:
OnButton1()
{
if(m_coff==1.0)
m_second=m_second*10+1;
else
{
m_second=m_second+1*m_coff;
m_coff*=0.1;
}
UpdateDisplay(m_second);
}
其他的键类似。
3,、主要程序代码
HCURSORCMyDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMyDlg:
:
OnButton0()
{
if(m_coff==1.0)
m_second=m_second*10+0;
else
{
m_second=m_second+0*m_coff;
m_coff*=0.1;
}
UpdateDisplay(m_second);
}
……
voidCMyDlg:
:
OnButton9()
{
if(m_coff==1.0)
m_second=m_second*10+9;
else
{
m_second=m_second+9*m_coff;
m_coff*=0.1;
}
UpdateDisplay(m_second);
}
voidCMyDlg:
:
OnButtonAdd()
{
Calculate();
m_operator="+";
}
voidCMyDlg:
:
OnButtonMinus()
{
Calculate();
m_operator="-";
}
……
voidCMyDlg:
:
OnButtonClear()
{
m_first=0.0;
m_second=0.0;
m_operator="+";
m_coff=1.0;
UpdateDisplay(0.0);
}
voidCMyDlg:
:
OnButtonreciprocal()
{
if(fabs(m_second)<=0.000001)
{
m_display="除数不能为零";
UpdateData(false);
return;
}
m_second=1.0/m_second;
UpdateDisplay(m_second);
}
……
voidCMyDlg:
:
Calculate()
{
switch(m_operator.GetAt(0))
{case'+':
m_first+=m_second;break;
case'-':
m_first-=m_second;break;
case'*':
m_first*=m_second;break;
case'/':
if(fabs(m_second)<=0.000001)
{m_display="除数不能为零";
UpdateData(false);
return;
}
m_first/=m_second;break;
}
m_second=0.0;
m_coff=1.0;
UpdateDisplay(m_first);
}
voidCMyDlg:
:
UpdateDisplay(doublelVal)
{m_display.Format(_T("%f"),lVal);
inti=m_display.GetLength();
while(m_display.GetAt(i-1)=='0')
{
m_display.Delete(i-1,1);
i--;
}
UpdateData(false);
}
三、单文档的菜单设计
1、具体的步骤和上面的类似,开始创建的时候选择singledocument,创建新项目
2、界面设计:
如下图,包括弹出的对话框
3、主要代码如下:
voidCMyView:
:
OnUpdateSdYtNs(CCmdUI*pCmdUI)
{
pCmdUI->Enable(true);
pCmdUI->SetCheck
(1);
}
voidCMyView:
:
OnSdYtPl()
{
str2="赏金4亿";
Invalidate();
}
……
voidCMyView:
:
OnSdJnBtq()
{
str2="路飞的哥哥";
Invalidate();
}
voidCMyView:
:
OnToolbar()
{
MessageBox("伙伴就是可以放心的把后背交给他们的人");
}
voidCMyView:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
SetCursor(m_hCursor);
CStringstr4;
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar*pStatus=&pFrame->m_wndStatusBar;
if(pStatus)
{
str4.Format("X=%d,Y=%d",point.x,point.y);
pStatus->SetPaneText(1,str4);
pStatus->SetWindowText("消息");
}
CView:
:
OnMouseMove(nFlags,point);
}
voidCMyView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
CMainFrame*pMainFrm=(CMainFrame*)AfxGetMainWnd();
CDC*pDc=GetDC();
CPen*pPenBlue=newCPen;
pPenBlue->CreatePen(PS_SOLID,pMainFrm->m_thick,RGB(0,255,0));
CPen*pOldPen=pDc->SelectObject(pPenBlue);
pDc->Ellipse(point.x,point.y,point.x+\
pMainFrm->m_long,point.y+pMainFrm->m_short);
pDc->SelectObject(pOldPen);
deletepPenBlue;
ReleaseDC(pDc);
CView:
:
OnLButtonDown(nFlags,point);
}
voidCMyView:
:
LoadCur(UINTCurName)
{m_hCursor=AfxGetApp()->LoadCursor(CurName);
}
voidCMyView:
:
GetCur(intID_NO)
{
if(m_hClick>6)
m_hClick=1;
switch(m_hClick)
{
case1:
LoadCur(IDC_CURSOR1);break;
……
case6:
LoadCur(IDC_CURSOR6);break;}
}
voidCMyView:
:
OnRButtonDown(UINTnFlags,CPointpoint)
{
++m_hClick;
GetCur(m_hClick);
SetCursor(m_hCursor);
RECTrect;
GetClientRect(&rect);
ClientToScreen(&rect);
ClipCursor(&rect);
CView:
:
OnRButtonDown(nFlags,point);
}
voidCMyView:
:
OnRButtonUp(UINTnFlags,CPointpoint)
{
ClipCursor(NULL);
CView:
:
OnRButtonUp(nFlags,point);
}
四、总结
经过多番测试,终于完成了以上的功能,在这次作业中提高了自己的c++专业知识,包括查找错误,更改错误的速度和能力,最主要的是编程的能力。
不仅巩固了先前学习的MFC程序设计知识而且也培养了我的动手能力,让我的创造性思维得到拓展,培养了我独立分析问题,解决问题的能力。
五、参考文献
[1]揣锦华,面向对象程序设计与VC++实践.西安电子科技大学出版社,2005
[2]张建宏,汤练兵,马德骏.计算机程序设计基础-C语言程序设计,科学出版社,2006
[3]陈维兴,林小茶,《C++面向对象程序设计教程》,清华大学出版社
[4]刘振安,刘燕君、孙忱,《C++语言课程设计》,机械工业出版社,2007年
[5]郑阿奇,丁有和.VisualC++教程.北京:
机械工业出版社,2006