分布式应用 GTK+Mysql+socket 简易图书馆查询系统

这是一个使用GTK+图形界面,结合MySQL数据库和socket通信的分布式图书馆查询系统。用户在客户端输入查询内容,通过socket连接发送到服务器端,服务器端通过MySQL查询相关书籍信息并返回给客户端,客户端将结果显示在列表框中。系统支持多本书籍的查询和详细信息展示。
摘要由CSDN通过智能技术生成
      这是我的分布式计算环境作业,用到的GTK,Mysql,socket都是第一次使用,边学边用,大概用了十天的时间编写完的,大部分时间还是上课...
      程序还有N多Bug,没时间调了,姑且就先这样,反正作业要求的都实现了,...*^_^*…
       中间还有几个比较笨的地方,比如客户端对从服务器接收来的信息进行分析拆解时,我只是假设最多只有两条记录,当然这是不可能的,但3条以上的记录时,通过罗列sscan()中的格式串也能实现,不过觉得肯定不能这样实现,太原始了,现在只是有个初始的改进想法,时间不多了,就先放着了...
      操作系统使用的是Ubuntu8.04...
    
  1. /*简易图书馆查询系统客户端*/
  2. /*编译命令 gcc -o lib_app lib_app.c `pkg-config --libs --cflags gtk+-2.0`*/
  3. #include<gtk/gtk.h>
  4. #include<sys/types.h>
  5. #include<sys/socket.h>
  6. #include<netinet/in.h>
  7. #include<arpa/inet.h>
  8. #include<netdb.h>
  9. #include<stdio.h>
  10. #include<string.h>
  11. #include<stdlib.h>
  12. #include<arpa/inet.h>
  13. #define DEF_PORT 5188       /*默认的连接端口号*/
  14. #define MAXSIZE  2000       /*默认每次传输的最大字节数*/
  15. extern int errno;
  16. enum { LIST_ITEM=0,N_COLUMNS};
  17. GtkWidget *input_text;      /*用户查询输入框*/
  18. GtkWidget *list;        /*显示查询结果列表框*/
  19. int list_is_click=0;        /*判断list是否被选择*/
  20. char book_name[5][40];
  21. char author[5][40];
  22. char public_addr[5][40];
  23. char public_time[5][40]; 
  24. char abstract[5][500];
  25. char catalog[5][1000];      
  26. void on_list_changed();
  27. char *selected_book_name;   //返回类表框中用户选择的书籍名称
  28. int book_display_flag;      //判断要显示那本书的详细信息
  29. /*initializing the list widget*/
  30. static void init_list(GtkWidget *list)
  31. {
  32.    GtkListStore *store;
  33.    GtkCellRenderer *renderer;
  34.    GtkTreeViewColumn *column;
  35.    
  36.    renderer=gtk_cell_renderer_text_new();
  37.    column=gtk_tree_view_column_new_with_attributes("List Items",renderer,"text",LIST_ITEM,NULL);
  38.    gtk_tree_view_append_column(GTK_TREE_VIEW(list),column);
  39.    store=gtk_list_store_new(N_COLUMNS,G_TYPE_STRING);
  40.    gtk_tree_view_set_model(GTK_TREE_VIEW(list),GTK_TREE_MODEL(store));
  41.    g_object_unref(store);
  42. }
  43.    
  44. /*add item to the list */
  45. static void add_to_list(GtkWidget *list,const gchar *str)
  46. {
  47.    GtkListStore *store;
  48.    GtkTreeIter iter;
  49.  
  50.    store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
  51.    gtk_list_store_append(store,&iter);
  52.    gtk_list_store_set(store,&iter,LIST_ITEM,str,-1);
  53. }
  54. /*清除列表框中的项目*/
  55. static void remove_all(GtkWidget *widget, gpointer selection)
  56. {
  57.   GtkListStore *store;
  58.   GtkTreeModel *model;
  59.   GtkTreeIter  iter;
  60.   store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (list)));
  61.   model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
  62.   if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) 
  63.       return;
  64.   gtk_list_store_clear(store);
  65. }
  66. /*用户单击OK按钮时显示选取的书籍名称*/
  67. void show_info(GtkWidget *widget,gpointer window)
  68. {
  69.    GtkWidget *dialog;
  70.    
  71.    dialog=gtk_message_dialog_new(window, GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,selected_book_name,"title");
  72.    gtk_window_set_title(GTK_WINDOW(dialog),"返回信息");
  73.    gtk_dialog_run(GTK_DIALOG(dialog));
  74.    gtk_widget_destroy(dialog);
  75. }
  76. void help_info(GtkWidget *widget,gpointer window)
  77. {
  78.    GtkWidget *dialog;
  79.    
  80.    char help_info[100]="本简易图书馆查询系统中共有5本书:排队论,/nc程序设计教程,C语言程序设计入门,英语听说教程,Ubuntu Linux 入门到精通/n";
  81.    dialog=gtk_message_dialog_new(window, GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,help_info,"title");
  82.    gtk_window_set_title(GTK_WINDOW(dialog),"帮助信息");
  83.    gtk_dialog_run(GTK_DIALOG(dialog));
  84.    gtk_widget_destroy(dialog);
  85. }
  86. /*帮助信息*/
  87. /*改变窗口图标*/
  88. GdkPixbuf *create_icon(const gchar *icon_name)
  89. {
  90.    GdkPixbuf *icon;
  91.    GError *error=NULL;
  92.    icon=gdk_pixbuf_new_from_file(icon_name,&error);
  93.    if(!icon)
  94.      {
  95.     fprintf(stderr,"%s/n",error->message);
  96.     g_error_free(error);
  97.      }
  98.    return icon;
  99. }
  100. /*当用户点击查询按钮后将开始与服务器端进行连接*/
  101. void button_search_click()
  102. {
  103.    struct hostent *ptrhost;     /*指向主机列表中的一个条目的指针*/
  104.    struct sockaddr_in server_addr;  /*存档服务器端网络地址的结构 */
  105.    int socket_describe;         /*客户端套接字描述符*/
  106.    int port;                /*服务器端套接字协议端口号*/
  107.    int receive_num;         /*客户端接收到的字节数*/
  108.    char *host="localhost";      /*服务器主机名
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值