版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
沈陽理工大學課程設計專用紙摘 要隊列類模板的設計并實現(xiàn),隊列采用循環(huán)隊列實現(xiàn),數(shù)據(jù)元素可以是char,int,float等多種數(shù)據(jù)類型,包括實現(xiàn)初始化隊列操作,建立一個空隊列;實現(xiàn)清空隊列操作;實現(xiàn)判斷隊列是否為空等操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。很多自然科學和工程技術中的問題的解決最終都歸結到隊列問題的處理, 模板是處理問題很經(jīng)典的方法,由它改進、變形得到的類模板,是一種效率很高、較為常用的方法。本文采用C++語言實現(xiàn)了對隊列的各個操作,設計了隊列類,采用 VisualC++6.0的控制臺工程和MFC工程分別實現(xiàn)了對隊列的處理。關鍵詞:隊列;類模板;VisualC++6.0;MFC工程I沈陽理工大學課程設計專用紙目錄1需求分析.............................................................................................................................12算法基本原理.....................................................................................................................13類設計.................................................................................................................................23.1類的概述..........................................................................................................................23.2類的初始定義..................................................................................................................23.3類的實現(xiàn)..........................................................................................................................34基于控制臺的應用程序.....................................................................................................54.1主函數(shù)設計......................................................................................................................54.2運行結果及分析..............................................................................................................85基于MFC的應用程序.....................................................................................................105.1圖形界面設計................................................................................................................105.2程序代碼設計................................................................................................................125.3運行結果及分析............................................................................................................19結論......................................................................................................................................23參考文獻..................................................................................................................................24II沈陽理工大學課程設計專用紙需求分析需求分析其中包含兩個方面:1)類模板可以使類中的數(shù)據(jù)成員、成員函數(shù)的參數(shù)及成員函數(shù)的返回值能根據(jù)模板參數(shù)匹配情況取任意數(shù)據(jù)類型。這種類型既可以是C++預定義的數(shù)據(jù)類型,也可以是用戶自定義的數(shù)據(jù)類型。2)隊列在程序設計中也經(jīng)常出現(xiàn),一個最典型的例子就是操作系統(tǒng)中的作業(yè)排隊。在允許多道程序運行的計算機系統(tǒng)中,同時有幾個作業(yè)運行,如果運行的結果都需要通過通道輸出,那就要按請求輸出的先后次序排隊。每當通道傳輸完畢可以接受新的輸出任務時,隊頭的作業(yè)先從隊列中退出作輸出操作,凡是申請輸出的作業(yè)都從隊尾進入隊列。算法基本原理實現(xiàn)隊列的基本操作包含以下幾個步驟:1)初始化一個循環(huán)隊列,和順序棧相類似,在隊列的順序存儲結構中,除了用一組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的元素之外,尚需附設兩個指針front和rear分別指示隊列頭元素及隊列尾元素的位置。2)實現(xiàn)清空隊列操作,直接讓類Queue中的private成員全部清零,從而實現(xiàn)隊列的清空。3)實現(xiàn)判斷隊列是否為空的操作,如果該隊列中成員count為零的話,便直接輸出該隊列為空。4)實現(xiàn)求隊列長度的操作,直接輸出當前情況下的成員count的值。(5)實現(xiàn)返回隊首元素的操作,由于存在 front直接指向著對首,所以直接輸出該隊首元素即q[front]。6)實現(xiàn)入隊操作,在count++的情況下,讓輸入的值賦于q[rear++],即實現(xiàn)了在隊尾插入的功能。7)實現(xiàn)出隊操作,在count--的情況下,讓q[front]=q[front+1],即實現(xiàn)了在隊首刪除的功能。(8)實現(xiàn)隊列的遍歷操作,輸出隊列的每個元素,利用 for循環(huán)直接輸出q[]數(shù)組1沈陽理工大學課程設計專用紙中所有的元素。類設計3.1類的概述對于基類Queue來講:私有成員包括了描述一個隊列必須的對首(front)、隊尾(rear)、即隊總數(shù)(count)。另外還有用于存放隊列數(shù)據(jù)的一個數(shù)組qlist[MaxQSize]。公有成員則包括了各個函數(shù),Queue(void)為構造函數(shù),QDelete()為實現(xiàn)隊列的刪除的函數(shù),QInsert()為實現(xiàn)隊列的插入的函數(shù),ClearQueue()為實現(xiàn)隊列的清空的函數(shù),QLength()為計算求出隊列的長度的函數(shù),QFront()為找到隊列的隊首元素的函數(shù),QEmpty()為判斷隊列是否為空的函數(shù),PrintQueue()輸出隊列的函數(shù)。對于模板類來講:由于要求的是可以執(zhí)行 int、char、float三種類型的數(shù)據(jù),所以我們在主函數(shù)中定義了三個成員Queue<int>s、Queue<char>z、Queue<float>y,用于分別調用這三種類型進行操作處理。3.2類的初始定義對類Queue定義如下:#include<iostream>#include<stdlib.h>usingnamespacestd;constintMaxQSize=20;template<classT> //模板聲明classQueue{ //類Queue的聲明private:intcount;intfront;intrear; //類Queue私有成員聲明Tqlist[MaxQSize];public:Queue(void); //構造函數(shù)2沈陽理工大學課程設計專用紙voidQDelete(); //實現(xiàn)隊列的刪除voidQInsert(); //實現(xiàn)隊列的插入voidClearQueue(); //實現(xiàn)隊列的清空voidQLength(); //計算求出隊列的長度voidQFront(); //找到隊列的隊首元素voidQEmpty(); //判斷隊列是否為空voidPrintQueue(); //輸出這個隊列};3.3類的實現(xiàn)對類Queue中的各個成員函數(shù)進行定義如下:template<classT>Queue<T>::Queue(void):front(0),rear(0),count(0) //初始化{}template<classT>voidQueue<T>::QDelete(){//刪除Ttemp;if(count==0){cout<<"這是個空的隊列!"<<endl;exit(1);}temp=qlist[front];count--;front=(front+1)%MaxQSize;}template<classT>voidQueue<T>::QInsert(){ //插入chara; Titem;3沈陽理工大學課程設計專用紙if(count==MaxQSize){cout<<"這是個滿的隊列!"<<endl;exit(1);}while(1){cout<<"輸入數(shù)據(jù)請按Y/y不輸入按N/n:";cin>>a;if(a=='Y'||a=='y'){cout<<"輸入隊列的數(shù)據(jù):"<<endl;cin>>item;count++;qlist[rear]=item;rear=(rear+1)%MaxQSize;}elsebreak;}}template<classT>voidQueue<T>::QLength(){//長度cout<<"該隊列長度為:"<<count<<endl;}template<classT>voidQueue<T>::QFront(){//隊首cout<<"該隊列隊首元素為:"<<qlist[front]<<endl;}template<classT>4沈陽理工大學課程設計專用紙voidQueue<T>::ClearQueue(){ //清空count=0; front=0; rear=0;}template<classT>voidQueue<T>::QEmpty(){//判斷if(count==0)cout<<"該隊列為空!"<<endl;elsecout<<"該隊列不為空!"<<endl;}template<classT>voidQueue<T>::PrintQueue(){//輸出inti;for(i=0;i<count;i++){cout<<qlist[i]<<" ";}cout<<endl;}intIfContinue(){ //判斷是否繼續(xù)執(zhí)行函數(shù)的函數(shù)chari;cout<<"繼續(xù)執(zhí)行函數(shù)請輸入 Y/y:"<<endl;cin>>i;if(i=='Y'||i=='y')return0;elseexit(1);};5沈陽理工大學課程設計專用紙基于控制臺的應用程序4.1主函數(shù)設計分別定義了int型、float型、char型的隊列類型用于程序的選擇及處理具體代碼如下:#include<iostream>#include<stdlib.h>usingnamespacestd;constintMaxQSize=20;voidmain(){intc,d;Queue<int>s; Queue<char>z; Queue<float>y;cout<<"這是個隊列類模板的設計與實現(xiàn)的程序 "<<endl;cout<<"請選擇要處理的隊列的數(shù)據(jù)類型:"<<endl<<"1.int 型 2.char型3.float型"<<endl;cin>>c;switch(c){case1:{while(1){cout<<"1.初始化 2.刪除 3.長度 4.隊首元素 5.清空 6.判斷 7.輸出"<<endl;cin>>d;switch(d){case1:{s.QInsert();IfContinue();}break;case2:{s.QDelete();IfContinue();}break;case3:{s.QLength();IfContinue();}break;case4:{s.QFront();IfContinue();}break;case5:{s.ClearQueue();IfContinue();}break;case6:{s.QEmpty();IfContinue();}break;case7:{s.PrintQueue();IfContinue();}break;default:break;6沈陽理工大學課程設計專用紙}}}break;case2:{while(1){cout<<"1.初始化 2.刪除 3.長度 4.隊首元素 5.清空 6.判斷 7.輸出"<<endl;cin>>d;switch(d){case1:{z.QInsert();IfContinue();}break;case2:{z.QDelete();IfContinue();}break;case3:{z.QLength();IfContinue();}break;case4:{z.QFront();IfContinue();}break;case5:{z.ClearQueue();IfContinue();}break;case6:{z.QEmpty();IfContinue();}break;case7:{z.PrintQueue();IfContinue();}break;default:break;}}}break;case3:{while(1){cout<<"1.初始化 2.刪除 3.長度 4.隊首元素 5.清空 6.判斷 7.輸出"<<endl;cin>>d;switch(d){case1:{y.QInsert();IfContinue();}break;case2:{y.QDelete();IfContinue();}break;case3:{y.QLength();IfContinue();}break;case4:{y.QFront();IfContinue();}break;case5:{y.ClearQueue();IfContinue();}break;case6:{y.QEmpty();IfContinue();}break;case7:{y.PrintQueue();IfContinue();}break;default:break;7沈陽理工大學課程設計專用紙}}}break;default:break;}}4.2運行結果及分析程序對int型數(shù)據(jù)進行操作的運行的結果如圖 1所示。選擇1開始,再次選擇 1進行插入操作。每次輸入數(shù)據(jù)都會顯示"輸入數(shù)據(jù)請按Y/y不輸入按N/n:"進行判斷是否繼續(xù)插入數(shù)據(jù)。依次輸入 23,34,54后進入菜單選擇其他操作,可以看到:“1.初始化2.刪除3.長度4.隊首元素 5.清空6.判斷7.輸出,”這里先選擇 3判斷長度為 3。繼續(xù)執(zhí)行程序輸出隊首為 23。選擇7輸出整個隊列“23 34 54”,選擇5清空了隊列,再選擇6判斷出隊列為空,程序結束。圖1 int型數(shù)據(jù)運行結果8沈陽理工大學課程設計專用紙程序對char型數(shù)據(jù)進行操作的運行的結果如圖 2所示。選擇2開始,再次選擇 1進行插入操作。每次輸入數(shù)據(jù)都會顯示"輸入數(shù)據(jù)請按Y/y不輸入按N/n:"進行判斷是否繼續(xù)插入數(shù)據(jù)。依次輸入f,g后進入菜單選擇其他操作,可以看到界面顯示:“1.初始化2.刪除3.長度4.隊首元素5.清空6.判斷7.輸出,”選擇7輸出整個隊列“fg”。再選擇3輸出隊列長度為2,結束程序。圖2 char型數(shù)據(jù)運行結果程序繼續(xù)對float型數(shù)據(jù)進行操作的運行的結果如圖 3所示。選擇3開始,再次選擇1進行插入操作。每次輸入數(shù)據(jù)都會顯示"輸入數(shù)據(jù)請按Y/y不輸入按N/n:"進行判斷是否繼續(xù)插入數(shù)據(jù)。依次輸入1.26,4.52,6.51后進入菜單選擇其他操作,可以看到:“1.初始化2.刪除3.長度4.隊首元素 5.清空6.判斷7.輸出?!边x擇7輸出整個隊列“1.264.526.51”,選擇2刪除了隊首元素,再選擇 7輸出現(xiàn)在的隊列“1.26 4.52”,結束程序。9沈陽理工大學課程設計專用紙圖3 float型數(shù)據(jù)運行結果基于MFC的應用程序MFC的圖形界面程序設計可在上述類設計的基礎上進行改造, MFC的圖形界面程序與DOS界面程序的主要不同點是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實現(xiàn)數(shù)據(jù)輸入輸出,主要通過cin,cout等I/O流實現(xiàn),而MFC的圖形程序界面采用標準Windows窗口和控件實現(xiàn)輸入輸出,因此必須在MFC類的框架下加入上面所設計的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。5.1圖形界面設計首先在VC中建立MFCAppWizard(exe)工程,名稱為 GassineGU,并在向導的Step1中選擇Dialogbased,即建立基于對話框的應用程序,如圖 4圖5所示。10沈陽理工大學課程設計專用紙圖4建立MFCAppWizard(exe)工程圖5建立基于對話框的應用程序11沈陽理工大學課程設計專用紙將對話框資源中的默認對話框利用工具箱改造成如圖 6所示界面。圖6默認對話框圖6所示的界面中包含了1個StaticText控件,4個Button控件,和9個EditBox控件,控件的基本信息列表如表控件類別 控件IDStaticText IDC_STATICIDC_BUTTON_ReadIDC_BUTTON_QingBottonIDC_BUTTON_DelIDC_BUTTON_InsIDC_EDI1~IDC_EDI8EditBoxIDC_EDI9
所示。表1控件基本信息控件Caption說明隊列讀入數(shù)據(jù)清空隊列刪除插入隊列的8個元素要插入的數(shù)據(jù)5.2程序代碼設計為了能夠將對話框界面上的控件能夠與代碼聯(lián)系起來, 需要為9個EditBox控件建立MemberVariables,按Ctrl+w鍵進入MFCClassWizard界面,選擇MemberVariables選項卡,可顯示成員變量設置界面,如圖 7所示。12沈陽理工大學課程設計專用紙圖7成員變量設置界面下面是編寫代碼的重要階段,可以借鑒在設計基于 DOS界面的控制臺應用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內容如下:隊列Dlg.cpp:implementationfile#include"隊列.h"#in#include"stdafx.h"clude"隊列Dlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifclassCAboutDlg:publicCDialog{13沈陽理工大學課程設計專用紙public:CAboutDlg();//DialogData//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport//}}AFX_VIRTUALImplementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)//{{AFX_MSG_MAP(CAboutDlg)14沈陽理工大學課程設計專用紙//}}AFX_MSG_MAPEND_MESSAGE_MAP()CMyDlg::CMyDlg(CWnd*pParent/*=NULL*/):CDialog(CMyDlg::IDD,pParent){//{{AFX_DATA_INIT(CMyDlg)m_1=0;m_2=0;m_3=0;m_4=0;m_6=0;m_5=0;m_7=0;m_8=0;m_9=0;//}}AFX_DATA_INITm_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCMyDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDlg)DDX_Text(pDX,IDC_EDI1,m_1);DDX_Text(pDX,IDC_EDI2,m_2);DDX_Text(pDX,IDC_EDI3,m_3);DDX_Text(pDX,IDC_EDI4,m_4);DDX_Text(pDX,IDC_EDI6,m_6);DDX_Text(pDX,IDC_EDI5,m_5);DDX_Text(pDX,IDC_EDI7,m_7);DDX_Text(pDX,IDC_EDI8,m_8);DDX_Text(pDX,IDC_EDI9,m_9);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg,CDialog)15沈陽理工大學課程設計專用紙//{{AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_Qing,OnBUTTONQing)ON_BN_CLICKED(IDC_BUTTON_Read,OnBUTTONRead)ON_BN_CLICKED(IDC_BUTTON_Del,OnBUTTONDel)ON_BN_CLICKED(IDC_BUTTON_Ins,OnBUTTONIns)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CMyDlgmessagehandlersBOOLCMyDlg::OnInitDialog(){CDialog::OnInitDialog();Add"About..."menuitemtosystemmenu.IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}16沈陽理工大學課程設計專用紙}Settheiconforthisdialog.Theframeworkdoesthisautomaticallywhentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon,FALSE); //SetsmalliconreturnTRUE; //returnTRUE unlessyousetthefocustoacontrol}voidCMyDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}}Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelowtodrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,thisisautomaticallydoneforyoubytheframework.voidCMyDlg::OnPaint(){if(IsIconic()){CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);intcxIcon=GetSystemMetrics(SM_CXICON);17沈陽理工大學課程設計專用紙intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;Drawtheicondc.DrawIcon(x,y,m_hIcon);}else{CDialog::OnPaint();}}HCURSORCMyDlg::OnQueryDragIcon(){return(HCURSOR)m_hIcon;}voidCMyDlg::OnBUTTONQing(){UpdateData(true);m_1=0; m_5=0;m_2=0; m_6=0;m_3=0; m_7=0;m_4=0; m_8=0;UpdateData(false);}voidCMyDlg::OnBUTTONRead(){UpdateData(true);m_1=56; m_2=57;m_3=42; m_4=2;18沈陽理工大學課程設計專用紙m_5=11; m_6=0;m_7=0; m_8=0;UpdateData(false);}voidCMyDlg::OnBUTTONDel(){UpdateData(true);if(m_1!=0)m_1=0;elseif(m_2!=0)m_2=0;elseif(m_3!=0)m_3=0;elseif(m_4!=0)m_4=0;elseif(m_5!=0)m_5=0;elseif(m_6!=0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026內蒙古呼和浩特市賽罕區(qū)烏尼爾東街幼兒園(公辦)招聘考試參考題庫及答案解析
- 四川中煙工業(yè)有限責任公司2026年度高層次人才招聘考試參考試題及答案解析
- 2026年寧德市職業(yè)教育集團招聘編外3人考試備考題庫及答案解析
- 2026年西安太白學校教師招聘考試參考題庫及答案解析
- 2026年湖南理工職業(yè)技術學院高職單招職業(yè)適應性考試備考題庫有答案解析
- 2026中國中煤黨校公開招聘8人考試參考試題及答案解析
- 全球Mini LED背光產業(yè)鏈高質量發(fā)展白皮書
- 2026漢中腦安康復醫(yī)院見習崗位招聘考試備考題庫及答案解析
- 2026廣東深圳市龍崗區(qū)某機關單位辦事員招聘1人考試備考題庫及答案解析
- 2026廣東茂名市信宜市選聘市外教師21人考試備考試題及答案解析
- 售后服務流程管理手冊
- 2020-2021學年新概念英語第二冊-Lesson14-同步習題(含答案)
- 醫(yī)院信訪維穩(wěn)工作計劃表格
- 地下車庫建筑結構設計土木工程畢業(yè)設計
- GB/T 2261.4-2003個人基本信息分類與代碼第4部分:從業(yè)狀況(個人身份)代碼
- GB/T 16601.1-2017激光器和激光相關設備激光損傷閾值測試方法第1部分:定義和總則
- PDM結構設計操作指南v1
- 投資學-課件(全)
- 獼猴桃優(yōu)質栽培關鍵技術課件
- 科目一駕考測試題100道
- 兒童吸入性肺炎的診斷與治療課件
評論
0/150
提交評論