集合類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第1頁(yè)
集合類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第2頁(yè)
集合類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第3頁(yè)
集合類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第4頁(yè)
集合類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、封 皮(按學(xué)校要求手工填寫)課 程 設(shè) 計(jì) 任 務(wù) 書學(xué)院專業(yè)學(xué)生姓名學(xué)號(hào)設(shè)計(jì)題目集合類的設(shè)計(jì)與實(shí)現(xiàn)內(nèi)容及要求: 1.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;2. 初步掌握程序設(shè)計(jì)過程中的結(jié)構(gòu)化程序設(shè)計(jì)的一般方法,及數(shù)據(jù)類型在設(shè)計(jì)中的應(yīng)用。 3.能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的程序設(shè)計(jì)問題;通過類與對(duì)象的設(shè)計(jì),編制一個(gè)能演示執(zhí)行集合的并、交和差運(yùn)算的程序,要求如下:(1)集合的元素限定為小寫字母字符a,z。(2)演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行。(3)以有序鏈表表示集合。(4)可進(jìn)一步實(shí)現(xiàn)集合的元素判定和子集判定運(yùn)算。進(jìn)度安排:第17周:分析題目,查閱課題

2、相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第18周:程序的設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第19周:程序測(cè)試與分析,撰寫課程設(shè)計(jì)報(bào)告,進(jìn)行答辯驗(yàn)收。指導(dǎo)教師(簽字):年 月 日學(xué)院院長(zhǎng)(簽字)年 月 日目 錄1 需求分析- 1 -2 算法基本原理- 1 -3 類設(shè)計(jì)- 1 -4 詳細(xì)設(shè)計(jì)- 2 -4.1 類的接口設(shè)計(jì)- 2 -4.2 類的實(shí)現(xiàn)- 2 -4.3 主函數(shù)設(shè)計(jì)- 4 -5 DOS界面程序運(yùn)行結(jié)果及分析- 5-5.1 程序運(yùn)行結(jié)果- 5 -5.2運(yùn)行結(jié)果分析- 5 -6 基于MFC的圖形界面程序開發(fā)- 6 -6.1 基于MFC的圖形界面程序設(shè)計(jì)- 6 -6.2 程序測(cè)試- 17 -6.3 MFC程序編寫總結(jié)-

3、 19 -7 參考文獻(xiàn)- 19 -1 需求分析 1問題描述:用有序單鏈表表示集合,實(shí)現(xiàn)集合的交、并、差運(yùn)算,且空間復(fù)雜度為O(1) 2基本功能:可快速的分別求出兩個(gè)字符集合的交、并、差。 3輸入和輸出:(1)輸入:在C+環(huán)境下編寫的程序,其輸入是簡(jiǎn)單、方便的,即 按提示分別輸入兩集合的元素。l 輸入字符的范圍:小寫字母a,b,.,y,z,大寫字母A,B,.Y,Z,和數(shù)字0,1,.8,9;l 輸入形式:字符集合,按順序大小排序輸入,允許出現(xiàn)重復(fù)字符,程序能自動(dòng)濾去;(2)輸出:程序采用單鏈表的存儲(chǔ)結(jié)構(gòu),使得運(yùn)算快捷簡(jiǎn)便,顯示的結(jié)果也明了。 輸出結(jié)果不含重復(fù)或非法字符;2 算法基本原理Setla,

4、b,x,w,Set2a,b,y,z, SetlSet2a,b,x,y,z,w SetlSet2a,b SetlSet2 x,w 3 類設(shè)計(jì)從上面的算法分析可以看到,本設(shè)計(jì)關(guān)鍵是集合的并,交,差運(yùn)算??梢远x一個(gè)類int_set,然后由該類定義出私有和公有成員函數(shù),為主函數(shù)的執(zhí)行做好鋪墊4 詳細(xì)設(shè)計(jì)整個(gè)程序分為三大塊,先是類的接口,定義出基類后再在類中定義出相關(guān)成員函數(shù):接著是累的實(shí)現(xiàn)部分,寫出具體的函數(shù)代碼,用以執(zhí)行相關(guān)功能;最后則是主函數(shù),用一天調(diào)用各個(gè)函數(shù)并執(zhí)行相應(yīng)的輸入輸出功能4.1 類的接口設(shè)計(jì)#includeclass int_setprivate:int max_size; int

5、 cur_size;char *p;public:int_set(const int_set & a) /必須有拷貝構(gòu)造函數(shù),因?yàn)橄旅嬉詫?duì)象為返回值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 類的實(shí)現(xiàn) int search(char x) /判斷一個(gè)元素是否在集合中 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) / 從集合中去掉一個(gè)元素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)/注意在類內(nèi)寫友元的實(shí)現(xiàn)時(shí)不能直接使用類成員 cout請(qǐng)輸入集合(a.max_size個(gè)小寫字母(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 主函數(shù)設(shè)計(jì)void main() int_set obj1(8); int_set obj2(6); cinobj1; /輸入集合 cino

10、bj1; obj1.add(7); /添加一個(gè)元素 coutobj1; obj1.add(8); /再添加一個(gè)元素 obj1.ifsearch(3); /判斷元素是否在集合中 obj1.ifsearch(0);coutobj1.jiao(obj2); /求交集 /*若沒拷貝構(gòu)造函數(shù),則指針被提前釋放了,輸出大的隨機(jī)數(shù)*/coutobj1.bing(obj2); /求并集coutobj1.cha(obj2); /差運(yùn)算5 DOS界面程序運(yùn)行結(jié)果及分析5.1程序運(yùn)行結(jié)果5.2運(yùn)行結(jié)果分析在程序運(yùn)行過程中,前面的部分必須有拷貝構(gòu)造函數(shù),因?yàn)楹罄m(xù)需要以對(duì)象為返回值,中間的部分則需要注意在類內(nèi)寫友元的實(shí)

11、現(xiàn)時(shí)不能直接使用類成員,最后的部分若沒拷貝構(gòu)造函數(shù),則指針被提前釋放了,會(huì)輸出大的隨機(jī)數(shù),則不符合題目要求。6 基于MFC的圖形界面程序開發(fā)MFC的圖形界面程序設(shè)計(jì)可在上述類設(shè)計(jì)的基礎(chǔ)上進(jìn)行改造,MFC的圖形界面程序與DOS界面程序的主要不同點(diǎn)是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,主要通過cin,cout等I/O流實(shí)現(xiàn),而MFC的圖形程序界面采用標(biāo)準(zhǔn)Windows窗口和控件實(shí)現(xiàn)輸入輸出,因此必須在MFC類的框架下加入上面所設(shè)計(jì)的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。6.1 基于MFC的圖形界面程序設(shè)計(jì)(1)界面設(shè)計(jì)

12、首先在VC中建立MFC AppWizard(exe)工程,名稱為集合類,并在向?qū)У腟tep1中選擇Dialog based,即建立基于對(duì)話框的應(yīng)用程 圖4 建立MFC AppWizard(exe)工程圖5 建立基于對(duì)話框的應(yīng)用程序?qū)?duì)話框資源中的默認(rèn)對(duì)話框利用工具箱改造成如下界面,如圖6所示。圖6 方集合的并交差界面設(shè)計(jì)圖6所示的界面中包含了3個(gè)Edit控件,6個(gè)Button控件,控件的基本信息列表如下表1所示??丶悇e控件ID控件Caption說明Edit BoxIDC_EDIT1集合1IDC_EDIT2集合2IDC_EDIT3所求集合BottonIDC_BUTTON1計(jì)算交集IDC_BUT

13、TON2計(jì)算并集IDC_BUTTON3計(jì)算差集A-BIDC_BUTTON4計(jì)算差集B-AIDC_BUTTON6驗(yàn)證集合關(guān)系表1 控件基本信息(2)代碼設(shè)計(jì)為了能夠?qū)?duì)話框界面上的控件能夠與代碼聯(lián)系起來,需要為3個(gè)Edit Box控件建立Member Variables,按Ctrl+w鍵進(jìn)入MFC ClassWizard界面,選擇Member Variables選項(xiàng)卡,可顯示成員變量設(shè)置界面,如圖7所示。圖7 成員變量設(shè)置界面通過該界面設(shè)置與3個(gè)Edit Box控件對(duì)應(yīng)的成員變量,具體如表2所示。表2 控件基本信息控件ID成員變量類型成員變量名稱IDC_EDIT1Stringm_1IDC_EDI

14、T2Stringm_2IDC_EDIT3Stringm_3下面是編寫代碼的重要階段,可以借鑒在設(shè)計(jì)基于DOS界面的控制臺(tái)應(yīng)用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。1將JIHE.h文件和JIHE.cpp文件合并成一個(gè)文件,重新命名為JIHE.h,并將其加入MFC工程。2在對(duì)話框類的實(shí)現(xiàn)文件JIHEDlg.cpp中加入#include Jihe.h,以實(shí)現(xiàn)在該文件中可使用Jihe類。3在JIHEDlg.cpp文件中加入以下全局變量的定義,以實(shí)現(xiàn)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運(yùn)行代碼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(重復(fù)輸入!);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(重復(fù)輸入!);m_1=0;m_2=0;UpdateData(0);return 1; return 0;5求相應(yīng)集合的運(yùn)算代碼void CJIHEDlg:Onjiao() UpdateData(1); m_3.Empty(); if(panduanCF() return; CString tem,dem; if(m_1=0 & m_2=0) AfxMessageBox(交集為空,請(qǐng)輸入元素); 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(并集為空,請(qǐng)輸入元素); 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(差集為空,請(qǐng)輸入元素); 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(差集為空,請(qǐng)輸入元素); 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(對(duì)稱差為空,請(qǐng)輸入元素); 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論