c語言課程設(shè)計報告----簡易繪圖_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  計算機(jī)科學(xué)與技術(shù)學(xué)院</p><p>  《C高級語言程序設(shè)計》課程設(shè)計報告</p><p> ?。?013/2014學(xué)年 第一學(xué)期)</p><p>  學(xué)生姓名: </p><p>  學(xué)生專業(yè): 軟件工程</p><p>  學(xué)生班級: </p&

2、gt;<p>  學(xué)生學(xué)號: </p><p>  指導(dǎo)教師: </p><p>  2013 年 12 月 24 日</p><p><b>  目 錄</b></p><p>  功能需求描述 ………………………………………………………………1</p><

3、;p>  功能列表………………………………………………………………………1</p><p>  1.2 功能說明………………………………………………………………………1</p><p>  1.3 操作界面 ……………………………………………………………………1</p><p>  1.4 操作方法……………………………………………………………………

4、…2</p><p>  第二章 設(shè)計描述………………………………………………………………………2</p><p>  2.1 任務(wù)分解說明…………………………………………………………………2</p><p>  2.2 主要數(shù)據(jù)結(jié)構(gòu)設(shè)計說明………………………………………………………2</p><p>  2.3 主要函數(shù)接口

5、說明……………………………………………………………3</p><p>  2.3.1 主函數(shù)接口及包含的函數(shù)接口 …………………………………………3</p><p>  2.3.2 載入圖片函數(shù)接口 ………………………………………………………3</p><p>  2.3.3 設(shè)置右邊欄選擇顏色函數(shù)接口 …………………………………………4</p>

6、<p>  第三章 算法描述………………………………………………………………………4</p><p>  3.1 主要函數(shù)的程序流程圖………………………………………………………4</p><p>  第四章 開發(fā)過程描述…………………………………………………………………5</p><p>  4.1 源代碼…………………………………………

7、………………………………5</p><p>  4.2 代碼編譯………………………………………………………………………12</p><p>  4.3 代碼調(diào)試………………………………………………………………………12</p><p>  4.4 測試程序功能…………………………………………………………………13</p><p>

8、  第五章 設(shè)計心得體會 …………………………………………………………………15</p><p>  附錄一 規(guī)定題目的程序流程圖及程序代碼 …………………………………………15</p><p>  第一章 功能需求描述</p><p><b>  1.1功能列表</b></p><p>  簡易繪圖程序的功能如

9、下:</p><p>  1.1.1 提供8種顏色</p><p>  1.1.2 5種畫筆的大?。ó嫷亩际菆A)</p><p>  1.1.3 清屏和退出</p><p><b>  1.2 功能說明</b></p><p>  1.2.1 初始有默認(rèn)選的畫筆顏色為黑色,默認(rèn)的大小為

10、最小</p><p>  1.2.2 繪制的過程中實際顯示的是一個實心圓</p><p>  1.2.3 選擇畫筆的大小實際為選擇所畫圓的半徑的像素大小</p><p><b>  1.3 操作界面</b></p><p><b>  1.4 操作方法</b></p><p>

11、;  執(zhí)行程序后,彈出繪圖窗口:有默認(rèn)的顏色畫筆和大小,可以選擇畫筆的顏色,畫筆的大小,在空白區(qū)域點鼠標(biāo)左鍵來繪圖,再增加清屏和退出功能。</p><p><b>  第二章 設(shè)計描述</b></p><p>  2.1 任務(wù)分解說明</p><p>  void Index(void); //初始化繪圖</p&g

12、t;<p>  void Loadimg(void); //載入圖片</p><p>  void Scolor(void); //設(shè)置右邊欄選擇顏色 </p><p>  void Brush_size(void); //設(shè)置畫筆大小的顯示</p><p>  voi

13、d art(void); //程序畫圖核心函數(shù)</p><p>  2.2 主要數(shù)據(jù)結(jié)構(gòu)設(shè)計說明</p><p>  MOUSEMSG m; //定義全局獲取鼠標(biāo)信息的變量 詳細(xì)如下 </p><p>  struct MOUSEMSG</p><p><b>  {</b&g

14、t;</p><p>  UINT uMsg; // 當(dāng)前鼠標(biāo)消息</p><p>  bool mkCtrl; // Ctrl 鍵是否按下</p><p>  bool mkShift; // Shift 鍵是否按下</p><p>  bool mkLButton; // 鼠標(biāo)左鍵是否按下</p><p>  bo

15、ol mkMButton; // 鼠標(biāo)中鍵是否按下</p><p>  bool mkRButton; // 鼠標(biāo)右鍵是否按下</p><p>  int x; // 當(dāng)前鼠標(biāo) x 坐標(biāo)</p><p>  int y; // 當(dāng)前鼠標(biāo) y 坐標(biāo)</p><p>  int wheel; // 鼠標(biāo)滾輪滾動值</p><p

16、><b>  };</b></p><p>  "當(dāng)前鼠標(biāo)消息"可能是以下值:</p><p>  WM_MOUSEMOVE 鼠標(biāo)移動消息</p><p>  WM_MOUSEWHEEL 鼠標(biāo)滾輪撥動消息</p><p>  WM_LBUTTONDOWN 左鍵按下消息</p>&l

17、t;p>  WM_LBUTTONUP 左鍵彈起消息</p><p>  WM_LBUTTONDBLCLK 左鍵雙擊消息</p><p>  WM_MBUTTONDOWN 中鍵按下消息</p><p>  WM_MBUTTONUP 中鍵彈起消息</p><p>  WM_MBUTTONDBLCLK 中鍵雙擊消息</p>&l

18、t;p>  WM_RBUTTONDOWN 右鍵按下消息</p><p>  WM_RBUTTONUP 右鍵彈起消息</p><p>  WM_RBUTTONDBLCLK 右鍵雙擊消息</p><p>  2.3 主要函數(shù)接口說明</p><p>  2.3.1 主函數(shù)接口及包含的函數(shù)接口</p><p>  in

19、t WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) //程序的入口 </p><p><b>  {</b></p><p>  Index(); //初始化繪圖</p><p

20、>  Loadimg(); //載入圖片</p><p>  Scolor(); //設(shè)置右邊欄選擇顏色</p><p>  Brush_size(); //設(shè)置畫筆大小的顯示</p><p>  art(); //程序畫圖核心函數(shù)<

21、;/p><p>  closegraph(); //關(guān)閉繪圖屏幕</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  2.3.2載入圖片函數(shù)接口</p><p>  void Loadimg(

22、void)</p><p><b>  {</b></p><p>  loadimage(&img, "圖片位置");</p><p>  putimage(橫坐標(biāo), 縱坐標(biāo), &img);</p><p><b>  }</b></p><

23、p>  2.3.3設(shè)置右邊欄選擇顏色函數(shù)接口</p><p>  void Scolor(void)</p><p><b>  {</b></p><p>  setfillcolor(填充顏色); </p><p>  fillrectangle(左上角橫坐標(biāo),左上角縱坐標(biāo),右下角橫坐標(biāo),右下角縱坐標(biāo))

24、; </p><p><b>  }</b></p><p><b>  第三章 算法描述</b></p><p>  3.1 主要函數(shù)的程序流程圖</p><p>  圖3.1.1 主函數(shù)流程圖</p><p>  第四章 開發(fā)過程描述</p>

25、<p><b>  4.1 源代碼</b></p><p><b>  /*</b></p><p>  ---------------------------------</p><p>  時間:2013年12月24日22:35:28</p><p>  1.該程序?qū)崿F(xiàn)畫圖的基本功能:

26、可選擇提供的8種顏色,5種畫筆的大?。ó嫷亩际菆A),以及兩種額外功能,清屏和退出</p><p>  2.運用了WinMain函數(shù)來實現(xiàn)窗口程序</p><p>  3.運用graphics.h庫來實現(xiàn)繪圖操作</p><p>  ---------------------------------</p><p><b>  */&

27、lt;/b></p><p>  #include <graphics.h> // 繪圖庫頭文件</p><p>  MOUSEMSG m; //定義全局獲取鼠標(biāo)信息的變量 詳細(xì)如下 </p><p>  /* struct MOUSEMSG</p><p><b>  {&l

28、t;/b></p><p>  UINT uMsg; // 當(dāng)前鼠標(biāo)消息</p><p>  bool mkCtrl; // Ctrl 鍵是否按下</p><p>  bool mkShift; // Shift 鍵是否按下</p><p>  bool mkLButton; // 鼠標(biāo)左鍵是否按下</p><p&g

29、t;  bool mkMButton; // 鼠標(biāo)中鍵是否按下</p><p>  bool mkRButton; // 鼠標(biāo)右鍵是否按下</p><p>  int x; // 當(dāng)前鼠標(biāo) x 坐標(biāo)</p><p>  int y; // 當(dāng)前鼠標(biāo) y 坐標(biāo)</p><p>  int wheel; // 鼠標(biāo)滾輪滾動值</p>

30、<p><b>  };</b></p><p><b>  */</b></p><p><b>  /*</b></p><p>  "當(dāng)前鼠標(biāo)消息"可能是以下值:</p><p>  WM_MOUSEMOVE 鼠標(biāo)移動消息</p>

31、;<p>  WM_MOUSEWHEEL 鼠標(biāo)滾輪撥動消息</p><p>  WM_LBUTTONDOWN 左鍵按下消息</p><p>  WM_LBUTTONUP 左鍵彈起消息</p><p>  WM_LBUTTONDBLCLK 左鍵雙擊消息</p><p>  WM_MBUTTONDOWN 中鍵按下消息</p&g

32、t;<p>  WM_MBUTTONUP 中鍵彈起消息</p><p>  WM_MBUTTONDBLCLK 中鍵雙擊消息</p><p>  WM_RBUTTONDOWN 右鍵按下消息</p><p>  WM_RBUTTONUP 右鍵彈起消息</p><p>  WM_RBUTTONDBLCLK 右鍵雙擊消息</p&g

33、t;<p><b>  */</b></p><p>  void Index(void); //初始化繪圖聲明</p><p>  void Loadimg(void); //載入圖片聲明</p><p>  void Scolor(void); //設(shè)置右邊欄選

34、擇顏色的聲明 </p><p>  void Brush_size(void); //設(shè)置畫筆大小的顯示的聲明</p><p>  void art(void); //程序畫圖核心函數(shù)的聲明</p><p>  /*用VC 6.0來寫,而且要寫窗口類程序,VC 6.0提供了一個專門用作窗口類程序的

35、入口函數(shù)WinMain()</p><p><b>  函數(shù)原型</b></p><p>  int WINAPI WinMain(</p><p>  HINSTANCE hInstance, </p><p>  HINSTANCE hPrevInstance, </p><p>  LPST

36、R lpCmdLine, </p><p>  int nCmdShow</p><p><b>  );</b></p><p><b>  */</b></p><p>  int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstanc

37、e,LPSTR lpCmdLine,int nShowCmd) //程序的入口 </p><p><b>  {</b></p><p>  Index(); //初始化繪圖</p><p>  Loadimg(); //載入圖片</p><p>

38、  Scolor(); //設(shè)置右邊欄選擇顏色</p><p>  Brush_size(); //設(shè)置畫筆大小的顯示</p><p>  art(); //程序畫圖核心函數(shù)</p><p>  closegraph(); //關(guān)閉繪圖屏幕</

39、p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  //初始化繪圖</b></p><p>  void Index(void)</p><p><b>  {</b>

40、</p><p>  initgraph(800,600); //初始化800x600的繪圖屏幕</p><p>  setbkcolor(WHITE); //設(shè)置白色背景</p><p>  cleardevice();</p><p><b>  }</b></p><p>

41、<b>  //載入圖片</b></p><p>  void Loadimg(void)</p><p><b>  {</b></p><p>  IMAGE img;</p><p>  loadimage(&img, "E:\\c語言源文件\\c語言課程設(shè)計\\小軍畫圖\\

42、1.jpg");</p><p>  putimage(740, 0, &img);</p><p>  loadimage(&img, "E:\\c語言源文件\\c語言課程設(shè)計\\小軍畫圖\\2.jpg");</p><p>  putimage(740, 527, &img);</p><

43、p>  loadimage(&img, "E:\\c語言源文件\\c語言課程設(shè)計\\小軍畫圖\\3.jpg");</p><p>  putimage(30, 573, &img);</p><p>  loadimage(&img, "E:\\c語言源文件\\c語言課程設(shè)計\\小軍畫圖\\4.jpg");</p&

44、gt;<p>  putimage(740, 570, &img);</p><p>  loadimage(&img, "E:\\c語言源文件\\c語言課程設(shè)計\\小軍畫圖\\5.jpg");</p><p>  putimage(670, 570, &img);</p><p><b>  }&

45、lt;/b></p><p>  //設(shè)置右邊欄選擇顏色</p><p>  void Scolor(void)</p><p><b>  {</b></p><p>  setfillcolor(RGB(255,255,255)); //設(shè)置填充顏色 白</p><p>  

46、fillrectangle(750,10,790,50); //填充左上角(750,10)右下角(790,50)的矩形</p><p>  setfillcolor(RGB(0,0,0)); //黑</p><p>  fillrectangle(750,60,790,100);</p><p>  setfillcolor(RGB(0,0,2

47、55)); //藍(lán)</p><p>  fillrectangle(750,110,790,150);</p><p>  setfillcolor(RGB(0,255,0)); //綠</p><p>  fillrectangle(750,160,790,200);</p><p>  setfillcol

48、or(RGB(0,255,255)); //淺藍(lán)</p><p>  fillrectangle(750,210,790,250);</p><p>  setfillcolor(RGB(255,0,0)); //紅</p><p>  fillrectangle(750,260,790,300);</p><p>

49、;  setfillcolor(RGB(255,0,255)); //紫紅</p><p>  fillrectangle(750,310,790,350);</p><p>  setfillcolor(RGB(255,255,0)); //黃</p><p>  fillrectangle(750,360,790,400);</p&

50、gt;<p><b>  }</b></p><p>  //設(shè)置畫筆大小的顯示</p><p>  void Brush_size(void)</p><p><b>  {</b></p><p>  for(int i=1; i<=5; i++)</p>&l

51、t;p><b>  {</b></p><p>  setfillcolor(BLACK); //設(shè)置填充顏色</p><p>  solidcircle(80+30*i,580,i*3); //填充圓心坐標(biāo)為(80+30*i,580)半徑為i*3個像素的大小</p><p><b>  }&l

52、t;/b></p><p><b>  }</b></p><p>  //程序畫圖核心函數(shù)</p><p>  void art(void)</p><p><b>  {</b></p><p>  int a=3;

53、 //設(shè)置初始化(默認(rèn))畫筆大?。▓A心半徑的像素)</p><p>  fillrectangle(750,480,790,520); //設(shè)置初始current color顯示為黑色</p><p>  while(true)</p><p><b>  {</b></p><p>  m =

54、GetMouseMsg(); //GetMouseMsg()來獲取鼠標(biāo)的信息</p><p>  switch(m.uMsg)</p><p><b>  {</b></p><p>  case WM_LBUTTONDOWN: //如果鼠標(biāo)左鍵按下</p><p&g

55、t;  if(m.x>740)</p><p><b>  {</b></p><p>  if(m.y>570)</p><p>  return; //如果鼠標(biāo)坐標(biāo)x>740,y>570,即點中Exit選項,退出函數(shù),否則,永遠(yuǎn)不會終止</p><p>  swi

56、tch(int(m.y/50))</p><p><b>  {</b></p><p>  case 0:setfillcolor(RGB(255,255,255));break;</p><p>  case 1:setfillcolor(RGB(0,0,0));break;</p><p>  case 2:set

57、fillcolor(RGB(0,0,255));break;</p><p>  case 3:setfillcolor(RGB(0,255,0));break;</p><p>  case 4:setfillcolor(RGB(0,255,255));break;</p><p>  case 5:setfillcolor(RGB(255,0,0));break

58、;</p><p>  case 6:setfillcolor(RGB(255,0,255));break;</p><p>  case 7:setfillcolor(RGB(255,255,0));break;</p><p><b>  }</b></p><p>  fillrectangle(750,480,7

59、90,520); //點了某個圖中的顏色后,先設(shè)置填充顏色,再在current color上面顯示出所選擇的顏色</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p> 

60、 if(m.x>95 && m.x<245 && m.y>565 && m.y<595) </p><p><b>  {</b></p><p>  setcolor(WHITE);</p><p>  rectangle(65+30*(a/3),565,95+30*(

61、a/3),595); //將上一次的黑色矩形框消除(用白色矩形框代替)</p><p>  switch(int((m.x-95)/30))</p><p><b>  {</b></p><p>  case 0: a=3;break;</p><p>  case 1: a=6;break;</p>

62、<p>  case 2: a=9;break;</p><p>  case 3: a=12;break;</p><p>  case 4: a=15;break; //選擇畫筆的大小</p><p><b>  }</b></p><p>  setcolor(BLACK);&

63、lt;/p><p>  rectangle(65+30*(a/3),565,95+30*(a/3),595); //將選擇的畫筆用一個黑色的矩形方框框起來</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(m.x>670 &&a

64、mp; m.x<730 && m.y>570 && m.y<600) //如果選中清屏選項</p><p><b>  {</b></p><p>  setfillcolor(WHITE); //設(shè)置白色填充色</p><p>  solidrectangle(

65、0,0,740,564); //將整個可涂區(qū)域清白</p><p>  setfillcolor(BLACK); //設(shè)置默認(rèn)的黑色填充色</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(

66、m.x<750 && m.y<550) </p><p>  solidcircle(m.x,m.y,a); //在可涂區(qū)域用所選擇的顏色,畫筆大小畫一個實心圓,半徑為a</p><p><b>  }</b></p><p><b>  break;</

67、b></p><p>  case WM_MOUSEMOVE: //鼠標(biāo)移動信息</p><p>  if(m.mkLButton && m.x<725 && m.y<550) //如果在可涂的最大區(qū)域內(nèi),并且鼠標(biāo)左鍵按下</p><p>  

68、solidcircle(m.x,m.y,a); //依舊畫圓,直到左鍵彈起</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.2 代碼編譯過程中碰到

69、的錯誤類型和原因</p><p>  編譯錯誤:error C2018: unknown character '0xa3'</p><p>  原因分析:因為那一行的代碼中最后的分號用了中文的分號,應(yīng)該為英文輸入法的分號。</p><p>  4.3 代碼調(diào)試碰到的問題和原因</p><p>  調(diào)試中碰到的問題:當(dāng)選中畫

70、筆的大小時,會顯示一個黑色方框框中選中的畫筆大小,但當(dāng)再次選擇畫筆大小時,以前的黑色方框不會消失。</p><p>  解決的方法:當(dāng)下一次選擇畫筆大小時,先用白色方框?qū)⑸弦淮蔚暮谏娇蛳?,再顯示當(dāng)前選中的畫筆大小。</p><p>  4.4 測試程序功能</p><p>  程序運行的初始界面:</p><p>  圖4.4.1 程

71、序截圖一</p><p>  圖4.4.2 程序截圖二</p><p><b>  五.設(shè)計心得體會</b></p><p>  通過這次課程設(shè)計,讓我學(xué)到了很多繪圖函數(shù),以前在教學(xué)中并沒有提及,通過自學(xué)graphics.h庫的使用,更進(jìn)一步激發(fā)了學(xué)習(xí)c語言的興趣,它不僅僅是我以前想的黑框框程序了,可以設(shè)計出各種各樣美麗的圖案,再結(jié)合語句的使用

72、,可以設(shè)計出更加復(fù)雜的功能,提高了自學(xué)能力,倘若沒有這次課程設(shè)計,我想自己寫代碼的水平還停留在初級階段,通過這次實踐,發(fā)現(xiàn)了很多平時沒有注意到的問題,大大提高了寫代碼的能力。</p><p>  附錄一 規(guī)定題目的程序流程圖及程序代碼</p><p>  附錄1.1 必選題之10的階乘程序代碼</p><p>  #include <stdio.h>

73、;</p><p>  int main(void)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  int mul=1;</p><p>  for(i = 1;i<=10;i++)</p>

74、<p><b>  {</b></p><p><b>  mul *= i;</b></p><p><b>  }</b></p><p>  printf("10! = %d\n", mul);</p><p><b>  retu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論