




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一课程设计主要内容2二设计步骤2三图形模块设计31.基本窗口设计32.图形界面布局设计33.按钮设计4四功能模块设计4(一)按钮功能4(二)键盘功能5五设计结果及效果检验7六心得体会9一课程设计主要内容1. 使用c语言和gtk+图形库进行开发,计算器可以在装有gtk+运行环境的各种操作系统上运行;2. 实现标准型计算器上的四则运算功能(参考window 7系统标准型计算器);3. 根据课程设计进度对程序功能进行扩展,1) 添加捕捉键盘事件功能,通过pc键盘的数字键盘也可以进行输入。2) 为计算器添加存储功能(mr、m+、m-等按键功能),实现完整的标准型计算器。二设计步骤在设计图形界面计算器之前,我们首先要熟悉gtk+图形库,然后逐步从简单窗口的设计到图形界面的布局设计和按钮操作设计等,深化到综合设计于计算器,并在设计进度中,逐步完善计算器的功能。程序流程图如下:三图形模块设计 1.基本窗口设计首先在头文件里包含 库,然后声明变量,即声明一个指向gtkwidget 的指针类型的窗口,在初始化gtk+图形库后,就可以创建窗口,并显示。各步代码如下:#include int main(int argc,char *argv)gtkwidget *window ;/声明变量gtk_init(&argc,&argv);/初始化gtk+ 图形库window=gtk_window_new(gtk_window_toplevel);/创建一个标准的有框架窗口gtk_widge_show(window);/ 实际显示窗口gtk_main();/ 等待信号到来return 0;2.图形界面布局设计 在这个图形界面计算器设计中,我采用的是表。在使用表时,建立格来放入构件,构件可以占满我们所指定的所有空间。建立表格的函数是gtkwidget *gtk_table_new() ,函数原型是:gtkwidget *gtk_table_new(guint rows,guit columns,gboolean homogeneous);第一个参数是表中要安排的行的数量,第二个是列的数量,homogeneous 参数跟表格框的大小处理有关。行与列为从0到n编号,n是我们在调用gtk_table_new 时所指定的值。然后向框中放置一个构件,使用 gtk_table_attach () 函数,函数原型是:void gtk_table_attach(gtktable *table, gtkwidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach, gtkattachoptions xoptions, gtkattachoptions yoptions, guint xpadding, guint xpadding,);第一个参数(“table”)是已经创建的表格,第二个是要放入表里的构件(这这个计算器设计中放入表中的构件是按钮),left_attach和right_attach参数指定构件放置的位置。3.按钮设计 要设计按钮首先要声明按钮变量,然后创建按钮,把按钮加入某个容器中。但是这样创建的按钮还不能具体使用,我们还要通过连接回调函数来实现按钮的作用。回调函数的原型通常如下:void a_callback_function(gtkwidget *widget ,gpointer user_data); 回调函数的连接函数如下:gulong g_signal_connect(gpointer *object,const gchar *name,gcallback func,gpointer user_data); 回调函数的连接传递的参数有构件、信号名、回调函数指针和你的任意指针。四功能模块设计(一)按钮功能 计算器按钮功能是说通过按下计算器的按钮来接受数据,并计算得出结果,扑捉的是计算器的按钮功能。 1.数字键处理模块 数字按钮09的功能是向计算器输入数字,通过计位和定位,最后显示出来,它们的回调函数都是同一个:g_signal_connect(g_object(button),clicked,g_callback(on_num_clicked),null);只不过传递的参数根据不同的按钮传递不同的数字。函数在接受到数字按钮信号时,对按下的按钮进行分析获取我们想要进行运算的数字,并对它进行保存和其他相应处理。这样便于我们在按下运算符按钮时对它们进行操作。2.小数点处理模块该部分根据判断有无小数点确认计算数是否是小数,保证了计算器能进行小数的计算。3.加减乘除运算按键处理模块这部分主要是计算器确认我们输入的何种运算符,然后给运算符标志赋予一个相应的值,在接收到等号按钮信号时,进行相应的运算。4.等号处理模块 等号处理模块在等号被按下时,根据运算模块里的运算标识符值,对计算数进行相应的运算,并得出结果。在这块处理中,我们通过以下两个函数分别来设置计算结果中小数点后的位数和结果的显示。g_snprintf(result,100,%.2f,numb); / 保留小数点后2位,并把结果存入result中 gtk_entry_set_text(gtk_entry(entry),result); /显示如果5.清除模块 清除模块是计算器必不可少的一个模块,否则每完成一次运算后都要重新启动计算器才可进行下次运算。清除模块功能是计算器在我们按下clear 键时获取清除信号,然后调用清除模块函数清除计算器里的数值,让计算器回到最初还未计算的状态,方便我们进行下一次运算。(二)键盘功能计算器的键盘功能是说我们通过键盘输入要计算的数据和想进行何种运算的运算符,计算器通过扑捉键盘功能来获取我们输入的数据和运算符,进而调用相应的函数,得出我们想要的结果。同样,计算器想要扑捉到键盘功能也是需要一个信号回调函数和一个信号连接函数。在主函数中,我们只需加入一个语句就可获取整个键盘信号,回调连接函数如下: g_signal_connect(window,key_press_event,g_callback(key_value),entry);/当有按键按下时,根据键值回调函数进行处理,并把按下的键显示在文本框中键值的回调函数在按键按下后,接收键值并把键值传给相应的函数,相应的函数在接收键值后作出相应的处理和运算,键值的回调函数如下:gboolean key_value(gtkwidget *widget, gdkeventkey *event, gpointer data) /键值可以是键盘上任意的数字键和运算符号键 guint keyvalue = event-keyval;if(keyvalue = 0xffb0)&(keyvalue = 0x30)&(keyvalue = 0x39) /按下主键盘数字键时on_key_num_clicked(keyvalue%0x30);if(keyvalue = 0xffab)|(keyvalue = 0x2b) /按下小键盘或主键盘“+”时gtk_entry_set_text(gtk_entry(entry),); /清屏,使累加时前一次的结果不显示在文本框里on_key_suan_clicked(1); / “+” if(keyvalue = 0xffad)|(keyvalue = 0x2d) gtk_entry_set_text(gtk_entry(entry),);on_key_suan_clicked(2); /“-” if(keyvalue = 0xffaa)|(keyvalue = 0x2a) gtk_entry_set_text(gtk_entry(entry),);on_key_suan_clicked(3); /“*” if(keyvalue = 0xffaf)|(keyvalue = 0x2f) gtk_entry_set_text(gtk_entry(entry),);on_key_suan_clicked(4); /“/” if(keyvalue = 0xffae)|(keyvalue = 0x2e) /按下小数点on_key_dot_clicked(); if(keyvalue = 0xff8d)|(keyvalue = 0x3d) /按下小键盘的enter键或主键盘的等号on_key_eq_clicked(); return false;计算器的键盘功能和计算器的按钮功能一样,都具有五个模块。各模块在处理时跟按钮功能部分一样,只是接收参数时不同。在键盘功能中,我们只需传递某个键值即可。五设计结果及效果检验图形界面计算器设计如下:1. 计算器的加法运算结果如下: (13+56=69) 通过键盘输入 通过按钮2.计算器的减法运算结果如下:(34-12=22) 键盘输入 按钮输入3. 计算器的乘法运算结果如下:(2.5*2.5=6.25) 键盘输入 按钮输入 4.计算器的除法运算结果如下:(10/3=3.33) 六心得体会在这次实训中,因为选做的题目是使用gtk+图形库设计图形界面计算器,以前也没有接触过图形界面的设计,所以觉得这是一个尝试。刚开始时也有点迷惑,后来看了一些资料,根据资料上的讲解做了一个简单窗口。做出来后发现这个图形界面设计很有趣,而有些事我们要努力去尝试。有些东西其实并不难,只是我们想着它难,所以它就难了。而在努力尝试过以后我们又会发现难的只是我们不肯去尝试。在实训过程中,我是把程序分成两个c文件,再包含在一个头文件里。刚开始把程序放在不同文件里时,由于变量的定义在实质上不是同一个,导致编译能通过,但运行时就出错。通过请教老师和同学,把变量的定义放到了两个c文件共同的头文件里,在运行时不再出现那样的情况。通过这次自己把程序分装在不同文件中,让我对程序的分装有了更好的了解,也初步学会了怎样对程序进行分装。编写键盘部分的程序时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗行业大数据隐私保护在2025年医疗数据安全事件应急处理中的应用报告
- 离职无解除劳动合同协议
- 油漆墙体广告合同协议书
- 风险合同协议书模板模板
- 风电场风机维修合同范本
- 项目居间三方合同协议书
- 鸽子销售饲养协议书模板
- 联合建房合同协议书范本
- 父母房屋补偿协议书范本
- 汽车委托交易合同协议书
- T/CBMCA 017-2021建筑用覆膜钢板
- GB/T 20424-2025重有色金属精矿产品中有害元素的限量规范
- 矿山开工报告范本
- 干部履历表(中共中央组织部2015年制)
- 节日氛围营造投标方案(技术方案)
- 安全注射完整
- 乐高大颗粒搭建课件:救护车
- 领会《护士条例》课件
- 城镇燃气室内工程施工与质量验收规范(CJJ94-)宣贯培训
- 浆细胞性乳腺炎知识讲座
- 八年级物理上册《实验题》专项训练题及答案(人教版)
评论
0/150
提交评论