GTK图形界面编程-计算器的实现

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一.课程设计目的 (2)

二.课程设计任务与要求 (2)

三.功能分析 (3)

四.功能模块分析与设计 (3)

1.图形界面设计 (4)

2.按键处理模块 (4)

3.数字键处理模块 (5)

4.小数点处理模块 (6)

5.加减乘除运算按键处理模块 (6)

6.结果按键,即等号处理模块 (7)

7.清除模块 (8)

五.功能测试 (9)

六.课程设计总结 (10)

高级C语言实训报告

一.课程设计目的

现在大多数的计算器都具备+,-,*,/等四则运算的功能。用计算器来算数显然比用脑袋或用纸笔计算要来得方便。当我们看到一个很长很大的表达式需要得到结果时,我们就会想到计算器,这样,本程序就是为解决大家基本四则运算的问题而产生的。主要基于对表达式的分析并利用C进行编程进而实现算法的。C在程序运行效率、内存使用的可控性和编程的灵活性上均具有较大的优势,与汇编语言和C语言更具有面向对象的优点,我采用Ubuntu Linux操作系统以及GTK+2.0,以达到算法快速有效地执行。

二.课程设计任务与要求

1.使用C语言和GTK+图形库进行开发,计算器可以在装有GTK+运行环境的各种操作系统上运行;

2.实现标准型计算器上的四则运算功能(参考Windows 7系统标准型计算器);

3.根据课程设计进度对程序功能进行扩展:

添加捕捉键盘事件功能,通过PC键盘的数字键盘也可以进行输入;

为计算器添加存储功能(MR、M+、M-等按键功能),实现完整的标准型计算器;

4.实现科学型计算器上的四则运算功能(参考Windows 7系统科学型计算器或Ubuntu 系统基本型计算器)。

本课程设计内容是在Linux平台下开发一个简单的计算器程序,采用GCC编程工具和GTK+2.0工具包等软件为开发工具以及C语言知识实现图形化的计算器程序。该程序能够实现的对整数的加减乘除和小数的加减乘除。

三.功能分析

1.整数之间的加减乘除运算

2.小数之间的加减乘除运算

3.小数与整数之间的加减乘除运算

四.功能模块分析与设计

本计算器主要是完成整数之间、小数之间、整数和小数之间的加减乘除的运算,使用GTK+完成界面布局。

根据需求分析的结果,总体结构如下图所示:

本课程设计所实现的计算器可以分为以下几个模块实现:图形界面设计、数字键处理模块、小数点处理模块、加减乘除运算按键处理模块

1.图形界面设计

此程序采用一个纵向盒状容器和多个横向盒状容器来设计界面。另外在单行输入控件的阅读方向属性上用函数gtk_widget_set_direction 设定为GTK_TEXT_DIR_LTR,即从左向右,使此控件的数字显示更像一个计算器的显示屏。

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),15);

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("欢迎使用"); //标签名称

gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5);

button = gtk_button_new_with_label("CE"); //清除按键

gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);

定义hbox1容纳back和ce

hbox1 = gtk_hbox_new(FALSE,0);

gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,5);

button = gtk_button_new_with_label("Back"); //按键Back

gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);

g_signal_connect(G_OBJECT(button),"clicked",

G_CALLBACK(clear_one),NULL);

button = gtk_button_new_with_label("MC"); //按键MC

gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);

g_signal_connect(G_OBJECT(button),"clicked",

G_CALLBACK(clear_one),NULL);

类似的构建hbox2控件容纳“1”、“2”、“3”和“+”四个按键hbox3控件容纳“1”、“2”、“3”和“+”四个按键,hbox4容纳“7”、“8”、“9”和“*”四个按键,hbox5容纳“0”、“.”、“=”和“/”四个按键。

3.数字键处理模块

数字按钮0~9 的功能是向计算器输入数字,通过计算和定位,最后显示出来,所以它们的回调函数都是同一个,只不过传递的参数根据不同的按钮传递不同的数字,关键代码如下:

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)

nn = strtod(number,NULL); //数一

else

相关文档
最新文档