基于GTK+的单词数值计算器-实验报告

来源:互联网 发布:中国校花大赛数据库 编辑:程序博客网 时间:2024/06/08 10:24

一.实验要求

实现基于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+自带的函数不太清楚,需要上网查询。


0 0