集合类的设计实现分析MFC_第1页
集合类的设计实现分析MFC_第2页
集合类的设计实现分析MFC_第3页
集合类的设计实现分析MFC_第4页
集合类的设计实现分析MFC_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、-. z.封 皮按学校要求手工填写课 程 设 计 任 务 书学院专业学生*设计题目集合类的设计与实现容及要求: 1.了解并掌握数据构造与算法的设计方法,具备初步的独立分析和设计能力;初步掌握程序设计过程中的构造化程序设计的一般方法,及数据类型在设计中的应用。 3.能够利用所学的根本知识和技能,解决简单的程序设计问题;通过类与对象的设计,编制一个能演示执行集合的并、交和差运算的程序,要求如下:1集合的元素限定为小写字母字符a,z。2演示程序以用户和计算机的对话方式执行。3以有序链表表示集合。4可进一步实现集合的元素判定和子集判定运算。进度安排:第17周:分析题目,查阅课题相关资料,进展类设计、算

2、法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进展辩论验收。指导教师签字:年 月 日学院院长签字年 月 日目 录 TOC o 1-3 h z u HYPERLINK l _Toc2168441001 需求分析 PAGEREF _Toc216844100 h - 1 -HYPERLINK l _Toc2168441012 算法根本原理 PAGEREF _Toc216844101 h - 1 -HYPERLINK l _Toc2168441023 类设计 PAGEREF _Toc216844102 h - 1 -HYPERLINK l _Toc2168441

3、034 详细设计 PAGEREF _Toc216844103 h - 2 -HYPERLINK l _Toc2168441044.1 类的接口设计 PAGEREF _Toc216844104 h - 2 -HYPERLINK l _Toc2168441054.2 类的实现 PAGEREF _Toc216844105 h - 2 -HYPERLINK l _Toc2168441064.3 主函数设计 PAGEREF _Toc216844106 h - 4 -HYPERLINK l _Toc2168441075 DOS界面程序运行结果及分析 PAGEREF _Toc216844107 h - 5-

4、HYPERLINK l _Toc2168441085.1 程序运行结果 PAGEREF _Toc216844108 h - 5 -HYPERLINK l _Toc2168441095.2运行结果分析 PAGEREF _Toc216844109 h - 5 -HYPERLINK l _Toc2168441106 基于MFC的图形界面程序开发 PAGEREF _Toc216844110 h - 6 -HYPERLINK l _Toc2168441116.1 基于MFC的图形界面程序设计 PAGEREF _Toc216844111 h - 6 -HYPERLINK l _Toc2168441126.

5、2 程序测试 PAGEREF _Toc216844112 h - 17 -HYPERLINK l _Toc2168441136.3 MFC程序编写总结 PAGEREF _Toc216844113 h - 19 -HYPERLINK l _Toc2168441147 参考文献 PAGEREF _Toc216844114 h - 19 -PAGE . z.1 需求分析 1问题描述:用有序单链表表示集合,实现集合的交、并、差运算,且空间复杂度为O(1) 2根本功能:可快速的分别求出两个字符集合的交、并、差。 3输入和输出:1输入:在C+环境下编写的程序,其输入是简单、方便的,即 按提示分别输入两集合

6、的元素。输入字符的围:小写字母a,b,.,y,z,大写字母A,B,.Y,Z,和数字0,1,.8,9;输入形式:字符集合,按顺序大小排序输入,允许出现重复字符,程序能自动滤去;2输出:程序采用单链表的存储构造,使得运算快捷简便,显示的结果也明了。 输出结果不含重复或非法字符;2 算法根本原理Setla,b,*,w,Set2a,b,y,z, SetlSet2a,b,*,y,z,w SetlSet2a,b SetlSet2 *,w 3 类设计从上面的算法分析可以看到,本设计关键是集合的并,交,差运算。可以定义一个类int_set,然后由该类定义出私有和公有成员函数,为主函数的执行做好铺垫4 详细设计

7、整个程序分为三大块,先是类的接口,定义出基类后再在类中定义出相关成员函数:接着是累的实现局部,写出具体的函数代码,用以执行相关功能;最后则是主函数,用一天调用各个函数并执行相应的输入输出功能4.1 类的接口设计#includeclass int_setprivate:int ma*_size; int cur_size;char *p;public:int_set(const int_set & a) /必须有拷贝构造函数,因为下面以对象为返回值ma*_size=a.ma*_size;cur_size=a.cur_size;p=new chara.ma*_size;for(int i=0;ic

8、ur_size;i+)pi=a.pi;int_set(int *)cur_size=0;ma*_size=*;p=new char*;int_set()delete p;4.2 类的实现int search(char *) /判断一个元素是否在集合中for(int i=0;ima*_size;i+)if(pi=*)return 1;return 0;void ifsearch(char *)if(search(*)cout*在集合中!endl;else cout*不在集合中!=ma*_size)cout集合已满,不可再添加元素!endl;else if(!search(*)pcur_size=

9、*;cur_size+;void dec(char *) / 从集合中去掉一个元素for(int i=0;ima*_size;i+)if(pi=*)for(i;ima*_size-1;i+)pi=pi+1;cur_size-; /输入friend istream & operator(istream & in,int_set & a)/注意在类写友元的实现时不能直接使用类成员 cout请输入集合a.ma*_size个小写字母az:; for(int i=0;ia.pi;/不能直接写pia.cur_size=a.ma*_size; return in; /in可以换别的 /输出 friend o

10、stream & operator(ostream & out,int_set & a)for(int i=0;ia.cur_size;i+)couta.pi ;coutendl; return out; int_set jiao(int_set & b )/交集int_set temp(ma*_size);for(int i=0;ib.cur_size;i+)I if(search(b.pi)temp.ptemp.cur_size=b.pi;temp.cur_size+;return temp;int_set bing(int_set & b )/并集int_set temp(ma*_siz

11、e+b.ma*_size);for(int i=0;ima*_size;i+)temp.pi=pi;temp.cur_size=cur_size;for( i=0;ib.cur_size;i+)if(!search(b.pi)temp.ptemp.cur_size=b.pi;temp.cur_size+;return temp;int_set cha(int_set & b )/求差int_set temp(ma*_size);for(int i=0;ima*_size;i+)temp.pi=pi;temp.cur_size=cur_size;for(i=0;ib.cur_size;i+)I

12、if(temp.search(b.pi)temp.dec(b.pi);return temp;/*/;4.3 主函数设计void main()int_set obj1(8); int_set obj2(6); cinobj1; /输入集合cinobj1; obj1.add(7); /添加一个元素coutobj1; obj1.add(8); /再添加一个元素 obj1.ifsearch(3); /判断元素是否在集合中obj1.ifsearch(0);coutobj1.jiao(obj2); /求交集 /*假设没拷贝构造函数,则指针被提前释放了,输出大的随机数*/coutobj1.bing(obj

13、2); /求并集coutobj1.cha(obj2); /差运算5 DOS界面程序运行结果及分析5.1程序运行结果5.2运行结果分析在程序运行过程中,前面的局部必须有拷贝构造函数,因为后续需要以对象为返回值,中间的局部则需要注意在类写友元的实现时不能直接使用类成员,最后的局部假设没拷贝构造函数,则指针被提前释放了,会输出大的随机数,则不符合题目要求。6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的根底上进展改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过

14、cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下参加上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计1界面设计首先在VC中建立MFC AppWizard(e*e)工程,名称为集合类,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程 图4 建立MFC AppWizard(e*e)工程图5 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图6所示。图6 方集合的并交差界面设计图6所示的界面中包含了3个Edit控件

15、,6个Button控件,控件的根本信息列表如下表1所示。控件类别控件ID控件Caption说明Edit Bo*IDC_EDIT1集合1IDC_EDIT2集合2IDC_EDIT3所求集合BottonIDC_BUTTON1计算交集IDC_BUTTON2计算并集IDC_BUTTON3计算差集A-BIDC_BUTTON4计算差集B-AIDC_BUTTON6验证集合关系表1 控件根本信息2代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为3个Edit Bo*控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选

16、项卡,可显示成员变量设置界面,如图7所示。图7 成员变量设置界面通过该界面设置与3个Edit Bo*控件对应的成员变量,具体如表2所示。表2 控件根本信息控件ID成员变量类型成员变量名称IDC_EDIT1Stringm_1IDC_EDIT2Stringm_2IDC_EDIT3Stringm_3下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与容如下。1将JIHE.h文件和JIHE.cpp文件合并成一个文件,重新命名为JIHE.h,并将其参加MFC工程。2在对话框类的实现文件JIHEDlg.cpp中参加#include Jihe.h

17、,以实现在该文件中可使用Jihe类。3在JIHEDlg.cpp文件中参加以下全局变量的定义,以实现JIHEDlg类和JIHE类之间的通信,具体代码如下:CJIHEDlg:CJIHEDlg(CWnd* pParent /*=NULL*/): CDialog(CJIHEDlg:IDD, pParent)/AF*_DATA_INIT(CJIHEDlg)m_1 = _T();m_2 = _T();m_3 = _T();/AF*_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon

18、= Af*GetApp()-LoadIcon(IDR_MAINFRAME);void CJIHEDlg:DoDataE*change(CDataE*change* pD*)CDialog:DoDataE*change(pD*);/AF*_DATA_MAP(CJIHEDlg)DD*_Te*t(pD*, IDC_EDIT1, m_1);DD*_Te*t(pD*, IDC_EDIT2, m_2);DD*_Te*t(pD*, IDC_EDIT3, m_3);/AF*_DATA_MAPBEGIN_MESSAGE_MAP(CJIHEDlg, CDialog)/AF*_MSG_MAP(CJIHEDlg)ON

19、_WM_SYSMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, Onjiao)ON_BN_CLICKED(IDC_BUTTON2, Onbing)ON_BN_CLICKED(IDC_BUTTON3, Onbu)ON_BN_CLICKED(IDC_BUTTON4, Oncha)ON_BN_CLICKED(IDC_BUTTON5, Onduichencha)ON_BN_CLICKED(IDC_BUTTON6, Onbaohan)/AF*_MSG_MAPEND_MESSAGE_MAP()4运行代码BOOL CJIHE

20、Dlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBO* must be in the system mand range.ASSERT(IDM_ABOUTBO* & 0*FFF0) = IDM_ABOUTBO*);ASSERT(IDM_ABOUTBO* AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBO*, strAboutMenu);/ Set the icon for this

21、 dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add e*tra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CJIHEDlg:OnSysmand(U

22、INT nID, LPARAM lParam)if (nID & 0*FFF0) = IDM_ABOUTBO*)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysmand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically d

23、one for you by the framework.void CJIHEDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device conte*t for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint c*Icon = GetSystemMetrics(SM_C*ICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect

24、;GetClientRect(&rect);int * = (rect.Width() - c*Icon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(*, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CJIHEDlg:OnQueryDragIcon()

25、return (HCURSOR) m_hIcon;int CJIHEDlg:panduanCF()UpdateData(1);m_3.Empty();CString m,n; for (int i=0;i=m_1.GetLength()/2;i+) Af*E*tractSubString(m, (LPCTSTR)m_1, i, ); for (int j=i+1;j=m_1.GetLength()/2;j+) Af*E*tractSubString(n, (LPCTSTR)m_1, j, ); if(m=n) Af*MessageBo*(重复输入!);m_1=0;m_2=0;UpdateDat

26、a(0);return 1; for ( i=0;i=m_2.GetLength()/2;i+) Af*E*tractSubString(m, (LPCTSTR)m_2, i, ); for (int j=i+1;j=m_2.GetLength()/2;j+) Af*E*tractSubString(n, (LPCTSTR)m_2, j, ); if(m=n) Af*MessageBo*(重复输入!);m_1=0;m_2=0;UpdateData(0);return 1; return 0;5求相应集合的运算代码void CJIHEDlg:Onjiao() UpdateData(1); m_3

27、.Empty(); if(panduanCF() return; CString tem,dem;if(m_1=0 & m_2=0) Af*MessageBo*(交集为空,请输入元素); m_3=0;return ;else if(m_1=0|m_2=0) m_3=空集; else for (int i=0;i=m_1.GetLength()/2;i+) for (int j=0;j=m_2.GetLength()/2;j+) Af*E*tractSubString(tem, (LPCTSTR)m_1, i, ); Af*E*tractSubString(dem, (LPCTSTR)m_2,

28、j, ); if(tem=dem) if(m_3.GetLength()=0) m_3=tem; else m_3=m_3+ +tem; if(m_3=0) m_3=空集; UpdateData(0);void CJIHEDlg:Onbing() UpdateData(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) Af*MessageBo*(并集为空,请输入元素); return ; if(panduanCF() return; if(m_1=0 | m_2=0) m_3=m_1+m_2;UpdateData(0);return; m_3=

29、m_1; CString tem; CString dem;for (int i=0;im_2.GetLength();i+) Af*E*tractSubString(tem, (LPCTSTR)m_2, i, ); int flag=0;/没有一样的 for (int j=0;jm_1.GetLength();j+) Af*E*tractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) flag=1;break; if(flag=0) m_3=m_3+ +tem; UpdateData(0);void CJIHEDlg:Onbu() UpdateD

30、ata(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) Af*MessageBo*(差集为空,请输入元素); return ; if(panduanCF() return; if(m_2=0) m_3=m_1;UpdateData(0);return; if(m_1=0) m_3=空集;UpdateData(0);return; CString tem; CString dem; for (int i=0;i=m_1.GetLength();i+) int pd=1; for (int j=0;j=m_2.GetLength();j+) Af

31、*E*tractSubString(tem, (LPCTSTR)m_1, i, ); Af*E*tractSubString(dem, (LPCTSTR)m_2, j, ); if(tem=dem) pd=0;break; if (pd=1) m_3=m_3+tem+ ; UpdateData(0);void CJIHEDlg:Oncha() UpdateData(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) Af*MessageBo*(差集为空,请输入元素); return ; if(panduanCF() return; if(m_1=

32、0) m_3=m_2;UpdateData(0);return; if(m_2=0) m_3=空集;UpdateData(0);return; CString tem; CString dem; for (int i=0;i=m_2.GetLength();i+) int pd=1; for (int j=0;j=m_1.GetLength();j+) Af*E*tractSubString(tem, (LPCTSTR)m_2, i, ); Af*E*tractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) pd=0;break; if (pd=1

33、) m_3=m_3+tem+ ; UpdateData(0);void CJIHEDlg:Onduichencha() UpdateData(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) Af*MessageBo*(对称差为空,请输入元素); return; if(panduanCF() return; if(m_1=0) m_3=m_2;UpdateData(0);return; if(m_2=0) m_3=m_1;UpdateData(0);return;CString tem; CString dem;for (int i=0;i=m

34、_1.GetLength();i+) int pd=1; for (int j=0;j=m_2.GetLength();j+) Af*E*tractSubString(tem, (LPCTSTR)m_1, i, ); Af*E*tractSubString(dem, (LPCTSTR)m_2, j, ); if(tem=dem) pd=0;break; if (pd=1) m_3=m_3+tem+ ; for (i=0;i=m_2.GetLength();i+) int pd=1; for (int j=0;j=m_1.GetLength();j+) Af*E*tractSubString(t

35、em, (LPCTSTR)m_2, i, ); Af*E*tractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) pd=0;break; if (pd=1) m_3=m_3+tem+ ; UpdateData(0);void CJIHEDlg:Onbaohan() UpdateData(1);m_3.Empty();if(m_1=0&m_2=0) Af*MessageBo*(A B为空集);return;if(panduanCF() return;if(m_1=0) Af*MessageBo*(A为空集,B包含A);return;if(m_2=0) Af*MessageBo*(B为空集,A包含B);return;if(m_1=m_2) Af*MessageBo*(A B相等);return;/CString m_4,tem,dem;/交for (int i=0;i=m_1.GetLength()/2;i+) Af*E*tractSubString(tem, (LPCTSTR)m_1, i, ); for (int

温馨提示

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

评论

0/150

提交评论