2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  一、項(xiàng)目簡(jiǎn)介</b></p><p>  本設(shè)計(jì)將實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器。其功能參照Windows附件中自帶的計(jì)算器。這個(gè)計(jì)算器實(shí)現(xiàn)了簡(jiǎn)單的四則運(yùn)算功能,還實(shí)現(xiàn)了模運(yùn)算和指數(shù)運(yùn)算,具有簡(jiǎn)潔的圖文外觀。它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互讓使用人員能快捷簡(jiǎn)單地進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間。在課程

2、設(shè)計(jì)中,系統(tǒng)開發(fā)平臺(tái)為Windows 7,程序設(shè)計(jì)設(shè)計(jì)語(yǔ)言采用Visual C++,在程序設(shè)計(jì)中,采用了面向?qū)ο蟮慕鉀Q問(wèn)題的方法。</p><p>  在程序設(shè)計(jì)中,通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)模擬計(jì)算器的程序,加深對(duì)語(yǔ)法及語(yǔ)義分析原理的理解,并實(shí)現(xiàn)對(duì)命令語(yǔ)句的靈活應(yīng)用。在程序設(shè)計(jì)中,可以用面向?qū)ο蟪绦蛟O(shè)計(jì)方法解決問(wèn)題。</p><p>  由于多個(gè)函數(shù)均需要訪問(wèn)某些數(shù)據(jù),這些數(shù)據(jù)常被設(shè)計(jì)為全

3、局變量。</p><p>  而在面向?qū)ο蟪绦蛟O(shè)計(jì)中關(guān)鍵是如何將問(wèn)題域中的實(shí)體(即日常所見的概念)抽取出來(lái),作為C++程序中的類,而屬性與行為作為類的兩類要素通常是必不可少的,甚至還應(yīng)考慮類必須滿足的約束。</p><p><b>  二、功能介紹</b></p><p>  它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面;必要的交互信息;簡(jiǎn)

4、約美觀的效果。使用人員能快捷簡(jiǎn)單地進(jìn)行操作。即可單擊按鈕進(jìn)行操作。即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了時(shí)間,對(duì)人們的生活有一定的幫助。</p><p>  (1)包含的功能有:加、減、乘、除運(yùn)算,開方、求模等功能.</p><p>  (2)計(jì)算器上數(shù)字0——9為一個(gè)控件數(shù)組,加、減、乘、除為一個(gè)控件數(shù)組,其余為單一的控件。</p><p&g

5、t;  (3) 輸入的原始數(shù)據(jù)和結(jié)果都顯示在窗口頂部的同一個(gè)標(biāo)簽中。 </p><p>  (4) 計(jì)算功能基本上是用公式計(jì)算方法實(shí)現(xiàn)。</p><p>  (5) 程序可以能自動(dòng)判斷輸出數(shù)據(jù)的正確性,保證不出現(xiàn)結(jié)果中以0開頭等不正常現(xiàn)象。</p><p><b>  功能模塊的實(shí)現(xiàn):</b></p><p>  基于d

6、ialog類添加Caculator類,在這個(gè)類中實(shí)現(xiàn)高級(jí)的按鈕控件。在此類中對(duì)于所有的對(duì)于按鈕的繪制工作都是在對(duì)話框資源管理中完成的,實(shí)現(xiàn)按鈕對(duì)鼠標(biāo)單擊動(dòng)作執(zhí)行不同的計(jì)算,在UpdateData(false)函數(shù)后顯示文本。</p><p><b>  三、系統(tǒng)實(shí)現(xiàn)概述</b></p><p><b>  1、窗體設(shè)計(jì)</b></p>

7、<p>  打開Microsoft Visual C++ 6.0,在文件中點(diǎn)擊新建,在彈出框內(nèi)選擇MFC AppWizard[exe]工程,輸入工程名Calculator及其所在位置,點(diǎn)擊確定,如圖1所示。</p><p><b>  圖1</b></p><p>  將彈出MFC應(yīng)用程序向?qū)?步驟1對(duì)話框,選擇基本對(duì)話框,點(diǎn)擊完成,如圖2所示。<

8、/p><p><b>  圖2</b></p><p>  這樣,MFC AppWizard就建立了一個(gè)基于對(duì)話窗口的程序框架,如圖3所示。</p><p><b>  圖3</b></p><p><b>  2、編輯資源</b></p><p>  (1

9、)編輯對(duì)話框及控件資源 </p><p>  在圖5所示的Resoure View選項(xiàng)卡中打開Dialog資源組,雙擊IDD_CALCULATOR_DIALOG,在右邊的窗口中顯示出待編輯的對(duì)話框。開始擺放控件,包括編輯框和按鈕的創(chuàng)建。而按鈕的創(chuàng)建則以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照以下步驟進(jìn)行操作。</p><p>  a)在圖5中Controls的編輯框按鈕上單擊鼠標(biāo)左鍵,在對(duì)

10、話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷萊單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,如圖4所示,在該對(duì)話框中輸入ID屬性。 </p><p><b>  圖4</b></p><p>  b)在圖3中Controls的按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框上的合適的位置上按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫出一個(gè)大小合

11、適的下壓式按鈕。在按鈕上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)也彈出Push Button屬性對(duì)話框,如圖5所示,在該對(duì)話框中輸入控件的ID值和標(biāo)題。</p><p><b>  圖5 </b></p><p>  按照上面的操作過(guò)程編輯其他按鈕和編輯框等對(duì)象的屬性。</p><p>  利用Visual C++提供的資源編輯器對(duì)對(duì)

12、話框資源進(jìn)行編輯。刪除對(duì)話框中默認(rèn)的OK和Cancel按鈕。添加一個(gè)Edit控件,其控件ID為IDC_EDIT1。添加若干按鈕控件,其ID如表a所示。</p><p><b>  表a </b></p><p>  完成后界面如圖6所示。</p><p><b>  圖6</b></p><p> 

13、?。?)連接變量和代碼</p><p>  a) 給編輯框連接變量。在編輯框上單擊鼠標(biāo)右鍵,在彈出菜單中選擇建立類向?qū)Р藛雾?xiàng),彈出MFC ClassWizard對(duì)話框,選擇Member Variables選項(xiàng)卡,如圖7所示。</p><p><b>  圖7</b></p><p>  在Control IDs列表框中選擇IDC_DISPLAY

14、,單擊Add Variables按鈕,在彈出的對(duì)話框中連接變量m_edit_value。變量類型設(shè)定為CString型。如圖8所示。</p><p><b>  圖8 </b></p><p>  b) 給“1”按鈕連接代碼。在“1”按鈕上單擊鼠標(biāo)右鍵,選擇ClassWizard菜單項(xiàng),在彈出的對(duì)話框中選擇Messages Maps選項(xiàng)卡,然后在Object IDs列

15、表框中選擇IDC_1,在Messages列表框中選擇BN_CLICKED項(xiàng),即選擇單擊按鈕事件,如圖9所示。 </p><p><b>  圖9</b></p><p><b>  (3)菜單的設(shè)計(jì)</b></p><p>  選擇 插入/資源命令,將顯示插入資源對(duì)話框。如圖10所示。選擇Menu,點(diǎn)擊新建即可。</

16、p><p><b>  圖10</b></p><p>  Resoure View選項(xiàng)卡中打開Menu資源組,雙擊IDR_MENU1, 然后給菜單添加相應(yīng)的標(biāo)題,并把每個(gè)菜單對(duì)應(yīng)的ID值與相應(yīng)的按鈕的一致。如圖11所示。</p><p><b>  圖11</b></p><p>  在對(duì)話框的任何一

17、個(gè)空白域單擊鼠標(biāo)右鍵,然后在彈出的快捷菜單中選擇屬性命令,彈出對(duì)話 屬性對(duì)話框,如圖12。在對(duì)話框中的菜單組合框中選擇IDR_MENU1。</p><p><b>  圖12</b></p><p>  最終的得到的界面如圖13。</p><p><b>  圖13</b></p><p><

18、b>  四、關(guān)鍵技術(shù)</b></p><p><b>  (1)操作數(shù)的輸入</b></p><p>  編輯框所關(guān)聯(lián)的變量為m_temp,程序開始時(shí)為零。每按下一個(gè)數(shù)字鍵按鈕,就把它累加到m_temp里并刷新顯示。BOOL型變量UpdateData來(lái)判斷是否有小數(shù)點(diǎn)和一個(gè)整型數(shù)dint來(lái)表示小數(shù)點(diǎn)后的數(shù)據(jù)的位數(shù)。當(dāng)UpdateData=TRUE時(shí),

19、表示有小數(shù)點(diǎn),否則則表示無(wú)小數(shù)點(diǎn)。按下小數(shù)點(diǎn)按鈕后執(zhí)行UpdateData=TRUE。當(dāng)按下一個(gè)數(shù)字鍵時(shí),首先根據(jù)ele判斷是否按下小數(shù)點(diǎn),若有則把小數(shù)點(diǎn)后數(shù)的位數(shù)加1,dint則為此次鍵入的數(shù)所處的位數(shù),將鍵入的數(shù)除以dint個(gè)10然后累加到編輯框所關(guān)聯(lián)的變量m_temp上,若沒(méi)有則把m_temp乘以10,然后累加到編輯框所關(guān)聯(lián)的變量m_temp上。</p><p>  BOOL CCalculatorDlg:

20、:OnInitDialog()</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system menu.</p><p>  // IDM_ABOUTBOX

21、must be in the system command range.</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMen

22、u(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p&g

23、t;  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu

24、);</p><p><b>  }</b></p><p><b>  }</b></p><p>  // Set the icon for this dialog. The framework does this automatically</p><p>  // when the ap

25、plication's main window is not a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  // TODO: Add extra initi

26、alization here</p><p>  OperatorPressed=FALSE;</p><p>  After=FALSE;</p><p>  m_edit_value="0";</p><p>  value1=0,value2=0,result=0;</p><p>  Res

27、tarted=TRUE;</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p>  (2)單目運(yùn)算符功能的實(shí)現(xiàn)</p><p>  由于單目運(yùn)算符中必須有執(zhí)行運(yùn)算的

28、函數(shù),因而頭文件中要加入math.h,如m_temp=sqrt(m_temp).按下按鈕即可實(shí)現(xiàn)其功能。</p><p>  void CCalculatorDlg::OnSquareroot() </p><p><b>  {</b></p><p>  // TODO: Add your control notification hand

29、ler code here</p><p>  UpdateData(TRUE);</p><p>  double m_temp=atof(m_edit_value);//將字符串類型的m_edit_value轉(zhuǎn)化為浮點(diǎn)數(shù)類型的m_temp</p><p>  if(m_temp>=0)</p><p><b>  {<

30、;/b></p><p>  m_temp=sqrt(m_temp);//求開方</p><p>  m_edit_value.Format("%g",m_temp);//將m_temp的值返回到m_edit_value中,默認(rèn)精度為六位</p><p>  UpdateData(false);</p><p>&l

31、t;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox("負(fù)數(shù)不能開方");</p><p><b>  }</b></p>&l

32、t;p><b>  }</b></p><p>  (3)雙目運(yùn)算符功能的實(shí)現(xiàn)</p><p>  雙目運(yùn)算符需要兩個(gè)操作數(shù)才能運(yùn)算,所以在執(zhí)行雙目運(yùn)算符按鈕的函數(shù)代碼中,要把m_temp中的值保存到變量temp2中,然后把m_temp清零。這樣即可保存第一個(gè)操作數(shù)。另外先定義了一個(gè)整形變量addt,在不同的雙目運(yùn)算符中給addt賦不同的值,然后在等號(hào)中用swi

33、tch語(yǔ)句來(lái)匹配addt值來(lái)判斷需要執(zhí)行何種雙目運(yùn)算。為實(shí)現(xiàn)連續(xù)運(yùn)算,程序有所改動(dòng),參見(6)。</p><p>  (4)退格鍵功能的實(shí)現(xiàn)</p><p>  當(dāng)按下一次退格按鈕時(shí),若m_temp為整數(shù),只需對(duì)其中數(shù)據(jù)除以10再取整即可,若按下一次退格按鈕為小數(shù),則根據(jù)小數(shù)點(diǎn)后數(shù)據(jù)的位數(shù)dint進(jìn)行操作,先對(duì)m_temp執(zhí)行(dint-1)次乘以10運(yùn)算,然后取整,接著執(zhí)行(dint-1

34、)次除以10的運(yùn)算即可。完成后需要把dint將減小1。</p><p>  void CCalculatorDlg::OnBackspace() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p>&

35、lt;p>  UpdateData(true);</p><p>  char str[256];</p><p>  int length;</p><p>  length = m_edit_value.GetLength();//得到m_edit_value的長(zhǎng)度,賦給length</p><p>  for(int i=0;i&

36、lt;length-1;i++)</p><p><b>  {</b></p><p>  str[i]=m_edit_value.GetAt(i);//將m_edit_value中(除最后一個(gè))每個(gè)位置的值賦給str</p><p><b>  }</b></p><p>  m_edit_va

37、lue.Format("%g",atof(str));//將字符串類型的str轉(zhuǎn)化為浮點(diǎn)數(shù)類型,并返回給m_edit_value</p><p>  UpdateData(false);</p><p><b>  }</b></p><p>  對(duì)于單目運(yùn)算符:每次運(yùn)算完之后都會(huì)對(duì)m_temp清零,因此其結(jié)果也要賦給tem

38、p2,下次運(yùn)算是則會(huì)用到num2,于是第一次運(yùn)算時(shí)直接將m_temp 的值賦給temp2,對(duì)其進(jìn)行運(yùn)算。以開根號(hào)為例,在消息處理函數(shù)代碼中將“m_temp=sqrt(m_temp);”改為“temp2=m_temp; m_temp=sqrt(temp2); temp2=m_temp;”。但是第一次運(yùn)算執(zhí)行完成之后m_temp被清零,所以之后將m_temp的值不能賦給temp2,代碼改為 “if(m_temp>=0) m_temp=

39、sqrt(temp2); temp2m_temp;”。其他單目運(yùn)算符同理。</p><p>  為實(shí)現(xiàn)連續(xù)運(yùn)算是不需要按下等號(hào)即可實(shí)現(xiàn),又在所有的運(yùn)算符按鈕的消息處理函數(shù)代碼前加上了“if(addt!=0)Onequal();”。既若之前有按下雙目運(yùn)算符和兩個(gè)操作數(shù)則連續(xù)運(yùn)算再按下任一運(yùn)算符時(shí)會(huì)自動(dòng)調(diào)用等號(hào)的處理函數(shù)將上次的運(yùn)算完成并保存結(jié)果方便下一次的運(yùn)算。</p><p><b&

40、gt;  五、進(jìn)一步的設(shè)想</b></p><p>  根據(jù)實(shí)驗(yàn)結(jié)果,本設(shè)計(jì)基本完成了設(shè)計(jì)要求,但是由于鍵盤數(shù)目的限制,數(shù)碼數(shù)目的限制使得這個(gè)計(jì)算器不能擁有強(qiáng)大的計(jì)算功能。還有就是考慮到課程時(shí)間的限制和本人技術(shù)的水平,沒(méi)有更多的完善系統(tǒng)功能,而是盡量簡(jiǎn)單的設(shè)計(jì)。如果有時(shí)間和更多的經(jīng)歷投入,相信本設(shè)計(jì)可以達(dá)到更好的功能。</p><p><b>  例如:</b&

41、gt;</p><p><b>  一鍵清空按鈕</b></p><p><b>  動(dòng)態(tài)設(shè)置計(jì)算器大小</b></p><p><b>  擁有歷史數(shù)據(jù)記憶</b></p><p><b>  對(duì)弧度、梯度的運(yùn)算</b></p><p

42、><b>  更多的數(shù)進(jìn)制轉(zhuǎn)換</b></p><p><b>  一些統(tǒng)計(jì)函數(shù)的運(yùn)算</b></p><p><b>  個(gè)人貢獻(xiàn)</b></p><p>  幾個(gè)星期的課程設(shè)計(jì)以后,根據(jù)老師的指導(dǎo)書與討論小組的共同努力,終于把這個(gè)簡(jiǎn)易的計(jì)算器完成了。在整個(gè)工作任務(wù)中,我負(fù)責(zé)了圖形設(shè)計(jì)這個(gè)部分

43、,跟MFC打了一下交道。盡管跟windows附件里的計(jì)算器外觀差遠(yuǎn)了,但我還是盡量把它做得“人性化”一點(diǎn)。</p><p>  猶記得接到課程設(shè)計(jì)任務(wù)之后,毫無(wú)經(jīng)驗(yàn),幸虧下課時(shí)與一些同學(xué)一起圍觀老師之后,得知參考叢書里面含有MFC,因此就去泡圖書館,一心想找到與自己課題有關(guān)的書籍。通過(guò)不斷的篩選,終于在我們學(xué)校的圖書館里找到了所謂的“神器”。</p><p>  一個(gè)不懂得好好使用他的工具

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論