版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p><b> 1引言2</b></p><p><b> 1.1課題背景2</b></p><p> 1.2課程設(shè)計目的2</p><p> 1.3課程設(shè)計任務(wù)3</p><p>&
2、lt;b> 2系統(tǒng)需求分析3</b></p><p> 2.1功能需求分析3</p><p> 2.2 性能需求分析3</p><p><b> 3總體設(shè)計4</b></p><p> 3.1功能模塊分析與設(shè)計4</p><p> 3.2 系統(tǒng)功能模塊設(shè)計
3、4</p><p><b> 4系統(tǒng)功能測試9</b></p><p> 4.1一個Helloworld窗口9</p><p> 4.2計算器功能測試10</p><p> 5 課程設(shè)計總結(jié)14</p><p><b> 參考文獻15</b></p&
4、gt;<p><b> 1引言</b></p><p><b> 1.1課題背景</b></p><p> 簡單的計算器是一種能實現(xiàn)加、減、乘、除等簡單運算的工具。要實現(xiàn)計算功能,可以用C語言的知識和GTK+編寫程序來解決此問題。該計算器大大的降低了數(shù)字計算的難度及提高了計算的準確度和精確度。該計算器使用非常簡單和方便,對廣大
5、中小學(xué)生的學(xué)習(xí)有巨大幫助作用,也對在職人員的工作有點幫助作用。</p><p> GTK+2.0 是自由軟件,并且是GNU 工程的一部分[1]。GTK+2.0 的許可協(xié)議LGPL,允許任何開發(fā)者使用(包括那些開發(fā)中的專利軟件)且不收任何費用。GTK+2.0 是當(dāng)今惟一百分之百零付費的工業(yè)級的圖形界面開發(fā)工具。本設(shè)計就以 GTK+2.0 為開發(fā)工具,全面展示在Linux 平臺上開發(fā)應(yīng)用程序的各個側(cè)面,也展現(xiàn)在Li
6、nux 平臺上開發(fā)圖形界面應(yīng)用程序。</p><p> 計算機信息管理技術(shù)的應(yīng)用,除了能在相當(dāng)大的程度上代替人工作業(yè),從而減少人員工作量,減輕工作負擔(dān),減少工作中因人為原因而產(chǎn)生的錯誤從而避免不必要的損失外,更重要的是能建立準確暢通、簡便的信息流通渠道,為工作提供所需要的準確、及時的信息以幫助做出正確而及時的選擇與決定,從而給采用這門技術(shù)的單位帶來了巨大的可見或不可見的利益與效益。</p><
7、;p><b> 1.2課程設(shè)計目的</b></p><p> 現(xiàn)在大多數(shù)的計算器都具備+,-,*,/等四則運算的功能。用計算器來算數(shù)顯然比用腦袋或用紙筆計算要來得方便。講究高效的我們勢必要用到傻瓜設(shè)備(就是拿到手看看說明就知道怎樣使用的東東)。當(dāng)我們看到一個很長很大的表達式需要得到結(jié)果時,我們就會想到計算器,這樣,本程序就是為解決大家基本四則運算的問題而產(chǎn)生的。只要你讀懂說明,那么
8、你所輸入的表達式就一定能得到正確的結(jié)果。</p><p> 本文主要基于對表達式的分析并利用C進行編程進而實現(xiàn)算法的。與Java和C#等其他高級語言相比,C在程序運行效率、內(nèi)存使用的可控性和編程的靈活性上均具有較大的優(yōu)勢[2],與匯編語言和C語言更具有面向?qū)ο蟮膬?yōu)點,因此本文采用Ubuntu Linux操作系統(tǒng)以及GTK+2.0,以達到算法快速有效地執(zhí)行。</p><p><b&g
9、t; 1.3課程設(shè)計任務(wù)</b></p><p> 本課程設(shè)計內(nèi)容是在Linux平臺下開發(fā)一個簡單的計算器程序,采用GCC編程工具和GTK+2.0工具包等軟件為開發(fā)工具以及C語言知識實現(xiàn)圖形化的計算器程序。該程序能夠?qū)崿F(xiàn)的對整數(shù)的加減乘除和小數(shù)的加減乘除。</p><p><b> 2系統(tǒng)需求分析</b></p><p>&l
10、t;b> 2.1功能需求分析</b></p><p> 整數(shù)之間的加減乘除運算,如:1+2、6-5、24/12、90*2等。</p><p> 小數(shù)之間的加減乘除運算,如:1.2+2.3、3.1-1.2、4.2*1.9、66.1/2.1等。</p><p> 小數(shù)與整數(shù)之間的加減乘除運算,如:1.4+4、2.4*6等。</p>
11、<p> 2.2 性能需求分析</p><p><b> ?。?)硬件環(huán)境</b></p><p> 處理器:奔騰4或以上。</p><p> 內(nèi)存:128MB或以上。</p><p> 硬盤空間:20M以上。</p><p><b> ?。?)軟件環(huán)境</b&
12、gt;</p><p> 操作系統(tǒng):Linux Kernel 2.6.20以上版本。</p><p> 工具軟件:GTK+2.0工具包、GCC編程工具。</p><p><b> 技術(shù)需求</b></p><p> GCC,即GNU Compiler Collection,GNU編譯器套裝,是一套由 GNU 開發(fā)
13、的編程語言編譯器。它是一套以GPL 及 LGPL 許可證所發(fā)行的自由軟件,也是 GNU計劃的關(guān)鍵部分,亦是自由的類Unix及蘋果電腦 Mac OS X 操作系統(tǒng)的標準編譯器??商幚鞢、C++、 Fortran、Pascal、Objective-C、Java, 以及 Ada與其他語言[3]。</p><p> GTK+是一種圖形用戶界面工具包。也就是說,它是一個庫(或者,實際上是若干個密切相關(guān)的庫的集合),它支持
14、創(chuàng)建基于GUI 的應(yīng)用程序[4]。可以把GTK+ 想像成一個工具包,從這個工具包中可以找到用來創(chuàng)建GUI 的許多已經(jīng)準備好的構(gòu)造塊。使用 GTK+ 這樣的庫比起編寫自己的 GUI 代碼來有多個優(yōu)勢。例如,它可以顯著節(jié)約開發(fā)時間,讓開發(fā)人員把精力集中在項目真正重要和真正獨特的地方,而不必重復(fù)公共的功能。對于用戶來說,這意味著 他們使用的應(yīng)用程序之間具有更好的一致性:工具包能在哪使用,應(yīng)用程序就能跟到哪里。就像使用LEGO一樣,所有的人都使
15、用同一兼容尺寸這一事實,意味著設(shè)計可以在使用庫的人之間共享,不論他們在哪里使用它。</p><p><b> 3總體設(shè)計</b></p><p> 3.1功能模塊分析與設(shè)計</p><p> 本計算器主要是完成整數(shù)之間、小數(shù)之間、整數(shù)和小數(shù)之間的加減乘除的運算,使用GTK+完成界面布局。</p><p> 根據(jù)需
16、求分析的結(jié)果,總體結(jié)構(gòu)如圖3-1所示。</p><p> 圖3-1 總體結(jié)構(gòu)圖</p><p> 3.2 系統(tǒng)功能模塊設(shè)計</p><p> 本課程設(shè)計所實現(xiàn)的計算器可以分為以下幾個模塊實現(xiàn):</p><p><b> 圖形界面設(shè)計</b></p><p><b> 數(shù)字鍵處理
17、模塊</b></p><p><b> 小數(shù)點處理模塊</b></p><p> 加減乘除運算按鍵處理模塊</p><p> 結(jié)果按鍵,即等號處理模塊</p><p><b> 清除模塊</b></p><p> 3.2.1 圖形界面設(shè)計</p&g
18、t;<p> 此程序采用一個縱向盒狀容器和多個橫向盒狀容器來設(shè)計界面。另外在單行輸入控件的閱讀方向?qū)傩陨嫌煤瘮?shù)gtk_widget_set_direction 設(shè)定為GTK_TEXT_DIR_RTL,即從右向左,使此控件的數(shù)字顯示更像一個計算器的顯示屏。</p><p> ?。?)主窗體關(guān)鍵代碼:</p><p> window = gtk_window_new(GTK_
19、WINDOW_TOPLEVEL); //主窗體</p><p> G_CALLBACK(gtk_main_quit),NULL);</p><p> gtk_window_set_title(GTK_WINDOW(window),"我的計算器"); //窗體名稱</p><p> gtk_window_set_position(GTK_
20、WINDOW(window),GTK_WIN_POS_CENTER);</p><p> gtk_container_set_border_width(GTK_CONTAINER(window),10);</p><p> vbox = gtk_vbox_new(FALSE,0);</p><p> gtk_container_add(GTK_CONTAINE
21、R(window),vbox);</p><p> hbox = gtk_hbox_new(FALSE,0);</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);</p><p> 各個按鍵布局的關(guān)鍵代碼:</p><p> label = gtk_label_
22、new("Calculator"); //標簽名稱</p><p> gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("C"); //清除按鍵</p><p>
23、gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);</p><p> 構(gòu)建一個hbox1容納數(shù)字“1”、“2”、“3”、“+”四個按鍵:</p><p> hbox1 = gtk_hbox_new(FALSE,0); //hbox1的構(gòu)建</p><p> gtk_box_pack_start(G
24、TK_BOX(vbox),hbox1,FALSE,FALSE,5);</p><p> button = gtk_button_new_with_label("3"); //按鍵3</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> G_C
25、ALLBACK(on_num_clicked),NULL);</p><p> button = gtk_button_new_with_label("2"); //按鍵2</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> G_CALLB
26、ACK(on_num_clicked),NULL);</p><p> button = gtk_button_new_with_label("1"); //按鍵1</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> 類似的構(gòu)建hbox2控
27、件容納“4”、“5”、“6”和“-”四個按鍵,hbox3容納“7”、“8”、“9”和“*”四個按鍵,hbox4容納“0”、“.”、“=”和“/”四個按鍵。</p><p> 而對于hbox1~hbox4,是控件vbox的子類,布局如下:</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,5);</p>
28、<p> gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);&
29、lt;/p><p> 3.2.2數(shù)字鍵處理模塊</p><p> 數(shù)字按鈕 0~9 的功能是向計算器輸入數(shù)字,通過計算和定位,最后顯示出來,所以它們的回調(diào)函數(shù)都是同一個,只不過傳遞的參數(shù)根據(jù)不同的按鈕傳遞不同的數(shù)字,關(guān)鍵代碼如下:</p><p> void on_num_clicked (GtkButton* button,gpointer data)</
30、p><p> { //當(dāng)數(shù)定鍵按下時執(zhí)行</p><p> const gchar *num;</p><p><b> gint i;</b></p><p> if(have_result)</p><p> clear_all(); //有結(jié)果則全部清除
31、</p><p> if(count == 6) return; //夠6位數(shù)則不能再輸入數(shù)字</p><p><b> count++;</b></p><p> num = gtk_button_get_label(GTK_BUTTON(button)); //取數(shù)</p><p> i =
32、g_strlcat(number,num,100); //保存</p><p><b> if(first)</b></p><p> nn = strtod(number,NULL); //數(shù)一</p><p><b> else</b></p><p>
33、; mm = strtod(number,NULL); //數(shù)二</p><p> gtk_entry_set_text(GTK_ENTRY(entry),number); //顯示</p><p><b> }</b></p><p> 3.2.3小數(shù)點處理模塊</p><p> 小數(shù)點
34、按鈕的回調(diào)函數(shù)是較特殊的一個。首先小數(shù)點在一個數(shù)中只能出現(xiàn)一次,再按的話則不起作用,小數(shù)點按鈕在點擊后要對所輸入的數(shù)字做一下處理,使之成為浮點數(shù),并且讓后續(xù)數(shù)字也轉(zhuǎn)換為相應(yīng)的浮點數(shù)字,關(guān)鍵代碼如下:</p><p> void on_dot_clicked (GtkButton* button,gpointer data)</p><p> { //當(dāng)小數(shù)點按下時&
35、lt;/p><p><b> gint i;</b></p><p> if(have_result)</p><p> clear_all(); //全部清除</p><p> if(have_dot == FALSE) //如果無小數(shù)點則可以</p><p><b&g
36、t; {</b></p><p> have_dot = TRUE;</p><p> i = g_strlcat(number,".",100);</p><p> gtk_entry_set_text(GTK_ENTRY(entry),number);</p><p> }//如果有小數(shù)點則不輸
37、出</p><p><b> }</b></p><p> 3.2.4運算按鍵處理模塊</p><p> 本計算器軟件只有加減乘除4種運算功能,這4個運算按鈕用了同一個回調(diào)函數(shù),根據(jù)傳遞的參數(shù)設(shè)定當(dāng)前的計算方法。其關(guān)鍵代碼如下:</p><p> switch(GPOINTER_TO_INT(data))<
38、/p><p><b> {</b></p><p> case 1: //當(dāng)"+"時</p><p><b> s = 1;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"");</p
39、><p> first = FALSE ; count = 0; break;</p><p> case 2: //當(dāng)"-"時</p><p><b> s = 2;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"");
40、</p><p> first = FALSE ; count = 0; break;</p><p> case 3: //當(dāng)"*"時</p><p><b> s = 3;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"&q
41、uot;);</p><p> first = FALSE ; count = 0; break;</p><p> case 4: //當(dāng)"/"時</p><p><b> s = 4;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),&q
42、uot;");</p><p> first = FALSE ; count = 0; break;</p><p><b> }</b></p><p> 3.2.5等號按鍵處理模塊</p><p> 等號按鈕的回調(diào)函數(shù)是根據(jù)當(dāng)前的計算方法進行相應(yīng)的運算,并將運算結(jié)果輸出到單行輸出控件中。其關(guān)鍵代碼如
43、下:</p><p> switch(s) //判斷四則運算的符號</p><p><b> {</b></p><p> case 1: //當(dāng)"+"時</p><p> numb = nn+mm;</p><p><b> break
44、;</b></p><p> case 2: //當(dāng)"-"時</p><p> numb = nn-mm;</p><p><b> break;</b></p><p> case 3: //當(dāng)"*"時</p><p>
45、numb = nn*mm;</p><p><b> break;</b></p><p> case 4: //當(dāng)"/"時</p><p> numb = nn/mm;</p><p><b> break;</b></p><p><
46、;b> }</b></p><p><b> 3.2.6清除模塊</b></p><p> 清除按鈕的功能是清除當(dāng)前顯示,同時清除所有標記,將標記設(shè)為默認等。關(guān)鍵代碼如下:</p><p> void clear_all (void)</p><p> { //清除所有相關(guān)標記<
47、;/p><p><b> gint i;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"");</p><p> nn = 0;//第一個數(shù)清零</p><p> mm = 0 ;//第二個數(shù)清零</p><p
48、><b> s = 0;</b></p><p> count = 0 ;</p><p> first = TRUE;</p><p> have_dot = FALSE;//小數(shù)點標記</p><p> have_result = FALSE;//結(jié)果標記</p><p>
49、; for(i = 0 ; i < 100 ; i++)</p><p> number[i] = '\0';</p><p><b> }</b></p><p><b> 4系統(tǒng)功能測試</b></p><p> 4.1一個Helloworld窗口</p&g
50、t;<p> 本例子是使用GTK+2.0編寫一個helloworld.c的程序,用以顯示一個窗口,并且在這個窗口的標題欄上顯示字符串“Hello,world!”。程序截圖如圖4-1。</p><p> 圖4-1 使用vim編寫helloworld.c</p><p> 運行g(shù)cc -Wall helloworld.c -o helloworld `pkg-config
51、--cflags --libs gtk+-2.0`命令編譯后,執(zhí)行./helloworld出現(xiàn)窗口,如圖4-2所示。</p><p> 圖4-2 Helloworld窗口</p><p> 4.2計算器功能測試</p><p> (1)計算器主界面,如圖4-3所示。</p><p> 圖4-3 計算器主界面</p>&
52、lt;p> 加法運算演示:55+346=401,如圖4-4、4-5、4-6所示。</p><p><b> 圖4-4輸入55</b></p><p><b> 圖4-5輸入346</b></p><p> 圖4-6 按下等號得出結(jié)果</p><p> ?。?)乘法運算演示:321*22
53、=7062,如圖4-7、4-8、4-9所示。</p><p> 圖4-7 輸入321</p><p><b> 圖4-8 輸入22</b></p><p> 圖4-9 按下等號輸出結(jié)果</p><p> ?。?)除法運算演示:100/3=33.33333,如圖4-10、4-11、4-12所示。</p>
54、<p> 圖4-10 輸入100</p><p><b> 圖4-11 輸入3</b></p><p> 圖4-11 按下等號輸出結(jié)果</p><p><b> 5 課程設(shè)計總結(jié)</b></p><p> 通過兩周周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我順利的完成了Linux平臺下圖形界面——
55、計算器設(shè)計的課程設(shè)計。感覺在這次課程設(shè)計中自己受益匪淺,不僅將以前在課堂上學(xué)到的東西從新又鞏固了一遍,并且又有所創(chuàng)新,將數(shù)據(jù)結(jié)構(gòu)的知識與Linux知識相結(jié)合,做出了功能豐富的應(yīng)用程序,還有就是同時發(fā)現(xiàn)了以前的不足,及時的彌補!</p><p> 在課程設(shè)計中遇見的課題中的很多技術(shù)問題,當(dāng)然要感謝鄧老師能給予認真的指導(dǎo),并培養(yǎng)我們獨立自立的能力,讓我們對自學(xué)能力有了很高的提高,在各方面,提高了我們的主動積極性。同
56、時也要謝謝同學(xué)們的相互幫助,感謝有了這些,我才能很好的順利的完成我的這次課程設(shè)計。</p><p><b> 參考文獻</b></p><p> [1]宋國偉.《GTK+2.0編程范例》北京:清華大學(xué)出版社,2002.11</p><p> [2]譚誥強.《C程序設(shè)計》北京:清華大學(xué)出版社,2004.6</p><p&
57、gt; [3]Kurt Wall et al.GUN/Linux編程指南(第二版)北京:清華大學(xué)出版社,2002.6</p><p> [4]嚴蔚敏,吳偉民.《數(shù)據(jù)結(jié)構(gòu)》(C語言版) 北京:清華大學(xué)出版,2009.4</p><p><b> 源程序清單:</b></p><p> #include <gtk/gtk.h>&
58、lt;/p><p> #include <stdlib.h></p><p> static GtkWidget *entry; //定義單行輸入控件來顯示輸入輸出的數(shù)字</p><p> gint count = 0 ; //計位</p><p> gdouble nn = 0 ; //計數(shù)一</p>
59、<p> gdouble mm = 0 ; //計數(shù)二</p><p> gint s = 0 ; //算法</p><p> gboolean first = TRUE; //首次輸入</p><p> gboolean have_dot = FALSE; //是否有小數(shù)點</p><p> gboolea
60、n have_result = FALSE; //是否有結(jié)果輸出</p><p> gchar number[100]; //保存用戶輸入的數(shù)字</p><p> void clear_all (void)</p><p> { //清除所有相關(guān)標記</p><p><b> gint i;</b>
61、;</p><p> gtk_entry_set_text(GTK_ENTRY(entry),"");</p><p><b> nn = 0;</b></p><p><b> mm = 0 ;</b></p><p><b> s = 0;</b>
62、;</p><p> count = 0 ;</p><p> first = TRUE;</p><p> have_dot = FALSE;</p><p> have_result = FALSE;</p><p> for(i = 0 ; i < 100 ; i++)</p>&l
63、t;p> number[i] = '\0';</p><p><b> }</b></p><p> void on_num_clicked (GtkButton* button,gpointer data)</p><p> { //當(dāng)數(shù)定鍵按下時執(zhí)行</p><p> c
64、onst gchar *num;</p><p><b> gint i;</b></p><p> if(have_result)</p><p> clear_all();//有結(jié)果則全部清除</p><p> if(count == 6) return; //夠6位數(shù)則不能再輸入數(shù)字</p
65、><p><b> count++;</b></p><p> num = gtk_button_get_label(GTK_BUTTON(button));//取數(shù)</p><p> i = g_strlcat(number,num,100);//保存</p><p><b> if(first)&
66、lt;/b></p><p> nn = strtod(number,NULL);//數(shù)一</p><p><b> else</b></p><p> mm = strtod(number,NULL);//數(shù)二</p><p> gtk_entry_set_text(GTK_ENTRY(entr
67、y),number);//顯示</p><p><b> }</b></p><p> void on_dot_clicked (GtkButton* button,gpointer data)</p><p> { //當(dāng)小數(shù)點按下時</p><p><b> gint i;&l
68、t;/b></p><p> if(have_result)</p><p> clear_all();//全部清除</p><p> if(have_dot == FALSE) //如果無小數(shù)點則可以</p><p><b> {</b></p><p> have_dot
69、 = TRUE;</p><p> i = g_strlcat(number,".",100);</p><p> gtk_entry_set_text(GTK_ENTRY(entry),number);</p><p> }//如果有小數(shù)點則不輸出</p><p><b> }</b><
70、;/p><p> void on_clear_clicked (GtkButton* button,gpointer data)</p><p><b> {</b></p><p> clear_all();//全部清除</p><p><b> }</b></p>
71、<p> void on_suan_clicked (GtkButton* button,gpointer data)</p><p> { //當(dāng)計算按鈕 +,-,*,/ 按下時</p><p><b> gint i;</b></p><p> switch(GPOINTER_TO_INT(dat
72、a))</p><p><b> {</b></p><p> case 1: //當(dāng)"+"時</p><p><b> s = 1;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"");&l
73、t;/p><p> first = FALSE ; count = 0; break;</p><p> case 2: //當(dāng)"-"時</p><p><b> s = 2;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),"&q
74、uot;);</p><p> first = FALSE ; count = 0; break;</p><p> case 3: //當(dāng)"*"時</p><p><b> s = 3;</b></p><p> gtk_entry_set_text(GTK_ENTRY(entry),
75、"");</p><p> first = FALSE ; count = 0; break;</p><p> case 4: //當(dāng)"/"時</p><p><b> s = 4;</b></p><p> gtk_entry_set_text(GTK_ENTRY
76、(entry),"");</p><p> first = FALSE ; count = 0; break;</p><p><b> }</b></p><p> have_dot = FALSE;</p><p> for(i = 0 ; i < 100 ; i++) //清除
77、數(shù)字</p><p> number[i] = '\0';</p><p><b> }</b></p><p> void on_eq_clicked (GtkButton* button,gpointer data)</p><p> { //當(dāng)?shù)忍栨I按鈕按下時</p>
78、<p> double numb;</p><p> gchar num[100];</p><p> gchar *result;</p><p><b> switch(s)</b></p><p><b> {</b></p><p> case
79、 1: //當(dāng)"+"時</p><p> numb = nn+mm;</p><p><b> break;</b></p><p> case 2: //當(dāng)"-"時</p><p> numb = nn-mm;</p><p><
80、b> break;</b></p><p> case 3: //當(dāng)"*"時</p><p> numb = nn*mm;</p><p><b> break;</b></p><p> case 4: //當(dāng)"/"時</p>
81、<p> numb = nn/mm;</p><p><b> break;</b></p><p><b> }</b></p><p> result = g_ascii_dtostr(num,100,numb);</p><p> gtk_entry_set_text(G
82、TK_ENTRY(entry),result);</p><p> have_result = TRUE;</p><p><b> }</b></p><p> int main ( int argc , char* argv[])</p><p><b> {</b></p>
83、<p> GtkWidget *window;</p><p> GtkWidget *vbox;</p><p> GtkWidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4;</p><p> GtkWidget *button;</p><p> GtkWidget *label;&l
84、t;/p><p> gtk_init(&argc,&argv);</p><p> window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //主窗口</p><p> g_signal_connect(G_OBJECT(window),"delete_event",</p>
85、<p> G_CALLBACK(gtk_main_quit),NULL);</p><p> gtk_window_set_title(GTK_WINDOW(window),"我的計算器"); //主窗口標簽欄</p><p> gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER)
86、;</p><p> gtk_container_set_border_width(GTK_CONTAINER(window),10);</p><p> vbox = gtk_vbox_new(FALSE,0);</p><p> gtk_container_add(GTK_CONTAINER(window),vbox);</p><p&
87、gt; hbox = gtk_hbox_new(FALSE,0);</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);</p><p> label = gtk_label_new("Calculator");</p><p> gtk_box_pack_start
88、(GTK_BOX(hbox),label,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("C");</p><p> gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);</p><p> g_signal_conne
89、ct(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_clear_clicked),NULL);</p><p> entry = gtk_entry_new();</p><p> gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL);<
90、;/p><p> gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,5);</p><p> hbox1 = gtk_hbox_new(FALSE,0);//定義hbox1容納3、2、1、"+"</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox
91、1,FALSE,FALSE,5);</p><p> button = gtk_button_new_with_label("3");//按鍵3</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> g_signal_connect(G_OBJE
92、CT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> button = gtk_button_new_with_label("2");//按鍵2</p><p> gtk_box_pack_start(GTK_BOX(hbo
93、x1),button,TRUE,TRUE,5);</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> button = gtk_button_new_with_label("
94、;1");//按鍵1</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked)
95、,NULL);</p><p> button = gtk_button_new_with_label("+");//按鍵"+"</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_suan_cl
96、icked),(gpointer)1);</p><p> gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);</p><p> hbox2 = gtk_hbox_new(FALSE,0);//定義hbox2容納6、5、4、"-"</p><p> gtk_box_pack_st
97、art(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);</p><p> button = gtk_button_new_with_label("6");//按鍵6</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G
98、_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("5");//按鍵5</p><p> g_signal
99、_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p> button = gtk_butto
100、n_new_with_label("4");//按鍵4</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BO
101、X(hbox2),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("-");//按鍵"-"</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p>
102、 G_CALLBACK(on_suan_clicked),(gpointer)2);</p><p> gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);</p><p> hbox3 = gtk_hbox_new(FALSE,0);//定義hbox3容納9、8、7、"*"</p><
103、p> gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);</p><p> button = gtk_button_new_with_label("9");//按鍵9</p><p> g_signal_connect(G_OBJECT(button),"clicked",&l
104、t;/p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("8");//按鍵8</p>
105、;<p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p&g
106、t; button = gtk_button_new_with_label("7");//按鍵7</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk
107、_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("*");//按鍵"*"</p><p> g_signal_connect(G_OBJECT(button),"clicked",
108、</p><p> G_CALLBACK(on_suan_clicked),(gpointer)3);</p><p> gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);</p><p> hbox4 = gtk_hbox_new(FALSE,0);//定義hbox4容納0、".&quo
109、t;、"="、"/"</p><p> gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);</p><p> button = gtk_button_new_with_label("0");//按鍵0</p><p> g_signal_c
110、onnect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_num_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p> button = gtk_button_
111、new_with_label(".");//按鍵"."</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_dot_clicked),NULL);</p><p> gtk_box_pack_st
112、art(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("=");//按鍵"="</p><p> g_signal_connect(G_OBJECT(button),"clicked",</p>
113、<p> G_CALLBACK(on_eq_clicked),NULL);</p><p> gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</p><p> button = gtk_button_new_with_label("/");//按鍵"/"</p&g
114、t;<p> g_signal_connect(G_OBJECT(button),"clicked",</p><p> G_CALLBACK(on_suan_clicked),(gpointer)4);</p><p> gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++_mfc計算器編程課程設(shè)計--mfc編程科學(xué)計算器
- java計算器課程設(shè)計-- 計算器的設(shè)計與實現(xiàn)
- c++課程設(shè)計---qt圖形界面的日期類實現(xiàn)
- java實現(xiàn)計算器課程設(shè)計
- java編程語言設(shè)計課程設(shè)計--- 簡易計算器設(shè)計
- 課程設(shè)計-計算器
- 計算器java課程設(shè)計--簡單計算器
- 三種語言實現(xiàn)計算器課程設(shè)計--計算器
- java課程設(shè)計--計算器的設(shè)計與實現(xiàn)
- 計算器的設(shè)計與實現(xiàn)課程設(shè)計論文
- 計算器課程設(shè)計---計算器仿真程序設(shè)計
- 面向?qū)ο缶幊逃?xùn)練課程設(shè)計---迷你計算器設(shè)計
- java課程設(shè)計—計算器
- java課程設(shè)計計算器
- java計算器課程設(shè)計
- 計算器課程設(shè)計報告
- 簡易計算器課程設(shè)計
- 軟件課程設(shè)計計算器
- java課程設(shè)計--計算器
- java課程設(shè)計計算器
評論
0/150
提交評論