当前位置:首页 > 计算机相关 > 我的开发 > 正文内容

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

piikee14年前 (2009-06-07)我的开发380
一、 实验要求
综合运用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

扫描二维码推送至手机访问。

版权声明:本文由萍客小居发布,如需转载请注明出处。

本文链接:https://www.piikee.net/345.html

分享给朋友:

相关文章

Windows XP 任务栏图标修复工具V1.1

Windows XP 任务栏图标修复工具V1.1

Windows XP下的任务栏右下角图标总是无缘无故的消失。有时候是音量图标,有时候是网络图标。最惨的是USB删除图标了,一插U盘或移动硬盘就无法弹出来了,找不到图标!到网上找了很多方法,有很多还是解决不了问题,最后总算找到了一个有效的解决...

U盘禁用小精灵

U盘禁用小精灵

C#.net开发的小工具,使用者电脑必须安装.net平台才可以使用。.net平台下载地址见:.NET Framework 微软官方地址 http://download.microsoft.com/download/3/F/0/3F0A922...

IP地址修改器bat文件

把以下内容拷入一个记事本,并把文件后缀改为.bat即可。@echo           ################################################@echo           #####      I...

txt文件编码批量转换器V2.11版

用于批量转换txt文本文档的编码格式。通常我们电脑里的txt文件都是ASNI编码,放到手机,MP3等设备里面,打开看到的都是乱码。所以我们必须先把它们转换为Unicode格式,才能够在手机和MP3上面打开。如果有大量的文件,一个一个打开另存...

月光宝盒

【基本介绍】"月光宝盒"是一款功能特别简单,容易上手的个人免费记账软件,它不需要用户了解深奥的财务知识,不用培训即会使用。该软件特别为月光一族开发,通过记录每日现金支出,收入的明细账,为个人使用者提供详细的收入支出明细等重要信息,同时软件提...

萍客asp网站自动更新插件

该插件属于SEO类型插件,插件根据日期,每天读取一个内容进行显示,使得网站每天有不同的内容从而促使网站百度快照更新。特别适合单页面的SEO。data和piikee.asp放入网站根目录。要使用插件的asp页面,随便地方加入 <!--...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。