影院管理系统(GTK)

来源:互联网 发布:软考程序员题型 编辑:程序博客网 时间:2024/06/10 01:38

前言

补高数作业到现在也是醉了,索性不睡了,把前段时间做的课设整理一下,毕竟是小白,有什么地方有错误,还望大神不吝指出

感触与收获

在写之前,本以为最大的难关是图形界面的构建,后来又认为是程序与文件的交互,最终完成后才明白,怎样不再庞大的代码堆中逻辑错乱才是最大的难关,而这就关系到下面几个问题了

1.代码架构问题

刚开始写时,按以前习惯把全部代码全部写在了一个源文件里,随着代码越写越多,苦不堪言,于是乎,参考书上样例的架构,总算是有点逻辑分明的感觉

如下

main.c 主函数
interface.c 窗口实现函数
interface.h 窗口实现函数声明
callback.c 回调函数
callback.h 回调函数声明 以及 全局变量和结构体的定义

2.代码编写的习惯问题

<1>变量的命名
这个是令我感触最深,因为英语不好哦,所以常随心所欲的设置变量>名,后来变量越来越多,痛苦不期而至,后不得不 用有道辅助对所有变量重新命名,重新观看代码,才觉变量命名的重要性
<2>添加必要的注释
代码量大了后,方知注释的重要,可惜还是懒,注释的太少,要养成这个好习惯
<3>代码缩进
也就在这个上面做的还行,归功于我的强迫症

代码

main.c

#include<gtk/gtk.h>#include"interface.h"#include"callback.h"int main(int argc,char *argv[]){    gtk_init(&argc , &argv);        theater_num = 0;    window_main = make_window_main();    window_main_buy = make_window_main_buy();    window_main_login = make_window_main_login();       window_change_yesorno = make_window_yesorno();    window_main_change = make_window_main_change();    gtk_widget_show_all(window_main);    gtk_main();    return 0;}

interface.c

#include<gtk/gtk.h>#include"callback.h"#include<stdlib.h>//extern struct findrc *q;GtkWidget* make_window_main()//创建主页面{    GtkWidget *window;    GtkWidget *button_buy;    GtkWidget *button_change;    GtkWidget *button_quit;    GtkWidget *image;    GtkWidget *box_b;    GtkWidget *box_s;    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    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),10,10);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(want_to_quit),NULL);    box_b = gtk_vbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(window),box_b);    image = gtk_image_new_from_file("3.png");       box_s = gtk_hbox_new(TRUE,10);    gtk_box_pack_start(GTK_BOX(box_b),image,TRUE,FALSE,0);    gtk_box_pack_start(GTK_BOX(box_b),box_s,TRUE,FALSE,0);    button_buy = gtk_button_new_with_label("开始购票");    button_change = gtk_button_new_with_label("管理登录");    button_quit = gtk_button_new_with_label("退出系统");    g_signal_connect(G_OBJECT(button_buy),"clicked",G_CALLBACK(on_main_to_buy),NULL);    g_signal_connect(G_OBJECT(button_change),"clicked",G_CALLBACK(on_main_to_login),NULL);    g_signal_connect(G_OBJECT(button_quit),"clicked",G_CALLBACK(want_to_quit),NULL);    gtk_box_pack_start(GTK_BOX(box_s),button_buy,TRUE,FALSE,0);    gtk_box_pack_start(GTK_BOX(box_s),button_change,TRUE,FALSE,0);    gtk_box_pack_start(GTK_BOX(box_s),button_quit,TRUE,FALSE,0);    return window;}void on_dian_jie(struct theater* p,GtkWidget *boxs)//创建单项影片信息{    GtkWidget *button;    GtkWidget *image;    GtkWidget *label;    GtkWidget *frame;    GtkWidget *frame1;    GtkWidget *vbox;    GtkWidget *hbox;    GtkWidget *tbox;    GtkWidget *box;    box = gtk_hbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(boxs),box);    image = gtk_image_new_from_file(p->photo);    gtk_box_pack_start_defaults(GTK_BOX(box),image);    frame1 = gtk_frame_new(NULL);    gtk_container_add(GTK_CONTAINER(box),frame1);    gtk_widget_set_size_request(GTK_WIDGET(frame1),800,300);    hbox = gtk_hbox_new(TRUE,0);    gtk_container_add(GTK_CONTAINER(frame1),hbox);    vbox = gtk_vbox_new(FALSE,0);    gtk_container_add(GTK_CONTAINER(hbox),vbox);    frame = gtk_frame_new("影片名");    label = gtk_label_new(p->name);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(vbox),frame);    frame = gtk_frame_new("影片类型");    label = gtk_label_new(p->type);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(vbox),frame);    frame = gtk_frame_new("影片简介");    label = gtk_label_new(p->message);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(vbox),frame);    vbox = gtk_vbox_new(FALSE,0);    gtk_container_add(GTK_CONTAINER(hbox),vbox);    frame = gtk_frame_new("主演");    label = gtk_label_new(p->people);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(vbox),frame);    tbox = gtk_hbox_new(TRUE,0);    gtk_container_add(GTK_CONTAINER(vbox),tbox);    frame = gtk_frame_new("放映时间");    label = gtk_label_new(p->time);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);        gtk_container_add(GTK_CONTAINER(frame),label);      gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(tbox),frame);    frame = gtk_frame_new("放映地点");    label = gtk_label_new(p->place);    gtk_label_set_line_wrap (GTK_LABEL(label),TRUE);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(tbox),frame);    tbox = gtk_hbox_new(TRUE,0);    gtk_container_add(GTK_CONTAINER(vbox),tbox);    frame = gtk_frame_new("票价");    label = gtk_label_new(p->price);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(tbox),frame);    frame = gtk_frame_new("评分");    label = gtk_label_new(p->score);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start_defaults(GTK_BOX(tbox),frame);    button = gtk_button_new_with_label("购买");    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_choose_seat),p);    gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,5);}GtkWidget* make_window_main_buy ()//创建影片选择页面{    GtkWidget *boxs;    GtkWidget *window;    GtkWidget *swindow;     gchar *title = "影票购买" ;    fp=fopen("data.txt","rt");    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);    gtk_window_set_default_size(GTK_WINDOW(window),1100,500);    gtk_window_set_title(GTK_WINDOW(window),title);    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    gtk_container_set_border_width(GTK_CONTAINER(window),20);    swindow = gtk_scrolled_window_new(NULL,NULL);    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swindow),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);    gtk_container_add(GTK_CONTAINER(window),swindow);    boxs = gtk_vbox_new(TRUE,20);    gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swindow),boxs);    p = (struct theater*)malloc(sizeof(struct theater));    while (fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",p->name,p->type,p->people,p->time,p->place,p->message,p->photo,p->price,p->score)!=EOF)    {        on_dian_jie(p,boxs);        p = (struct theater*)malloc(sizeof(struct theater));    }    fclose(fp);    return window;}GtkWidget* make_window_choose_seat(struct theater *p)//创建选坐窗口{    GtkWidget *button;    GtkWidget *button1;    GtkWidget *label;    GtkWidget *frame;    GtkWidget *fbox;    GtkWidget *dbox;    GtkWidget *boxs;    GtkWidget *box;    GtkWidget *image;    GtkWidget *window;    gint i,j;    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    gtk_window_set_title(GTK_WINDOW(window),"guanli");    box = gtk_vbox_new(FALSE,30);    gtk_container_add(GTK_CONTAINER(window),box);    button = gtk_image_new_from_file("1.jpg");    gtk_widget_set_size_request(GTK_WIDGET(button),100,80);     gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);    dbox = gtk_vbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(box),dbox);    frame = gtk_frame_new("");    gtk_box_pack_start(GTK_BOX(dbox),frame,FALSE,FALSE,0);    strcpy(choose_name,p->name);    strcat(choose_name,".txt");    fp=fopen(choose_name,"r+");    for (i=0;i<8;i++)    {        boxs = gtk_hbox_new(FALSE,10);        gtk_container_add(GTK_CONTAINER(dbox),boxs);        for (j=0;j<8;j++)        {            fscanf(fp,"%d",&weizhi[i][j]);            q =(struct findrc*)malloc(sizeof(struct findrc));            q->r=i;            q->c=j;            if (weizhi[i][j]==0)            {                button =gtk_toggle_button_new();                gtk_widget_set_size_request(GTK_WIDGET(button),30,30);                 gtk_box_pack_start(GTK_BOX(boxs),button,FALSE,FALSE,10);                g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(toggle_clicked_callback),q);            }            else            {                image = gtk_image_new_from_stock(GTK_STOCK_CANCEL,GTK_ICON_SIZE_MENU);                button = gtk_button_new();                gtk_widget_set_size_request(GTK_WIDGET(button),30,30);                 gtk_container_add(GTK_CONTAINER(button),image);                gtk_box_pack_start(GTK_BOX(boxs),button,FALSE,FALSE,10);            }           }    }    frame = gtk_frame_new("");    gtk_box_pack_start(GTK_BOX(dbox),frame,FALSE,FALSE,0);    fclose(fp);    boxs = gtk_hbox_new(FALSE,20);    button1 = gtk_button_new_with_label("购买");    gtk_widget_set_size_request(GTK_WIDGET(button1),50,40);     g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_choose_seat_ok),p);    gtk_box_pack_start(GTK_BOX(boxs),button1,FALSE,FALSE,90);    button1 = gtk_button_new_with_label("返回");    gtk_widget_set_size_request(GTK_WIDGET(button1),50,40);     g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_seat_to_buy),NULL);    gtk_box_pack_start(GTK_BOX(boxs),button1,FALSE,FALSE,80);    gtk_container_add(GTK_CONTAINER(box),boxs);    return window;}GtkWidget* make_window_main_login()//创建管理登录界面{    GtkWidget *window;    GtkWidget *box;    GtkWidget *button_a;    GtkWidget *button_b;    GtkWidget *label_user;    GtkWidget *label_pass;    GtkWidget *text_user;    GtkWidget *text_pass;    GtkWidget *table;    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_login_to_main),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    gtk_window_set_title(GTK_WINDOW(window),"log in");    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    table = gtk_table_new(5,5,FALSE);    gtk_container_add(GTK_CONTAINER(window),table);    label_user = gtk_label_new("用户名");    label_pass = gtk_label_new("密码");    text_user = gtk_entry_new();    text_pass = gtk_entry_new();    box = gtk_hbox_new(TRUE,10);    button_a = gtk_button_new_with_label("登录");    button_b = gtk_button_new_with_label("返回");    gtk_box_pack_start(GTK_BOX(box),button_a,FALSE,TRUE,0);    gtk_box_pack_start(GTK_BOX(box),button_b,FALSE,TRUE,0);    gtk_entry_set_visibility(GTK_ENTRY(text_pass),FALSE);    gtk_table_attach_defaults(GTK_TABLE(table),label_user,0,1,0,2);    gtk_table_attach_defaults(GTK_TABLE(table),label_pass,0,1,3,4);    gtk_table_attach_defaults(GTK_TABLE(table),text_user,2,5,0,2);    gtk_table_attach_defaults(GTK_TABLE(table),text_pass,2,5,3,4);    gtk_table_attach_defaults(GTK_TABLE(table),box,1,4,4,5);    g_signal_connect(G_OBJECT(button_a),"clicked",G_CALLBACK(on_login_to_change),NULL);    g_signal_connect(G_OBJECT(button_b),"clicked",G_CALLBACK(on_login_to_main),NULL);    return window;}GtkWidget* make_window_main_change()//创建影片管理页面{    GtkWidget *swindow;    GtkWidget *window;    GtkWidget *vbox;    GtkWidget *hbox;    GtkWidget *button;    gint i;    gint temp_row;    gchar *title[9]={"影片名","影片类型","主演","播放时间","播放地点","影片简介","影片插图","价格","评分"};    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(made_file),NULL);    gtk_window_set_title(GTK_WINDOW(window),"影片管理");    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    gtk_window_set_default_size(GTK_WINDOW(window),1200,500);    vbox = gtk_vbox_new(FALSE,0);    gtk_container_add(GTK_CONTAINER(window),vbox);    swindow = gtk_scrolled_window_new(NULL,NULL);    gtk_box_pack_start_defaults(GTK_BOX(vbox),swindow);     gtk_container_set_border_width (GTK_CONTAINER (swindow), 10);    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);    list = gtk_clist_new_with_titles(9,title);    gtk_clist_set_shadow_type (GTK_CLIST(list), GTK_SHADOW_OUT);    gtk_signal_connect(GTK_OBJECT(list), "select_row",GTK_SIGNAL_FUNC(selection_made),NULL);    gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(swindow),list);    for(i=0;i<9;i++)    {            gtk_clist_set_column_justification(GTK_CLIST(list),i,GTK_JUSTIFY_CENTER);    }    gtk_clist_set_column_width(GTK_CLIST(list),0,100);    gtk_clist_set_column_width(GTK_CLIST(list),1,100);    gtk_clist_set_column_width(GTK_CLIST(list),2,100);    gtk_clist_set_column_width(GTK_CLIST(list),3,100);    gtk_clist_set_column_width(GTK_CLIST(list),4,100);    gtk_clist_set_column_width(GTK_CLIST(list),5,300);    gtk_clist_set_column_width(GTK_CLIST(list),6,100);    gtk_clist_set_column_width(GTK_CLIST(list),7,50);    gtk_clist_set_column_width(GTK_CLIST(list),8,50);    hbox = gtk_hbox_new(TRUE,0);    gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);    button = gtk_button_new_with_label("添加");    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(list_add),(gpointer)list);    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,5);    button = gtk_button_new_with_label("修改");    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(list_change),(gpointer)list);    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,5);    button = gtk_button_new_with_label("删除");    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(list_delete),(gpointer)list);    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,5);    button = gtk_button_new_with_label("清空");    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(list_clear),(gpointer)list);    gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,5);    list_made(list,&th);    return window;}GtkWidget* make_window_yesorno(GtkWidget *userdate) //创建退出确认框?{    GtkWidget *window;    GtkWidget *button_yes;    GtkWidget *button_no;    GtkWidget *label;       GtkWidget *box_b;    GtkWidget *box_s;    window = gtk_window_new(GTK_WINDOW_POPUP);    gtk_window_set_default_size(GTK_WINDOW(window),150,70);    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_change_no),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    box_b = gtk_vbox_new(TRUE,10);    gtk_container_add(GTK_CONTAINER(window),box_b);    label = gtk_label_new("是否确定?");    gtk_box_pack_start_defaults(GTK_BOX(box_b),label);    box_s = gtk_hbox_new(TRUE,10);    gtk_box_pack_start_defaults(GTK_BOX(box_b),box_s);    button_yes = gtk_button_new_with_label("是");    button_no = gtk_button_new_with_label("否");    gtk_box_pack_start_defaults(GTK_BOX(box_s),button_yes);    gtk_box_pack_start_defaults(GTK_BOX(box_s),button_no);    g_signal_connect(G_OBJECT(button_yes),"clicked",G_CALLBACK(on_change_yes),NULL);    g_signal_connect(G_OBJECT(button_no),"clicked",G_CALLBACK(on_change_no),NULL);    return window;}GtkWidget* make_window_insert()//创建信息输入窗口{    GtkWidget *window;    GtkWidget *button;    GtkWidget *label;    GtkWidget *box;    GtkWidget *hbox;    GtkWidget *vbox1;    GtkWidget *vbox2;    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);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_widget_destroy),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    box = gtk_vbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(window),box);    hbox = gtk_hbox_new(FALSE,10);    gtk_box_pack_start_defaults(GTK_BOX(box),hbox);     vbox1 = gtk_vbox_new(TRUE,10);    vbox2 = gtk_vbox_new(TRUE,10);    gtk_box_pack_start_defaults(GTK_BOX(hbox),vbox1);    gtk_box_pack_start_defaults(GTK_BOX(hbox),vbox2);    label = gtk_label_new("影片名");    text_name = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_name);    label = gtk_label_new("影片类型");    text_type = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_type);    label = gtk_label_new("主演");    text_people = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_people);    label = gtk_label_new("放映时间");    text_time = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_time);    label = gtk_label_new("放映地点");    text_place = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_place);    label = gtk_label_new("影片简介");    text_message = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_message);    label = gtk_label_new("影片封面");    text_photo = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_photo);    label = gtk_label_new("票价");    text_price = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_price);    label = gtk_label_new("评分");    text_score = gtk_entry_new();    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_score);    hbox = gtk_hbox_new(TRUE,10);    button = gtk_button_new_with_label("确定");    gtk_box_pack_start_defaults(GTK_BOX(hbox),button);    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(to_add_list_item),(gpointer)window);    button = gtk_button_new_with_label("取消");    gtk_box_pack_start_defaults(GTK_BOX(hbox),button);    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(destroy),window);    gtk_box_pack_start_defaults(GTK_BOX(box),hbox);     return  window;}GtkWidget* make_window2_insert()//修改信息输入窗口{    GtkWidget *window;    GtkWidget *button;    GtkWidget *label;    GtkWidget *box;    GtkWidget *hbox;    GtkWidget *vbox1;    GtkWidget *vbox2;    gchar *temp[9];    gint i;    for(i=0;i<9;i++)    {        gtk_clist_get_text(GTK_CLIST(list),temp_row,i,(gchar **)(&temp[i]));    }    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);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_widget_destroy),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    box = gtk_vbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(window),box);    hbox = gtk_hbox_new(FALSE,10);    gtk_box_pack_start_defaults(GTK_BOX(box),hbox);     vbox1 = gtk_vbox_new(TRUE,10);    vbox2 = gtk_vbox_new(TRUE,10);    gtk_box_pack_start_defaults(GTK_BOX(hbox),vbox1);    gtk_box_pack_start_defaults(GTK_BOX(hbox),vbox2);    label = gtk_label_new("影片名");    text_name = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_name),temp[0]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_name);    label = gtk_label_new("影片类型");    text_type = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_type),temp[1]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_type);    label = gtk_label_new("主演");    text_people = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_people),temp[2]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_people);    label = gtk_label_new("放映时间");    text_time = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_time),temp[3]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_time);    label = gtk_label_new("放映地点");    text_place = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_place),temp[4]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_place);    label = gtk_label_new("影片简介");    text_message = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_message),temp[5]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_message);    label = gtk_label_new("影片封面");    text_photo = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_photo),temp[6]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_photo);    label = gtk_label_new("票价");    text_price = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_price),temp[7]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_price);    label = gtk_label_new("评分");    text_score = gtk_entry_new();    gtk_entry_set_text(GTK_ENTRY(text_score),temp[8]);    gtk_box_pack_start_defaults(GTK_BOX(vbox1),label);    gtk_box_pack_start_defaults(GTK_BOX(vbox2),text_score);    hbox = gtk_hbox_new(TRUE,10);    button = gtk_button_new_with_label("确定");    gtk_box_pack_start_defaults(GTK_BOX(hbox),button);    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(to_change_list_item),(gpointer)window);    button = gtk_button_new_with_label("取消");    gtk_box_pack_start_defaults(GTK_BOX(hbox),button);    g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(destroy),window);    gtk_box_pack_start_defaults(GTK_BOX(box),hbox);     return  window;}GtkWidget* make_window_ok_seat(struct theater *p)//创建确定付款窗口{    GtkWidget *box;    GtkWidget *frame;    GtkWidget *label;    GtkWidget *hbox;    GtkWidget *boxx;    GtkWidget *boxs;    GtkWidget *button_buy;    GtkWidget *button_log;    GtkWidget *window1;    char f[20];    gint i,j;    window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window1),"delete_event",G_CALLBACK(gtk_main_quit),NULL);    gtk_window_set_position(GTK_WINDOW(window1),GTK_WIN_POS_CENTER);    gtk_container_set_border_width(GTK_CONTAINER(window1),10);    gtk_window_set_title(GTK_WINDOW(window1),"确认购买");    box = gtk_vbox_new(FALSE,10);    gtk_container_add(GTK_CONTAINER(window1),box);    frame = gtk_frame_new("电影名");    label = gtk_label_new(p->name);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start(GTK_BOX(box),frame,FALSE,FALSE,0);    frame = gtk_frame_new("上映时间");    label = gtk_label_new(p->time);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start(GTK_BOX(box),frame,FALSE,FALSE,0);    frame = gtk_frame_new("上映地点");    label = gtk_label_new(p->place);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start(GTK_BOX(box),frame,FALSE,FALSE,0);    frame = gtk_frame_new("购票价格");    label = gtk_label_new(p->price);    gtk_container_add(GTK_CONTAINER(frame),label);    gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);    gtk_box_pack_start(GTK_BOX(box),frame,FALSE,FALSE,0);    boxx = gtk_vbox_new(FALSE,0);    for (i=0;i<8;i++)    {        for(j=0;j<8;j++)        {            if(weizhi[i][j]==2)            {                       sprintf(f,"  第%d排 第%d列  ",i+1,j+1);                frame = gtk_frame_new("");                label = gtk_label_new(f);                gtk_container_add(GTK_CONTAINER(frame),label);                gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);                gtk_box_pack_start(GTK_BOX(boxx),frame,FALSE,FALSE,0);            }        }    }    gtk_container_add(GTK_CONTAINER(box),boxx);    hbox = gtk_hbox_new(FALSE,20);    gtk_container_add(GTK_CONTAINER(box),hbox);    button_buy = gtk_button_new_with_label("确认");    button_log = gtk_button_new_with_label("返回");    gtk_box_pack_start(GTK_BOX(hbox),button_buy,FALSE,FALSE,20);    gtk_box_pack_start(GTK_BOX(hbox),button_log,FALSE,FALSE,20);    g_signal_connect(G_OBJECT(button_buy),"clicked",G_CALLBACK(on_put_money),p);    g_signal_connect(G_OBJECT(button_log),"clicked",G_CALLBACK(on_ok_to_seat),NULL);    return window1;}GtkWidget* make_window_buy_passwd(struct theater *p)//支付登录界面{    GtkWidget *window;    GtkWidget *box;    GtkWidget *button_a;    GtkWidget *button_b;    GtkWidget *label_user;    GtkWidget *label_pass;    GtkWidget *text_user;    GtkWidget *text_pass;    GtkWidget *table;    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_login_to_main),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    gtk_window_set_title(GTK_WINDOW(window),"log in");    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    table = gtk_table_new(5,5,FALSE);    gtk_container_add(GTK_CONTAINER(window),table);    label_user = gtk_label_new("账户");    label_pass = gtk_label_new("密码");    text_user = gtk_entry_new();    text_pass = gtk_entry_new();    box = gtk_hbox_new(TRUE,10);    button_a = gtk_button_new_with_label("登录");    button_b = gtk_button_new_with_label("返回");    gtk_box_pack_start(GTK_BOX(box),button_a,FALSE,TRUE,0);    gtk_box_pack_start(GTK_BOX(box),button_b,FALSE,TRUE,0);    gtk_entry_set_visibility(GTK_ENTRY(text_pass),FALSE);    gtk_table_attach_defaults(GTK_TABLE(table),label_user,0,1,0,2);    gtk_table_attach_defaults(GTK_TABLE(table),label_pass,0,1,3,4);    gtk_table_attach_defaults(GTK_TABLE(table),text_user,2,5,0,2);    gtk_table_attach_defaults(GTK_TABLE(table),text_pass,2,5,3,4);    gtk_table_attach_defaults(GTK_TABLE(table),box,1,4,4,5);    g_signal_connect(G_OBJECT(button_a),"clicked",G_CALLBACK(on_succeed_login),p);    g_signal_connect(G_OBJECT(button_b),"clicked",G_CALLBACK(destroy),(gpointer)window);    return window;}GtkWidget* make_tobuy_yesorno(struct theater *p) //创建支付后确认框?{    GtkWidget *window;    GtkWidget *button_yes;    GtkWidget *button_no;    GtkWidget *label;       GtkWidget *box_b;    GtkWidget *box_s;    window = gtk_window_new(GTK_WINDOW_POPUP);    gtk_window_set_default_size(GTK_WINDOW(window),150,70);    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(on_change_no),NULL);    gtk_container_set_border_width(GTK_CONTAINER(window),10);    box_b = gtk_vbox_new(TRUE,10);    gtk_container_add(GTK_CONTAINER(window),box_b);    label = gtk_label_new("确定支付?");    gtk_box_pack_start_defaults(GTK_BOX(box_b),label);    box_s = gtk_hbox_new(TRUE,10);    gtk_box_pack_start_defaults(GTK_BOX(box_b),box_s);    button_yes = gtk_button_new_with_label("是");    button_no = gtk_button_new_with_label("否");    gtk_box_pack_start_defaults(GTK_BOX(box_s),button_yes);    gtk_box_pack_start_defaults(GTK_BOX(box_s),button_no);    g_signal_connect(G_OBJECT(button_yes),"clicked",G_CALLBACK(on_succeed_buy),p);    g_signal_connect(G_OBJECT(button_no),"clicked",G_CALLBACK(destroy),(gpointer)window);    return window;}

interface.h

GtkWidget* make_window_main();GtkWidget* make_window_main_login();GtkWidget* make_window_yesorno();GtkWidget* make_window_main_change();GtkWidget* make_window_main_buy();GtkWidget* make_window_insert();GtkWidget* make_window2_insert();GtkWidget* make_window_ok_seat(struct theater *p);GtkWidget* make_window_choose_seat(struct theater *p);GtkWidget* make_window_buy_passwd(struct theater *p);GtkWidget* make_tobuy_yesorno(struct theater *p);

callback.c

#include<gtk/gtk.h>#include"callback.h"#include"interface.h"extern struct findrc *q;void on_main_to_buy(GtkWidget *widget ,gpointer userdate)//从主界面转至购票页面{    gtk_widget_hide(window_main);    gtk_widget_show_all(window_main_buy);}void on_main_to_login(GtkWidget *widget , gpointer userdate)//从主界面转至登录界面{    gtk_widget_hide(window_main);    gtk_widget_show_all(window_main_login);}void on_login_to_main(GtkWidget *widget , gpointer userdate)//从登录界面转至主界面{    gtk_widget_hide(window_main_login);    gtk_widget_show_all(window_main);}void on_login_to_change(GtkWidget *widget , gpointer userdate)//从登录界面转至管理页面{    gtk_widget_hide(window_main_login);    gtk_widget_show_all(window_main_change);}void on_seat_to_buy(GtkWidget *button,gpointer userdate)//从选座界面转至选电影界面{    gtk_widget_hide(window_choose_seat);    gtk_widget_show_all(window_main_buy);}void on_ok_to_seat(GtkWidget *button,gpointer userdate)//从付款界面返回选做界面{    gtk_widget_destroy(window_choose_to_buy);    gtk_widget_show_all(window_choose_seat);}void on_change_yes(GtkWidget *widget ,gpointer userdate)//确认是{    gtk_main_quit();}void on_change_no(GtkWidget *widget ,gpointer userdate)//确认否{    gtk_widget_hide(window_change_yesorno);}void want_to_quit(GtkWidget *widget ,gpointer userdate)//打开确认界面{    gtk_widget_show_all(window_change_yesorno);}void list_made(GtkWidget *list,struct theater *p){    gchar *s[9];    fp = fopen("data.txt","rt");    while(fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",p->name,p->type,p->people,p->time,p->place,p->message,p->photo,p->price,p->score)!=EOF)    {        theater_num++;        s[0]=p->name;        s[1]=p->type;        s[2]=p->people;        s[3]=p->time;        s[4]=p->place;        s[5]=p->message;        s[6]=p->photo;        s[7]=p->price;        s[8]=p->score;        gtk_clist_append((GtkCList *)list,s);    }    fclose(fp);}void list_add(GtkButton *button , gpointer userdate)//添加影片{    GtkWidget *window;    window = make_window_insert();    gtk_widget_show_all(window);    }void to_add_list_item(GtkWidget *button ,gpointer userdate)//将新增数据显示并存入文件{    theater_num++;    const gchar *list_item[9];//列表项信息    list_item[0]=gtk_entry_get_text(GTK_ENTRY(text_name));    list_item[1]=gtk_entry_get_text(GTK_ENTRY(text_type));    list_item[2]=gtk_entry_get_text(GTK_ENTRY(text_people));    list_item[3]=gtk_entry_get_text(GTK_ENTRY(text_time));    list_item[4]=gtk_entry_get_text(GTK_ENTRY(text_place));    list_item[5]=gtk_entry_get_text(GTK_ENTRY(text_message));    list_item[6]=gtk_entry_get_text(GTK_ENTRY(text_photo));    list_item[7]=gtk_entry_get_text(GTK_ENTRY(text_price));    list_item[8]=gtk_entry_get_text(GTK_ENTRY(text_score));    gtk_clist_append((GtkCList *)list,(gchar **)list_item);    fp = fopen("data.txt","at+");    fprintf(fp,"%s %s %s %s %s %s %s %s %s\n",list_item[0],list_item[1],list_item[2],list_item[3],list_item[4],list_item[5],list_item[6],list_item[7],list_item[8]);    fclose(fp);    gtk_widget_destroy((GtkWidget *)userdate);}void to_change_list_item(GtkWidget *button ,gpointer userdate)//将修改后的数据显示并存入文件{    gint i;    const gchar *list_item[9];//列表项信息    list_item[0]=gtk_entry_get_text(GTK_ENTRY(text_name));    list_item[1]=gtk_entry_get_text(GTK_ENTRY(text_type));    list_item[2]=gtk_entry_get_text(GTK_ENTRY(text_people));    list_item[3]=gtk_entry_get_text(GTK_ENTRY(text_time));    list_item[4]=gtk_entry_get_text(GTK_ENTRY(text_place));    list_item[5]=gtk_entry_get_text(GTK_ENTRY(text_message));    list_item[6]=gtk_entry_get_text(GTK_ENTRY(text_photo));    list_item[7]=gtk_entry_get_text(GTK_ENTRY(text_price));    list_item[8]=gtk_entry_get_text(GTK_ENTRY(text_score));    for(i=0;i<9;i++)    {        gtk_clist_set_text (GTK_CLIST(list),temp_row,i ,list_item[i]);    }    gtk_widget_destroy((GtkWidget *)userdate);}void list_change(GtkButton *button , gpointer userdate)//修改影片{    GtkWidget *window;    window = make_window2_insert();    gtk_widget_show_all(window);}void list_delete(GtkButton *button, gpointer userdate)//删除影片{    theater_num--;    gtk_clist_remove( (GtkCList*)userdate,temp_row);}void list_clear(GtkButton *button, gpointer userdate)//清空影片{    theater_num = 0;    gtk_clist_clear((GtkCList*)userdate);}void selection_made( GtkWidget *list,gint row,gint column,GdkEventButton *event,gpointer userdate)//定位管理界面选中行{    gchar *text;    gtk_clist_get_text(GTK_CLIST(list), row, column, &text);    temp_row=row;}void destroy(GtkWidget *button,GtkWidget *window)//销毁窗体{    gtk_widget_destroy(window);}void made_file()//更新文件{    gint i,j;    gchar *temp[9];    fp=fopen("data.txt","wt+");    for(i=0;i<theater_num;i++)    {        for(j=0;j<9;j++)        {            gtk_clist_get_text(GTK_CLIST(list),i,j,(gchar **)(&temp[j]));        }        fprintf(fp,"%s %s %s %s %s %s %s %s %s\n",temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);        //printf("%s %s %s %s %s %s %s %s %s\n",temp[0],temp[1],temp[2],temp[3],temp[4],temp[5],temp[6],temp[7],temp[8]);    }    fclose(fp);    gtk_main_quit();}void on_choose_seat_ok (GtkWidget *button,struct theater* p)//显示购票的选择信息{    window_choose_to_buy = make_window_ok_seat(p);      gtk_widget_show_all(window_choose_to_buy);}void on_choose_seat(GtkWidget *button,struct theater* p)//选择影片完毕{    window_choose_seat = make_window_choose_seat(p);    gtk_widget_show_all(window_choose_seat);}void toggle_clicked_callback (GtkWidget *widget, struct findrc *q)//点击座位按钮{    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))    {        weizhi[q->r][q->c]=2;    }    else    {        weizhi[q->r][q->c]=0;    }}void update_seat_file(struct theater *p)//更新座位数据{       gint i,j;    strcpy(choose_name,p->name);    strcat(choose_name,".txt");    fp=fopen(choose_name,"wt+");    for (i=0;i<8;i++)    {        for (j=0;j<8;j++)        {            if(weizhi[i][j]==0)            {                fprintf(fp,"0 ");            }            else            {                fprintf(fp,"1 ");            }        }    }    fclose(fp);}void on_put_money(GtkWidget *button,struct theater *p)//付款,即将输入账户密码{    GtkWidget *window;    window = make_window_buy_passwd(p);    gtk_widget_show_all(window);}void on_succeed_login(GtkWidget *button,struct theater *p)//支付登录成功{    GtkWidget *window;    window = make_tobuy_yesorno(p);    gtk_widget_show_all(window);}void on_succeed_buy(GtkWidget *button,struct theater *p)//成功支付{    update_seat_file(p);    gtk_main_quit();}

callback.h

#include<stdlib.h>#include<string.h>gint theater_num;gint temp_row;gchar *temp[9];gchar choose_name[50];gint weizhi[8][8];GtkWidget *window_main;GtkWidget *window_main_login;GtkWidget *window_main_change;GtkWidget *window_main_buy;GtkWidget *window_change_yesorno;GtkWidget *window_choose_seat;GtkWidget *window_choose_to_buy;GtkWidget *list;GtkWidget *text_name;GtkWidget *text_type;GtkWidget *text_people;GtkWidget *text_time;GtkWidget *text_place;GtkWidget *text_message;GtkWidget *text_photo;GtkWidget *text_price;GtkWidget *text_score;struct findrc{    int r;    int c;};struct findrc *q;struct theater{    gchar name[500];    gchar type[500];    gchar people[500];    gchar time[30];    gchar place[30];    gchar message[500];    gchar photo[20];    gchar price[10];    gchar score[10];}th;struct theater* p;FILE *fp;void on_main_to_login(GtkWidget *widget , gpointer userdate);void on_login_to_main(GtkWidget *widget , gpointer userdate);void want_to_quit(GtkWidget *widget ,gpointer userdate);void on_change_yes(GtkWidget *widget ,gpointer userdate);void on_change_no(GtkWidget *widget ,gpointer userdate);void on_login_to_change(GtkWidget *widget , gpointer userdate);void list_delete (GtkButton *button,gpointer userdate);void list_clear(GtkButton *button,gpointer userdate);void list_add(GtkButton *button , gpointer userdate);void list_change(GtkButton *button , gpointer userdate);void on_main_to_buy(GtkWidget *widget ,gpointer userdate);void selection_made( GtkWidget *list,gint row,gint column,GdkEventButton *event,gpointer userdate);void list_made(GtkWidget *list,struct theater *p);void destroy(GtkWidget *button,GtkWidget *window);void to_add_list_item(GtkWidget *button ,gpointer userdate);void to_change_list_item(GtkWidget *button ,gpointer userdate);void made_file();void on_seat_to_buy(GtkWidget *button,gpointer userdate);void on_choose_seat(GtkWidget *button,struct theater* p);void on_choose_seat_ok (GtkWidget *button,struct theater* p);void toggle_clicked_callback (GtkWidget *widget, struct findrc *p);void on_put_money(GtkWidget *button,struct theater *p);void update_seat_file(struct theater *p);void on_ok_to_seat(GtkWidget *button,gpointer userdate);void on_succeed_login(GtkWidget *button,struct theater *p);void on_succeed_buy(GtkWidget *button,struct theater *p);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑登入密码忘记了怎么办 电脑忘记登入密码怎么办 qq钱包支付密码忘了怎么办 财付通转走我卡里的钱怎么办 银行卡资金通过财付通被盗怎么办 社保卡忘了密码怎么办 医保卡忘了密码怎么办 手机qq红包忘记支付密码怎么办 微信红包忘记支付密码怎么办 充点话费充错了怎么办 qq转账记录删除了怎么办 qq转账记录删了怎么办 qq怎么办?q币转给微信 q币送不了别人怎么办 新qq号忘记了怎么办 手机qq登不上去怎么办 qq的账号忘了怎么办 微信红包密码输错锁了怎么办 陌陌钱包异常钱怎么办 对公账户转错了怎么办 微信零钱转账限额怎么办 微信红包充错话费怎么办 qq支付20万限额怎么办 qq红包20万限额怎么办 微信充qb冲错了怎么办 液相色谱柱干了怎么办 微信钱包充流量没到账怎么办 qq买流量不到账怎么办 冲q币电话冲错号了怎么办 下载cf什么文件损坏怎么办 cf老是36_2怎么办啊 永辉超市积分卡怎么办 超市积分卡丢了怎么办 医保卡磁条坏了怎么办 社保卡磁条坏了怎么办 鞋子长了怎么办m.s.cn 厚底皮拖鞋穿松了怎么办 白色帆布鞋洗后发黄怎么办 运动鞋子买大了怎么办 格力空调出现fo怎么办 绝味鸭脖代金券的附券撕了怎么办