用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

用c/gtk实现的火车票预订

2013-08-22 作者: 阿小举报

[c]代码库

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <gtk/gtk.h>
#include "myDataType.h"

#define BOOK_WINDOW_SIZE 320
#define MAXSTATIONS 100
#define MAXTRAINLINES 100
#define MAXPASSENGERS 100

/*file.c*/
extern int GetStation(struct station_tag myStations[]);
extern int GetTrainLine(struct trainline_tag myTrainLines[], struct station_tag stations[]);

extern double CalTicketPrice(int stationDif, int i_kindOfLine, int i_kindOfSeat);
extern struct station_tag *FindStation(const char *stationname, struct station_tag myStations[], int length);

extern void TurnTrainLineIntoString(char des[][20], struct trainline_tag *srcTrainLine);
extern void TurnTicketIntoString(char des[][20], struct trainline_tag *srcTrainLine);
extern int TurnSeatIntoKind(const char *text);
extern int GetStationDif(const struct trainline_tag *trainLine_ptr, const struct station_tag *startStation, const struct station_tag *endStation_ptr);
/**end file.c**/

/*list.c*/
extern struct head_tag *CreatList(void);
extern struct head_tag *InsertNode(struct head_tag *head_ptr, struct node_tag *node_ptr);
extern int FreeList(struct head_tag *head_ptr);
extern struct head_tag *FindStationInTrainLine(struct trainline_tag trainLines[], int length, const struct station_tag *startStation_ptr, const struct station_tag *endStation_ptr);
extern struct head_tag *FindTrainLine(struct trainline_tag trainLines[], int length, const struct trainline_tag *samTrainline_ptr, int timeMode);
extern void fft_ShowList(const struct head_tag *head);
/**end list.c**/

/*client.c*/
extern void ModifyPassenger(struct passenger_tag passengers[],int *length, struct pastemp_tag *pastemp_ptr);
extern struct passenger_tag *FindPassenger(struct passenger_tag passengers[], int length, struct pastemp_tag *pastemp_ptr);
extern int ReturnTicket(struct passenger_tag *passenger_ptr, int index);
extern struct trainline_tag *BookTickets(int kindofseat, struct trainline_tag *trainLine_ptr);
/**end client.c**/

/*my gtk*/
int quit(GtkButton *button, gpointer data);

int about(GtkButton *button, gpointer data);

int book(GtkButton *button, gpointer data);
int book_check_button_on_click(GtkWidget *button, gpointer data);
int book_clist_row_on_click(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data);
int book_sure_buttn_clicked(GtkWidget *button, struct trainline_tag* data);
int book_final_button_clicked(GtkWidget *button, struct trainline_tag *data);

int check(GtkWidget *button, gpointer data);
int check_check_button_on_click(GtkWidget *button, gpointer data);
int check_return_button_on_click(GtkWidget *button, gpointer data);
/**end my gtk**/

/*global variable*/
GtkWidget *g_book_start_station_entry;
GtkWidget *g_book_end_station_entry;
GtkWidget *g_book_date_entry;
GtkWidget *g_book_clist;

GtkWidget *g_book_sure_name_entry;
GtkWidget *g_book_sure_id_entry;
GtkWidget *g_book_sure_tel_entry;
GtkWidget *g_book_sure_seat_combo;
GtkWidget *g_book_book_window;
GtkWidget *g_book_sure_window;

GtkWidget *g_check_name_entry;
GtkWidget *g_check_id_entry;
GtkWidget *g_check_tel_entry;
GtkWidget *g_check_check_window;
GtkWidget *g_check_return_notebook;

struct head_tag *g_book_check_button_head = NULL;
struct pastemp_tag g_pastemp;
struct passenger_tag *g_passenger_return_ticket;

struct station_tag g_myStations[MAXSTATIONS];
int g_slen = 0;
struct trainline_tag g_myTrainLines[MAXTRAINLINES];
int g_tlen = 0;
struct passenger_tag g_myPassengers[MAXPASSENGERS];
int g_plen = 0;
/**end global variable**/

int main(int argc, char *argv[])
{
	GtkWidget *window;
	GtkWidget *hello_window;
	GtkWidget *main_menu_book_button;
	GtkWidget *main_menu_check_button;
	GtkWidget *main_menu_return_button;
	GtkWidget *main_menu_about_button;
	GtkWidget *main_menu_quit_button;
	GtkWidget *button_box;
	GtkWidget *down_box;
	GtkWidget *whole_box;
	GtkWidget *up_image_box;
	GtkWidget *down_image_box;
	GtkWidget *up_image;
	GtkWidget *down_image;

	int i;

	gtk_init(&argc, &argv);

    /*read file*/
    g_slen = GetStation(g_myStations);
    g_tlen = GetTrainLine(g_myTrainLines, g_myStations);
    /**end read file**/

	up_image = gtk_image_new_from_file("up.png");
	up_image_box = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(up_image_box), up_image,FALSE, FALSE, 0);
	down_image = gtk_image_new_from_file("side.png");
	down_image_box = gtk_hbox_new(FALSE, 0);
	gtk_box_pack_start(GTK_BOX(down_image_box), down_image,FALSE, FALSE, 0);

	main_menu_book_button = gtk_button_new_with_mnemonic(g_convert("预订车票(_B)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	main_menu_check_button = gtk_button_new_with_mnemonic(g_convert("查询订票信息(_C)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	main_menu_return_button = gtk_button_new_with_mnemonic(g_convert("退票(_R)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	main_menu_about_button = gtk_button_new_with_mnemonic(g_convert("关于(_A)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	main_menu_quit_button = gtk_button_new_with_mnemonic(g_convert("退出(_Q)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));

    /*button_box init*/
    button_box = gtk_vbox_new(TRUE, 21);
    gtk_box_pack_start(GTK_BOX(button_box), main_menu_book_button, FALSE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(button_box), main_menu_check_button, FALSE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(button_box), main_menu_return_button, FALSE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(button_box), main_menu_about_button, FALSE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(button_box), main_menu_quit_button, FALSE, TRUE, 0);
    /**end button_box init**/

    /*down_box init*/
    down_box = gtk_hbox_new(FALSE, 47);
    gtk_box_pack_start(GTK_BOX(down_box), down_image_box, FALSE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(down_box), button_box, FALSE, TRUE, 0);
    /**end down_box init**/

    /*whole_box*/
    whole_box = gtk_vbox_new(FALSE, 7);
    gtk_box_pack_start(GTK_BOX(whole_box), up_image_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), down_box, FALSE, FALSE, 0);
    /**end whole_box**/

    /*window init*/
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window), g_convert("火车售票系统", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	gtk_window_set_default_size(GTK_WINDOW(window), 600, 450);
	g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
	gtk_container_set_border_width(GTK_CONTAINER(window), 20);
	gtk_container_add(GTK_CONTAINER(window), whole_box);
    /**end window init**/

	g_signal_connect(G_OBJECT(main_menu_about_button), "clicked", G_CALLBACK(about), NULL);
	g_signal_connect(G_OBJECT(main_menu_quit_button), "clicked", G_CALLBACK(quit), NULL);
	g_signal_connect(G_OBJECT(main_menu_book_button), "clicked", G_CALLBACK(book), NULL);
	g_signal_connect(G_OBJECT(main_menu_check_button), "clicked", G_CALLBACK(check), NULL);

	gtk_widget_show_all(window);
	gtk_main();
	return FALSE;
}

int quit(GtkButton *button, gpointer data)
{
	GtkWidget *window;
	GtkWidget *button1;
	GtkWidget *button2;
	GtkWidget *box1;
	GtkWidget *box2;
	GtkWidget *label;

	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_container_set_border_width(GTK_CONTAINER(window), 30);
	g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_destroy), window);

	box2 = gtk_vbox_new(TRUE, 0);
	box1 = gtk_hbox_new(TRUE, 0);
	gtk_container_add(GTK_CONTAINER(window), box2);
	gtk_box_pack_end(GTK_BOX(box2), box1, TRUE, TRUE, 5);
	label = gtk_label_new(NULL);
	gtk_label_set_markup(GTK_LABEL(label), g_convert("<big><i>是否要退出售票系统?</i></big>", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
	gtk_box_pack_end(GTK_BOX(box2), label, FALSE, FALSE, 5);
	button1 = gtk_button_new_from_stock(GTK_STOCK_OK);
	gtk_box_pack_start(GTK_BOX(box1), button1, TRUE, TRUE, 5);
	g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(gtk_main_quit), FALSE);
	button2 = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
	gtk_box_pack_start(GTK_BOX(box1), button2, TRUE, TRUE, 5);
	g_signal_connect_swapped(G_OBJECT(button2), "clicked", G_CALLBACK(gtk_widget_destroy), window);
	gtk_widget_show_all(window);
	return 0;
}

int about(GtkButton *button, gpointer data)
{
	GtkWidget *window;
    GtkWidget *notebook;
    GtkWidget *label;
    GtkWidget *page;
    GtkWidget *fixed;
    GtkWidget *image;
    GtkWidget *vbox, *imagevbox, *hbox, *box;
    GtkWidget *hsep;
    GtkWidget *frame;

    /**窗口**/
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), g_convert("关于", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 400);
    gtk_container_border_width(GTK_CONTAINER(window), 5);

    /**盒子**/
        hbox = gtk_hbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(window), hbox);

        vbox = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);

        imagevbox = gtk_vbox_new(FALSE, 0);
     gtk_box_pack_start(GTK_BOX(vbox), imagevbox, FALSE, FALSE, 0);
        box = gtk_vbox_new(FALSE, 0);

    /**图片**/
        image = gtk_image_new_from_file("about.png");
    gtk_box_pack_start(GTK_BOX(imagevbox), image, FALSE, FALSE, 0);

    /**分割线**/
        hsep = gtk_hseparator_new();
    gtk_box_pack_start(GTK_BOX(vbox), hsep, TRUE, TRUE, 8);

    /**笔记本**/
        notebook = gtk_notebook_new();
    gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);

    /**框架**/
        frame = gtk_frame_new(NULL);
    gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);

    /**笔记本-信息**/
        page = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(frame), page);

    /**自由布局**/
        fixed = gtk_fixed_new();
    gtk_fixed_set_has_window(GTK_FIXED(fixed), TRUE);
    gtk_container_add(GTK_CONTAINER(page), fixed);

        label = gtk_label_new(g_convert("软件名称:火车票预订系统", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_fixed_put(GTK_FIXED(fixed), label, 10, 2);

        label = gtk_label_new(g_convert("版本信息:1.0.0.0", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_fixed_put(GTK_FIXED(fixed), label, 10, 22);

        label = gtk_label_new(g_convert("开发团队:软工-1207-Item9", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_fixed_put(GTK_FIXED(fixed), label, 10, 42);

        label = gtk_label_new(g_convert("发布时间:20130323", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_fixed_put(GTK_FIXED(fixed), label, 10, 96);

        label = gtk_label_new(g_convert("联系方式:471766436", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_fixed_put(GTK_FIXED(fixed), label, 10, 116);

        label = gtk_label_new(g_convert("信息", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, label);

     /**笔记本-描述**/
        page = gtk_vbox_new(FALSE, 0);

        label = gtk_label_new(NULL);
    gtk_label_set_markup(GTK_LABEL(label), "<span><big>This is a programe!</big></span>");
    gtk_box_pack_start(GTK_BOX(page), label, FALSE, FALSE, 0);
        label = gtk_label_new(g_convert("描述", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);

    gtk_widget_show_all(window);
    return 0;
}

int book (GtkButton *button, gpointer data)
{
    GtkWidget *window;
    GtkWidget *start_station_label;
    GtkWidget *end_station_label;
    GtkWidget *date_label;
    GtkWidget *check_button;
    GtkWidget *start_station_box;
    GtkWidget *end_station_box;
    GtkWidget *date_box;
    GtkWidget *se_box;
    GtkWidget *dc_box;
    GtkWidget *sedc_box;
    GtkWidget *hwhole_box;

    time_t rawtime;
    struct tm *timeInfo;
    char timeInfoArr[30];
    const char *timeInfoPtr = timeInfoArr;

    time(&rawtime);
    timeInfo = localtime(&rawtime);
    sprintf(timeInfoArr, "%d-%d-%d", 1900+timeInfo->tm_year, 1+timeInfo->tm_mon, timeInfo->tm_mday);

    /*window init*/
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), g_convert("车票预订", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_window_set_default_size(GTK_WINDOW(window), BOOK_WINDOW_SIZE, BOOK_WINDOW_SIZE);
    gtk_container_border_width(GTK_CONTAINER(window), 10);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
    /**end window init**/

    /*start_station_label init*/
    start_station_label = gtk_label_new(g_convert("*出发站点:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_label_set_justify (GTK_LABEL (start_station_label), GTK_JUSTIFY_LEFT);
    /**end start_station_label init**/
    /*start_station_entry init*/
    g_book_start_station_entry = gtk_entry_new();
    /**end start_station_entry init**/
    /*start_station_box*/
    start_station_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(start_station_box), start_station_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(start_station_box), g_book_start_station_entry, FALSE, FALSE, 0);
    /**end start_station_box**/

    /*end_station_label init*/
    end_station_label = gtk_label_new(g_convert("*终到站点:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_label_set_justify (GTK_LABEL (end_station_label), GTK_JUSTIFY_LEFT);
    /**end end_station_label init**/
    /*end_station_entry init*/
    g_book_end_station_entry = gtk_entry_new();
    /**end end_station_entry init**/
    /**end_station_box**/
    end_station_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(end_station_box), end_station_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(end_station_box), g_book_end_station_entry, FALSE, FALSE, 0);
    /**end end_station_box**/

    /*date_label init*/
    date_label = gtk_label_new(g_convert("*出发日期:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_label_set_justify (GTK_LABEL (date_label), GTK_JUSTIFY_LEFT);
    /**end date_label init**/
    /*date_entry init*/
    g_book_date_entry = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(g_book_date_entry), timeInfoPtr);
    /**end date_entry init**/
    /*date_box*/
    date_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(date_box), date_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(date_box), g_book_date_entry, FALSE, FALSE, 0);
    /**end date_box**/

    /*check_button*/
    check_button = gtk_button_new_with_mnemonic(g_convert("查询(_C)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(check_button), "clicked", G_CALLBACK(book_check_button_on_click), NULL);
    /**end check_button**/

    /*g_book_clist init*/
    g_book_clist = gtk_clist_new(10);
    /*set title*/
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 0, g_convert("车次", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 1, g_convert("始发站(发车时间)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 2, g_convert("终点站", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 3, g_convert("商务座", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 4, g_convert("特等座", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 5, g_convert("一等座", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 6, g_convert("二等座", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 7, g_convert("软卧", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 8, g_convert("硬卧", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_clist_set_column_title(GTK_CLIST(g_book_clist), 9, g_convert("无座", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end set title**/
    gtk_clist_column_titles_show(GTK_CLIST(g_book_clist));
    gtk_signal_connect(GTK_OBJECT(g_book_clist), "select_row", GTK_SIGNAL_FUNC(book_clist_row_on_click), NULL);
    /**end g_book_clist init**/

    /*put in box*/
    /*start and end station box*/
    se_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(se_box), start_station_box, FALSE, FALSE, 0);
    gtk_box_pack_end(GTK_BOX(se_box), end_station_box, FALSE, FALSE, 0);
    /**start and end station box**/

    /*date box and check_button*/
    dc_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(dc_box), date_box, FALSE, FALSE, 0);
    gtk_box_pack_end(GTK_BOX(dc_box), check_button, FALSE, FALSE, 0);
    /**end date box and check_button**/

    /*se dc and clist box*/
    sedc_box = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(sedc_box), se_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(sedc_box), dc_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(sedc_box), g_book_clist, FALSE, FALSE, 0);
    /**end se dc and clist box**/

    hwhole_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hwhole_box), sedc_box, FALSE, FALSE, 0);
    /**end put in box**/

    gtk_container_add(GTK_CONTAINER(window), hwhole_box);

    gtk_widget_show(g_book_clist);
    gtk_widget_show_all(window);

    return FALSE;
}

int book_check_button_on_click(GtkWidget *button, gpointer data)
{
    int i;
    const gchar *start_station_string = g_convert(gtk_entry_get_text(GTK_ENTRY(g_book_start_station_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *end_station_string = g_convert(gtk_entry_get_text(GTK_ENTRY(g_book_end_station_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);

    struct station_tag *startStation = FindStation(start_station_string, g_myStations, g_slen);
    struct station_tag *endStation = FindStation(end_station_string, g_myStations, g_slen);

    struct head_tag *head = FindStationInTrainLine(g_myTrainLines, g_tlen, startStation, endStation);
    struct node_tag *p;
    char text[10][20];
    char *text_ptr[10] = {text[0], text[1], text[2], text[3], text[4], text[5], text[6], text[7], text[8], text[9]};

    gtk_clist_clear(GTK_CLIST(g_book_clist));
    if (NULL == head) return 0;
    if (NULL != g_book_check_button_head) FreeList(g_book_check_button_head);
    g_pastemp.ticket.startStation_ptr = startStation;
    g_pastemp.ticket.endStation_ptr = endStation;
    g_book_check_button_head = head;
    p = head->next_ptr;
    for (i=0; i<head->numOfNode; i++)
    {
        if (i>7) break;
        TurnTrainLineIntoString(text, p->trainLine_ptr);
        gtk_clist_append(GTK_CLIST(g_book_clist), text_ptr);
        p = p->next_ptr;
    }
    return 0;
}

int book_clist_row_on_click(GtkWidget *clist, gint row, gint column, GdkEventButton *event, gpointer data)
{
    int i;
    static int prerow = -1;
    struct node_tag *p;
    GtkWidget *name_label;
    GtkWidget *name_box;
    GtkWidget *id_label;
    GtkWidget *id_box;
    GtkWidget *tel_label;
    GtkWidget *tel_box;
    GtkWidget *seat_label;
    GtkWidget *seat_box;
    GtkWidget *sure_button;
    GtkWidget *sure_box;
    GtkWidget *whole_box;
    GList *list = NULL;
    gchar combo_text[7][20];

    /*clicked*/
    if (prerow != row)
    {
        prerow = row;
        return 0;
    }
    else
    {
        prerow = -1;
    }
    /**end clicked**/

    if (NULL == g_book_check_button_head) return -1;
    p = g_book_check_button_head->next_ptr;
    for (i=0; i<row; i++)
    {
        p = p->next_ptr;
    }
    //printf ("%s\n", p->trainLine_ptr->lineName);

    g_pastemp.ticket.trainLine_ptr = p->trainLine_ptr;

    /*name_box init*/
    /*name_label init*/
    name_label = gtk_label_new(g_convert("乘客姓名:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end name_label init**/
    /*g_book_sure_name_entry init*/
    g_book_sure_name_entry = gtk_entry_new();
    /**end g_book_sure_name_entry init**/
    name_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(name_box), name_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(name_box), g_book_sure_name_entry, FALSE, FALSE, 0);
    /**end name_box init**/

    /*id_box init*/
    /*id_label init*/
    id_label = gtk_label_new(g_convert("身份证号:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end id_label init**/
    /*g_book_sure_id_entry init*/
    g_book_sure_id_entry = gtk_entry_new();
    /**end g_book_sure_id_entry init**/
    id_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(id_box), id_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(id_box), g_book_sure_id_entry, FALSE, FALSE, 0);
    /**end id_box init**/

    /*tel_box init*/
    /*tel_label init*/
    tel_label = gtk_label_new(g_convert("电话号码:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end tel_label init**/
    /*g_book_sure_tel_entry init*/
    g_book_sure_tel_entry = gtk_entry_new();
    /**end g_book_sure_tel_entry init**/
    tel_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(tel_box), tel_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(tel_box), g_book_sure_tel_entry, FALSE, FALSE, 0);
    /**end tel_box init**/

    /*seat_box init*/
    /*seat_label*/
    seat_label = gtk_label_new(g_convert("订票种类:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end seat_label**/
    /*g_book_sure_seat_combo init*/
    g_book_sure_seat_combo = gtk_combo_new();
    TurnTicketIntoString(combo_text, p->trainLine_ptr);
    list = g_list_append(list, combo_text[0]);
    list = g_list_append(list, combo_text[1]);
    list = g_list_append(list, combo_text[2]);
    list = g_list_append(list, combo_text[3]);
    list = g_list_append(list, combo_text[4]);
    list = g_list_append(list, combo_text[5]);
    list = g_list_append(list, combo_text[6]);
    gtk_combo_set_popdown_strings(GTK_COMBO(g_book_sure_seat_combo), list);
    /*****************************************/
    /*********** ADD EDITABLE! ***************/
    /*****************************************/
    g_list_free(list);
    /**end g_book_sure_seat_combo init**/
    seat_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(seat_box), seat_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(seat_box), g_book_sure_seat_combo, FALSE, FALSE, 0);
    /**end seat_box init**/

    /*sure_box init*/
    /*sure_button*/
    sure_button = gtk_button_new_with_mnemonic(g_convert("确认(_Y)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(sure_button), "clicked", G_CALLBACK(book_sure_buttn_clicked), p->trainLine_ptr);
    /**end sure_button**/
    sure_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(sure_box), sure_button, FALSE, FALSE, 80);
    /**end sure_box init**/

    /*whole_box init*/
    whole_box = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), name_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), id_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), tel_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), seat_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), sure_box, FALSE, FALSE, 0);
    /**end whole_box init**/

    /*g_book_book_window init*/
    g_book_book_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(g_book_book_window), g_convert("预订", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_window_set_default_size(GTK_WINDOW(g_book_book_window), 200, 200);
    g_signal_connect(G_OBJECT(g_book_book_window), "destroy", G_CALLBACK(gtk_widget_destroy), g_book_book_window);
    gtk_container_border_width(GTK_CONTAINER(g_book_book_window), 20);
    gtk_container_add(GTK_CONTAINER(g_book_book_window), whole_box);
    /**end g_book_book_window init**/

    gtk_widget_show_all(g_book_book_window);
    return 0;
}

int book_sure_buttn_clicked(GtkWidget *button, struct trainline_tag *data)
{
    GtkWidget *sure_button;
    GtkWidget *cancel_button;
    GtkWidget *imfor_label;
    GtkWidget *button_box;
    GtkWidget *whole_box;
    GtkWidget *hwhole_box;
    GtkWidget *frame;
    struct trainline_tag *p = data;
    const gchar *passenger_name = g_convert(gtk_entry_get_text(GTK_ENTRY(g_book_sure_name_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *passenger_id = g_convert(gtk_entry_get_text(GTK_ENTRY(g_book_sure_id_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *passenger_tel = g_convert(gtk_entry_get_text(GTK_ENTRY(g_book_sure_tel_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *passenger_seat = g_convert(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(g_book_sure_seat_combo)->entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    char passenger_imfor_string[100];

    gtk_widget_destroy(g_book_book_window);

    strcpy(g_pastemp.pasName, passenger_name);
    strcpy(g_pastemp.idNum, passenger_id);
    strcpy(g_pastemp.telNum, passenger_tel);
    g_pastemp.ticket.kindOfSeat = (enum kindOfSeat_tag)TurnSeatIntoKind(passenger_seat);
    g_pastemp.ticket.stationDif = GetStationDif(g_pastemp.ticket.trainLine_ptr, g_pastemp.ticket.startStation_ptr, g_pastemp.ticket.endStation_ptr);
    g_pastemp.ticket.price = CalTicketPrice(g_pastemp.ticket.stationDif, p->kindOfLine, g_pastemp.ticket.kindOfSeat);

    /*g_book_sure_window init*/
    g_book_sure_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(g_book_sure_window), g_convert("确认预订", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    //gtk_window_set_default_size(GTK_WINDOW(g_book_sure_window), 200, 200);
    g_signal_connect(G_OBJECT(g_book_sure_window), "destroy", G_CALLBACK(gtk_widget_destroy), g_book_sure_window);
    gtk_container_border_width(GTK_CONTAINER(g_book_sure_window), 20);
    /**end g_book_sure_window init**/

    /*sure_button init*/
    sure_button = gtk_button_new_from_stock(GTK_STOCK_OK);
    g_signal_connect(G_OBJECT(sure_button), "clicked", G_CALLBACK(book_final_button_clicked), data);
    /**end sure_button init**/

    /*cancel_button init*/
    cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
    g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), g_book_sure_window);
    /**end cancel_button init**/

    /*imfor_label init*/
    sprintf(passenger_imfor_string, "乘客姓名:%s\n身份证号:%s\n电话号码:%s\n车票种类:%s\n车票价格:%d", passenger_name, passenger_id, passenger_tel, passenger_seat, (int)g_pastemp.ticket.price);
    imfor_label = gtk_label_new(g_convert(passenger_imfor_string, -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end imfor_label init**/

    /*button_box init*/
    button_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(button_box), sure_button, FALSE, FALSE, 0);
    gtk_box_pack_end(GTK_BOX(button_box), cancel_button, FALSE, FALSE, 0);
    /**end button_box init**/

    /*frame init*/
    frame = gtk_frame_new(g_convert("乘客信息:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_container_add(GTK_CONTAINER(frame), imfor_label);
    /**end frame init**/

    /*whole_box init*/
    whole_box = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), frame, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), button_box, FALSE, FALSE, 0);
    /**end whole_box init**/

    /*hwhole_box init*/
    hwhole_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hwhole_box), whole_box, FALSE, FALSE, 0);
    /**end hwhole_box init**/

    gtk_container_add(GTK_CONTAINER(g_book_sure_window), hwhole_box);
    gtk_widget_show_all(g_book_sure_window);
    return 0;
}

int book_final_button_clicked(GtkWidget *button, struct trainline_tag *data)
{
    GtkWidget *dialog;
    gtk_widget_destroy(g_book_sure_window);
    ModifyPassenger(g_myPassengers, &g_plen, &g_pastemp);
    BookTickets(g_pastemp.ticket.kindOfSeat, data);
    dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, g_convert("预订成功!", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
    return 0;
}

int check(GtkWidget *button, gpointer data)
{
    GtkWidget *window;
    GtkWidget *name_label;
    GtkWidget *name_box;
    GtkWidget *id_label;
    GtkWidget *id_box;
    GtkWidget *tel_label;
    GtkWidget *tel_box;
    GtkWidget *check_button;
    GtkWidget *check_box;
    GtkWidget *whole_box;

    /*name_box init*/
    /*name_label init*/
    name_label = gtk_label_new(g_convert("乘客姓名:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end name_label init**/
    /*g_check_name_entry init*/
    g_check_name_entry = gtk_entry_new();
    /**end g_check_name_entry init**/
    name_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(name_box), name_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(name_box), g_check_name_entry, FALSE, FALSE, 0);
    /**end name_box init**/

    /*id_box init*/
    /*id_label init*/
    id_label = gtk_label_new(g_convert("身份证号:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end id_label init**/
    /*g_check_id_entry init*/
    g_check_id_entry = gtk_entry_new();
    /**end g_check_id_entry init**/
    id_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(id_box), id_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(id_box), g_check_id_entry, FALSE, FALSE, 0);
    /**end id_box init**/

    /*tel_box init*/
    /*tel_label init*/
    tel_label = gtk_label_new(g_convert("电话号码:", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    /**end tel_label init**/
    /*g_check_tel_entry init*/
    g_check_tel_entry = gtk_entry_new();
    /**end g_check_tel_entry init**/
    tel_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(tel_box), tel_label, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(tel_box), g_check_tel_entry, FALSE, FALSE, 0);
    /**end tel_box init**/

    /*check_button init*/
    check_button = gtk_button_new_with_mnemonic(g_convert("查询(_C)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(check_button), "clicked", G_CALLBACK(check_check_button_on_click), NULL);
    /**end check_button init**/

    /*check_box init*/
    check_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(check_box), check_button, FALSE, FALSE, 80);
    /**end check_box init**/

    /*whole_box init*/
    whole_box = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), name_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), id_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), tel_box, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), check_box, FALSE, FALSE, 0);
    /**end whole_box init**/

    /*window init*/
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), g_convert("查询订票讯息", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    //gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
    g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_widget_destroy), window);
    gtk_container_border_width(GTK_CONTAINER(window), 20);
    gtk_container_add(GTK_CONTAINER(window), whole_box);
    /**end window init**/

    gtk_widget_show_all(window);
    return 0;
}

int check_check_button_on_click(GtkWidget *button, gpointer data)
{
    int i;
    GtkWidget *page;
    GtkWidget *page_name_label;
    GtkWidget *info_label;
    GtkWidget *return_button;
    GtkWidget *return_button_box;
    GtkWidget *whole_box;
    GtkWidget *hwhole_box;
    struct passenger_tag *passenger_ptr;
    char info[100];
    const gchar *passenger_name = g_convert(gtk_entry_get_text(GTK_ENTRY(g_check_name_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *passenger_id = g_convert(gtk_entry_get_text(GTK_ENTRY(g_check_id_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);
    const gchar *passenger_tel = g_convert(gtk_entry_get_text(GTK_ENTRY(g_check_tel_entry)), -1, "GB2312", "UTF-8", NULL, NULL, NULL);

    strcpy(g_pastemp.pasName, passenger_name);
    strcpy(g_pastemp.idNum, passenger_id);
    strcpy(g_pastemp.telNum, passenger_tel);

    passenger_ptr = FindPassenger(g_myPassengers, g_plen, &g_pastemp);

    if (NULL == passenger_ptr || 0 == passenger_ptr->numOfTickets)
    {
        g_check_check_window = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, g_convert("您未订票!", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
        gtk_dialog_run(GTK_DIALOG(g_check_check_window));
        gtk_widget_destroy(g_check_check_window);
        return 0;
    }

    g_passenger_return_ticket = passenger_ptr;

    /*g_check_return_notebook init*/
    g_check_return_notebook = gtk_notebook_new();
    /**end g_check_return_notebook init**/

    /*pagr init*/
    for (i=0; i<passenger_ptr->numOfTickets; i++)
    {
        sprintf(info, "车次:%s\n%s 到 %s\n乘车人:%s\n身份证号:%s\n票价:%d"
                , passenger_ptr->tickets[i].trainLine_ptr->lineName
                , passenger_ptr->tickets[i].startStation_ptr->stationName
                , passenger_ptr->tickets[i].endStation_ptr->stationName
                , passenger_ptr->pasName
                , passenger_ptr->idNum
                , (int)passenger_ptr->tickets[i].price);
        info_label = gtk_label_new(g_convert(info, -1, "UTF-8", "GB2312", NULL, NULL, NULL));

        sprintf(info, "车票%d", i+1);
        page_name_label = gtk_label_new(g_convert(info, -1, "UTF-8", "GB2312", NULL, NULL, NULL));
        page = gtk_vbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(page), info_label, FALSE, FALSE, 0);
        gtk_notebook_append_page(GTK_NOTEBOOK(g_check_return_notebook), page, page_name_label);
    }
    /**end pagr init**/

    /*return_button*/
    return_button = gtk_button_new_with_mnemonic(g_convert("退票(_R)", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(return_button), "clicked", G_CALLBACK(check_return_button_on_click), (gpointer)gtk_notebook_get_current_page(GTK_NOTEBOOK(g_check_return_notebook)));
    return_button_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(return_button_box),return_button, FALSE, FALSE, 70);
    /**end return_button**/

    /*whole_box init*/
    whole_box = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), g_check_return_notebook, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(whole_box), return_button_box, FALSE, FALSE, 0);
    gtk_container_border_width(GTK_CONTAINER(whole_box), 20);
    /**end whole_box init**/

    hwhole_box = gtk_hbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hwhole_box), whole_box, FALSE, FALSE, 0);

    /*g_check_check_window init*/
    g_check_check_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(g_check_check_window), g_convert("查询结果", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    g_signal_connect(G_OBJECT(g_check_check_window), "destroy", G_CALLBACK(gtk_widget_destroy), NULL);
    gtk_window_set_position(GTK_WINDOW(g_check_check_window), GTK_WIN_POS_CENTER);
    //gtk_g_check_check_window_set_default_size(GTK_WINDOW(g_check_check_window), 400, 300);
    gtk_container_add(GTK_CONTAINER(g_check_check_window), hwhole_box);
    gtk_container_border_width(GTK_CONTAINER(g_check_check_window), 5);
    gtk_widget_show_all(g_check_check_window);
    /**end g_check_check_window init**/

    return 0;
}

int check_return_button_on_click(GtkWidget *button, gpointer data)
{
    GtkWidget *dialog;
    ReturnTicket(g_passenger_return_ticket, gtk_notebook_get_current_page(GTK_NOTEBOOK(g_check_return_notebook)));
    gtk_widget_destroy(g_check_check_window);
    dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, g_convert("退票成功!", -1, "UTF-8", "GB2312", NULL, NULL, NULL));
    gtk_dialog_run(GTK_DIALOG(dialog));
    gtk_widget_destroy(dialog);
    return 0;
}

[代码运行效果截图]


用c/gtk实现的火车票预订

[源代码打包下载]




网友评论    (发表评论)

共4 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...