GTK图形界面编程-计算器的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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