版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> C語言課程設計實踐報告</p><p> 課題: 時鐘 </p><p><b> 1、實踐目的</b></p><p> 1)明確課程設計的目的,能根據課程設計的要求,查閱相關文獻、資料,為完成設計準備必要的知識;</p><p> 2)提高學生們用高級
2、語言進行程序設計的能力;</p><p> 3)初步了解軟件開發的一般方法和步驟;</p><p> 4)提高撰寫技術文檔的能力 </p><p> 5)培養和提高IE專業本科生應用程序設計語言解決實際問題的素質和能力;</p><p> 6)培養團隊協作的精神,培養創新意識,提高自學能力和實踐動手能力。</p>&l
3、t;p><b> 2、課程設計報告</b></p><p><b> 2.1 問題描述</b></p><p> 時鐘的形狀是一個圓形表盤,由時針、分針和秒針組成。按照每天時間從0:00(12:00)到12:00的循環,將圓形表盤等分成12等份,又按每小時60分種(每分鐘60秒 )將表盤等分成60等份,用實心圓點標注。為了便于人清晰的
4、讀出時間,從表盤的正北位置起每隔30度的那一個圓點用較大圓點進行區分,并標以1至12的數字。 將時針、分針和秒針的旋轉中心固定在表盤的中心位置,并用真的顏色和長短進行區分,秒針最長,其次分針,最后時針。秒針走一圈分針走一小格,分針走一圈時針走5格。</p><p> 為了表盤的美觀,將表盤賦予顏色的變化。最后編譯相應的程序獲取當前時間。</p><p><b> 2.2 設計
5、步驟</b></p><p> 1)準備工作,實例出各種顏色的變換,畫筆等,用于繪圖工作;</p><p> 2)繪制圓形表盤,將坐標原點定在表盤中心;</p><p> 3)繪制時鐘表盤,各個針,等工作;</p><p> 4)將時鐘表盤按每分鐘60秒分60等份,繪制60個小圓,用來區分秒鐘時間間隔;</p>
6、<p> 5)將時鐘表盤按每天時間從0:00(12:00)到12:00的循環分12等份,繪制12個較大圓,用來區時針時間間隔;</p><p> 6)繪制時鐘的表盤數字,從1至12,實現數字化表盤;</p><p> 7)獲取當前時間,并將時間轉換成時間字符串,分別索引時,分,秒的值,并分別存儲至字符串中;</p><p> 8)獲取當前秒鐘數
7、,并按其定位秒針所指方向,并繪制從原點至其方向的一條線,用以表示秒針的轉動;</p><p> 9) 獲取當前分鐘數,并按其定位分針所指方向,并繪制從原點至其方向的一條線,用以表示分針的轉動;</p><p> 10)獲取當前時鐘數,并按其定位時針所指方向,并繪制從原點至其方向的一條線,用以表示時針的轉動;</p><p> 11)最后設計一個程序來報告當前時
8、間。</p><p><b> 2.3程序流程圖</b></p><p><b> 3、源程序代碼</b></p><p> using System;</p><p> using System.Collections.Generic;</p><p> usin
9、g System.ComponentModel;</p><p> using System.Data;</p><p> using System.Drawing;</p><p> using System.Text;</p><p> using System.Windows.Forms;</p><p>
10、; namespace 時鐘</p><p><b> {</b></p><p> public partial class Form1 : Form </p><p><b> {</b></p><p> public Graphics g;</p><p&
11、gt; public Form1()</p><p><b> {</b></p><p> InitializeComponent();</p><p> timer1.Start();</p><p> timer1.Interval = 1000; //就是說每隔一秒執行一次TIME事件 10
12、00是一秒=一毫秒</p><p><b> }</b></p><p> private void Form1_Paint(object sender, PaintEventArgs e) //圖像平鋪形狀程序</p><p><b> {</b></p><p> /*以下代碼為 準
13、備工作,實例出各種顏色的變換,畫筆等,用于下面的繪圖工作*/</p><p> g = e.Graphics;</p><p> Random r = new Random();</p><p> int random = r.Next();</p><p> Color c = Color.FromArgb((random + 50
14、) % 255, (random + 30) % 255, (random - 100) % 255);</p><p> int random1 = r.Next();</p><p> Color k = Color.FromArgb((random1 + 50) % 255, (random1 + 30) % 255, (random1 - 100) % 255);</p&
15、gt;<p> Pen p = new Pen(c, 3);</p><p> Pen p1 = new Pen(Color.Black, 8);</p><p> Pen p2 = new Pen(Color.DeepSkyBlue, 3);</p><p> Pen p3 = new Pen(Color.DeepPink, 3);</
16、p><p> Pen p4 = new Pen(Color.Brown, 3);</p><p> SolidBrush sbrush = new SolidBrush(c);</p><p> SolidBrush sbrush1 = new SolidBrush(k);</p><p> SolidBrush sbrush2 = ne
17、w SolidBrush(Color.Black);</p><p> /*以下代碼為 重繪圖形坐標,將坐標原點改至,窗體的中心。*/</p><p> int x = this.Width / 2;</p><p> int y = this.Height / 2;</p><p> g.TranslateTransform(x,
18、y);</p><p> /*以下代碼為 獲取當前時間,并將時間轉換成時間字符串,分別索引時,分,秒的值,并分別存儲至字符串中*/</p><p> DateTime datetime = DateTime.Now;</p><p> string time = datetime.ToLongTimeString();</p><p>
19、 int i1 = time.IndexOf(":");</p><p> string hour = time.Substring(0, i1);</p><p> time = time.Substring(i1 + 1);</p><p> int i2 = time.IndexOf(":");</p>
20、;<p> string minute = time.Substring(0, i2);</p><p> string second = time.Substring(i2 + 1);</p><p> /*以下代碼為 繪圖工作,繪制時鐘表盤,各個針,等工作*/</p><p> g.DrawEllipse(p1, -162, -163, 3
21、25, 325); //繪制表盤</p><p> /*下列循環將時鐘表盤按秒鐘分60等份,繪制60個園,用來區分秒鐘時間間隔*/</p><p> for (int i = 0; i < 60; i++)</p><p><b> {</b></p><p> int x_position = Conve
22、rt.ToInt32(150 * (Math.Sin(Math.PI * i / 30)));</p><p> int y_position = Convert.ToInt32(150 * (Math.Cos(Math.PI * i / 30)));</p><p> g.FillEllipse(sbrush, x_position - 5, y_position - 5, 10,
23、10);</p><p><b> }</b></p><p> /*下列循環將時鐘表盤按分鐘分12等份,繪制12個較大園,用來區分分鐘時間間隔*/</p><p> for (int i = 0; i < 12; i++)</p><p><b> {</b></p>
24、<p> int x_position = Convert.ToInt32(150 * (Math.Sin(Math.PI * i / 6)));</p><p> int y_position = Convert.ToInt32(150 * (Math.Cos(Math.PI * i / 6)));</p><p> g.FillEllipse(sbrush1, x_po
25、sition - 7, y_position - 8, 15, 15);</p><p><b> }</b></p><p> /*下列循環繪制時鐘的表盤數字,從1至12,實現數字化表盤*/</p><p> for (int i = 0; i < 12; i++)</p><p><b> {
26、</b></p><p> Font font = new Font("Arial ", 15);</p><p> Brush fontBrush = SystemBrushes.ControlDarkDark;</p><p> string s = null;</p><p> int x_pos
27、ition = Convert.ToInt32(135 * (Math.Sin(Math.PI * (i + 1) / 6)));</p><p> int y_position = Convert.ToInt32(135 * (Math.Cos(Math.PI * (i + 1) / 6)));</p><p> s = (i + 1).ToString();</p>
28、<p> g.DrawString(s, font, fontBrush, x_position - 8, -y_position - 11);</p><p><b> }</b></p><p> /*以下代碼為 獲取當前秒鐘數,并按其定位秒針所指方向,并繪制從原點至其方向的一條線,用以表示秒針的轉動*/</p><p>
29、 float second_position_x = Convert.ToSingle(120 * Math.Sin(Convert.ToDouble(second) / 30 * Math.PI));</p><p> float second_position_y = -Convert.ToSingle(120 * Math.Cos(Convert.ToDouble(second) / 30 * Math.
30、PI));</p><p> g.DrawLine(p2, 0, 0, second_position_x, second_position_y);</p><p> /*以下代碼為 獲取當前分鐘數,并按其定位分針所指方向,并繪制從原點至其方向的一條線,用以表示分針的轉動*/</p><p> float minute_position_x = Convert
31、.ToSingle(90 * Math.Sin(Convert.ToDouble(minute) / 30 * Math.PI));</p><p> float minute_position_y = -Convert.ToSingle(90 * Math.Cos(Convert.ToDouble(minute) / 30 * Math.PI));</p><p> g.DrawLi
32、ne(p3, 0, 0, minute_position_x, minute_position_y);</p><p> /*以下代碼為 獲取當前時鐘數,并按其定位時針所指方向,并繪制從原點至其方向的一條線,用以表示時針的轉動*/</p><p> int new_hour = Convert.ToInt32(hour) % 12;</p><p> floa
33、t hour_position_x = Convert.ToSingle(60 * Math.Sin((Convert.ToDouble(new_hour) / 12 + Convert.ToDouble(minute) / 720) * Math.PI * 2));</p><p> float hour_position_y = -Convert.ToSingle(60 * Math.Cos((Conver
34、t.ToDouble(new_hour) / 12 + Convert.ToDouble(minute) / 720) * Math.PI * 2));</p><p> g.DrawLine(p4, 0, 0, hour_position_x, hour_position_y);</p><p> /*以下代碼為 在表盤正中央的一個填充圓,代碼放置最后是因為:這個圓不能被時針,分針,
35、秒針所覆蓋。美化作用*/</p><p> g.FillEllipse(sbrush2, -8, -8, 16, 16);</p><p><b> }</b></p><p> private void timer1_Tick(object sender, EventArgs e)</p><p><b&g
36、t; {</b></p><p> Invalidate();</p><p><b> }</b></p><p> private void Form1_Load(object sender, EventArgs e)</p><p><b> {</b></p>
37、;<p><b> }</b></p><p> private void button1_Click(object sender, EventArgs e)</p><p><b> {</b></p><p> /*一個button,用來報告當前,數字化時鐘的時間。*/</p>&l
38、t;p> MessageBox.Show("現在時刻:" + DateTime.Now.ToLongTimeString());</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
39、lt;p><b> 4、實踐心得</b></p><p> 學完了C語言理論課,接下來就是要學以致用,否則個人認為學什么都沒有意義。在進行課程設計之前幾天,不知從何入手,一臉茫然。為什么呢?因為我們想自己做出來而不參考任何資料,以為這樣才可體現我們的智慧和能力,其實這是大錯特錯的。當然也不是一味強調自己動腦自己做出來不好,從開發方面角度來說是可以的,有些東西也并不是一味的照搬照抄。
40、抱著這樣的態度迷茫了三四天只想出了一丁點大至結構。最后決定上網找資料,不查不知道,一查大吃一驚,不但自己的想法網上比比皆是,比自己的想法更完美更合理的多得看都看不完。此時真是自愧不如,如早從網上借鑒,集大家之所成,加上自己的修改完善,早已做出了更好的系統結構和想法了?,F在才知道,幾個人的智慧敵不過千萬人智慧的集成,能借鑒的盡量借鑒,然后再修改完善,增加自己所需的功能,做出自己的特色。偉大的物理學家牛頓不也說過他之所以成功是站在偉人的肩上
41、嗎?</p><p> 完成設計后,我們覺得收獲不少,首先是自己首次應用所學知識做出了這個時鐘系統,以前從未做過這樣大(這是對我們自己而言,在專業人仕看來是小菜一碟)的程序,多少心里有點甜美的感覺;而收獲更大的是讓我們學到了怎樣和他人合作完成一件任務,以及在完成的過程中如何溝通。</p><p> 完成設計是在一定時間內完成的,在完成這個設計時,我們做得顯然有一些緊迫,我想是沒合理安排
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論