C++课程设计字符串类的设计与实现 联系客服

发布时间 : 星期一 文章C++课程设计字符串类的设计与实现更新完毕开始阅读

图6 方程组求解程序界面设计

图6所示的界面中包含了3个Static Text控件,3个Button控件,和24个Edit Box控件,控件的基本信息列表如下表1所示。

表1 控件基本信息

控件类别 控件ID 控件Caption 系数矩阵A Static Text IDC_STATIC 方程组右端项b 解X IDC_BUTTON_Read Botton IDC_BUTTON_CALC IDC_BUTTON_Exit IDC_EDIT_A00~ IDC_EDIT_A33 读入数据 计算求解 退出 说明 矩阵A的16个元素 向量b的4个元素 解X的4个元素 Edit Box IDC_EDIT_b0~ IDC_EDIT_b3 IDC_EDIT_X0~ IDC_EDIT_X3 (2)代码设计

为了能够将对话框界面上的控件能够与代码联系起来,需要为24个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图7所示。

图7 成员变量设置界面

通过该界面设置与24个Edit Box控件对应的成员变量,具体如表2所示。

表2 控件基本信息 控件ID IDC_EDIT_A00~ IDC_EDIT_A33 IDC_EDIT_b0~ IDC_EDIT_b3 IDC_EDIT_X0~ IDC_EDIT_X3 成员变量类型 double double double 成员变量名称 m_A00~m_A33 m_b0~m_b3 m_X0~m_X3 下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。

①将Linequ.h文件和Linequ.cpp文件合并成一个文件,重新命名为Linequ.h,并将其加入MFC工程。

②修改Linequ.h文件具体包括:

? 将显示矩阵PrintM()函数和显示方程PrintL()函数注释掉,因为在图形界

面的程序上已经不需要连个函数承担输出功能了;

? 将输出方程组的解ShowX() 函数加入参数double x[]变成ShowX(double

x[]),以实现将所求的解输出至参数x中,并最终完成在对话框界面上的显示;

? 将全选主元高斯法求解函数Solve() 中的两处cout语句去掉,因为不需

要也不能够使用cout流实现输出。

③在对话框类的实现文件GuassLineGUIDlg.cpp中加入#include \,以实现在该文件中可使用Linequ类。

④在GuassLineGUIDlg.cpp文件中加入以下全局变量的定义,以实现GuassLineGUIDlg类和Linequ类之间的通信,具体代码如下:

double a[]= { };

double b[4]={ 1.8471,1.7471,1.6471,1.5471}; //方程右端项 double *X;

//存放方程组的解

⑤编写读入数据按钮的消息处理函数,实现将矩阵和右端项的数据刷新到界面上,具体代码如下:

void CGuassLineGUIDlg::OnBUTTONRead() {

m_A00=a[0]; m_A01=a[1]; m_A02=a[2]; m_A03=a[3]; m_A10=a[5]; m_A11=a[6]; m_A12=a[7]; m_A13=a[8]; m_A20=a[9]; m_A21=a[10]; m_A22=a[11]; m_A23=a[12]; // TODO: Add your control notification handler code here 0.2368,0.2471,0.2568,1.2671, 0.1968,0.2071,1.2168,0.2271, 0.1581,1.1675,0.1768,0.1871, 1.1161,0.1254,0.1397,0.1490

//系数矩阵

}

m_A30=a[13]; m_A31=a[14]; m_A32=a[15]; m_A33=a[16]; m_b0=b[0]; m_b1=b[1]; m_b2=b[2]; m_b3=b[3]; UpdateData(FALSE);

⑥编写计算求解按钮的消息处理函数,实现将方程求解,具体代码如下: void CGuassLineGUIDlg::OnButtonCalc() { }

⑦退出按钮比较简单,代码如下: void CGuassLineGUIDlg::OnBUTTONExit() { }

// TODO: Add your control notification handler code here OnOK();

// TODO: Add your control notification handler code here Linequ equ1(4); //定义一个四元方程组对象 equ1.SetLinequ(a,b); //设置方程组 X=new double[4];

if(equ1.Solve()) //求解方程组 { } else

MessageBox(\求解失败\

//求解失败

equ1.ShowX(X); //输出方程组的解 m_X0=X[0]; m_X1=X[1]; m_X2=X[2]; m_X3=X[3]; UpdateData(FALSE);

6.2 程序测试

运行程序后,首先出现的界面如图8所示。

图8 程序初始运行界面

单击读入数据按钮后,可将系数矩阵A和方程组右端项b的数据在界面上显示出来,如图9所示。

图9 读入数据后的界面

单击计算求解按钮,实现求解并将解显示出来,如图10所示。

图10 求解方程组后的界面

单击退出按钮后,程序能够正常实现退出。

6.3 MFC程序编写总结

MFC程序与DOS界面程序编写的最大不同是程序员需要将编程精力放在图形界面设计、图形界面输入输出以及界面元素和代码对应转换等问题上,而这些问题在DOS界面程序中是不存在的,因此,初学MFC的编程者会对此感到困难,然而,当你编写出一个基于Windows界面的程序时,所获得的满足程度远远大于简单的DOS界面程序,况且基于Windows的图形界面的程序设计已成为主流,作为程序员而言,是非学会不可的。

本次课程设计作为编写Windows程序的初步尝试,能够实现程序的主要功能,可以说是取得了成功,然而好的程序绝不仅仅是只有功能性这一个指标,本此编写的MFC程序虽然能实现所需功能,但从面向对象程序设计理念和图形界面设计要求来说,尚存在不足,主要包括以下几个方面。

(1)使用全局变量存储矩阵系数、方程组右端向量和解向量本身有悖面向对象程序设计理念,需要将其改进,利用局部变量和其它方式实现存储,作者认为最理想的方式是使用文件。

(2)将类的定义与实现放在同一个头文件Linequ.h中也违背了面向对象程序设计理念,需要将二者分开成定义文件和实现文件。

(3)图10所示的界面中对解的显示没有格式化,导致界面看起来不够规范,需要对解的输出进行小数点固定位数显示。

7 参考文献

[1]徐士良. C常用算法程序集. 北京:清华大学出版社,1995

[2]郑莉,董渊,张瑞丰. C++语言程序设计(第3版). 北京:清华大学出版社,2007 [3]钱能. C++程序设计教程(第二版). 北京:清华大学出版社,2007

[4]陈志泊,王春玲. 面向对象的程序设计语言—C++. 北京:人民邮电出版社,2002 [5]李庆扬,王能超,易大义. 数值分析. 湖北:华中理工大学出版社,1986