《C++程序设计报告》.doc_第1页
《C++程序设计报告》.doc_第2页
《C++程序设计报告》.doc_第3页
《C++程序设计报告》.doc_第4页
《C++程序设计报告》.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/29/2020 C+程序设计报告- 周瑞哲 030730109 共10 页 第10页一 介面功能:实现简单计算,显示数值的不同数值形式。二 Calculator建立过程1生成程序框架 使用MFC AppWizard向导建立一个Windows应用程序框架。程序工程名称是Calculator。在向导的第一步选择程序使用对话框视图,其它就使用默认的选项即可。2界面设计在按照上述AppWizard操作建立程序框架后,由于输入的程序名称是Calculator,并且在第一步选择的是对话框视图(Dialog based),因此操作完毕后系统生成三个类:CCalculatorApp, CCalculatorDlg,CAboutDlg。其中,CCalculatorApp对应的是程序的运行主体,CCalculatorDlg对应的是对话框操作,CAboutDlg对应的是相关信息显示对话框。如果我们想在程序启动或者关闭的时候,做一些初始化或者内存释放等扫尾的工作,可以针对CCalculatorApp类编程。如果我们想对对话框窗口操作编程,就需要针对CCalculatorDlg编程。CAboutDlg类用于显示相关信息。然后建立相关的界面,并为每一个控件取一个ID编号,以便区别同类别的控件,不同的控件ID编号取名必须不同。选中一个控件,鼠标右击选择“Properties”菜单项,输入控件的新ID编号即可。具体取名如下表所示:控件ID属性设置文本编辑框IDC_VALUE缺省单选框IDC_CONVERT16标题为:十六进制,Group选中单选框IDC_CONVERT10标题为:十进制单选框IDC_CONVERT8标题为:八进制单选框IDC_CONVERT2标题为:二进制按钮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_BUTTON0标题为0按钮IDC_CLEAR标题为C按钮IDC_ADD标题为+按钮IDC_SUB标题为-按钮IDC_MUL标题为*按钮IDC_DIV标题为/按钮IDC_WQUAL标题为=3编程实现对话框的编辑框上点击鼠标右键,选择“Properties”,在“Styles”页面中选择“AlignText”中的值为Right,使得将来编辑框中的显示内容右对齐。在对话框的编辑框上点击右键,选择“ClassWizard”,在打开的对话框中选择“Member Variables”页面。用鼠标双击IDC_VALU编号(输入编辑框),然后在“MEnber variable mane”中填入“m_value”,“Category”栏改为“Control”型,再点击“OK”,控键对应的变量就建立好了。然后对按钮的点击动作编程。我们首先为CCalculatorDlg类增加两个成员变量:CurValue和 CurRadix。CurValue用来以十进制方式记录当前正在编辑框中的数值,CurRadix用来记录当前的数据进制。在CCalculatorDlg类的OnInitDialog( )中增加变量的初始化语句如下:BOOL CCalculatorDlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization hereCurValue=0; /当前数据值初始化CurRadix=10; /当前进制初始化return TRUE; / return TRUE unless you set the focus to a control对“C”键(清除键)进行编程,右键点击“C”按钮,选择“ClassWizard”,在打开的对话框中选择“Message Maps”页面。在对话框中部左侧选择控件ID“IDC_CKEAR”,中部右侧选择消息“BN_CLICKED”,点击按钮“Add Function”,选择函数名称为OnClear,点击按钮“Edit Code”,系统会自动创建一个消息映射函数OnClear( ),并让用户输入代码。这个消息映射函数会在用户点击“C”按钮的时候自动执行。其它按钮的编程操作也与“C”按钮类似,都是进行建立消息映射函数的操作。“C”按钮的消息映射函数如下:void CCalculatorDlg:OnClear() / TODO: Add your control notification handler code herem_value.SetWindowText(0); /调用m_value对象的成员函数清除编辑框 CurValue=0; /清除当前数值“0”按钮的消息映射函数如下:void CCalculatorDlg:OnButton0() / TODO: Add your control notification handler code here CString s;char buffer60;if(CurValue!=0) if(CurValue*CurRadix/CurRadix!=CurValue) MessageBox(超过数值表达范围,不能继续增加!); else CurValue=CurValue*CurRadix+0;itoa(CurValue,buffer,CurRadix); /数值转换成文本s=buffer;m_value.SetWindowText(s); /显示文本由于数字按钮的操作都差不多,所以我们为CCalculatorDlg类建立一个成员函数InputData(int x)。这个函数将用户新按下的按钮值作为输入参数,与编辑框中的已有数据合并成新的数据。为了防止数据值过大,超过整数的表示范围,还需要在函数内部加上数值范围检查语句。void CCalculatorDlg:InputData(int x) CString s;char buffer60;if(CurValue*CurRadix/CurRadix!=CurValue) MessageBox(超过数值表达范围,不能继续增加!); return;switch(CurRadix) case 16: CurValue=CurValue*16+x; break;case 10: CurValue=CurValue*10+x; break;case 8: if(x8) CurValue=CurValue*8+x; break;case 2: if(x2) CurValue=CurValue*2+x; itoa(CurValue,buffer,CurRadix); /按照不同的进制生成字符串s=buffer; m_value.SetWindowText(s); /显示文本“1”按钮的消息映射函数如下:void CCalculatorDlg:OnButton1() / TODO: Add your control notification handler code hereInputData(1); /调用InputData(),加入数值1“2”按钮的消息映射函数如下:void CCalculatorDlg:OnButton2() / TODO: Add your control notification handler code here InputData(2); /调用InputData(),加入数值2仿照前两个例子,可以建立按钮“3”“9”的消息映射函数。到目前为止,程序已经可以正常的输入数据和清除数据,下一步就是进行简单的计算了。在CCalculatorDlg类中添加两个整型成员变量:FirstNum和SecondNum,分别用来存放参与计算的前一个数据和后一个数据的值。同时,在CCalculatorDlg类中添加一个字符型成员变量:Op,用来存放用户点击的运算符号。还要添加一个整型变量IsSecond,用来记录当前输入的数据是第几个数据。由于运算按钮的操作都差不多,所以我们为CCalculatorDlg类建立一个成员函数InputOp(char x)。这个函数将用户新按下的操作按钮作为输入参数,进行对应的设置和记录。void CCalculatorDlg:InputOp(char x) CString s; FristNum=CurValue;Op=x; IsSecond=1; /设置第二个数据的标志“+”按钮的消息映射函数如下:void CCalculatorDlg:OnAdd() / TODO: Add your control notification handler code hereInputOp(+); /调用InputOp(),设置加法运算“-”按钮的消息映射函数如下:void CCalculatorDlg:OnSub() / TODO: Add your control notification handler code hereInputOp(-); /调用InputOp(),设置减法运算仿照前两个例子,可以建立按钮“*”和“/”的消息映射函数。由于需要在输入数据的时候根据标志位来区分第一个数据和第二个数据,因此,我们将前面的输入数据的InputData()函数加以改造,具体如下:void CCalculatorDlg:InputData(int x) CString s;char buffer60;if(IsSecond=1) /输入第二个数据最高位时,清除编辑框 m_value.SetWindowText(0); IsSecond=0; CurValue=0; if(CurValue*CurRadix/CurRadix!=CurValue) MessageBox(超过数值表达范围,不能继续增加!); return;switch(CurRadix) case 16: CurValue=CurValue*16+x; break; case 10: CurValue=CurValue*10+x; break;case 8: if(x8) CurValue=CurValue*8+x; break;case 2: if(xLoadIcon(IDR_MAINFRAME);void CCalculatorDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)END_MESSAGE_MAP()BOOL CCalculatorDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);CurValue=0;CurRadix=1;return TRUE; void CCalculatorDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CCalculatorDlg:OnPaint() if (IsIconic()CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CCalculatorDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CCalculatorDlg:On1() InputData(1);void CCalculatorDlg:OnClear() m_value.SetWindowText(0);CurValue=0;void CCalculatorDlg:OnButton0() CString s;char buffer60;if (CurValue!=0) if (CurValue*CurRadix/CurRadix!=CurValue) MessageBox(超过数值表带范围,不能继续增加!); else CurValue=CurValue*CurRadix+0; itoa(CurValue,buffer,CurRadix); s=buffer; m_value.SetWindowText(s);void CCalculatorDlg:InputData(int x)CString s;char buffer60;if(IsSecond=1)m_value.SetWindowText(0);IsSecond=0;CurValue=0;if(CurValue*CurRadix/CurRadix!=CurValue)MessageBox(超过数值表达范围,不能继续增加!);return;switch(CurRadix)case 16:CurValue=CurValue*16+x;break;case 10:CurValue=CurValue*10+x;break;case 8: if(x8) CurValue=CurValue*8+x;break;case 2: if(x2) CurValue=CurValue*2+x;itoa(CurValue,buffer,CurRadix);s=buffer;m_value.SetWindowText(s);void CCalculatorDlg:OnButton2() InputData(2);void CCalculatorDlg:OnButton3() InputData(3);void CCalculatorDlg:OnButton4() InputData(4);void CCalculatorDlg:OnButton5() InputData(5);void CCalculatorDlg:OnButton6() InputData(6);void CCalculatorDlg:OnButton7() InputData(7);void CCalculatorDlg:OnButton8() InputData(8);void CCalculatorDlg:OnButton9() InputData(9);void CCalculatorDlg:InputOp(char x)CString s;FirstNum=CurValue;Op=x;IsSecond=1;void CCalculatorDlg:OnAdd() InputOp(+);void CCalculatorDlg:OnSub() InputOp(-);void CCalculatorDlg:OnMul() InputOp(*);void CCalculatorDlg:OnDiv() InputOp(/);void CCalculatorDlg:OnEqual() int i;CString s;char buffer60;if(FirstNum!=0)SecondNum=CurValue;switch(Op)case+:i=FirstNum+SecondNum;break;case-:i=FirstNum-SecondNum;break;case*:i=FirstNum*SecondNum;break;case/:i=FirstNum/SecondNum;itoa(i,buffer,CurRadix);s=buffer;m_value.SetWindowText(s);CurValue=0; else FirstNum=CurValue;void CCalculatorDlg:MyConvert(int x)char buffer60;CString s;CurRadix=x;itoa(CurValue,buffer,CurRadix);s=buffer;m_value.SetWindowText(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论