基于GTK+的单词数值计算器-实验报告
2014-06-05 10:10
267 查看
一.实验要求
实现基于GTK+的单词数值计算器。该功能如下:
(1)按照规则计算单词的值,如果AB C D E F G H I J K L M N O P Q R S T U V W S Y Z 26个大写字母(全部用大写)的值分别为12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26,如:
LOVE=L+O+V+E=12+15+22+5=54%
(2)程序的界面参照书上P224,在第一个单行文本框输入一个单词,单击“计算”按钮,按照以上算法计算出该单词的值。
(3)如果在最下面的单行文本框输入一个文件路径,此文件每行记录一个单词,那么经过程序计算出各个单词的值,并把结果输出到当前目录下result.txt文件中。如果文件不存在,应该提示错误。
二.程序设计思路(含流程图、算法、界面布局说明、控件数量及类型等等)
1.流程图
略
2.算法
2.1计算单词的值
2.1.1 提取单词,用数组存放
2.1.2 计算单词的长度
2.1.3依次计算字母的值,相加。
2.1.4将单词的值显示
2.2计算文件中单词的值
2.2.1提取文件中的单词存入array[][]
2.2.2计算各单词的值,算完一个单词,就将单词及值输入对应文件。
3.界面布局说明
gtk_box_pack_start(GTK_BOX(hbox1),label1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox1),entry1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),label2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),label4,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),button1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox3),entry3,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox3),button2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),label3,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox3,TRUE,FALSE,0);
4.控件数量及类型
(1)窗体控件GtkWindow 1个
(2)按钮控件GtkButton 2个
(3)标签控件GtkLabel 4个
(4)文本框控件GtkEntry 2个
(5)消息对话框控件GtkMessageDialog 2个
三.程序核心代码(需要有相关注释)
void button_clicked1(GtkWidget*widget,gpointer data)//计算单词的值
{
intsum=0;
inti,length;
char*input;
char*value;
value=(gchar*)data;//存放单词
length=strlen(value);//单词长度
for(i=0;i<length;i++)sum=sum+value[i]-64;//计算
sprintf((gchar*)value,"%d",sum);
gtk_label_set_text((GtkLabel*)label4,value);//输出
}
void button_clicked2(GtkWidget*widget,gpointer data)//计算文件中单词的值
{
GtkWidget*dialog;
gchar*temp="输入的文件路径不存在!";
gchar*tmp="计算成功";
charc,array[100][100];
char*file,*vlue;
FILE*open,*result;
inti,j,k,length,sum;
file=(gchar*)data;
open=fopen(file,"r");//打开文件
if(!open)//若是文件不存在,则提示
{
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,temp);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return;
}
for(i=0;;i++)//将文件中的单词取出来,存入array[][]中
{
for(j=0;;j++)
{
c=fgetc(open);
if(c==10)//若是该单词已结束,跳出当前循环
{
array[i][j]='\0';
break;
}
elseif(c==EOF) break;
elsearray[i][j]=c;
}
if(c==EOF)break;
}
length=i;//表示单词的个数
result=fopen("./result.txt","w++");
for(i=0;i<length;i++)//如上一个函数
{
fprintf(result,"%s ",array[i]);
k=strlen(array[i]);
sum=0;
for(j=0;j<k;j++)sum=sum+array[i][j]-64;
fprintf(result,"%d\n",sum);
}
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,tmp);//提示成功
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
fclose(result);
fclose(open);
}
四.程序运行效果
1.主界面
2.输入单词及执行结果
3.输入错误的文件路径
4.输入正确的文件路径及结果
五.实验总结
本次实验主要按照书上关于控件的用法以及容器的布局就可完成,主要遇到的问题就是GTK+自带的函数不太清楚,需要上网查询。
实现基于GTK+的单词数值计算器。该功能如下:
(1)按照规则计算单词的值,如果AB C D E F G H I J K L M N O P Q R S T U V W S Y Z 26个大写字母(全部用大写)的值分别为12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26,如:
LOVE=L+O+V+E=12+15+22+5=54%
(2)程序的界面参照书上P224,在第一个单行文本框输入一个单词,单击“计算”按钮,按照以上算法计算出该单词的值。
(3)如果在最下面的单行文本框输入一个文件路径,此文件每行记录一个单词,那么经过程序计算出各个单词的值,并把结果输出到当前目录下result.txt文件中。如果文件不存在,应该提示错误。
二.程序设计思路(含流程图、算法、界面布局说明、控件数量及类型等等)
1.流程图
略
2.算法
2.1计算单词的值
2.1.1 提取单词,用数组存放
2.1.2 计算单词的长度
2.1.3依次计算字母的值,相加。
2.1.4将单词的值显示
2.2计算文件中单词的值
2.2.1提取文件中的单词存入array[][]
2.2.2计算各单词的值,算完一个单词,就将单词及值输入对应文件。
3.界面布局说明
gtk_box_pack_start(GTK_BOX(hbox1),label1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox1),entry1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),label2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),label4,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox2),button1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox3),entry3,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(hbox3),button2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox1,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox2,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),label3,TRUE,FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox3,TRUE,FALSE,0);
4.控件数量及类型
(1)窗体控件GtkWindow 1个
(2)按钮控件GtkButton 2个
(3)标签控件GtkLabel 4个
(4)文本框控件GtkEntry 2个
(5)消息对话框控件GtkMessageDialog 2个
三.程序核心代码(需要有相关注释)
void button_clicked1(GtkWidget*widget,gpointer data)//计算单词的值
{
intsum=0;
inti,length;
char*input;
char*value;
value=(gchar*)data;//存放单词
length=strlen(value);//单词长度
for(i=0;i<length;i++)sum=sum+value[i]-64;//计算
sprintf((gchar*)value,"%d",sum);
gtk_label_set_text((GtkLabel*)label4,value);//输出
}
void button_clicked2(GtkWidget*widget,gpointer data)//计算文件中单词的值
{
GtkWidget*dialog;
gchar*temp="输入的文件路径不存在!";
gchar*tmp="计算成功";
charc,array[100][100];
char*file,*vlue;
FILE*open,*result;
inti,j,k,length,sum;
file=(gchar*)data;
open=fopen(file,"r");//打开文件
if(!open)//若是文件不存在,则提示
{
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,temp);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return;
}
for(i=0;;i++)//将文件中的单词取出来,存入array[][]中
{
for(j=0;;j++)
{
c=fgetc(open);
if(c==10)//若是该单词已结束,跳出当前循环
{
array[i][j]='\0';
break;
}
elseif(c==EOF) break;
elsearray[i][j]=c;
}
if(c==EOF)break;
}
length=i;//表示单词的个数
result=fopen("./result.txt","w++");
for(i=0;i<length;i++)//如上一个函数
{
fprintf(result,"%s ",array[i]);
k=strlen(array[i]);
sum=0;
for(j=0;j<k;j++)sum=sum+array[i][j]-64;
fprintf(result,"%d\n",sum);
}
dialog=gtk_message_dialog_new(NULL,GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,tmp);//提示成功
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
fclose(result);
fclose(open);
}
四.程序运行效果
1.主界面
2.输入单词及执行结果
3.输入错误的文件路径
4.输入正确的文件路径及结果
五.实验总结
本次实验主要按照书上关于控件的用法以及容器的布局就可完成,主要遇到的问题就是GTK+自带的函数不太清楚,需要上网查询。
相关文章推荐
- 基于GTK+的单词数值计算器
- 基于Easyx的文本显示器的C语言实现——源码+实验报告
- 基于网络环境的程序设计综合实验报告
- 基于VHDL的数字时钟实验报告
- 《第五周实验报告3-1》---编写基于对象的程序,求5个长方柱的体积和表面积
- (第二周实验报告3‐1)输入一行字符,统计其中有多少个单词
- 输入一行字符,统计其中有多少个单词(第二周实验报告3-1)
- 《第二周实验报告3-1》---输入一行字符统计其中有多少个单词
- 实验报告->数组的定义和使用->计算一段文字中的空格数和单词数
- 基于SSH框架作业与实验报告系统
- TCP/IP实验报告(一):基于TCP的客户/服务器通信程序实例
- 第十三周实验报告(3)
- 十三周实验报告3
- 20145303《Java程序设计》实验三实验报告
- 第十三周实验报告2.1
- 实验报告 14-1
- C++程序设计实验报告(七十三)---第十四周任务一
- 第十四周实验报告任务1
- 黄聪:基于Asp.net的CMS系统We7架设实验(环境WIN7,SQL2005,.NET3.5)(初学者参考贴)
- 第十四周实验报告2