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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  通信與信息工程學(xué)院</b></p><p>  2010 /2011 學(xué)年 第 2 學(xué)期</p><p>  課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告</p><p>  模 塊 名 稱 VC++軟件設(shè)計(jì)</p><p>  專 業(yè) 電子信息工程 </p&g

2、t;<p>  學(xué) 生 班 級(jí) </p><p>  學(xué) 生 學(xué) 號(hào) </p><p>  學(xué) 生 姓 名 </p><p>  指 導(dǎo) 教 師 </p><p>  

3、日 期 2012 年 5 月 </p><p><b>  實(shí)驗(yàn)內(nèi)容</b></p><p>  本課程設(shè)計(jì)分成練習(xí)題和綜合題兩部分。基礎(chǔ)練習(xí)題11道中每個(gè)學(xué)生選擇5個(gè)完成,要求如下:必做:1;2,3選擇其一;4,5選擇其一;6- 11選擇其二。綜合課題任選一道。</p><p><b>  一 、 練習(xí)題:

4、</b></p><p><b>  1、基本環(huán)境調(diào)試</b></p><p>  將例程1用VC++打開,修改錯(cuò)誤使程序能夠運(yùn)行。理解編譯錯(cuò)誤,運(yùn)行錯(cuò)誤等。</p><p><b>  2、文件操作</b></p><p>  寫一個(gè)檔案文件保存以下內(nèi)容:</p><

5、;p>  學(xué)生姓名,性別,年齡,家庭住址,電話,電子郵件,愛好等。</p><p>  再以上基礎(chǔ)上進(jìn)行該文件的讀出并可編輯瀏覽顯示。</p><p><b>  3、圖形編程</b></p><p>  提供一個(gè)圖形工具界面,讓用戶能夠畫出直線,橢圓,多邊形等幾何元素,結(jié)果可以保存并可讀出。</p><p>&l

6、t;b>  4、字符串操作</b></p><p>  能夠從磁盤上選擇打開文本文檔,讀入所有內(nèi)容并顯示,統(tǒng)計(jì)所有的字符數(shù)目,單詞數(shù)目,中文字符串的數(shù)目。</p><p><b>  5、動(dòng)態(tài)鏈接庫(kù)</b></p><p>  目的:了解MFC支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC常規(guī)DLL, MFC擴(kuò)展庫(kù)。掌握封裝D

7、LL的基本方法。</p><p><b>  二、綜合題:</b></p><p><b>  文件編輯</b></p><p>  創(chuàng)建一個(gè)多文檔工程,實(shí)現(xiàn)對(duì)于磁盤文件的瀏覽,編輯等功能。</p><p>  能夠以文本文件,二進(jìn)制文件方式打開文件;</p><p><

8、;b>  支持剪貼板功能;</b></p><p>  支持搜索,查找,替換功能;</p><p><b>  支持文件定位;</b></p><p><b>  基本步驟:</b></p><p>  (1)數(shù)據(jù)庫(kù)后臺(tái)設(shè)計(jì),數(shù)據(jù)準(zhǔn)備;</p><p>&l

9、t;b>  (2)界面設(shè)計(jì);</b></p><p><b>  (3)功能實(shí)現(xiàn);</b></p><p><b>  (4)測(cè)試。</b></p><p><b>  實(shí)驗(yàn)環(huán)境</b></p><p><b>  VC++ 6.0</b>

10、;</p><p><b>  實(shí)驗(yàn)步驟</b></p><p><b>  基礎(chǔ)題</b></p><p>  題目1 基本環(huán)境調(diào)測(cè)</p><p><b>  1.1實(shí)驗(yàn)?zāi)康模?lt;/b></p><p>  該程序計(jì)算任意數(shù)目以內(nèi)的素?cái)?shù)并且輸出,要輸入

11、范圍參數(shù)。修改給出的這段程序,使之能夠運(yùn)行,理解編譯錯(cuò)誤,運(yùn)行錯(cuò)誤等。</p><p><b>  1.2程序說明:</b></p><p>  本題是一道改錯(cuò)題,根據(jù)已經(jīng)給出的例程1進(jìn)行改錯(cuò)及完善的操作。打開VC++6.0,將例程1打開,點(diǎn)編譯時(shí)會(huì)提示有</p><p>  根據(jù)錯(cuò)誤所在行數(shù),分析代碼修改代碼,其中的一個(gè)錯(cuò)誤是error 是C

12、2106: '=' : left operand must be l-value混淆了邏輯的等于號(hào)和賦值的等號(hào);還有的error 是C2181: illegal else without matching if,if少了一個(gè)配套的大括號(hào)。重新編譯,鏈接都沒有錯(cuò)誤,在運(yùn)行的時(shí)候,當(dāng)輸入100,200等較大的數(shù)求所有素?cái)?shù)時(shí)出現(xiàn)下面的狀況:只需將存放素?cái)?shù)的數(shù)組容量變大,變?yōu)镻rimes[200]或更大</p>&

13、lt;p><b>  1.3測(cè)試結(jié)果:</b></p><p>  總結(jié)分析:在調(diào)試的過程中,通過雙擊錯(cuò)誤提示很輕松的將前兩個(gè)編譯錯(cuò)誤很容易改出來了,存放素?cái)?shù)的數(shù)組定義的太小而導(dǎo)致的問題則比較隱蔽,通過這個(gè)題目我對(duì)compiling,linking,build有了進(jìn)一步的理解。</p><p><b>  1.4程序:</b></p&

14、gt;<p>  void CFund1Dlg::OnButton1() </p><p><b>  {</b></p><p>  UpdateData();</p><p>  int Primes[200];//存放素?cái)?shù)的數(shù)組.</p><p>  int index=0;</p>&

15、lt;p>  //簡(jiǎn)單的求素?cái)?shù)算法.</p><p>  bool flag=true;</p><p>  for(int m=2;m<=m_limit;m++)</p><p><b>  { </b></p><p>  for(int i=2;i<m;i++)</p><

16、;p><b>  {</b></p><p>  if(m%i==0)</p><p><b>  {</b></p><p>  flag=false;</p><p><b>  break;}</b></p><p><b>  e

17、lse</b></p><p>  flag=true;</p><p><b>  }</b></p><p>  if(flag==true)</p><p>  Primes[index++]=m;</p><p><b>  } </b></p&g

18、t;<p>  CWnd *pWnd=GetDlgItem(IDC_STATICOUTPUT);</p><p>  CString str;</p><p>  str.Format("%d以內(nèi)的素?cái)?shù)有%d個(gè):\n\n",m_limit,index);</p><p>  for(int i=0;i<index;i++){&

19、lt;/p><p>  char buf[10];</p><p>  sprintf(buf,"%d ",Primes[i]);</p><p><b>  str+=buf;</b></p><p><b>  }</b></p><p>  pWnd-&

20、gt;SetWindowText(str);</p><p><b>  }</b></p><p><b>  題目2 文件操作</b></p><p><b>  2.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  熟練掌握文件操作,學(xué)會(huì)用Write() 函數(shù)和Read()函數(shù)寫文

21、件和讀文件</p><p>  學(xué)會(huì)建立MFC工程提供比較直觀的對(duì)話框界面供瀏覽 </p><p><b>  2.2程序說明:</b></p><p>  系統(tǒng)提供了一個(gè)控件面板,用鼠標(biāo)選中我們需要的控件,將其放置對(duì)話框,設(shè)計(jì)出我們需要的程序界面。然后在建立類向?qū)е袨榭丶P(guān)聯(lián)一個(gè)變量,分別為m_name,m_age,m_phone,m_ema

22、il,m_address,m_hoppy,均為Cstring類型。然后就是編寫控件消息處理函數(shù),我們需要編寫的是void CMyDlg::OnSave() ,void CMyDlg::OnOpen() ,分別對(duì)應(yīng)控件“打開”“保存”,還需要編寫voidCMyDlg::Display(StuInfo *si)顯示函數(shù)。這樣,這個(gè)程序的基本功能就滿足要求了。</p><p><b>  2.3流程圖:<

23、;/b></p><p><b>  2.4測(cè)試結(jié)果:</b></p><p>  總結(jié)分析:本題主要考察要求的是我們能否學(xué)會(huì)建立MFC工程提供比較直觀的對(duì)話框界面供瀏覽,并編寫相應(yīng)的事件函數(shù),以及熟練掌握文件操作,學(xué)會(huì)用Write() 函數(shù)和Read()函數(shù)寫文件和讀文件。</p><p><b>  2.5關(guān)鍵程序:<

24、/b></p><p><b>  //顯示函數(shù)</b></p><p>  void CMyDlg::Display(StuInfo *si)</p><p><b>  {</b></p><p>  //StuInfo si=*m_StuIndex;</p><p&g

25、t;  m_name=si->name;</p><p>  m_age=si->age;</p><p>  m_phone=si->phone;</p><p>  m_email=si->email;</p><p>  m_hoppy=si->hoppy;</p><p>  m_

26、address=si->address;</p><p>  UpdateData(FALSE); //UpdateData(FALSE)是將控件的關(guān)聯(lián)變量的值傳給控件并改變控件狀態(tài)</p><p><b>  }</b></p><p><b>  //保存函數(shù)</b></p><p> 

27、 void CMyDlg::OnSave() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData(); //UpdateData() 是MFC的窗口函數(shù),用來刷新數(shù)據(jù)的<

28、;/p><p>  StuInfo si;</p><p>  memset(&si,0,sizeof(StuInfo)); //memset() 函數(shù)常用于內(nèi)存空間初始化</p><p>  strcpy(si.name,m_name);</p><p>  strcpy(si.phone,m_phone);</p>&

29、lt;p>  strcpy(si.email,m_email);</p><p>  strcpy(si.address,m_address);</p><p>  strcpy(si.hoppy,m_hoppy);</p><p>  strcpy(si.age,m_age);</p><p>  // write into the

30、file</p><p>  CFileDialog fileDlg(FALSE);</p><p>  fileDlg.m_ofn.lpstrFilter="Stud Info(*.si)\0*.si\0All Files(*.*)\0*.*\0\0";</p><p>  fileDlg.m_ofn.lpstrDefExt="si&

31、quot;;</p><p>  if(IDOK==fileDlg.DoModal())</p><p><b>  {</b></p><p>  CFile file(fileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite);</p><p>  fil

32、e.Write(&si, sizeof(StuInfo));</p><p>  file.Close();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //打開文件函數(shù)</b></p>&l

33、t;p>  void CMyDlg::OnOpen() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  CFileDialog fileDlg(TRUE); //構(gòu)造對(duì)話框?qū)ο螅‵ALSE)

34、表示保存(TRUE)表示打開</p><p>  fileDlg.m_ofn.lpstrFilter = "Stud Info(*.si)\0*.si\0All Files(*.*)\0*.*\0\0";</p><p>  if(IDOK==fileDlg.DoModal())//DoModal負(fù)責(zé)對(duì)模態(tài)話框的創(chuàng)建和撤銷</p><p><

35、;b>  {</b></p><p>  CFile file(fileDlg.GetFileName(), CFile::modeRead);</p><p>  StuInfo si;</p><p>  file.Read(&si,sizeof(StuInfo));</p><p>  file.Close()

36、;</p><p>  Display(&si);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CMyDlg::OnAdd() </p><p><b>  {</b></p

37、><p>  // TODO: Add your control notification handler code here</p><p>  UpdateData();</p><p>  StuInfo stuinfo;</p><p>  memset(&stuinfo,0,sizeof(StuInfo));</p>

38、<p>  strcpy(stuinfo.name,m_name);</p><p>  strcpy(stuinfo.age,m_age);</p><p>  strcpy(stuinfo.phone,m_phone);</p><p>  strcpy(stuinfo.hoppy,m_hoppy);</p><p>  s

39、trcpy(stuinfo.email,m_email);</p><p>  //m_Records.push_back(stuinfo);</p><p>  //m_StuIndex=m_Records.end()-1;</p><p><b>  題目三:圖形編輯</b></p><p><b> 

40、 3.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  1)掌握建立基于MFC的文檔工程的步驟</p><p>  2)熟悉鼠標(biāo)繪圖的機(jī)理,了解鼠標(biāo)消息響應(yīng)函數(shù)框架</p><p><b>  3.2程序說明:</b></p><p>  本題是使用MFC實(shí)現(xiàn)在界面上繪圖的功能,基本包括點(diǎn)、直線、橢圓和矩形。關(guān)鍵問題是

41、確定用戶選擇的圖形類型,從而可以調(diào)用相應(yīng)的類庫(kù),并將類實(shí)例化之后使用其中各種繪圖函數(shù)。同時(shí)需要記錄用戶鼠標(biāo)點(diǎn)擊的操作,獲取鼠標(biāo)指針當(dāng)前的屏幕坐標(biāo),確定圖形的起始位置和結(jié)束位置。</p><p><b>  3.3程序流程圖</b></p><p><b>  3.4測(cè)試結(jié)果:</b></p><p>  結(jié)果分析:程序提供

42、了一個(gè)圖形繪制界面,我們可以畫出直線,橢圓,矩形,繪制的結(jié)果可以通過文件中的保存并可通過“打開”讀出原來原來已經(jīng)保存的圖形。要求我們能夠熟悉鼠標(biāo)繪圖的機(jī)理,了解鼠標(biāo)消息響應(yīng)函數(shù)框架。</p><p><b>  3.5關(guān)鍵程序:</b></p><p>  void CGraphicView::OnDraw(CDC* pDC)</p><p>

43、<b>  {</b></p><p>  CDrawDoc* pDoc = GetDocument();</p><p>  ASSERT_VALID(pDoc);</p><p>  // TODO: add draw code for native data here</p><p>  if (!pDoc)<

44、;/p><p><b>  return;</b></p><p>  int index;</p><p>  index = pDoc->m_ObArray.GetSize();//取得直線的數(shù)目</p><p>  for(int i=0;i<index;i++)</p><p>&

45、lt;b>  {</b></p><p>  CShape * pShape = (CShape*) pDoc->m_ObArray.GetAt(i);</p><p>  pShape->Drawing(pDC);</p><p><b>  }</b></p><p><b>

46、  }</b></p><p>  void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call defau

47、lt</p><p>  this->last=point;</p><p>  CView::OnLButtonDown(nFlags, point);</p><p><b>  }</b></p><p>  void CDrawView::OnLButtonUp(UINT nFlags, CPoint po

48、int) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p><p>  CDrawDoc *pDoc = GetDocument();</p><p>  pDoc->

49、AddShape(last,point, m_sType);</p><p>  Invalidate();</p><p>  CView::OnLButtonUp(nFlags, point);</p><p><b>  }</b></p><p>  題目四:字符串的操作</p><p>

50、  4.1實(shí)驗(yàn)?zāi)康?</p><p>  1)熟練掌握字符串處理</p><p>  2)熟練掌握判斷中文字符,英文單詞的方法</p><p>  3)掌握文件操作,如文件讀取,文件存儲(chǔ)</p><p>  4)掌握MFC工程建立方法</p><p><b>  4.2程序說明:</b><

51、;/p><p>  本題是對(duì)文本文件內(nèi)的字符信息做統(tǒng)計(jì)工作。主要思想是通過嵌套判斷來實(shí)現(xiàn)對(duì)字母,字符,漢字的區(qū)分。編寫一個(gè)統(tǒng)計(jì)的函數(shù)Counting(char *p, int length)來統(tǒng)計(jì),字符數(shù)numChar的大小由GetLength()得到,用if((p[i]>='a'&&p[i]<='z')||(p[i]>='A'&

52、;&p[i]<='Z'))判斷是否是英文字母,因?yàn)槲覀冎烙⑽膯卧~的開頭和結(jié)尾都是英文字符,我們不妨設(shè)置bool wordBeg = true,如果是,則numWord++,并且將wordBeg = false,這樣判斷完全部就能得到英文單詞的數(shù)目了。再利用if(p[i]>=0x00&&p[i]<=0x7F)得到ASC碼的數(shù)目,用總的字符數(shù)減去ASC碼的數(shù)目就能得到中文字符數(shù)目的

53、兩倍(因?yàn)橐粋€(gè)中文占兩個(gè)字符)。這樣所要求的都可以求出來了。</p><p>  定義Display()和OnOpen()。把當(dāng)前統(tǒng)計(jì)的數(shù)目分別賦給m_char,m_chinese,m_word,再通過UpdateData(FALSE) 將控件的關(guān)聯(lián)變量的值傳給控件并改變控件狀態(tài)顯示在窗口。OnOpen(),打開一個(gè)文本,CFileDialog fileDlg(TRUE);dwFileLen = file.Get

54、Length(),用file.Read(pBuf, dwFileLen)讀取dwFileLen長(zhǎng)度的文件,用Close()關(guān)閉文件。</p><p><b>  4.3程序流程圖:</b></p><p><b>  4.4測(cè)試結(jié)果:</b></p><p>  總結(jié)分析:本題只要考察我們是否能夠熟練掌握字符串處理,掌握判

55、斷中文字符,英文單詞的方法掌握文件操作,如文件讀取,文件存儲(chǔ)掌握MFC工程建立方法。</p><p><b>  4.5關(guān)鍵程序:</b></p><p>  void CMyDlg::OnOpen() </p><p><b>  {</b></p><p>  // TODO: Add your

56、 control notification handler code here</p><p>  CFileDialog fileDlg(TRUE); //構(gòu)造對(duì)話框?qū)ο螅‵ALSE)表示保存(TRUE)表示打開</p><p>  fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0\0";</p>

57、;<p>  if(IDOK==fileDlg.DoModal())</p><p><b>  {</b></p><p>  CFile file(fileDlg.GetFileName(), CFile::modeRead);</p><p>  char *pBuf;</p><p>  DWORD

58、 dwFileLen;</p><p>  dwFileLen = file.GetLength(); //長(zhǎng)度</p><p>  // This the # of total char</p><p>  this->m_char= dwFileLen;</p><p>  pBuf = new char[dwFileLen];&

59、lt;/p><p>  file.Read(pBuf, dwFileLen);</p><p>  file.Close();</p><p>  m_content =pBuf;</p><p>  Counting(pBuf, dwFileLen);</p><p><b>  }</b><

60、/p><p><b>  }</b></p><p>  void CMyDlg::Counting(char *p, int length) //計(jì)算模塊</p><p><b>  {</b></p><p>  bool wordBeg = true;</p><p> 

61、 bool flag = true;</p><p>  int numAsc=0;</p><p>  this->m_word=0;</p><p>  for(int i=0; i<length; i++)</p><p><b>  {</b></p><p>  if((p[

62、i]>='a'&&p[i]<='z')||(p[i]>='A'&&p[i]<='Z'))</p><p><b>  {</b></p><p>  if(wordBeg)</p><p><b>  {</b

63、></p><p>  this->m_word++;</p><p>  wordBeg = false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else </b>

64、</p><p><b>  {</b></p><p>  wordBeg = true;</p><p><b>  }</b></p><p>  if(p[i]>=0x00&&p[i]<=0x7F)</p><p><b>  n

65、umAsc++;</b></p><p><b>  }</b></p><p>  this->m_chinese = (length-numAsc)/2;</p><p>  //this->numChar=length-numChinese;</p><p>  UpdateData(FAL

66、SE);</p><p><b>  }</b></p><p><b>  題目五:動(dòng)態(tài)鏈接庫(kù)</b></p><p><b>  5.1實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  了解MFC 支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC 常規(guī)DLL, MFC擴(kuò)展庫(kù)。掌握封裝DL

67、L的基本方法。</p><p><b>  5.2程序說明:</b></p><p>  本題是使用動(dòng)態(tài)鏈接庫(kù)來完成一些簡(jiǎn)單的程序算法。動(dòng)態(tài)鏈接庫(kù)分為Win32、MFC及MFC擴(kuò)展三種,分別通過不同的方法來建立。動(dòng)態(tài)鏈接庫(kù)編寫完畢后,生成Dll和Lib文件,將其復(fù)制到測(cè)試工程的Debug文件夾下,并在工程中與Lib文件關(guān)聯(lián)之后就可以調(diào)用動(dòng)態(tài)鏈接庫(kù)中的函數(shù)或方法<

68、/p><p><b>  5.3測(cè)試結(jié)果:</b></p><p>  總結(jié)分析:本題主要要求我們了解MFC 支持的三種動(dòng)態(tài)鏈接庫(kù):Win32DLL,MFC 常規(guī)DLL, MFC擴(kuò)展庫(kù),掌握封裝DLL的基本方法。</p><p><b>  5.4關(guān)鍵程序:</b></p><p>  void CTe

69、stDLLDlg::OnButtonAdd() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  HINSTANCE hInst;</p><p>  hInst=LoadLi

70、brary("Win32DLL.dll");</p><p>  typedef int (*ADDPROC)(int a);</p><p>  ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"add");</p><p><b>  if(!Add)</b><

71、;/p><p><b>  {</b></p><p>  MessageBox("獲取函數(shù)地址失敗");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  UpdateDat

72、a(TRUE);</p><p>  m_r1=Add(m_n);</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p>  void CTestDLLDlg::OnButtonfactorial() </p><p><b>

73、  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  HINSTANCE hInst;</p><p>  hInst=LoadLibrary("MFCDLL.dll");</p><p>  t

74、ypedef int (*ADDPROC)(int a);</p><p>  ADDPROC Jiechen=(ADDPROC)GetProcAddress(hInst,"Jiechen");</p><p>  if(!Jiechen)</p><p><b>  {</b></p><p>  

75、MessageBox("獲取函數(shù)地址失敗");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  UpdateData(true);</p><p>  m_r2=Jiechen(m_n2);</p>&

76、lt;p>  UpdateData(FALSE);</p><p><b>  }</b></p><p><b>  二 、綜合題。</b></p><p><b>  實(shí)驗(yàn)?zāi)康模?lt;/b></p><p>  首先創(chuàng)建一個(gè)多文檔工程,實(shí)現(xiàn)對(duì)于磁盤文件的瀏覽,編輯等功能。

77、能夠以文本文件,二進(jìn)制文件方式打開文件;支持剪貼板功能;支持搜索,查找,替換功能;功能參考了磁盤文件工具程序UltraEdit 。</p><p><b>  程序說明:</b></p><p><b>  功能要求分析:</b></p><p>  1. 文件讀取功能:</p><p>  即利用

78、目標(biāo)系統(tǒng)能通過讀取功能,一方面能夠顯示文件的原來數(shù)據(jù)形式,另一方面也能夠把原來的數(shù)據(jù)形式通過編碼轉(zhuǎn)化為用戶很方便識(shí)別的十六進(jìn)制數(shù)據(jù),進(jìn)而為用戶方便的了解文件的存儲(chǔ)數(shù)據(jù)。</p><p>  2. 文件編輯功能:</p><p>  即利用目標(biāo)系統(tǒng)能通過編輯功能,把對(duì)讀取的文件數(shù)據(jù)進(jìn)行修改,添加,刪除,進(jìn)而實(shí)現(xiàn)對(duì)原文件的更新的功能,以方便用戶能夠?qū)ξ募姆奖愕牟僮鳌?lt;/p>&

79、lt;p><b>  3文件保存功能:</b></p><p>  即利用目標(biāo)系統(tǒng)能通過保存功能,把對(duì)讀取的文件數(shù)據(jù)進(jìn)行修改和編輯過后的數(shù)據(jù)在保存回原文件,以實(shí)現(xiàn)對(duì)原文件的保存</p><p><b>  測(cè)試結(jié)果:</b></p><p><b>  關(guān)鍵程序:</b></p>

80、<p>  void CHexEditView::OnDraw(CDC* pDC)</p><p><b>  {</b></p><p><b>  CRect rc;</b></p><p>  GetClientRect(rc);</p><p>  if(m_text == NUL

81、L)</p><p><b>  {</b></p><p>  pDC->FillRect(rc, &CBrush(RGB(255,255,255)));</p><p><b>  return;</b></p><p><b>  }</b></p&g

82、t;<p><b>  CDCdc;</b></p><p>  dc.CreateCompatibleDC(pDC);</p><p>  CBitmap bm;</p><p>  bm.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());</p><

83、p>  dc.SelectObject(bm);</p><p>  dc.SetBoundsRect(&rc, DCB_DISABLE);</p><p>  CFont font;</p><p>  font.CreateFont ( m_LineHeight, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARS

84、ET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, 0 );</p><p>  CFont* oldFont = dc.SelectObject ( &font );</p><p>  CBrush bkBrush(RGB(255,255,255));<

85、;/p><p>  dc.FillRect(rc, &bkBrush);</p><p>  UINT lineCY, lineCX;</p><p>  UINT dwPos;</p><p>  char currentchar[20];</p><p>  UCHAR text[17];</p>

86、<p>  int lineBeginPos;</p><p>  m_HexStart = m_CharWidth * (14 - m_LeftChar);//計(jì)算二進(jìn)制顯示開始位置</p><p>  m_TextStart = m_HexStart + m_CharWidth * 50;//計(jì)算ASCII碼顯示開始位置</p><p>  fo

87、r(UINT i = 0; i < m_PageRows; i++)//按行顯示數(shù)據(jù)</p><p><b>  {</b></p><p>  lineBeginPos = (m_TopLine+i-1)*16;//計(jì)算當(dāng)前行開始字符相對(duì)于總緩沖區(qū)的位置</p><p>  lineCY = i * m_LineHeight

88、;//當(dāng)前行的Y坐標(biāo)</p><p>  sprintf(currentchar, "%08Xh:", lineBeginPos);</p><p>  dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));</p><p>  dc.SetBkColor(RGB(255,255,255));

89、</p><p>  dc.TextOut (m_CharWidth*(2-m_LeftChar), lineCY, currentchar);//顯示地址基值</p><p>  memcpy(text,&m_text[lineBeginPos],16);//取當(dāng)前行數(shù)據(jù)</p><p>  text[16] = '\0';</p

90、><p>  for(int l = 0; l < 16; l++)</p><p><b>  {</b></p><p>  if(text[l] < 32)</p><p>  text[l] = 46;//不可見ASCII字符用.表示</p><p><b>  }&l

91、t;/b></p><p>  if(lineBeginPos+16 > m_CharCount)</p><p><b>  {</b></p><p>  text[m_CharCount%16] = '\0';//最后的數(shù)據(jù)不滿一行時(shí)</p><p><b>  }</

92、b></p><p>  dc.TextOut (m_TextStart, lineCY, text);//顯示右面的ASCII字符</p><p>  //被選中時(shí)反色顯示右面的ASCII字符</p><p>  int selStart = (m_SelStart - lineBeginPos)<0? 0:(m_SelStart - lineBegi

93、nPos);</p><p>  int selEnd = (m_SelEnd - lineBeginPos)>15? 15:(m_SelEnd - lineBeginPos);</p><p>  if(selStart <= 15 && selEnd >= 0)</p><p><b>  {</b><

94、;/p><p>  dc.SetBkColor(::GetSysColor ( COLOR_HIGHLIGHT ));</p><p>  dc.SetTextColor(::GetSysColor ( COLOR_HIGHLIGHTTEXT ));</p><p>  text[selEnd+1]='\0';</p><p> 

95、 dc.TextOut (m_TextStart+selStart*m_CharWidth, lineCY, &text[selStart]);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

96、<p>  dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));</p><p>  dc.SetBkColor(RGB(255,255,255));</p><p><b>  }</b></p><p>  for(UINT j = 0; j < 16; j++)</p&g

97、t;<p><b>  {</b></p><p>  dwPos = j + lineBeginPos;</p><p>  if(dwPos > (m_CharCount-1))</p><p>  goto bitblt;//顯示完最后一行退出</p><p>  if(dwPos >

98、;= m_SelStart && dwPos <= m_SelEnd)</p><p><b>  {</b></p><p>  dc.SetBkColor(::GetSysColor ( COLOR_HIGHLIGHT ));</p><p>  dc.SetTextColor(::GetSysColor ( COLO

99、R_HIGHLIGHTTEXT ));</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT

100、));</p><p>  dc.SetBkColor(RGB(255,255,255));</p><p><b>  }</b></p><p>  lineCX = m_HexStart + j * m_CharWidth *3 ;//計(jì)算當(dāng)前要顯示的二進(jìn)制字符的位置</p><p>  sprintf(c

101、urrentchar, "%02X", ((UCHAR *)m_text)[dwPos]);</p><p>  dc.TextOut (lineCX, lineCY, currentchar);//顯示二進(jìn)制字符</p><p>  if(dwPos == m_SelEnd)//選中單個(gè)字符的顯示</p><p>&

102、lt;b>  {</b></p><p>  dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));</p><p>  dc.SetBkColor(RGB(255,0,0));</p><p>  UCHAR cHex = m_text[dwPos];</p><p>  

103、if(m_bFirst)//二進(jìn)制字符的高四位選中</p><p><b>  {</b></p><p>  cHex = cHex & 0xf0;</p><p>  cHex = cHex >> 4;</p><p>  sprintf(currentchar, "%X",

104、cHex);</p><p>  dc.TextOut (lineCX, lineCY, currentchar);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p&

105、gt;  lineCX = m_HexStart + j * m_CharWidth *3 + m_CharWidth;</p><p>  cHex = cHex & 0x0f;</p><p>  sprintf(currentchar, "%X", cHex);</p><p>  dc.TextOut (lineCX, lineC

106、Y, currentchar);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

107、bitblt:</b></p><p>  pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);</p><p>  dc.DeleteDC ();}</p><p><b>  小結(jié)</b></p><p>  經(jīng)過四周

108、的c++軟件設(shè)計(jì),我能明顯感受到我在編程語言的應(yīng)用上有了顯著提高。由于以前接觸c++的時(shí)候基本是編寫一個(gè)控制臺(tái)應(yīng)用程序,而這一次基本上是必須使用MFC編寫。而對(duì)此我基本上就是第一次遇到,并且由于大一c++課程結(jié)束后就幾乎沒怎么碰過C++等原因,所以在實(shí)驗(yàn)周開始后我除了找出原來教材開始溫故知新,我還去圖書館借了《可視化程序設(shè)計(jì)Visual C++》、《Visual C++程序設(shè)計(jì)實(shí)用案例教程》兩本書。</p><p&g

109、t;  一開始編程有許多不懂的或記得不帶清楚的地方, 我就一一 翻書尋找答案解決問題。 隨著一個(gè)一個(gè)困難的解決, 我的第一個(gè)程序終于可以完成題目所要求的功能。此外,咨詢老師和其他同學(xué)也是十分必須的。來自于別人的幫助也十分重要,有時(shí)候別人的點(diǎn)撥和指導(dǎo)會(huì)讓你茅塞頓開,幫助我們更準(zhǔn)確的理解題意,比如動(dòng)態(tài)鏈接庫(kù),那個(gè)開始根本讓我摸不著頭腦,經(jīng)過別人的指導(dǎo),就知道怎么入手了。 </p><p>  對(duì)于編程,我個(gè)人覺得,修

110、改和程序的調(diào)試需要有細(xì)心和耐心。細(xì)心可以讓我們發(fā)現(xiàn)微小的錯(cuò)誤,耐心幫我們很好的解決這些錯(cuò)誤。面對(duì)幾百行代碼,不斷的設(shè)置斷點(diǎn),不斷的調(diào)試,實(shí)在是一件很繁瑣的事情。也許程序員的辛苦也在此處。但是,每當(dāng)一個(gè)程序調(diào)試成功,都是那么地讓人振奮人心。辛苦編寫代碼,修改,程序調(diào)試成功,一系列流程中都伴隨著煩躁和耐心的較量。</p><p>  在這四周的軟件設(shè)計(jì)中我體會(huì)到失敗的無耐,同時(shí)也體會(huì)到了成功的喜悅。 總的來說,這次程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論