




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
封封 皮皮 按学校要求手工填写 按学校要求手工填写 课 程 设 计 任 务 书 学院信息科学与工程专业通信工程 学生姓名 学号 10030603 设计题目字符串类的设计与实现字符串类的设计与实现 内容及要求 计算机处理的对象分为数值数据和非数值数据 字符串是最基本的非数值 数据 其应用非常广泛 它是许多软件系统 如字符编辑 情报检索 词法分 析 符号处理 自然语言翻译等系统 的操作对象 其重要性不言而喻 要求采用 C 语言实现进行字符串类的设计 具体要求如下 1 使用堆分配存储表示实现字符串的存储 2 实现串赋值操作 StrAssign 4 实现求串长操作 StrLength S 5 实现串连接操作 Concat 8 将上述功能作为类的成员函数实现 编写主函数测试上述功能 进度安排 第 17 周 分析题目 查阅课题相关资料 进行类设计 算法设计 第 18 周 程序的设计 调试与实现 第 19 周 程序测试与分析 撰写课程设计报告 进行答辩验收 指导教师 签字 年 月 日 学院院长 签字 年 月 日 目目 录录 1 需求分析 1 2 算法基本原理 1 3 类设计 2 4 详细设计 3 4 1 类的接口设计 3 4 2 类的实现 5 4 3 主函数设计 10 5 DOS 界面程序运行结果及分析 11 5 1 程序运行结果 11 5 2 运行结果分析 12 6 基于 MFC 的图形界面程序开发 13 6 1 基于 MFC 的图形界面程序设计 13 6 2 程序测试 17 6 3 MFC 程序编写总结 19 7 参考文献 19 1 需求分析需求分析 1 计算机处理的对象分为数值数据和非数值数据 字符串是最基本的非 数值数据 其应用非常广泛 它是许多软件系统 如字符编辑 情报检索 词 法分析 符号处理 自然语言翻译等系统 的操作对象 其重要性不言而喻 2 字符串是字符的有限集合 可记作 a a1 an 其中 a 是字符串的 名 单括号里的字符序列是字符串的值 单引号不是字符串的成分 其作用是 为了避免变量名与常量混淆 ai 0 i0 如果等于 0 则称 a 为空串 记作 a 2 算法基本原理算法基本原理 1 字符串从结构上看是一种以字符为数据元素的线性表 从存储结构的不同 可分为顺序表和链式存储结构 它们都适用于字符串 但由于要求的操作不同 为了提高运算效率所选用的存储结构也是不同的 对于字符串改动较频繁的一 般用链式存储结构 而顺序存储结构能够高效的读取 所以各有优点 本程序 由于需要大量改动数据 理所当然的选择链式存储结构 其算法结构为 Typedef struct Char ch 若字符串为空 则按长度分配存储区 否则为 NULL Int length 字符串的长度 2 本题字符串要求用堆来分配字符串的存储空间 采用堆分配函数 malloc 它的格式为 T ch char malloc sizeof char len 就会为字符串分配内存 3 函数是有字符串类进行调用的 通过在主函数中定义字符串类的对象 作 为函数的参数 对于需要改写对象的需要进行址传递 我们可以通过函数在主 函数中的反映来观察他的执行状态 3 类设计类设计 4 详细设计详细设计 整个程序分为三个独立的文档 Linequ h 文件中包括矩阵类 Matrix 和线性 方程组类 Linequ 的声明 Linequ cpp 文件中包括这两个类的成员函数实现文件 main cpp 文件包括程序的主函数 主函数中定义了一个类 Linequ 的对象 通过 这个对象求解一个四元线性方程组 4 1 类的接口设计 Linequ h 文件 实现类的声明 include include using namespace std class Matrix 基类 Matrix 声明 public 外部接口 Matrix int dims 2 构造函数 Matrix 析构函数 void SetMatrix double rmax 矩阵赋初值 void PrintM 显示矩阵 protected int index 方阵的行数 double MatrixA 矩阵存放数组首地址 class Linequ public Matrix 公有派生类 Linequ 声明 public 外部接口 Linequ int dims 2 构造函数 Linequ 析构函数 void SetLinequ double a double b 方程赋值 void PrintL 显示方程 int Solve 全选主元高斯消去法求解方程 void ShowX 显示方程的解 private 私有数据 double sums 方程右端项 double solu 方程的解 经过公有派生 Linequ 类获得了除构造函数 析构函数之外的 Matrix 类的 全部成员 由于基类的成员是公有和保护类型 因此在派生类中的成员函数中 基类继承来的成员全部可以访问 而对于建立 Linequ 类对象的外部模块来讲 基类的保护成员是无法访问的 通过保护访问类型和公有的继承方式 实现了 基类 Matrix 的数据的有效共享和可靠保护 在程序中 方程的系数矩阵 解以 及右端项全部采用了动态内存分配技术 这些工作都是在基类 派生类的构造 函数中完成 它们的清理工作在析构函数中完成 4 2 类的实现 4 3 主函数设计 int main int a 1 p len MyString S MyString st1 MyString st2 MyString sub MyString T char ch1 20 char cl cout 欢迎进入字符串操作程序 endl while a 0 cout endl cout 请选择功能操作 endl cout n1 字符串的赋值 n2 字符串的长度 n3 字符串的比较 n4 字符串的连接 n5 求字符串的子串 n6 清空字符串 n0 退出 a switch a case 0 cout 谢谢使用 祝您工作顺利 endl break case 1 cout 请输入用于赋值新字符串 ch1 InitString StrAssign cout 字符串被赋的值为 PrintString st1 break case 2 cout 请输入新字符串 S ch1 InitString StrAssign cout 长度为 StrLength st1 endl break case 3 cout 请输入要比较的两个字符串 S pk T endl cout 请输入第一个字符串 st1 长度 ch1 InitString StrAssign cout 请输入第二个字符串 st2 长度 ch1 InitString StrAssign StrCompare st1 st2 int flag StrCompare st1 st2 if flag 0 cout 字符串 st1 与 st2 相等 0 cout 字符串 st1 比 st2 大 endl else cout 字符串 st1 比 st2 小 endl break case 4 cout 请输入要连接的两个字符串 S1 cout 请输入第一个字符串 长度 ch1 InitString StrAssign cout 请输入第二个字符串 长度 ch1 InitString StrAssign InitString Concat cout 连接后的新字符串 endl PrintString T break case 5 cout 请输入主串 S 长度 20 ch1 InitString StrAssign InitString cout 请输入起始位置 p p cout 请输入子串的长度 len 请考虑主串的长度 len cout 所求子串为 endl SubString PrintString sub break case 6 cout 确定要清空的字符串 Y N cl if cl y cl Y ClearString ClearString ClearString ClearString cout 字符串操作清除成功 endl break default cout 操作错误 请输入正确序号 endl return 0 主函数的设计思路是通过定义 mystring 类的对象 然后通过生成的对象去调用相应的函数 从而达到调试所编写的函数功能的目的 此主函数有着演示函数的要求 为了使它能够更 灵活的进行函数的调用 首先设计了一个循环体 由整型变量 a 控制 当 a 0 时就结束循 环 而在循环体中又由 switch a 函数来控制 通过输入不同的 a 的值来控制不同的操作 即函数的演示 5 DOS 界面程序运行结果及分析界面程序运行结果及分析 从它运行的界面可以看出 当进入函数调试状态时我们可也通过输入相应的操作序号来选 择不同的操作 例如选择输入 1 将进入字符串的赋值操作 下面就来看一下相应的函数 输入 1 点回车键就被要求输入要赋得值 函数原型为 StrAssign b2 new double index for int i 0 i index i 将解 solu 带入原方程求出新的右端项 b2 b2 i 0 for int j 0 j index j b2 i b2 i MatrixA i index j solu j for i 0 i index i 输出新的右端项 cout b2 i cout endl 在主函数 main 中增加语句 equ1 test 验证求解结果 经过验证的程序运行结果如图 3 所示 图 3 程序运行结果的验证 从图 3 中可以看出 方程组求解验证的右端项结果与原右端项结果完全一 致 这说明了方程组求解的正确性 5 2 运行结果分析 整个程序中的矩阵存储采用的是一维数组和动态内存分配方式 基类是专门处理矩阵的类 公有派生类 Linequ 是针对线性方程组而设计的 除了继承基类的基本特征之外 结合问题的实际需要 增加了很多线性方程组 所特有的成员 使基类 Matrix 进一步具体化 特殊化 达到对问题的有效描述 和处理 程序的访问控制也是根据问题的需要而设计的 基类的数据成员的存储 维护着矩阵数据 这正是派生类方程组的系数矩阵 使派生类解方程成员函数 必须访问的 利用保护成员特征 将基类数据成员的访问控制属性设置为保护 型 在公有派生类 Linequ 中就可以访问到基类继承下来的保护成员 而对于类 外的其余模块 这些数据无法访问 这样 就在数据的共享与隐藏之间寻找到 一个比较恰当的结合点 在派生过程中 基类的构造函数和析构函数无法继承下来 因此在派生类 中需要添加构造函数 析构函数来完成派生类的初始化和最后清理工作 派生 类的构造函数通过调用基类的构造函数来对基类数据进行初始化 本设计中 派生类 Linequ 的构造函数调用了基类 Matrix 的构造函数并传递必须的初始化参 数 派生类的析构函数调用基类的构造函数 共同完成清理任务 6 基于基于 MFC 的图形界面程序开发的图形界面程序开发 MFC 的图形界面程序设计可在上述类设计的基础上进行改造 MFC 的图 形界面程序与 DOS 界面程序的主要不同点是 MFC 图形界面程序与 DOS 界面 程序的输入输出方式不同 DOS 界面程序采用字符交互式实现数据输入输出 主要通过 cin cout 等 I O 流实现 而 MFC 的图形程序界面采用标准 Windows 窗口和控件实现输入输出 因此必须在 MFC 类的框架下加入上面所设计的矩 阵和方程组类 并通过图形界面的输入输出改造来完成 6 1 基于 MFC 的图形界面程序设计 1 界面设计 界面设计 首先在 VC 中建立 MFC AppWizard exe 工程 名称为 GuassLineGUI 并在 向导的 Step1 中选择 Dialog based 即建立基于对话框的应用程序 如下图 4 5 所示 图 4 建立 MFC AppWizard exe 工程 图 5 建立基于对话框的应用程序 将对话框资源中的默认对话框利用工具箱改造成如下界面 如图 6 所示 图 6 方程组求解程序界面设计 图 6 所示的界面中包含了 3 个 Static Text 控件 3 个 Button 控件 和 24 个 Edit Box 控件 控件的基本信息列表如下表 1 所示 表 1 控件基本信息 控件类别控件 ID控件 Caption说明 系数矩阵 A 方程组右端项 bStatic TextIDC STATIC 解 X IDC BUTTON Read读入数据 IDC BUTTON CALC计算求解Botton IDC BUTTON Exit退出 IDC EDIT A00 IDC EDIT A33矩阵 A 的 16 个元 素 IDC EDIT b0 IDC EDIT b3向量 b 的 4 个元素 Edit Box IDC EDIT X0 IDC EDIT X3解 X 的 4 个元素 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 A33doublem A00 m A33 IDC EDIT b0 IDC EDIT b3doublem b0 m b3 IDC EDIT X0 IDC EDIT X3doublem 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 h 以实现在该文件中可使用 Linequ 类 在 GuassLineGUIDlg cpp 文件中加入以下全局变量的定义 以实现 GuassLineGUIDlg 类和 Linequ 类之间的通信 具体代码如下 double a 系数矩阵 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 double b 4 1 8471 1 7471 1 6471 1 5471 方程右端项 double X 存放方程组的解 编写读入数据按钮的消息处理函数 实现将矩阵和右端项的数据刷新到 界面上 具体代码如下 void CGuassLineGUIDlg OnBUTTONRead TODO Add your control notification handler code here 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 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 TODO Add your control notification handler code here Linequ equ1 4 定义一个四元方程组对象 equ1 SetLinequ a b 设置方程组 X new double 4 if equ1 Solve 求解方程组 equ1 ShowX X 输出方程组的解 m X0 X 0 m X1 X 1 m X2 X 2 m X3 X 3 UpdateData FALSE else MessageBox 求解失败 求解失败 退出按钮比较简单 代码如下 void CGuassLineGUIDlg OnBUTTONExit TODO Add your control notification handler code here OnOK 6 2 程序测试 运行程序后 首先出现的界面如图 8 所示 图 8 程序初始运行界面 单击读入数据按钮后 可将系数矩阵 A 和方程组右端项 b 的数据在界面上 显示出来 如图 9 所示 图 9 读入数据后的界面 单击计算求解按钮 实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电站锅炉结构原理课件
- 高级职称护理学课件
- 北外二外法语期末考试及答案
- 高热惊厥宣教课件
- 3-Ketopimelyl-CoA-3-Ketopimelyl-coenzyme-A-生命科学试剂-MCE
- Dienomycin-B-生命科学试剂-MCE
- 古诗词诵读《江城子 乙卯正月二十日夜记梦》课件 统编版高中语文选择性必修上册
- 保健食品小蓝帽考试题及答案
- 花卉考试题及答案
- 电源线基础知识培训课件
- 2025-2026学年北师大版小学数学六年级上册教学计划及进度表
- 2024-2025学年度辽宁现代服务职业技术学院单招《语文》检测卷有完整答案详解
- 语文开学第一课课件2025-2026学年统编版语文七年级上册
- 2025年军队文职招聘-军队文职技能岗-军队文职招聘(电工)历年参考题库含答案解析(5套)
- (2025年标准)签夫妻忠诚协议书
- 2025年宁夏中考数学试卷试题真题(含答案详解)
- 肿瘤重点专科汇报
- 2024年杭州市公务员考试行测真题及完整答案详解一套
- 2025 八项规定应知应会100题题库及参考答案详解(综合题)
- 单位保安执勤方案(3篇)
- 二三轮车安全知识培训课件
评论
0/150
提交评论