面向对象课程设计---集合类的设计与实现.doc_第1页
面向对象课程设计---集合类的设计与实现.doc_第2页
面向对象课程设计---集合类的设计与实现.doc_第3页
面向对象课程设计---集合类的设计与实现.doc_第4页
面向对象课程设计---集合类的设计与实现.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

课程设计专用纸 沈阳理工大学 课 程 设 计 任 务 书 学院信息科学与工程专业通信工程 学生姓名学号 设计题目集合类的设计与实现 内容及要求: 本课程设计主要是集合的交、并和差运算的研究与实现,用有序单链表表 示集合,实现集合的交、并和差运算。研究表明,采用有序存储的运算简单、 方便。 通过类与对象的设计,编制一个能演示执行集合的并、交和差运算的程序, 要求如下: (1)集合的元素限定为小写字母字符a,z。 (2)演示程序以用户和计算机的对话方式执行。 (3)以有序链表表示集合。 (4)可进一步实现集合的元素判定和子集判定运算。 进度安排: 第 17 周:分析题目,查阅课题相关资料,进行类设计、算法设计; 第 18 周:程序的设计、调试与实现; 第 19 周:程序测试与分析,撰写课程设计报告,进行答辩验收。 指导教师(签字): 年 月 日 学院院长(签字) 年 月 日 课程设计专用纸 沈阳理工大学 目目 录录 1 需求分析需求分析 .- 1 - 2 算法基本原理算法基本原理 .- 1 - 图图 2-1 单链表流程图单链表流程图- 2 - 3 类设计类设计 .- 3 - 4 详细设计详细设计 .- 3 - 4.1 类的设计和实现类的设计和实现- 3 - 4.2 主函数设计主函数设计- 9 - 5 dos 界面程序运行结果及分析界面程序运行结果及分析.- 10 - 5.1 程序运行结果程序运行结果- 10 - 5.2 运行结果分析运行结果分析.- 11 - 6 基于基于 mfc 的图形界面程序开发的图形界面程序开发- 12 - 6.1 基于基于 mfc 的图形界面程序设计的图形界面程序设计.- 12 - 6.2 程序测试程序测试- 15 - 6.3 mfc 程序编写总结程序编写总结.- 19 - 7 参考文献参考文献 .- 20 - 课程设计专用纸 - 1 - 1 需求分析需求分析 (1)本演示程序中,集合的元素限定为小写字母字符az,集合 的大小 n using namespace std; typedef struct node char data; node *next; node,*linklist; #define size sizeof(node) #define false 0 #define true 1 class linklist 课程设计专用纸 - 4 - public: initlinklist(linklist head) char ch; node *p=head; head-next=null; head-data=0; cinch; while(ch!=#) node *newnode=(node*)malloc(size); newnode-data=ch; p-next=newnode; p=p-next; cinch; p-next=null; int check(char ch,linklist head) node *temp=head-next; int flag=true; while(temp!=null) if(temp-data=ch) flag=false; return flag; temp=temp-next; return flag; 课程设计专用纸 - 5 - /合并两个集合 linklist merge(linklist head1,linklist head2) linklist head=(node*)malloc(size); head-data=0;head-next=null; node *p1=head1-next; node *p2=head2-next; node *p=head; while(p1!=null p-next=newnode; p=newnode; p-next=null; else if(check(p1-data,head)=true) p-next=newnode; p=newnode; p-next=null; if(check(p2-data,head)=true) p-next=newnode; p=newnode; p-next=null; p1=p1-next; p2=p2-next; while(p1!=null) if(check(p1-data,head)=true) p-next=newnode; p=newnode; p-next=null; p1=p1-next; while(p2!=null) if(check(p2-data,head)=true) p-next=newnode; p=newnode; p-next=null; p2=p2-next; 课程设计专用纸 - 7 - return head; /集合 a 中的元素,b 中是否存在 int isexist(char data,linklist head) node *p=head-next; int flag=false; while(p!=null) if(p-data=data) return flag=true; p=p-next; return flag; int isexist2(char data,linklist head) node *p=head-next; int flag=false; while(p!=null) if(p-data=data) return flag; p=p-next; return flag=true; /两个集合的差集 linklist deprive(linklist head1,linklist head2) linklist head=(node*)malloc(size); node *p=head; node *p1=head1-next; while(p1!=null) 课程设计专用纸 - 8 - if(isexist2(p1-data,head2)=1) p-next=newnode; p=newnode; p-next=null; p1=p1-next; return head; /两个集合交集 linklist insection(linklist head1,linklist head2) node *p1=head1-next; linklist head=(node*)malloc(size); head-data=0; head-next=null; node *p=head; while(p1!=null) if(isexist(p1-data,head2)=1) p-next=newnode; p=newnode; p-next=null; p1=p1-next; 课程设计专用纸 - 9 - return head; /打印集合元素 void printlinklist(linklist head) node *p=head-next; while(p!=null) coutdata; p=p-next; coutcmd; while(cmd=y|cmd=y); return 0; 在程序的主函数部分,先由类生成一个对象,再由此对象调用类的各成员函数, 求出集合的并,交,差运算结果并输出。 5 dos 界面程序运行结果及分析界面程序运行结果及分析 5.1 程序运行结果 测试数据一运行结果如图 5-1 所示。 课程设计专用纸 - 11 - 图 5-1 程序运行结果 测试数据二运行结果如图 5-2 所示。 图 5-2 程序运行结果 5.2 运行结果分析 整个程序中的集合存储采用的是动态内存分配方式。 由 linklist 类生成一个对象用来存放集合,然后由此对象调用成员函数,对 集合进行各种并,交,差运算。 并运算,是生成一个新的单链表,然后利用尾插法将两个集合的元素顺序 插入到新表的表头之后。若待插字符串为非小写字母,则跳过不插。 交运算,是生成一个新的单链表,然后利用尾插法将两个集合的相同元素 顺序插入到新表的表头之后。若待插字符串为非小写字母,则跳过不插。 差运算,是生成一个新的单链表,然后利用尾插法将集合一中不同于集合 二的元素顺序插入到新表的表头之后。若待插字符串为非小写字母,则跳过不 插。 在主函数中对两集合进行测试,运算完成后,设置一个循环,若输入 y/y 则继续运算,否则结束程序。 课程设计专用纸 - 12 - 6 基于基于 mfc 的图形界面程序开发的图形界面程序开发 mfc 的图形界面程序设计可在上述类设计的基础上进行改造,mfc 的图 形界面程序与 dos 界面程序的主要不同点是:mfc 图形界面程序与 dos 界面 程序的输入输出方式不同,dos 界面程序采用字符交互式实现数据输入输出, 主要通过 cin,cout 等 i/o 流实现,而 mfc 的图形程序界面采用标准 windows 窗口和控件实现输入输出,因此必须在 mfc 类的框架下加入上面所设计的矩阵 和方程组类,并通过图形界面的输入输出改造来完成。 6.1 基于 mfc 的图形界面程序设计 (1)界面设计)界面设计 首先在 vc 中建立 mfc appwizard(exe)工程,名称为 mfc,并在向导 的 step1 中选择 dialog based,即建立基于对话框的应用程序,如下图 6-1 所示。 图 6-1 建立 mfc appwizard(exe)工程 课程设计专用纸 - 13 - 图 6-2 建立基于对话框的应用程序 将对话框资源中的默认对话框利用工具箱改造成如下界面,如图 6-3 所示。 课程设计专用纸 - 14 - 图 6-3 集合运算程序界面设计 图 6-3 所示的界面中包含了 3 个 static text 控件,4 个 button 控件,和 1 个 edit box 控件,控件的基本信息列表如下表 1 所示。 表 1 控件基本信息 控件类别控件 id控件 caption说明 输入 操作记录 static textidc_static 功能 idc_button_def确定 idc_button_jiao交集 idc_button_bing并集 botton idc_button_cha差集 edit box idc_edit_a00 idc_edit_a100集合的元素 (2)代码设计)代码设计 为了能够将对话框界面上的控件能够与代码联系起来,需要为 1 个 edit box 控件建立 member variables,按 ctrl+w 键进入 mfc classwizard 界面,选 择 member variables 选项卡,可显示成员变量设置界面,如图 6-4 所示。 课程设计专用纸 - 15 - 图 6-4 成员变量设置界面 通过该界面设置与 1 个 edit box 控件对应的成员变量,具体如表 2 所示。 表 2 控件基本信息 控件 id成员变量类型成员变量名称 idc_edit_a00 idc_edit_a100charm_a00m_a100 下面是编写代码的重要阶段,可以借鉴在设计基于 dos 界面的控制台应用 程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。 将 linklist.h 文件和 linklist.cpp 文件合并成一个文件,重新命名为 linklist.h,并将其加入 mfc 工程。 修改 linklist.h 文件。 在对话框类的实现文件 mfcdlg.cpp 中加入#include ,以实 现在该文件中可使用 linklist 类。 在 mfcdlg.cpp 文件中加入全局变量的定义,以实现 mfcdlg 类和 linklist 类之间的通信。 编写读入元素按钮的消息处理函数,实现将集合的元素刷新到界面上。 编写集合交,并,差及确定按钮的消息处理函数, 6.2 程序测试 课程设计专用纸 - 16 - 运行程序后,首先出现的界面如图 6-5 所示。 图 6-5 程序初始运行界面 课程设计专用纸 - 17 - 输入集合一的元素后单击确定按钮后,可将集合一的元素在界面上显示出 来,同理,可现示集合二的元素,如图 6-6 所示。 图 6-6 输入集合元素后的界面 课程设计专用纸 - 18 - 单击交集求解按钮,实现操作并将操作结果显示出来,如图 6-7 所示。 图 6-7 实现交运算后的界面 课程设计专用纸 - 19 - 同理可实现并集,差集运算,如图 6-8 所示。 图 6-8 实现并,差运算后的界面 6.3 mfc 程序编写总结 mfc 程序与 dos 界面程序编写的最大不同是程序员需要将编程精力放在 图形界面设计、图形界面输入输出以及界面元素和代码对应转换等问题上,而 这些问题在 dos 界面程序中是不存在的,因此,初学 mfc 的编程者会对此感 到困难,然而,当你编写出一个基于 windows 界面的程序时,所获得的满足程 度远远大于简单的 dos 界面程序,况且基于 windows 的图形界面的程序设计 已成为主流,作为程序员而言,是非学会不可的。 本次课程设计作为编写 windows 程序的初步尝试,能够实现程序的主要功 课程设计专用纸 - 20 - 能,可以说是取得了成功,然而好的程序绝不仅仅是只有功能性这一个指标, 本此编写的 mfc 程序虽然能实现所需功能,但从面向对象程序设计理念和图形 界面设计要求来说,尚存在不足,主要包括以下几个方面。 (1)功能不完全,可增进集合的元素判定和子集判定运算 (2)将类的定义与实现放在同一

温馨提示

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

评论

0/150

提交评论