您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 集合类的设计和实现MFC
封皮(按学校规定手工填写)课程设计任务书学院学生姓名设计题目内容及规定:专业学号集合类设计与实现1.理解并掌握数据构造与算法设计办法,具备初步独立分析和设计能力;2.初步掌握程序设计过程中构造化程序设计普通办法,及数据类型在设计中应用。3.可以运用所学基本知识和技能,解决简朴程序设计问题;通过类与对象设计,编制一种能演示执行集合并、交和差运算程序,规定如下:(1)集合元素限定为小写字母字符[‘a’,…,’z’]。(2)演示程序以顾客和计算机对话方式执行。(3)以有序链表表达集合。(4)可进一步实现集合元素鉴定和子集鉴定运算。进度安排:第17周:分析题目,查阅课题有关资料,进行类设计、算法设计;第18周:程序设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指引教师(签字):学院院长(签字)年月日年月日目录1需求分析................................................................错误!未定义书签。2算法基本原理........................................................错误!未定义书签。3类设计....................................................................错误!未定义书签。4详细设计................................................................错误!未定义书签。4.1类接口设计.........................................................................错误!未定义书签。4.2类实现.................................................................................错误!未定义书签。4.3主函数设计.........................................................................错误!未定义书签。5DOS界面程序运营成果及分析............................错误!未定义书签。5.1程序运营成果.....................................................................错误!未定义书签。5.2运营成果分析......................................................................错误!未定义书签。6基于MFC图形界面程序开发..............................错误!未定义书签。6.1基于MFC图形界面程序设计...........................................错误!未定义书签。6.2程序测试.............................................................................错误!未定义书签。6.3MFC程序编写总结.............................................................错误!未定义书签。7参照文献................................................................错误!未定义书签。1需求分析1问题描述:用有序单链表表达集合,实现集合交、并、差运算,且空间复杂度为O(1)2基本功能:可迅速分别求出两个字符集合交、并、差。3输入和输出:(1)输入:在C++环境下编写程序,其输入是简朴、以便,即按提示分别输入两集合元素。输入字符范畴:小写字母a,b,...,y,z,大写字母A,B,...Y,Z,和数字0,1,...8,9;输入形式:字符集合,按顺序大小排序输入,容许浮现重复字符,程序能自动滤去;(2)输出:程序采用单链表存储构造,使得运算快捷简便,显示成果也明了。输出成果不含重复或非法字符;2算法基本原理Setl={a,b,x,w},Set2={a,b,y,z},Setl∪Set2={a,b,,x,y,z,w}Setl∩Set2={a,b}Setl-Set2={x,w}3类设计从上面算法分析可以看到,本设计核心是集合并,交,差运算。可以定义一种类int_set,然后由该类定义出私有和公有成员函数,为主函数执行做好铺垫4详细设计整个程序分为三大块,先是类接口,定义出基类后再在类中定义出有关成员函数:接着是累实现某些,写出详细函数代码,用以执行有关功能;最后则是主函数,用一天调用各个函数并执行相应输入输出功能4.1类接口设计#includeiostream.hclassint_set{private:intmax_size;intcur_size;char*p;public:int_set(constint_set&a){//必要有拷贝构造函数,由于下面以对象为返回值max_size=a.max_size;cur_size=a.cur_size;p=newchar[a.max_size];for(inti=0;icur_size;i++)p[i]=a.p[i];}int_set(intx){cur_size=0;max_size=x;p=newchar[x];}~int_set(){delete[]p;}4.2类实现intsearch(charx){//判断一种元素与否在集合中for(inti=0;imax_size;i++)if(p[i]==x){return1;}return0;}voidifsearch(charx){if(search(x))coutx在集合中!endl;elsecoutx不在集合中!endl;}voidadd(charx){//增长一种整数到集合中if(cur_size=max_size)cout集合已满,不可再添加元素!endl;elseif(!search(x)){p[cur_size]=x;cur_size++;}}voiddec(charx){//从集合中去掉一种元素for(inti=0;imax_size;i++)if(p[i]==x){for(i;imax_size-1;i++)p[i]=p[i+1];cur_size--;}}//输入friendistream&operator(istream&in,int_set&a)//注旨在类内写友元实现时不能直接使用类成员{cout请输入集合(a.max_size个小写字母(a~z):;for(inti=0;ia.max_size;i++)cina.p[i];//不能直接写p[i]a.cur_size=a.max_size;returnin;//in可以换别}//输出friendostream&operator(ostream&out,int_set&a){for(inti=0;ia.cur_size;i++)couta.p[i]'';coutendl;returnout;}int_setjiao(int_set&b)//交集{int_settemp(max_size);for(inti=0;ib.cur_size;i++)Iif(search(b.p[i])){temp.p[temp.cur_size]=b.p[i];temp.cur_size++;}returntemp;}int_setbing(int_set&b)//并集{int_settemp(max_size+b.max_size);for(inti=0;imax_size;i++)temp.p[i]=p[i];temp.cur_size=cur_size;for(i=0;ib.cur_size;i++)if(!search(b.p[i])){temp.p[temp.cur_size]=b.p[i];temp.cur_size++;}returntemp;}int_setcha(int_set&b)//求差{int_settemp(max_size);for(inti=0;imax_size;i++)temp.p[i]=p[i];temp.cur_size=cur_size;for(i=0;ib.cur_size;i++)Iif(temp.search(b.p[i]))temp.dec(b.p[i]);returntemp;}/**/};4.3主函数设计voidmain(){int_setobj1(8);int_setobj2(6);cinobj1;//输入集合cinobj2;obj1.dec(1);//删除一种元素coutobj1;obj1.add(7);//添加一种元素coutobj1;obj1.add(8);//再添加一种元素obj1.ifsearch(3);//判断元素与否在集合中obj1.ifsearch(0);cout交集为:;coutobj1.jiao(obj2);//求交集前释放了,输出大随机数*/cout并集为:;coutobj1.bing(obj2);//求并集cout差为:;coutobj1.cha(obj2);//差运算}5DOS界面程序运营成果及分析5.1程序运营成果/*若没拷贝构造函数,则指针被提5.2运营成果分析在程序运营过程中,前面某些必要有拷贝构造函数,由于后续需要以对象为返回值,中间某些则需要注旨在类内写友元实现时不能直接使用类成员,最后某些若没拷贝构造函数,则指针被提前释放了,会输出大随机数,则不符合题目规定。6基于MFC图形界面程序开发MFC图形界面程序设计可在上述类设计基本上进行改造,MFC图形界面程序与DOS界面程序重要不同点是:MFC图形界面程序与DOS界面程序输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,重要通过cin,cout等I/O流实现,而MFC图形程序界面采用原则Windows窗口和控件实现输入输出,因而必要在MFC类框架下加入上面所设计矩阵和方程组类,并通过图形界面输入输出改造来完毕。6.1基于MFC图形界面程序设计(1)界面设计一方面在VC中建立MFCAppWizard(exe)工程,名称为集合类,并在向导Step1中选取Dialogbased,即建立基于对话框应用程图4建立MFCAppWizard(exe)工程图5建立基于对话框应用程序将对话框资源中默认对话框运用工具箱改导致如下界面,如图6所示。图6方集合并交差界面设计图6所示界面中包括了3个Edit控件,6个Button控件,控件基本信息列表如下表1所示。控件类别控件ID控件Caption阐明EditBoxIDC_EDIT1IDC_EDIT2集合1集合2IDC_EDIT3所求集合IDC_BUTTON1计算交集IDC_BUTTON2计算并集BottonIDC_BUTTON3计算差集A-BIDC_BUTTON4计算差集B-AIDC_BUTTON6验证集合关系(2)代码设计表1控件基本信息为了可以将对话框界面上控件可以与代码联系起来,需要为3个EditBox控件建立MemberVariables,按Ctrl+w键进入MFCClassWizard界面,选取MemberVariables选项卡,可显示成员变量设立界面,如图7所示。图7成员变量设立界面通过该界面设立与3个EditBox控件相应成员变量,详细如表2所示。表2控件基本信息控件ID成员变量类型成员变量名称IDC_EDIT1IDC_EDIT2IDC_EDIT3StringStringSt
本文标题:集合类的设计和实现MFC
链接地址:https://www.777doc.com/doc-8762462 .html