Linux下基于GTK+的单词数值计算器

一、 实验要求
综合运用CTK+提供的函数,按照一定的规则(具体见实验报告)计算一个单词或者一组单词的数值,并输出到屏幕或文件中。
1、 按照规则计算单词的值,如果 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 26个字母(全部用大写)的值分别为1 2 3 4 5 6 7 8 9 10 11 12 13 1 15 16 17 18 19 20 21 22 23 24 25 26,

WINJACK这个单词的值就为:W+I+N+J+A+C+K=23+9+14+10+1+3+11=71%
HARDWORK=H+A+R+D+W+O+R+K=8+1+18+4+23+15+18+11=98%
KNOWLEDGE=K+N+O+W+L+E+D+G+E=11+14+15+23+12+5+4+7+5=96%
LOVE=L+O+V+E=12+15+22+5=54%
LUCK=L+U+C+K=12+21+3+11=47%
ATTITUDE=A+T+T+I+T+U+D+E=1+20+20+9+20+21+4+5=100%
2、 程序在第一个单行文本框输入一单词,点击“计算”按钮,按照以上算法计算出该单词的值。
3、 如果在最下面的单行文本框输入一个文件路径,此文件每行记录一个单词,那么经过程序计算出各个单词的值,并把结果输出到当前目录下result.txt文件中。如果文件不存在,应该提示错误。

二、 设计思路
程序结构
程序界面主要由一个VBOX,6个HBOX和两个三个LABEL,两个ENTRY,两个BUTTON组成。
程序的执行函数都在两个BUTTON里面,单击按钮就执行对应函数。
计算按钮主要把单词输入框传来的英文单词放到一个字符数组里面,然后把字符数组每个字符的ASCLL码减去64得到单词的值然后累加。累加后得到一个数值,调用sprintf()把值变字符串,再调用strcat()函数在字符串后面加上百分号字符,最后把字符串输出到单词数值LABEL显示。
执行按钮主要实现从文件路径输入框里面获得文件路径,并打开相应文件,然后对每个文件中的单词执行和计算按钮相同的操作,并写入result.txt文件中。

程序代码
#include<gtk/gtk.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

const char*danci=”dd”;
GtkWidget*dancizhib_label;
GtkWidget*wjlj_entry;

void closeApp(GtkWidget*window,gpointer data){
gtk_main_quit();
}

//计算按钮函数
void jisuan_clicked(GtkWidget*window,gpointer data){
const char *danci_text=gtk_entry_get_text(GTK_ENTRY((GtkWidget*)data));
char sum=0,all[50];
int i;
for(i=0;danci_text[i]!=0;i++)
sum+=danci_text[i]-64;
sprintf(all,”%d”,sum);
strcat(all,”%”);
gtk_label_set_text(GTK_LABEL (dancizhib_label),all);

}

//执行按钮函数
void zhixing_clicked(GtkWidget*window,gpointer data){
const char *filepath=gtk_entry_get_text(GTK_ENTRY((GtkWidget*)data));
FILE *fp,*fp2;
char i[50],sum=0,all[50],af[50];
int c,k,aa=0;
if((fp=fopen(filepath,”rb”))==FALSE)
{gtk_entry_set_text(GTK_ENTRY(wjlj_entry),”此路径文件不存在!”);
return;
}
if((fp2=fopen(“result.txt”,”wb”))==FALSE)
{gtk_entry_set_text(GTK_ENTRY(wjlj_entry),”result.txt文件不存在!”);
return;
}

else
{
while((fscanf(fp,”%s”,i))!=EOF)//读取直到文件结束
{
for(c=0;i[c]!=0;c++)
sum+=i[c]-64;
sprintf(all,”%d”,sum);
strcat(all,”%\n”);
fprintf(fp2,”%s”,all);
sum=0;
gtk_entry_set_text(GTK_ENTRY(wjlj_entry),”执行成功,已写入result.txt!”);
}

}
rewind(fp);
rewind(fp2);
fclose(fp2);
fclose(fp);

}

//主函数
int main(int argc,char *argv[]){
//一些声明定义
GtkWidget*window;
GtkWidget*danci_label,*dancizhi_label,*wjlj_label,*part_label;
GtkWidget*danci_entry;
GtkWidget*jisuan_button;
GtkWidget*zhixing_button;
GtkWidget*hbox1,*hbox2,*hbox3,*hbox4,*hbox5,*hbox6;
GtkWidget*vbox;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),”单词数值计算器”);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window),450,250);

danci_label=gtk_label_new(“请输入单词值:”);
dancizhi_label=gtk_label_new(“该单词值:               “);
wjlj_label=gtk_label_new(“请输入文件路径:”);
dancizhib_label=gtk_label_new(“0”);
part_label=gtk_label_new(“***************************************************************”);
danci_entry=gtk_entry_new();
wjlj_entry=gtk_entry_new();
jisuan_button=gtk_button_new_with_label(“计算”);
zhixing_button=gtk_button_new_with_label(“执行”);
g_signal_connect(GTK_OBJECT(window),”destroy”,GTK_SIGNAL_FUNC(closeApp),NULL);
g_signal_connect(GTK_OBJECT(jisuan_button),”clicked”,GTK_SIGNAL_FUNC(jisuan_clicked),danci_entry);
g_signal_connect(GTK_OBJECT(zhixing_button),”clicked”,GTK_SIGNAL_FUNC(zhixing_clicked),wjlj_entry);

hbox1=gtk_hbox_new(TRUE,10);
hbox2=gtk_hbox_new(TRUE,10);
hbox3=gtk_hbox_new(TRUE,10);
hbox4=gtk_hbox_new(TRUE,10);
hbox5=gtk_hbox_new(TRUE,10);
hbox6=gtk_hbox_new(TRUE,10);
vbox=gtk_vbox_new(FALSE,20);

gtk_box_pack_start(GTK_BOX(hbox1),danci_label,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(hbox2),danci_entry,TRUE,FALSE,1);
gtk_box_pack_start(GTK_BOX(hbox2),jisuan_button,TRUE,FALSE,9);
gtk_box_pack_start(GTK_BOX(hbox3),dancizhi_label,TRUE,FALSE,5);
gtk_box_pack_start(GTK_BOX(hbox3),dancizhib_label,TRUE,FALSE,5);
gtk_box_pack_start(GTK_BOX(hbox6),part_label,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(hbox4),wjlj_label,TRUE,FALSE,10);
gtk_box_pack_start(GTK_BOX(hbox5),wjlj_entry,TRUE,FALSE,5);
gtk_box_pack_start(GTK_BOX(hbox5),zhixing_button,TRUE,FALSE,5);

gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,10);
gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,10);
gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,10);
gtk_box_pack_start(GTK_BOX(vbox),hbox6,FALSE,FALSE,10);
gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,10);
gtk_box_pack_start(GTK_BOX(vbox),hbox5,FALSE,FALSE,10);
gtk_container_add(GTK_CONTAINER(window),vbox);
gtk_widget_show_all(window);

gtk_main();
return 0;
}

三、 程序运行效果图
133

134

135

四、 实验总结
省略啦

版权所有,严禁用于商业用途,转载请写明转载自 www.piikee.net

打赏

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注