⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callbacks.c

📁 Linux下的具有图形界面的小通讯录
💻 C
字号:
#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <gtk/gtk.h>#include "stdio.h"#include "string.h"#include "callbacks.h"#include "interface.h"#include "support.h"/*定义状态栏提示显示时间,单位:毫秒*/#define INTERVAL 5000/*定义变量*/int id=0;int fanwei=0;GtkWidget *entry1;GtkWidget *entry2;GtkWidget *entry3;GtkWidget *entry4;GtkWidget *clist;GtkWidget *clist_chaxun;GtkWidget *entry_guanjianci;GtkWidget *jiansuo_fanwei;GtkWidget *statusbar;GtkWidget *error;GtkWidget *file_error;char *guanjianci="";int msgid_i;int msgid_s;int msgid_d;int msgid_n;int msgid_j;int timeout;/*定义数据结构体*/struct data{char data_1[50];char data_2[50];char data_3[50];char data_4[50];};gint timeout_callback(gpointer data){/*销毁状态栏过期的提示*/	gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_i);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_s);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_d);gtk_statusbar_pop(GTK_STATUSBAR(statusbar),msgid_j);	guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_n,"准备就绪!      测试数据库V1.0    作者:孙新贺");	return;}void file_to_clist(){/*从文件中读取数据以显示在CLIST中*/	gtk_clist_clear(GTK_CLIST(clist));FILE *fp_r;	if((fp_r=fopen("data.md","rb"))==NULL)		{		/*显示文件错误信息*/		file_error = create_file_error (); 		gtk_widget_show (file_error);		return;		}struct data data_out;/*查询记录个数,返回的i为记录个数+1*/	int i=0;	while(!feof(fp_r))		{		fread(&data_out,sizeof(struct data),1,fp_r);		i=i+1;		}	rewind(fp_r);/*根据记录个数取记录,个数为i-1*/	int j=0;while(j<=i-2)		{		fread(&data_out,sizeof(struct data),1,fp_r);		gchar *list[4]={"","","",""};		list[0]=data_out.data_1;		list[1]=data_out.data_2;		list[2]=data_out.data_3;		list[3]=data_out.data_4;		gtk_clist_append (GTK_CLIST (clist), list);		j++;		}fclose(fp_r);}gbooleanon_window1_delete_event                (GtkWidget       *widget,                                        GdkEvent        *event,                                        gpointer         user_data){gtk_main_quit();  return FALSE;}voidon________q_1_activate                 (GtkMenuItem     *menuitem,                                        gpointer         user_data){gtk_main_quit();	return FALSE;}voidon_about1_activate                     (GtkMenuItem     *menuitem,                                        gpointer         user_data){GtkWidget *aboutdialog1;aboutdialog1 = create_aboutdialog1 (); gtk_widget_show (aboutdialog1);}voidon_save_clicked                        (GtkButton       *button,                                        gpointer         user_data){/* 更新需要修改的记录*/		struct data  data_new;		strcpy(data_new.data_1,gtk_entry_get_text(GTK_ENTRY(entry1)));		strcpy(data_new.data_2,gtk_entry_get_text(GTK_ENTRY(entry2)));		strcpy(data_new.data_3,gtk_entry_get_text(GTK_ENTRY(entry3)));		strcpy(data_new.data_4,gtk_entry_get_text(GTK_ENTRY(entry4)));										FILE *fp;if((fp=fopen("data.md","rb+"))==NULL)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);		return;	}/*定位至主键值指向的记录*/fseek(fp,id*sizeof(struct data),0);if(fwrite(&data_new,sizeof(struct data),1,fp)!=1)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);			return;	}	fclose(fp);		/* 刷新CLIST显示*/	file_to_clist();	/* 更新状态栏*/		msgid_s=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_s,"记录更新成功!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_insert_clicked                      (GtkButton       *button,                                        gpointer         user_data){struct data data_f;		strcpy(data_f.data_1,gtk_entry_get_text(GTK_ENTRY(entry1)));	strcpy(data_f.data_2,gtk_entry_get_text(GTK_ENTRY(entry2)));	strcpy(data_f.data_3,gtk_entry_get_text(GTK_ENTRY(entry3)));	strcpy(data_f.data_4,gtk_entry_get_text(GTK_ENTRY(entry4)));/*将记录写入文件*/FILE *fp;	if((fp=fopen("data.md","ab"))==NULL)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);	return;	}if(fwrite(&data_f,sizeof(struct data),1,fp)!=1)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);		return;	}	fclose(fp);/* 刷新CLIST显示*/		file_to_clist();/* 更新状态栏*/		msgid_i=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_i,"记录成功添加!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);	}voidon_delete_clicked                      (GtkButton       *button,                                        gpointer         user_data){/* 将要删除的记录标记为空记录*/		struct data  data_null;		strcpy(data_null.data_1,"");		strcpy(data_null.data_2,"");		strcpy(data_null.data_3,"");		strcpy(data_null.data_4,"");										FILE *fp;if((fp=fopen("data.md","rb+"))==NULL)		{printf("the file open error!\n");		return;		}fseek(fp,id*sizeof(struct data),0);if(fwrite(&data_null,sizeof(struct data),1,fp)!=1)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);	return;	}	fclose(fp);		/* 刷新CLIST显示*/	file_to_clist();	/* 更新状态栏*/		msgid_d=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_d,"记录删除成功!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_window1_show                        (GtkWidget       *widget,                                        gpointer         user_data){/*初始化程序:查询构件,给指针赋指向*/entry1=lookup_widget(GTK_WIDGET(widget),"entry1");entry2=lookup_widget(GTK_WIDGET(widget),"entry2");entry3=lookup_widget(GTK_WIDGET(widget),"entry3");entry4=lookup_widget(GTK_WIDGET(widget),"entry4");entry_guanjianci=lookup_widget(GTK_WIDGET(widget),"entry_guanjianci");	clist=lookup_widget(GTK_WIDGET(widget),"clist");		clist_chaxun=lookup_widget(GTK_WIDGET(widget),"clist_chaxun");jiansuo_fanwei=lookup_widget(GTK_WIDGET(widget),"jiansuo_fanwei");statusbar=lookup_widget(GTK_WIDGET(widget),"statusbar");/* 刷新CLIST显示*/							file_to_clist();/*初始化状态栏显示*/		msgid_n=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint j=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_n,"准备就绪!      测试数据库V1.0    作者:孙新贺");}voidon_clist_select_row                    (GtkCList        *clist,                                        gint             row,                                        gint             column,                                        GdkEvent        *event,                                        gpointer         user_data){gchar *text;gtk_clist_get_text (GTK_CLIST (clist), row, column, &text);/*读出所选项目,并显示于第一部分*/	FILE *fp_r;	if((fp_r=fopen("data.md","rb"))==NULL)	{	/*显示文件错误信息*/	file_error = create_file_error (); 	gtk_widget_show (file_error);	return;	}struct data data_out;fseek(fp_r,row*sizeof(struct data),0);fread(&data_out,sizeof(struct data),1,fp_r);gtk_entry_set_text(GTK_ENTRY(entry1),&data_out.data_1);gtk_entry_set_text(GTK_ENTRY(entry2),&data_out.data_2);gtk_entry_set_text(GTK_ENTRY(entry3),&data_out.data_3);gtk_entry_set_text(GTK_ENTRY(entry4),&data_out.data_4);fclose(fp_r);/*返回数据主键值*/id=row;}voidon_jiansuo_fanwei_changed              (GtkComboBox     *combobox,                                        gpointer         user_data){gchar *c;c=gtk_combo_box_get_active_text(combobox);										if (strcmp(c,"all")==0) fanwei=0;else if(strcmp(c,"item1")==0) fanwei=1;else if(strcmp(c,"item2")==0 ) fanwei=2;else if(strcmp(c,"item3")==0 ) fanwei=3;else fanwei=4;}voidon_search_clicked                      (GtkButton       *button,                                        gpointer         user_data){guanjianci=gtk_entry_get_text(GTK_ENTRY(entry_guanjianci));if(strcmp(guanjianci,"")==0)	{	GtkWidget *error;	error = create_error (); 	gtk_widget_show (error);	return;	}FILE *fp_r;	if((fp_r=fopen("data.md","rb"))==NULL)		{		/*显示文件错误信息*/		file_error = create_file_error (); 		gtk_widget_show (file_error);		return;		}struct data data_out;/*查询记录个数,返回i为记录个数+1*/	int i=0;	while(!feof(fp_r))		{		fread(&data_out,sizeof(struct data),1,fp_r);		i=i+1;		}/*移动文件指针到文件头,准备搜索*/	rewind(fp_r);/*开始搜索:根据记录个数取记录,个数为i-1,沿文件方向进行线性搜索*/	int j=0;	gchar *list[4]={"","","",""};	gtk_clist_clear(GTK_CLIST(clist_chaxun));while(j<=i-2)	{		fread(&data_out,sizeof(struct data),1,fp_r);	switch (fanwei)		{		case 0:				if((strstr(data_out.data_1,guanjianci)||strstr(data_out.data_2,guanjianci)||strstr(data_out.data_3,guanjianci)||strstr(data_out.data_4,guanjianci))!=NULL)					{					list[0]=data_out.data_1;					list[1]=data_out.data_2;					list[2]=data_out.data_3;					list[3]=data_out.data_4;					gtk_clist_append (GTK_CLIST (clist_chaxun),list);					}				break;		case 1:				if(strstr(data_out.data_1,guanjianci)!=NULL)					{					list[0]=data_out.data_1;					list[1]=data_out.data_2;					list[2]=data_out.data_3;					list[3]=data_out.data_4;					gtk_clist_append (GTK_CLIST (clist_chaxun),list);					}				break;		case 2:					if(strstr(data_out.data_2,guanjianci)!=NULL)					{					list[0]=data_out.data_1;					list[1]=data_out.data_2;					list[2]=data_out.data_3;					list[3]=data_out.data_4;					gtk_clist_append (GTK_CLIST (clist_chaxun),list);					}				break;		case 3:				if(strstr(data_out.data_3,guanjianci)!=NULL)					{					list[0]=data_out.data_1;					list[1]=data_out.data_2;					list[2]=data_out.data_3;					list[3]=data_out.data_4;					gtk_clist_append (GTK_CLIST (clist_chaxun),list);					}				break;		case 4:				if(strstr(data_out.data_4,guanjianci)!=NULL)					{					list[0]=data_out.data_1;					list[1]=data_out.data_2;					list[2]=data_out.data_3;					list[3]=data_out.data_4;					gtk_clist_append (GTK_CLIST (clist_chaxun),list);					}				break;		}	j++;	}fclose(fp_r);/* 更新状态栏*/		msgid_j=gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),"");guint t=gtk_statusbar_push(GTK_STATUSBAR(statusbar),msgid_j,"记录检索完成!");gtk_timeout_remove(timeout);timeout=gtk_timeout_add(INTERVAL,timeout_callback,NULL);}voidon_okbutton1_clicked                   (GtkButton       *button,                                        gpointer         user_data){error=lookup_widget(GTK_WIDGET(button),"error");						gtk_widget_destroy(GTK_WIDGET(error));}voidon_button1_clicked                     (GtkButton       *button,                                        gpointer         user_data){file_error=lookup_widget(GTK_WIDGET(button),"file_error");gtk_widget_destroy(GTK_WIDGET(file_error));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -