影院管理系统(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
- 影院管理系统(GTK)
- 影院管理系统的后台(一): 注册
- 青鸟影院售票系统(一)
- java影院票务管理系统项目开发计划
- java影院票务管理系统项目开发计划
- 影院售票管理源码
- 影院售票系统
- C#影院售票系统
- 青鸟影院售票系统
- 影院售票系统源代码
- 影院售票系统
- 影院售票系统
- GTK+系统中的对话框(GTK+ dialogs)
- GTK+系统中的对话框(GTK+ dialogs)
- DTS(Digital Theatre System,数字化影院系统)
- 影院管理系统!个人做的,还有不完整的地方,源码我奉献了吧!
- 影院购票系统 C#源代码
- java小项目影院系统
- 6种常用的项目管理模式
- 学习笔记(objective-c)-类别(category)
- mysql中插入数据时出现1366错误
- @property和@synthesize的一些见解
- 大文件,5亿整数,怎么排?
- 影院管理系统(GTK)
- 外部排序,杀鸡焉用牛刀?
- 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
- 发送邮件给我
- Uva 227 Pullze
- MFC基础知识(六)——停靠窗口中添加控件
- spring mvc 知识总结
- (3)抽象工厂模式
- 列表(2)