课程设计(论文)-GTK图形界面编程-计算器的实现.doc_第1页
课程设计(论文)-GTK图形界面编程-计算器的实现.doc_第2页
课程设计(论文)-GTK图形界面编程-计算器的实现.doc_第3页
课程设计(论文)-GTK图形界面编程-计算器的实现.doc_第4页
课程设计(论文)-GTK图形界面编程-计算器的实现.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

gtk+图形界面编程计算器的实现 第页 共22页 目录 1 引言引言 1.1 课题背景课题背景. 1.2 课程设计目的课程设计目的. 1.3 课程设计任务课程设计任务. 2 系统需求分析系统需求分析 . 2.1 功能需求分析功能需求分析. 2.2 性能需求分析性能需求分析 3 总体设计总体设计. 3.1 功能模块分析与设计功能模块分析与设计. 3.2 系统功能模块设计系统功能模块设计 4 系统功能测试系统功能测试 . 4.1 一个一个 helloworld 窗口窗口 4.2 计算器功能测试计算器功能测试. 5 课程设计总结课程设计总结. 参考文献参考文献 gtk+图形界面编程计算器的实现 第页 共22页 1 引言 1.1 课题背景 简单的计算器是一种能实现加、减、乘、除等简单运算的工具。要实现计算功能, 可以用 c 语言的知识和 gtk+编写程序来解决此问题。该计算器大大的降低了数字计 算的难度及提高了计算的准确度和精确度。该计算器使用非常简单和方便,对广大中 小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。 gtk+2.0 是自由软件,并且是gnu 工程的一部分1。gtk+2.0 的许可协议 lgpl,允许任何开发者使用(包括那些开发中的专利软件)且不收任何费用。gtk+2.0 是当今惟一百分之百零付费的工业级的图形界面开发工具。本设计就以 gtk+2.0 为 开发工具,全面展示在linux 平台上开发应用程序的各个侧面,也展现在linux 平台上 开发图形界面应用程序。 计算机信息管理技术的应用,除了能在相当大的程度上代替人工作业,从而减少 人员工作量,减轻工作负担,减少工作中因人为原因而产生的错误从而避免不必要的 损失外,更重要的是能建立准确畅通、简便的信息流通渠道,为工作提供所需要的准 确、及时的信息以帮助做出正确而及时的选择与决定,从而给采用这门技术的单位带 来了巨大的可见或不可见的利益与效益。 1.2 课程设计目的 现在大多数的计算器都具备+,-,*,/等四则运算的功能。用计算器来算数显然比 用脑袋或用纸笔计算要来得方便。讲究高效的我们势必要用到傻瓜设备(就是拿到手 看看说明就知道怎样使用的东东) 。当我们看到一个很长很大的表达式需要得到结果时, 我们就会想到计算器,这样,本程序就是为解决大家基本四则运算的问题而产生的。 只要你读懂说明,那么你所输入的表达式就一定能得到正确的结果。 本文主要基于对表达式的分析并利用 c 进行编程进而实现算法的。与 java 和 c# 等其他高级语言相比,c 在程序运行效率、内存使用的可控性和编程的灵活性上均具 有较大的优势2,与汇编语言和 c 语言更具有面向对象的优点,因此本文采用 ubuntu gtk+图形界面编程计算器的实现 第页 共22页 linux 操作系统以及 gtk+2.0,以达到算法快速有效地执行。 1.3 课程设计任务 本课程设计内容是在 linux 平台下开发一个简单的计算器程序,采用 gcc 编程工 具和 gtk+2.0 工具包等软件为开发工具以及 c 语言知识实现图形化的计算器程序。该 程序能够实现的对整数的加减乘除和小数的加减乘除。 2 系统需求分析 2.1 功能需求分析 (1)整数之间的加减乘除运算,如:1+2、6-5、24/12、90*2 等。 (2)小数之间的加减乘除运算,如:1.2+2.3、3.1-1.2、4.2*1.9、66.1/2.1 等。 (3)小数与整数之间的加减乘除运算,如:1.4+4、2.4*6 等。 2.2 性能需求分析 (1)硬件环境 处理器:奔腾 4 或以上。 内存:128mb 或以上。 硬盘空间:20m 以上。 (2)软件环境 操作系统:linux kernel 2.6.20 以上版本。 工具软件:gtk+2.0 工具包、gcc 编程工具。 (3)技术需求 gcc,即 gnu compiler collection,gnu 编译器套装,是一套由 gnu 开发的编 程语言编译器。它是一套以 gpl 及 lgpl 许可证所发行的自由软件,也是 gnu 计 划的关键部分,亦是自由的类 unix 及苹果电脑 mac os x 操作系统的标准编译器。可 处理 c、c+、 fortran、pascal、objective-c、java, 以及 ada 与其他语言3。 gtk+图形界面编程计算器的实现 第页 共22页 gtk+是一种图形用户界面工具包。也就是说,它是一个库(或者,实际上是若干 个密切相关的库的集合) ,它支持创建基于 gui 的应用程序4。可以把 gtk+ 想像成 一个工具包,从这个工具包中可以找到用来创建 gui 的许多已经准备好的构造块。使 用 gtk+ 这样的库比起编写自己的 gui 代码来有多个优势。例如,它可以显著节约 开发时间,让开发人员把精力集中在项目真正重要和真正独特的地方,而不必重复公 共的功能。对于用户来说,这意味着 他们使用的应用程序之间具有更好的一致性:工 具包能在哪使用,应用程序就能跟到哪里。就像使用 lego 一样,所有的人都使用同 一兼容尺寸这一事实,意味着设计可以在使用库的人之间共享,不论他们在哪里使用 它。 3 总体设计 3.1 功能模块分析与设计 本计算器主要是完成整数之间、小数之间、整数和小数之间的加减乘除的运算, 使用 gtk+完成界面布局。 根据需求分析的结果,总体结构如图 3-1 所示。 图 3-1 总体结构图 简单的计算器 整数 间的 四则 运算 小数 间的 四则 运算 整数 小数 间的 四则 运算 gtk+图形界面编程计算器的实现 第页 共22页 3.2 系统功能模块设计 本课程设计所实现的计算器可以分为以下几个模块实现: (1)图形界面设计 (2)数字键处理模块 (3)小数点处理模块 (4)加减乘除运算按键处理模块 (5)结果按键,即等号处理模块 (6)清除模块 3.2.1 图形界面设计 此程序采用一个纵向盒状容器和多个横向盒状容器来设计界面。另外在单行输入控 件的阅读方向属性上用函数 gtk_widget_set_direction 设定为 gtk_text_dir_rtl, 即从右向左,使此控件的数字显示更像一个计算器的显示屏。 (1)主窗体关键代码: window = gtk_window_new(gtk_window_toplevel); /主窗体 g_callback(gtk_main_quit),null); gtk_window_set_title(gtk_window(window),“我的计算器“); /窗体名称 gtk_window_set_position(gtk_window(window),gtk_win_pos_center); gtk_container_set_border_width(gtk_container(window),10); vbox = gtk_vbox_new(false,0); gtk_container_add(gtk_container(window),vbox); hbox = gtk_hbox_new(false,0); gtk_box_pack_start(gtk_box(vbox),hbox,false,false,5); (2)各个按键布局的关键代码: label = gtk_label_new(“calculator“); /标签名称 gtk_box_pack_start(gtk_box(hbox),label,true,true,5); button = gtk_button_new_with_label(“c“); /清除按键 gtk_box_pack_start(gtk_box(hbox),button,true,true,5); 构建一个hbox1容纳数字“1” 、 “2” 、 “3” 、 “+”四个按键: hbox1 = gtk_hbox_new(false,0); /hbox1 的构建 gtk_box_pack_start(gtk_box(vbox),hbox1,false,false,5); gtk+图形界面编程计算器的实现 第页 共22页 button = gtk_button_new_with_label(“3“); /按键 3 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); g_callback(on_num_clicked),null); button = gtk_button_new_with_label(“2“); /按键 2 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); g_callback(on_num_clicked),null); button = gtk_button_new_with_label(“1“); /按键1 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); 类似的构建 hbox2 控件容纳“4” 、 “5” 、 “6”和“-”四个按键,hbox3 容纳“7” 、 “8” 、 “9”和“*”四个按键,hbox4 容纳“0” 、 “.” 、 “=”和“/”四个按键。 而对于 hbox1hbox4,是控件 vbox 的子类,布局如下: gtk_box_pack_start(gtk_box(vbox),hbox1,false,false,5); gtk_box_pack_start(gtk_box(vbox),hbox2,false,false,5); gtk_box_pack_start(gtk_box(vbox),hbox3,false,false,5); gtk_box_pack_start(gtk_box(vbox),hbox4,false,false,5); 3.2.2 数字键处理模块 数字按钮 09 的功能是向计算器输入数字,通过计算和定位,最后显示出来,所 以它们的回调函数都是同一个,只不过传递的参数根据不同的按钮传递不同的数字, 关键代码如下: void on_num_clicked (gtkbutton* button,gpointer data) /当数定键按下时执行 const gchar *num; gint i; if(have_result) clear_all(); /有结果则全部清除 if(count = 6) return; /够6位数则不能再输入数字 count+; num = gtk_button_get_label(gtk_button(button); /取数 i = g_strlcat(number,num,100); /保存 if(first) gtk+图形界面编程计算器的实现 第页 共22页 nn = strtod(number,null); /数一 else mm = strtod(number,null); /数二 gtk_entry_set_text(gtk_entry(entry),number); /显示 3.2.3 小数点处理模块 小数点按钮的回调函数是较特殊的一个。首先小数点在一个数中只能出现一次,再 按的话则不起作用,小数点按钮在点击后要对所输入的数字做一下处理,使之成为浮 点数,并且让后续数字也转换为相应的浮点数字,关键代码如下: void on_dot_clicked (gtkbutton* button,gpointer data) /当小数点按下时 gint i; if(have_result) clear_all(); /全部清除 if(have_dot = false) /如果无小数点则可以 have_dot = true; i = g_strlcat(number,“.“,100); gtk_entry_set_text(gtk_entry(entry),number); /如果有小数点则不输出 3.2.4运算按键处理模块 本计算器软件只有加减乘除4种运算功能,这4个运算按钮用了同一个回调函数,根 据传递的参数设定当前的计算方法。其关键代码如下: switch(gpointer_to_int(data) case 1: /当“+“时 s = 1; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 2: /当“-“时 gtk+图形界面编程计算器的实现 第页 共22页 s = 2; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 3: /当“*“时 s = 3; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 4: /当“/“时 s = 4; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; 3.2.5 等号按键处理模块 等号按钮的回调函数是根据当前的计算方法进行相应的运算,并将运算结果输出到 单行输出控件中。其关键代码如下: switch(s) /判断四则运算的符号 case 1: /当“+“时 numb = nn+mm; break; case 2: /当“-“时 numb = nn-mm; break; case 3: /当“*“时 numb = nn*mm; break; case 4: /当“/“时 numb = nn/mm; break; 3.2.6 清除模块 gtk+图形界面编程计算器的实现 第页 共22页 清除按钮的功能是清除当前显示,同时清除所有标记,将标记设为默认等。关键代 码如下: void clear_all (void) /清除所有相关标记 gint i; gtk_entry_set_text(gtk_entry(entry),“); nn = 0;/第一个数清零 mm = 0 ;/第二个数清零 s = 0; count = 0 ; first = true; have_dot = false;/小数点标记 have_result = false;/结果标记 for(i = 0 ; i #include static gtkwidget *entry; /定义单行输入控件来显示输入输出的数字 gint count = 0 ; /计位 gdouble nn = 0 ; /计数一 gdouble mm = 0 ; /计数二 gint s = 0 ; /算法 gboolean first = true; /首次输入 gboolean have_dot = false; /是否有小数点 gboolean have_result = false; /是否有结果输出 gchar number100; /保存用户输入的数字 void clear_all (void) /清除所有相关标记 gint i; gtk_entry_set_text(gtk_entry(entry),“); nn = 0; mm = 0 ; s = 0; count = 0 ; first = true; have_dot = false; have_result = false; for(i = 0 ; i 100 ; i+) numberi = 0; void on_num_clicked (gtkbutton* button,gpointer data) /当数定键按下时执行 const gchar *num; gtk+图形界面编程计算器的实现 第页 共22页 gint i; if(have_result) clear_all();/有结果则全部清除 if(count = 6) return; /够 6 位数则不能再输入数字 count+; num = gtk_button_get_label(gtk_button(button);/取数 i = g_strlcat(number,num,100);/保存 if(first) nn = strtod(number,null);/数一 else mm = strtod(number,null);/数二 gtk_entry_set_text(gtk_entry(entry),number);/显示 void on_dot_clicked (gtkbutton* button,gpointer data) /当小数点按下时 gint i; if(have_result) clear_all();/全部清除 if(have_dot = false) /如果无小数点则可以 have_dot = true; i = g_strlcat(number,“.“,100); gtk_entry_set_text(gtk_entry(entry),number); /如果有小数点则不输出 void on_clear_clicked (gtkbutton* button,gpointer data) clear_all();/全部清除 gtk+图形界面编程计算器的实现 第页 共22页 void on_suan_clicked (gtkbutton* button,gpointer data) /当计算按钮 +,-,*,/ 按下时 gint i; switch(gpointer_to_int(data) case 1: /当“+“时 s = 1; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 2: /当“-“时 s = 2; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 3: /当“*“时 s = 3; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; case 4: /当“/“时 s = 4; gtk_entry_set_text(gtk_entry(entry),“); first = false ; count = 0; break; have_dot = false; for(i = 0 ; i 100 ; i+) /清除数字 numberi = 0; void on_eq_clicked (gtkbutton* button,gpointer data) /当等号键按钮按下时 double numb; gchar num100; gtk+图形界面编程计算器的实现 第页 共22页 gchar *result; switch(s) case 1: /当“+“时 numb = nn+mm; break; case 2: /当“-“时 numb = nn-mm; break; case 3: /当“*“时 numb = nn*mm; break; case 4: /当“/“时 numb = nn/mm; break; result = g_ascii_dtostr(num,100,numb); gtk_entry_set_text(gtk_entry(entry),result); have_result = true; int main ( int argc , char* argv) gtkwidget *window; gtkwidget *vbox; gtkwidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4; gtkwidget *button; gtkwidget *label; gtk_init( window = gtk_window_new(gtk_window_toplevel); /主窗口 g_signal_connect(g_object(window),“delete_event“, gtk+图形界面编程计算器的实现 第页 共22页 g_callback(gtk_main_quit),null); gtk_window_set_title(gtk_window(window),“我的计算器“); /主窗口标签栏 gtk_window_set_position(gtk_window(window),gtk_win_pos_center); gtk_container_set_border_width(gtk_container(window),10); vbox = gtk_vbox_new(false,0); gtk_container_add(gtk_container(window),vbox); hbox = gtk_hbox_new(false,0); gtk_box_pack_start(gtk_box(vbox),hbox,false,false,5); label = gtk_label_new(“calculator“); gtk_box_pack_start(gtk_box(hbox),label,true,true,5); button = gtk_button_new_with_label(“c“); gtk_box_pack_start(gtk_box(hbox),button,true,true,5); g_signal_connect(g_object(button),“clicked“, g_callback(on_clear_clicked),null); entry = gtk_entry_new(); gtk_widget_set_direction(entry,gtk_text_dir_rtl); gtk_box_pack_start(gtk_box(vbox),entry,false,false,5); hbox1 = gtk_hbox_new(false,0);/定义 hbox1 容纳 3、2、1、“+“ gtk_box_pack_start(gtk_box(vbox),hbox1,false,false,5); button = gtk_button_new_with_label(“3“);/按键 3 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); button = gtk_button_new_with_label(“2“);/按键 2 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); button = gtk_button_new_with_label(“1“);/按键 1 gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk+图形界面编程计算器的实现 第页 共22页 button = gtk_button_new_with_label(“+“);/按键“+“ g_signal_connect(g_object(button),“clicked“, g_callback(on_suan_clicked),(gpointer)1); gtk_box_pack_start(gtk_box(hbox1),button,true,true,5); hbox2 = gtk_hbox_new(false,0);/定义 hbox2 容纳 6、5、4、“-“ gtk_box_pack_start(gtk_box(vbox),hbox2,false,false,5); button = gtk_button_new_with_label(“6“);/按键 6 g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk_box_pack_start(gtk_box(hbox2),button,true,true,5); button = gtk_button_new_with_label(“5“);/按键 5 g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk_box_pack_start(gtk_box(hbox2),button,true,true,5); button = gtk_button_new_with_label(“4“);/按键 4 g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk_box_pack_start(gtk_box(hbox2),button,true,true,5); button = gtk_button_new_with_label(“-“);/按键“-“ g_signal_connect(g_object(button),“clicked“, g_callback(on_suan_clicked),(gpointer)2); gtk_box_pack_start(gtk_box(hbox2),button,true,true,5); hbox3 = gtk_hbox_new(false,0);/定义 hbox3 容纳 9、8、7、“*“ gtk_box_pack_start(gtk_box(vbox),hbox3,false,false,5); button = gtk_button_new_with_label(“9“);/按键 9 g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk_box_pack_start(gtk_box(hbox3),button,true,true,5); button = gtk_button_new_with_label(“8“);/按键 8 g_signal_connect(g_object(button),“clicked“, g_callback(on_num_clicked),null); gtk+图形界面编程计算器的实现 第页 共22页 gtk_box_pack_start(gtk_box(hbox3),button,true,tru

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论