linux计算器程序实验,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

#include

#include

#include

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;

}

三、 程序运行效果图

e00e30710695fcf1a360bad15fb55736.png

2aa8daa1df2d55312e1ccd1225bc2022.png

bd32250560942aa97643dcfafceac203.png

四、 实验总结

省略啦

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

打赏

b6782309070a1b5ca4c66eabedb4d81d.png微信扫一扫,打赏作者吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值