版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、封 皮(按學校要求手工填寫)課 程 設(shè) 計 任 務 書學院專業(yè)學生姓名學號設(shè)計題目集合類的設(shè)計與實現(xiàn)內(nèi)容及要求: 1.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;2. 初步掌握程序設(shè)計過程中的結(jié)構(gòu)化程序設(shè)計的一般方法,及數(shù)據(jù)類型在設(shè)計中的應用。 3.能夠利用所學的基本知識和技能,解決簡單的程序設(shè)計問題;通過類與對象的設(shè)計,編制一個能演示執(zhí)行集合的并、交和差運算的程序,要求如下:(1)集合的元素限定為小寫字母字符a,z。(2)演示程序以用戶和計算機的對話方式執(zhí)行。(3)以有序鏈表表示集合。(4)可進一步實現(xiàn)集合的元素判定和子集判定運算。進度安排:第17周:分析題目,查閱課題
2、相關(guān)資料,進行類設(shè)計、算法設(shè)計;第18周:程序的設(shè)計、調(diào)試與實現(xiàn);第19周:程序測試與分析,撰寫課程設(shè)計報告,進行答辯驗收。指導教師(簽字):年 月 日學院院長(簽字)年 月 日目 錄1 需求分析- 1 -2 算法基本原理- 1 -3 類設(shè)計- 1 -4 詳細設(shè)計- 2 -4.1 類的接口設(shè)計- 2 -4.2 類的實現(xiàn)- 2 -4.3 主函數(shù)設(shè)計- 4 -5 DOS界面程序運行結(jié)果及分析- 5-5.1 程序運行結(jié)果- 5 -5.2運行結(jié)果分析- 5 -6 基于MFC的圖形界面程序開發(fā)- 6 -6.1 基于MFC的圖形界面程序設(shè)計- 6 -6.2 程序測試- 17 -6.3 MFC程序編寫總結(jié)-
3、 19 -7 參考文獻- 19 -1 需求分析 1問題描述:用有序單鏈表表示集合,實現(xiàn)集合的交、并、差運算,且空間復雜度為O(1) 2基本功能:可快速的分別求出兩個字符集合的交、并、差。 3輸入和輸出:(1)輸入:在C+環(huán)境下編寫的程序,其輸入是簡單、方便的,即 按提示分別輸入兩集合的元素。l 輸入字符的范圍:小寫字母a,b,.,y,z,大寫字母A,B,.Y,Z,和數(shù)字0,1,.8,9;l 輸入形式:字符集合,按順序大小排序輸入,允許出現(xiàn)重復字符,程序能自動濾去;(2)輸出:程序采用單鏈表的存儲結(jié)構(gòu),使得運算快捷簡便,顯示的結(jié)果也明了。 輸出結(jié)果不含重復或非法字符;2 算法基本原理Setla,
4、b,x,w,Set2a,b,y,z, SetlSet2a,b,x,y,z,w SetlSet2a,b SetlSet2 x,w 3 類設(shè)計從上面的算法分析可以看到,本設(shè)計關(guān)鍵是集合的并,交,差運算??梢远x一個類int_set,然后由該類定義出私有和公有成員函數(shù),為主函數(shù)的執(zhí)行做好鋪墊4 詳細設(shè)計整個程序分為三大塊,先是類的接口,定義出基類后再在類中定義出相關(guān)成員函數(shù):接著是累的實現(xiàn)部分,寫出具體的函數(shù)代碼,用以執(zhí)行相關(guān)功能;最后則是主函數(shù),用一天調(diào)用各個函數(shù)并執(zhí)行相應的輸入輸出功能4.1 類的接口設(shè)計#includeclass int_setprivate:int max_size; int
5、 cur_size;char *p;public:int_set(const int_set & a) /必須有拷貝構(gòu)造函數(shù),因為下面以對象為返回值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 類的實現(xiàn) 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)/注意在類內(nèi)寫友元的實現(xiàn)時不能直接使用類成員 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 主函數(shù)設(shè)計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); /求交集 /*若沒拷貝構(gòu)造函數(shù),則指針被提前釋放了,輸出大的隨機數(shù)*/coutobj1.bing(obj2); /求并集coutobj1.cha(obj2); /差運算5 DOS界面程序運行結(jié)果及分析5.1程序運行結(jié)果5.2運行結(jié)果分析在程序運行過程中,前面的部分必須有拷貝構(gòu)造函數(shù),因為后續(xù)需要以對象為返回值,中間的部分則需要注意在類內(nèi)寫友元的實
11、現(xiàn)時不能直接使用類成員,最后的部分若沒拷貝構(gòu)造函數(shù),則指針被提前釋放了,會輸出大的隨機數(shù),則不符合題目要求。6 基于MFC的圖形界面程序開發(fā)MFC的圖形界面程序設(shè)計可在上述類設(shè)計的基礎(chǔ)上進行改造,MFC的圖形界面程序與DOS界面程序的主要不同點是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實現(xiàn)數(shù)據(jù)輸入輸出,主要通過cin,cout等I/O流實現(xiàn),而MFC的圖形程序界面采用標準Windows窗口和控件實現(xiàn)輸入輸出,因此必須在MFC類的框架下加入上面所設(shè)計的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。6.1 基于MFC的圖形界面程序設(shè)計(1)界面設(shè)計
12、首先在VC中建立MFC AppWizard(exe)工程,名稱為集合類,并在向?qū)У腟tep1中選擇Dialog based,即建立基于對話框的應用程 圖4 建立MFC AppWizard(exe)工程圖5 建立基于對話框的應用程序?qū)υ捒蛸Y源中的默認對話框利用工具箱改造成如下界面,如圖6所示。圖6 方集合的并交差界面設(shè)計圖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驗證集合關(guān)系表1 控件基本信息(2)代碼設(shè)計為了能夠?qū)υ捒蚪缑嫔系目丶軌蚺c代碼聯(lián)系起來,需要為3個Edit Box控件建立Member Variables,按Ctrl+w鍵進入MFC ClassWizard界面,選擇Member Variables選項卡,可顯示成員變量設(shè)置界面,如圖7所示。圖7 成員變量設(shè)置界面通過該界面設(shè)置與3個Edit Box控件對應的成員變量,具體如表2所示。表2 控件基本信息控件ID成員變量類型成員變量名稱IDC_EDIT1Stringm_1IDC_EDI
14、T2Stringm_2IDC_EDIT3Stringm_3下面是編寫代碼的重要階段,可以借鑒在設(shè)計基于DOS界面的控制臺應用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下。1將JIHE.h文件和JIHE.cpp文件合并成一個文件,重新命名為JIHE.h,并將其加入MFC工程。2在對話框類的實現(xiàn)文件JIHEDlg.cpp中加入#include Jihe.h,以實現(xiàn)在該文件中可使用Jihe類。3在JIHEDlg.cpp文件中加入以下全局變量的定義,以實現(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運行代碼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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江安防職業(yè)技術(shù)學院《中學語文課程教學論》2023-2024學年第一學期期末試卷
- 數(shù)獨答案生成器-20220303010135
- 數(shù)字教學實踐報告
- 經(jīng)典搞笑語錄集錦
- 部編版2024-2025學年六年級上語文寒假作業(yè)(七)(有答案)
- 浙江省杭州市拱墅區(qū)源清中學2024-2025學年高一(上)期中物理試卷(含答案)
- 2025屆吉林省前郭爾羅斯蒙古族自治縣第五高級中學高三上學期第五次考試歷史試題(綱要上下 選擇性必修三冊)(含答案解析)
- 《色達佛學院全景》課件
- 伊春職業(yè)學院《臺詞與表演》2023-2024學年第一學期期末試卷
- 二零二五年度城市綜合體土石方運輸及配套設(shè)施合同3篇
- 2025年河南鶴壁市政務服務和大數(shù)據(jù)管理局招聘12345市長熱線人員10人高頻重點提升(共500題)附帶答案詳解
- 建設(shè)項目安全設(shè)施施工監(jiān)理情況報告
- 春節(jié)期間安全施工措施
- 2025年大唐集團招聘筆試參考題庫含答案解析
- 建筑工地春節(jié)期間安全保障措施
- 路面彎沉溫度修正系數(shù)
- TLFSA 003-2020 危害分析與關(guān)鍵控制點(HACCP)體系調(diào)味面制品生產(chǎn)企業(yè)要求
- LY/T 2244.3-2014自然保護區(qū)保護成效評估技術(shù)導則第3部分:景觀保護
- 紀律教育月批評與自我批評五篇
- GB/T 26480-2011閥門的檢驗和試驗
- GB/T 13342-2007船用往復式液壓缸通用技術(shù)條件
評論
0/150
提交評論