c語言課程設(shè)計(jì)---整點(diǎn)報(bào)時時鐘_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  C</b></p><p><b>  語</b></p><p><b>  言</b></p><p><b>  實(shí)</b></p><p><b>  習(xí)</b></p><p

2、><b>  報(bào)</b></p><p><b>  告</b></p><p><b>  專業(yè):xxxx班</b></p><p><b>  姓名:xxx</b></p><p>  實(shí)習(xí)題目:整點(diǎn)報(bào)時時鐘</p><p&g

3、t;<b>  實(shí)習(xí)地點(diǎn): </b></p><p><b>  實(shí)習(xí)時間: </b></p><p><b>  實(shí)習(xí)學(xué)院:</b></p><p><b>  專業(yè)班級: </b></p><p><b>  實(shí)習(xí)者: </b>&

4、lt;/p><p><b>  指導(dǎo)教師: </b></p><p>  這次的計(jì)算機(jī)實(shí)訓(xùn),我選擇的題目是整點(diǎn)報(bào)時時鐘;它的功能有以下幾個:</p><p>  具有指針式表盤界面(方形或圓形);</p><p>  具有時針+分針+秒針并正確旋轉(zhuǎn);</p><p>  時鐘時間與系統(tǒng)時間相一致,秒針

5、具有“滴答”聲音效果.并實(shí)現(xiàn)整點(diǎn)報(bào)時.</p><p>  它的C語言源程序代碼是:</p><p>  #include <graphics.h></p><p>  #define PI 3.1416</p><p>  #include"math.h"</p><p>  #inc

6、lude"dos.h"</p><p>  void init_sceen(int,int,int); /*畫時鐘屏幕*/</p><p>  void sec();</p><p>  void main()</p><p><b>  {</b></p><p>  int

7、 x0=320,y0=240,r0=150; /* 時鐘的中心位置(320,240) 以及 半徑(150) */</p><p>  init_sceen(x0,y0,r0);</p><p><b>  sec();</b></p><p>  closegraph();</p><p><b>  }<

8、;/b></p><p>  void init_sceen(int x0,int y0,int r0)</p><p><b>  {</b></p><p>  int i,x,y,graphdriver,graphmode;</p><p>  char s[10];</p><p>

9、  float alpha,a0=90;</p><p>  graphdriver=DETECT;</p><p>  initgraph(&graphdriver,&graphmode,""); /* 初始化圖形系統(tǒng) */</p><p>  setbkcolor(0); /* 設(shè)置背景顏色為黑

10、色 */</p><p>  setcolor(2); /* 用綠色畫出時鐘的邊框 */</p><p>  fillellipse(x0,y0,r0,r0+50);</p><p>  fillellipse(x0,y0,r0+30,r0+80);</p><p>  setfillstyle(1,1); /

11、* 把時鐘鐘面以外都填成藍(lán)色 */</p><p>  floodfill(x0-r0-50,y0,2);</p><p>  for(i=12;i>=1;i--) /* 計(jì)算出數(shù)字1~12的位置 并在相應(yīng)的位置輸出數(shù)字*/ </p><p><b>  {</b></p><p>  alpha=(a0+30

12、*(11-i)*PI/180); </p><p>  x=x0+cos(alpha)*(r0-10);</p><p>  y=y0-sin(alpha)*r0;</p><p>  sprintf(s,"%2d",i);</p><p>  setcolor(4);</p><p>  sett

13、extstyle(0,0,1); /* 設(shè)置輸出數(shù)字的字體 大小 */</p><p>  outtextxy(x,y,s);</p><p><b>  }</b></p><p><b>  /*畫出刻度*/ </b></p><p>  for(i=60;i>=1;i--)</p&

14、gt;<p><b>  {</b></p><p>  alpha=(a0+6*(60-i)*PI/180);</p><p>  x=x0+cos(alpha)*(r0-20);</p><p>  y=y0-sin(alpha)*(r0-20);</p><p>  setcolor(14);<

15、/p><p>  if(i%5==0)</p><p>  circle(x,y,5);</p><p>  else circle(x,y,2); </p><p>  floodfill(x,y,14); </p><p><b>  }</b></p><p> 

16、 setlinestyle(0,0,3);</p><p>  } /*以上部分的作用是完成表盤的設(shè)計(jì)*/</p><p>  void sec(void)</p><p><b>  {</b></p><p>  int x,y,i,j,k,xj,yj,xk,yk,xi,yi,x0

17、=320,y0=240,r0=150;</p><p>  union REGS r;</p><p>  unsigned char *shijian="";</p><p>  unsigned char *daa="";</p><p>  struct time tim;</p>

18、<p>  struct date dat;</p><p>  float alphai,alphak,alphaj,a0=90;</p><p>  xi=x0;yi=y0;xj=x0;yj=y0;xk=x0;yk=y0;</p><p><b>  do</b></p><p><b>  {&

19、lt;/b></p><p>  x=38;y=12;</p><p>  gettime(&tim); /* 從本機(jī)中獲取時間 */</p><p>  sprintf(shijian,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,tim.ti_sec);</p>

20、;<p><b>  /*獲取日期*/</b></p><p>  getdate(&dat);</p><p>  sprintf(daa,"%02d--%02d--%02d",dat.da_year,dat.da_mon,dat.da_day);</p><p>  bar(255,290,385,

21、310); /* 一數(shù)字的形式輸出日期 */</p><p>  setcolor(RED);</p><p>  outtextxy(275,295,daa);</p><p>  x=290;y=460;</p><p>  setcolor(RED);</p><p>  outtex

22、txy(100,y,"Designed by YANG FAN"); /* 在指定位置顯示字符 */</p><p>  setcolor(LIGHTRED);</p><p>  outtextxy(x,y0+20," WATCH ");</p><p>  setlinestyle(0,0,3);</p>&

23、lt;p>  k=tim.ti_hour;</p><p>  j=tim.ti_min;</p><p>  i=tim.ti_sec;</p><p>  alphak=(a0+30*(12-k)-j*5/60.*6)*PI/180;</p><p>  alphaj=(a0-6*j)*PI/180;</p><

24、p><b>  /* 畫秒針 */</b></p><p>  alphai=(a0+6*(60-i))*PI/180;</p><p>  x=x0+cos(alphai)*(r0-32);</p><p>  y=y0-sin(alphai)*(r0-32);</p><p>  setcolor(WHITE)

25、;</p><p>  line(x0,y0,xi,yi);</p><p>  setcolor(RED);</p><p>  line(x0,y0,x,y);</p><p><b>  xi=x;</b></p><p><b>  yi=y;</b></p&g

26、t;<p><b>  /* 畫分針 */</b></p><p>  x=x0+cos(alphaj)*(r0-60);</p><p>  y=y0-sin(alphaj)*(r0-60);</p><p>  setcolor(WHITE);</p><p>  line(x0,y0,xj,yj);&

27、lt;/p><p>  setcolor(12);</p><p>  line(x0,y0,x,y);</p><p><b>  xj=x;</b></p><p><b>  yj=y;</b></p><p><b>  /* 畫時針 */</b>&

28、lt;/p><p>  x=x0+cos(alphak)*(r0-80);</p><p>  y=y0-sin(alphak)*(r0-80);</p><p>  setcolor(WHITE);</p><p>  line(x0,y0,xk,yk);</p><p>  setcolor(13);</p>

29、;<p>  line(x0,y0,x,y);</p><p><b>  xk=x;</b></p><p><b>  yk=y;</b></p><p>  delay(1000);</p><p><b>  }</b></p><p&

30、gt;  while(!kbhit());/*在不按任何鍵的時候執(zhí)行上面的命令.即按任何鍵退出 */</p><p><b>  }</b></p><p>  該程序運(yùn)行結(jié)果是:一個橢圓形表盤,背景為黑色,時鐘鐘面以外都填成藍(lán)色,時鐘的邊框?yàn)榫G色。時鐘時針,分針,秒針都正常運(yùn)轉(zhuǎn)。時鐘中心下方有“WATCH”字樣,左下方有“Designed by YANG FAN”字

31、樣。該設(shè)計(jì)的缺點(diǎn)是表盤上無數(shù)字“9”顯示,且表盤的數(shù)字與刻度有一些偏差。</p><p>  修改后的C語言程序代碼是:</p><p>  #include <graphics.h></p><p>  #define PI 3.1416</p><p>  #include"math.h"</p>

32、;<p>  #include"dos.h"</p><p>  #include<time.h></p><p>  #include<dos.h></p><p>  #define S1 45</p><p>  #define S2 S1/2</p><p&

33、gt;  #define S4 S1/4</p><p>  #define S8 S1/8</p><p>  #define S16 S1/16</p><p>  enum FREQDEF</p><p><b>  {</b></p><p>  L1=131,L2=147,L3=165,

34、L4=175,L5=196,L6=220,L7=247,</p><p>  N1=262,N2=296,N3=330,N4=349,N5=392,N6=440,N7=494,</p><p>  H1=523,H2=587,H3=659,H4=698,H5=784,H6=880,H7=988,</p><p>  I1=1047,I2=1175,I3=1319,I

35、4=1397,I5=1568,I6=1760,I7=1976</p><p><b>  }song[]=</b></p><p><b>  {</b></p><p>  N2,S4,N2,S8,N3,S16,N2,S16,N1,S4,L6,S4,L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,

36、</p><p>  L6,S8,N1,S8,N5,S8,N6,S8,N3,S8,N5,S8,N2,S1,N3,S4,N3,S8,N2,S8,N3,S8,N5,S4,N3,S4,</p><p>  L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,L6,S8,N1,S8,L6,S8,L6,S8,L2,S8,L3,S8,L5,S1,N2,S4,</p>

37、<p>  N2,S4,N5,S4,N6,S8,N5,S8,N4,S2,N5,S2,N6,S4,N5,S8,N3,S8,N2,S8,N3,S16,N2,S16,N1,S8,L6,S16,</p><p>  N1,S16,N2,S1,N3,S4,N2,S8,N3,S8,N5,S4,N3,S4,L5,S8,L3,S8,L5,S8,L6,S8,N1,S2,L6,S4,</p><p>

38、;  L6,S8,N1,S8,N2,S8,L6,S8,N1,S8,N3,S8,N2,S1,0</p><p>  };/*編寫報(bào)時音樂*/</p><p>  void init_sceen(int,int,int); /*畫時鐘屏幕*/</p><p>  void sec();</p><p>  void main()</p>

39、;<p><b>  {</b></p><p>  int x0=320,y0=240,r0=150; /* 時鐘的中心位置(320,240) 以及 半徑(150) */</p><p>  init_sceen(x0,y0,r0);</p><p><b>  sec();</b></p

40、><p>  closegraph();</p><p><b>  }</b></p><p>  void init_sceen(int x0,int y0,int r0)</p><p><b>  {</b></p><p>  int i,x,y,graphdriver

41、,graphmode;</p><p>  char s[10];</p><p>  float alpha,a0=90;</p><p>  graphdriver=DETECT;</p><p>  initgraph(&graphdriver,&graphmode,""); /* 初始化圖形系統(tǒng) *

42、/</p><p>  setbkcolor(0); /* 設(shè)置背景顏色為黑色 */</p><p>  setcolor(2); /* 用綠色畫出時鐘的邊框 */</p><p>  fillellipse(x0,y0,r0+50,r0+30);</p><p>  fillellip

43、se(x0,y0,r0+50,r0+30);</p><p>  setcolor(2); </p><p>  fillellipse(200,80,30,50);</p><p>  fillellipse(200,100,18,30);</p><p>  fillellipse(430,80,30,50);&l

44、t;/p><p>  fillellipse(430,100,18,30); /* 用綠色畫出耳朵 */</p><p>  setcolor(0);</p><p>  circle(260,180,15);</p><p>  circle(380,180,15);</p><p>  circle(260,180,2

45、);</p><p>  circle(380,180,2); /* 用黑色畫出眼睛 */</p><p>  setcolor(2);</p><p>  line(260,220,180,210);</p><p>  line(260,240,175,240);</p><p>  line(260,260,18

46、0,270);</p><p>  line(380,220,460,210);</p><p>  line(380,240,465,240);</p><p>  line(380,260,460,270); /* 用綠色畫出胡子 */</p><p>  setfillstyle(1,1); /* 把時鐘鐘面以外都填成藍(lán)色 */

47、</p><p>  floodfill(x0-r0-50,y0,2);</p><p>  for(i=12;i>=1;i--) /* 計(jì)算出數(shù)字1~12的位置 并在相應(yīng)的位置輸出數(shù)字*/ </p><p><b>  {</b></p><p>  alpha=(a0+30*(11-i)*PI/180)+0

48、.05; </p><p>  x=x0+cos(alpha)*r0-10;</p><p>  y=y0-sin(alpha)*r0-5; /* 使顯示的數(shù)字水平 */</p><p>  sprintf(s,"%2d",i);</p><p>  setcolor(4);</p><p>  s

49、ettextstyle(0,0,1); /* 設(shè)置輸出數(shù)字的字體 大小 */</p><p>  outtextxy(x,y,s);</p><p><b>  }</b></p><p><b>  /*畫出刻度*/ </b></p><p>  for(i=60;i>=1;i--)<

50、/p><p><b>  {</b></p><p>  alpha=(a0+6*(60-i)*PI/180)+10; /* 使顯示的刻度水平 */</p><p>  x=x0+cos(alpha)*(r0-20);</p><p>  y=y0-sin(alpha)*(r0-20);</p><p&g

51、t;  setcolor(14);</p><p>  if(i%5==0)</p><p>  circle(x,y,5);</p><p>  else circle(x,y,2); </p><p>  floodfill(x,y,14); </p><p><b>  }</b>&

52、lt;/p><p>  setlinestyle(0,0,3);</p><p>  } /*以上部分的作用是完成表盤的設(shè)計(jì)*/</p><p>  void sec(void)</p><p><b>  {</b></p><p>  int x,y,i,j,k

53、,xj,yj,xk,yk,xi,yi,x0=320,y0=240,r0=150;</p><p>  union REGS r;</p><p>  unsigned char *shijian="";</p><p>  unsigned char *daa="";</p><p>  struct

54、time tim;</p><p>  struct date dat;</p><p>  float alphai,alphak,alphaj,a0=90;</p><p>  xi=x0;yi=y0;xj=x0;yj=y0;xk=x0;yk=y0;</p><p><b>  do</b></p>&

55、lt;p><b>  {</b></p><p>  x=38;y=12;</p><p>  gettime(&tim); /* 從本機(jī)中獲取時間 */</p><p>  sprintf(shijian,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,

56、tim.ti_sec);</p><p><b>  {</b></p><p>  char a[10];</p><p>  setcolor(RED);</p><p>  sprintf(shijian,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,tim.t

57、i_sec);</p><p>  outtextxy(290,320,shijian);</p><p>  };/* 顯示時間 */</p><p>  if(0<tim.ti_hour<=12&&tim.ti_min==0&&tim.ti_sec==00)</p><p><b> 

58、 {</b></p><p>  int note=0,fre,dur,control;</p><p>  clock_t goal;</p><p>  while(song[note]!=0)</p><p><b>  {</b></p><p>  fre=song[note

59、];</p><p>  dur=song[note+1];</p><p>  if(kbhit())break;</p><p><b>  if(fre)</b></p><p><b>  {</b></p><p>  outportb(0x43,0xb6);<

60、;/p><p>  fre=(unsigned)(1193180L/fre);</p><p>  outportb(0x42,(char)fre);</p><p>  outportb(0x42,(char)(fre>>8));</p><p>  control=inportb(0x61);</p><p&g

61、t;  outportb(0x61,(control)|0x3);</p><p><b>  }</b></p><p>  goal=(clock_t)dur+clock();</p><p>  while(goal>clock());</p><p><b>  if(fre)</b>

62、</p><p>  outportb(0x61,control);</p><p>  goal=(clock_t)0;</p><p>  note=note+2;</p><p><b>  }</b></p><p>  }/* 整點(diǎn)報(bào)時 */</p><p>&l

63、t;b>  /*獲取日期*/</b></p><p>  getdate(&dat);</p><p>  sprintf(daa,"%02d--%02d--%02d",dat.da_year,dat.da_mon,dat.da_day);</p><p>  bar(255,290,385,310);

64、 /* 一數(shù)字的形式輸出日期 */</p><p>  setcolor(RED);</p><p>  outtextxy(275,295,daa);</p><p>  x=290;y=460;</p><p>  setcolor(RED);</p><p>  outtextxy(230,y,&quo

65、t;Designed by DUAN ZHI HAO"); /* 在指定位置顯示字符 */</p><p>  setcolor(LIGHTRED);</p><p>  outtextxy(x,y0+20," WATCH ");</p><p>  setlinestyle(0,0,3);</p><p>  

66、k=tim.ti_hour;</p><p>  j=tim.ti_min;</p><p>  i=tim.ti_sec;</p><p>  alphak=(a0+30*(12-k)-j*5/60.*6)*PI/180;</p><p>  alphaj=(a0-6*j)*PI/180; /* 畫秒針 */</p><

67、p>  alphai=(a0+6*(60-i))*PI/180;</p><p>  x=x0+cos(alphai)*(r0-32);</p><p>  y=y0-sin(alphai)*(r0-32);</p><p>  setcolor(WHITE);</p><p>  line(x0,y0,xi,yi);</p>

68、;<p>  setcolor(RED);</p><p>  line(x0,y0,x,y);</p><p><b>  xi=x;</b></p><p>  yi=y; /* 畫分針 */ </p><p>  x=x0+cos(alphaj)*(r0-60);</p><p&

69、gt;  y=y0-sin(alphaj)*(r0-60);</p><p>  setcolor(WHITE);</p><p>  line(x0,y0,xj,yj);</p><p>  setcolor(12);</p><p>  line(x0,y0,x,y);</p><p><b>  xj=

70、x;</b></p><p>  yj=y;/* 畫時針 */</p><p>  x=x0+cos(alphak)*(r0-80);</p><p>  y=y0-sin(alphak)*(r0-80);</p><p>  setcolor(WHITE);</p><p>  line(x0,y0,xk

71、,yk);</p><p>  setcolor(13);</p><p>  line(x0,y0,x,y);</p><p><b>  xk=x;</b></p><p><b>  yk=y;</b></p><p>  delay(1000);</p>

72、<p><b>  }</b></p><p>  while(!kbhit()); /*在不按任何鍵的時候執(zhí)行上面的命令.即按任何鍵退出 */</p><p><b>  }</b></p><p>  修改后的程序運(yùn)行結(jié)果為:背景顏色為黑色,時鐘鐘面為白色,上面有一個小貓的頭像,且在圖案上出現(xiàn)了時間的顯示。

73、小貓的圖案由綠色畫出。時鐘時針,分針,秒針都正常運(yùn)轉(zhuǎn)。時鐘中心下方有“WATCH”字樣,左下方有“Designed by DUAN ZHI HAO”字樣。經(jīng)過修改后,鐘表表盤上的數(shù)字,刻度,指針都一一對應(yīng),且具有了整點(diǎn)報(bào)時的功能,響鈴時間三十秒。</p><p><b>  實(shí)習(xí)心得:</b></p><p>  一周的上機(jī)實(shí)習(xí)結(jié)束了,在這段時間內(nèi),我的C語言知識得到

74、了溫習(xí),我覺得這次實(shí)習(xí)很重要,而且是恰逢其時,當(dāng)然通過自己對程序改編的過程,也有了一些心得:</p><p>  首先改程序是一個很費(fèi)力的活動,你必須先把改編之前的程序全部弄明白后,才能知道程序中的不足,對其進(jìn)行完善;其次,編程要有一個扎實(shí)的知識儲備,沒把課本看好,沒把例題看好,不會讀得懂程序,更不可能把程序修改的更好,同時,如果不多看程序,不斷吸收別人的編程思想,也就不會編出精彩的程序;當(dāng)然也不能忽略與別人討論

75、與請教,在這過程中,我們可以相互交流編程想法,找到解決問題的最佳路徑,這種團(tuán)結(jié)協(xié)作的精神也是必須要有的。</p><p>  一周很短,編程的過程卻很漫長,思考,編程,運(yùn)行,這就是編程的感覺。感謝幫助我,還有一起討論問題的同學(xué),在遇到小問題的時候,他們總是很耐心的解釋,感謝這次上機(jī)機(jī)會,讓我重新溫習(xí)了C語言,也讓我對明年的等級考試更有信心。在初學(xué)C語言的一個學(xué)期后,我們進(jìn)行了C語言實(shí)訓(xùn)階段,嘗試改編一個比較復(fù)雜的

76、程序系統(tǒng)。在這次實(shí)訓(xùn)中,我對C語言有了一個更深的了解認(rèn)識,也對這個學(xué)期學(xué)的知識得到鞏固,還嘗試運(yùn)行編程,每次運(yùn)行程序成功,讓我對下面的項(xiàng)目就充滿信心。通過自己與同學(xué)合作編寫程序,最終把最初的理論知識轉(zhuǎn)化基本技能。這次的實(shí)訓(xùn),使我對C語言的學(xué)習(xí)產(chǎn)生濃厚的興趣。</p><p>  通過這次實(shí)訓(xùn),也使我們發(fā)現(xiàn)了許多問題。</p><p>  在實(shí)訓(xùn)中,我們認(rèn)識到自己還有很多的知識沒學(xué)好,基礎(chǔ)知

77、識沒理清,而且許多東西還要去翻書,去上網(wǎng)搜索。而且遇到一些小錯誤運(yùn)行不出來,就會煩躁不安,覺得有些自暴自棄或者抱怨項(xiàng)目的變態(tài),以后要克服,盡量保持一顆良好的心態(tài),學(xué)好C語言,也學(xué)好用C語言編寫一個按要求的系統(tǒng)。</p><p>  一年來,我們已經(jīng)學(xué)習(xí)了C語言,在應(yīng)用這些語言的過程中,我們的邏輯思維得到了加強(qiáng),更重要的是我們把在數(shù)學(xué)上學(xué)習(xí)到的算法應(yīng)用到計(jì)算機(jī)程序中,通過分析問題,調(diào)查研究,最終解決問題。盡管每次解

78、決問題的過程不會都很順利,尤其是在出錯的時候總是很難解決那些很細(xì)微的錯誤,比如一個符號打錯,或者漏掉一個標(biāo)點(diǎn),檢查起來都會很麻煩,但是,每次成功的運(yùn)行,得到的不僅僅是一個正確的結(jié)果,更多的是體會到了過程,有了一種成就感。</p><p>  還有就是對于下學(xué)期的C++,我覺得我還必須在C語言上進(jìn)行提高,以應(yīng)對下學(xué)期更高難度的C++。</p><p>  總之,這一切都成為我記憶里面的一個篇

溫馨提示

  • 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

提交評論