




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、封 皮(按学校要求手工填写)课 程 设 计 任 务 书学院专业学生姓名学号设计题目集合类的设计与实现内容及要求: 1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2. 初步掌握程序设计过程中的结构化程序设计的一般方法,及数据类型在设计中的应用。 3.能够利用所学的基本知识和技能,解决简单的程序设计问题;通过类与对象的设计,编制一个能演示执行集合的并、交和差运算的程序,要求如下:(1)集合的元素限定为小写字母字符a,z。(2)演示程序以用户和计算机的对话方式执行。(3)以有序链表表示集合。(4)可进一步实现集合的元素判定和子集判定运算。进度安排:第17周:分析题目,查阅课题
2、相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师(签字):年 月 日学院院长(签字)年 月 日目 录1 需求分析- 1 -2 算法基本原理- 1 -3 类设计- 1 -4 详细设计- 2 -4.1 类的接口设计- 2 -4.2 类的实现- 2 -4.3 主函数设计- 4 -5 DOS界面程序运行结果及分析- 5-5.1 程序运行结果- 5 -5.2运行结果分析- 5 -6 基于MFC的图形界面程序开发- 6 -6.1 基于MFC的图形界面程序设计- 6 -6.2 程序测试- 17 -6.3 MFC程序编写总结-
3、 19 -7 参考文献- 19 -1 需求分析 1问题描述:用有序单链表表示集合,实现集合的交、并、差运算,且空间复杂度为O(1) 2基本功能:可快速的分别求出两个字符集合的交、并、差。 3输入和输出:(1)输入:在C+环境下编写的程序,其输入是简单、方便的,即 按提示分别输入两集合的元素。l 输入字符的范围:小写字母a,b,.,y,z,大写字母A,B,.Y,Z,和数字0,1,.8,9;l 输入形式:字符集合,按顺序大小排序输入,允许出现重复字符,程序能自动滤去;(2)输出:程序采用单链表的存储结构,使得运算快捷简便,显示的结果也明了。 输出结果不含重复或非法字符;2 算法基本原理Setla,
4、b,x,w,Set2a,b,y,z, SetlSet2a,b,x,y,z,w SetlSet2a,b SetlSet2 x,w 3 类设计从上面的算法分析可以看到,本设计关键是集合的并,交,差运算。可以定义一个类int_set,然后由该类定义出私有和公有成员函数,为主函数的执行做好铺垫4 详细设计整个程序分为三大块,先是类的接口,定义出基类后再在类中定义出相关成员函数:接着是累的实现部分,写出具体的函数代码,用以执行相关功能;最后则是主函数,用一天调用各个函数并执行相应的输入输出功能4.1 类的接口设计#includeclass int_setprivate:int max_size; int
5、 cur_size;char *p;public:int_set(const int_set & a) /必须有拷贝构造函数,因为下面以对象为返回值max_size=a.max_size;cur_size=a.cur_size;p=new chara.max_size;for(int i=0;icur_size;i+)pi=a.pi;int_set(int x)cur_size=0;max_size=x;p=new charx;int_set()delete p;4.2 类的实现 int search(char x) /判断一个元素是否在集合中 for(int i=0;imax_size;i+
6、)if(pi=x)return 1;return 0; void ifsearch(char x)if(search(x)coutx在集合中!endl;else coutx不在集合中!=max_size)cout集合已满,不可再添加元素!endl;else if(!search(x)pcur_size=x;cur_size+;void dec(char x) / 从集合中去掉一个元素for(int i=0;imax_size;i+)if(pi=x)for(i;imax_size-1;i+)pi=pi+1;cur_size-; /输入friend istream & operator(istre
7、am & in,int_set & a)/注意在类内写友元的实现时不能直接使用类成员 cout请输入集合(a.max_size个小写字母(az):; for(int i=0;ia.pi;/不能直接写pi a.cur_size=a.max_size; return in; /in可以换别的 /输出 friend ostream & 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 te
8、mp(max_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(max_size+b.max_size); for(int i=0;imax_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
9、=b.pi; temp.cur_size+; return temp;int_set cha(int_set & b )/求差 int_set temp(max_size); for(int i=0;imax_size;i+)temp.pi=pi; temp.cur_size=cur_size; for(i=0;ib.cur_size;i+)I if(temp.search(b.pi)temp.dec(b.pi); return temp;/*/;4.3 主函数设计void main() int_set obj1(8); int_set obj2(6); cinobj1; /输入集合 cino
10、bj1; obj1.add(7); /添加一个元素 coutobj1; obj1.add(8); /再添加一个元素 obj1.ifsearch(3); /判断元素是否在集合中 obj1.ifsearch(0);coutobj1.jiao(obj2); /求交集 /*若没拷贝构造函数,则指针被提前释放了,输出大的随机数*/coutobj1.bing(obj2); /求并集coutobj1.cha(obj2); /差运算5 DOS界面程序运行结果及分析5.1程序运行结果5.2运行结果分析在程序运行过程中,前面的部分必须有拷贝构造函数,因为后续需要以对象为返回值,中间的部分则需要注意在类内写友元的实
11、现时不能直接使用类成员,最后的部分若没拷贝构造函数,则指针被提前释放了,会输出大的随机数,则不符合题目要求。6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计(1)界面设计
12、首先在VC中建立MFC AppWizard(exe)工程,名称为集合类,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程 图4 建立MFC AppWizard(exe)工程图5 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图6所示。图6 方集合的并交差界面设计图6所示的界面中包含了3个Edit控件,6个Button控件,控件的基本信息列表如下表1所示。控件类别控件ID控件Caption说明Edit BoxIDC_EDIT1集合1IDC_EDIT2集合2IDC_EDIT3所求集合BottonIDC_BUTTON1计算交集IDC_BUT
13、TON2计算并集IDC_BUTTON3计算差集A-BIDC_BUTTON4计算差集B-AIDC_BUTTON6验证集合关系表1 控件基本信息(2)代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为3个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图7所示。图7 成员变量设置界面通过该界面设置与3个Edit Box控件对应的成员变量,具体如表2所示。表2 控件基本信息控件ID成员变量类型成员变量名称IDC_EDIT1Stringm_1IDC_EDI
14、T2Stringm_2IDC_EDIT3Stringm_3下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。1将JIHE.h文件和JIHE.cpp文件合并成一个文件,重新命名为JIHE.h,并将其加入MFC工程。2在对话框类的实现文件JIHEDlg.cpp中加入#include Jihe.h,以实现在该文件中可使用Jihe类。3在JIHEDlg.cpp文件中加入以下全局变量的定义,以实现JIHEDlg类和JIHE类之间的通信,具体代码如下:CJIHEDlg:CJIHEDlg(CWnd* pParent /*=NULL*/
15、): CDialog(CJIHEDlg:IDD, pParent)/AFX_DATA_INIT(CJIHEDlg)m_1 = _T();m_2 = _T();m_3 = _T();/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CJIHEDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AF
16、X_DATA_MAP(CJIHEDlg)DDX_Text(pDX, IDC_EDIT1, m_1);DDX_Text(pDX, IDC_EDIT2, m_2);DDX_Text(pDX, IDC_EDIT3, m_3);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CJIHEDlg, CDialog)/AFX_MSG_MAP(CJIHEDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, Onjiao)ON_BN_CLICKED(IDC_BUTTON2, Onbing
17、)ON_BN_CLICKED(IDC_BUTTON3, Onbu)ON_BN_CLICKED(IDC_BUTTON4, Oncha)ON_BN_CLICKED(IDC_BUTTON5, Onduichencha)ON_BN_CLICKED(IDC_BUTTON6, Onbaohan)/AFX_MSG_MAPEND_MESSAGE_MAP()4运行代码BOOL CJIHEDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the syste
18、m command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIco
19、n, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CJIHEDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:On
20、SysCommand(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 done for you by the framework.void CJIHEDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context fo
21、r paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/
22、Draw the icondc.DrawIcon(x, 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()return (HCURSOR) m_hIcon;int CJIHEDlg:panduanCF()UpdateData(1);m_3.Empty();CString m,n; for (int i=0;i=m_
23、1.GetLength()/2;i+) AfxExtractSubString(m, (LPCTSTR)m_1, i, ); for (int j=i+1;j=m_1.GetLength()/2;j+) AfxExtractSubString(n, (LPCTSTR)m_1, j, ); if(m=n) AfxMessageBox(重复输入!);m_1=0;m_2=0;UpdateData(0);return 1; for ( i=0;i=m_2.GetLength()/2;i+) AfxExtractSubString(m, (LPCTSTR)m_2, i, ); for (int j=i+
24、1;j=m_2.GetLength()/2;j+) AfxExtractSubString(n, (LPCTSTR)m_2, j, ); if(m=n) AfxMessageBox(重复输入!);m_1=0;m_2=0;UpdateData(0);return 1; return 0;5求相应集合的运算代码void CJIHEDlg:Onjiao() UpdateData(1); m_3.Empty(); if(panduanCF() return; CString tem,dem; if(m_1=0 & m_2=0) AfxMessageBox(交集为空,请输入元素); m_3=0;retu
25、rn ;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+) AfxExtractSubString(tem, (LPCTSTR)m_1, i, ); AfxExtractSubString(dem, (LPCTSTR)m_2, 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);voi
26、d CJIHEDlg:Onbing() UpdateData(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) AfxMessageBox(并集为空,请输入元素); return ; if(panduanCF() return; if(m_1=0 | m_2=0) m_3=m_1+m_2;UpdateData(0);return; m_3=m_1; CString tem; CString dem;for (int i=0;im_2.GetLength();i+) AfxExtractSubString(tem, (LPCTSTR)m_2, i
27、, ); int flag=0;/没有一样的 for (int j=0;jm_1.GetLength();j+) AfxExtractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) flag=1;break; if(flag=0) m_3=m_3+ +tem; UpdateData(0); void CJIHEDlg:Onbu() UpdateData(1); m_3.Empty(); UpdateData(0); if(m_1=0 & m_2=0) AfxMessageBox(差集为空,请输入元素); return ; if(panduanCF(
28、) 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+) AfxExtractSubString(tem, (LPCTSTR)m_1, i, ); AfxExtractSubString(dem, (LPCTSTR)m_2, j, ); if(tem=dem) pd=
29、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) AfxMessageBox(差集为空,请输入元素); return ; if(panduanCF() return; if(m_1=0) m_3=m_2;UpdateData(0);return; if(m_2=0) m_3=空集;UpdateData(0);return; CString tem; CString dem; for (
30、int i=0;i=m_2.GetLength();i+) int pd=1; for (int j=0;j=m_1.GetLength();j+) AfxExtractSubString(tem, (LPCTSTR)m_2, i, ); AfxExtractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) pd=0;break; if (pd=1) m_3=m_3+tem+ ; UpdateData(0);void CJIHEDlg:Onduichencha() UpdateData(1); m_3.Empty(); UpdateData(0);
31、if(m_1=0 & m_2=0) AfxMessageBox(对称差为空,请输入元素); 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_1.GetLength();i+) int pd=1; for (int j=0;j=m_2.GetLength();j+) AfxExtractSubString(tem, (LPCTSTR)m_1,
32、i, ); AfxExtractSubString(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+) AfxExtractSubString(tem, (LPCTSTR)m_2, i, ); AfxExtractSubString(dem, (LPCTSTR)m_1, j, ); if(tem=dem) pd=0;break; if (pd=1)
33、m_3=m_3+tem+ ; UpdateData(0); void CJIHEDlg:Onbaohan() UpdateData(1);m_3.Empty();if(m_1=0&m_2=0) AfxMessageBox(A B为空集);return;if(panduanCF() return;if(m_1=0) AfxMessageBox(A为空集,B包含A);return;if(m_2=0) AfxMessageBox(B为空集,A包含B);return;if(m_1=m_2) AfxMessageBox(A B相等);return;/CString m_4,tem,dem;/交for (int i=0;i=m_1.GetLength()/2;i+) AfxExtractSubString(tem, (LPCTSTR)m_1, i, ); for (int j=0;j=m_2.GetLength()/2;j+) AfxExtractSubString(dem, (LPCTSTR)m_2, j, ); if(tem=dem) if(m_4=0) m_4=tem; else m_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025标准网签版建筑工程合同模板
- 2025企业租赁合同协议标准版
- 2025年降酶退黄类药物合作协议书
- 2025技术转让合同范本(中英文对照)
- 2025年磐安县农产品收购合同
- 2025个人住宅庭院景观规划合同
- 2025二级建造师建筑实务知识点:合同价款约定详解
- 2025私营企业员工试用期合同模板
- 2025年外贸合同法律风险评估
- 2025年叔丁基苯酚项目合作计划书
- 软件质量证明书
- 高考标准化考场建设方案详细
- 人民医院肿瘤科临床技术操作规范2023版
- 高压-引风机电机检修文件包
- 2023届物理高考二模考前指导
- GB/T 39486-2020化学试剂电感耦合等离子体质谱分析方法通则
- GB/T 11085-1989散装液态石油产品损耗
- GXH-3011A1便携式红外线CO分析仪
- NYT 393-绿色食品 农药使用准则
- 2022年四川省阿坝州中考数学试卷及解析
- 综采工作面末采安全技术措施
评论
0/150
提交评论