Interfejs graficzny GTK3+, problem z programem.

0
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct car
{
    char marka[50];
    char model[50];
    char nr_rej[30];
    int rok_prod;
    char kolor[50];
    int przebieg;
    int liczba_egzemplarzy;
    int liczba_wypozyczonych;
};

struct person
{
    char imie[30];
    char nazwisko[30];
    char numer_karty[20];
    char adres[50];
    char nr_tel[12];
};

GtkWidget *window;
GtkWidget *addCarButton;
GtkWidget *addPersonButton;
GtkWidget *deleteCarButton;
GtkWidget *deletePersonButton;
GtkWidget *editCarButton;
GtkWidget *editPersonButton;
GtkWidget *rentCarButton;
GtkWidget *returnCarButton;

void add_car(GtkWidget *widget, gpointer data)
{
    struct car nowy_samochod;
    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label_marka;
    GtkWidget *entry_marka;
    GtkWidget *label_model;
    GtkWidget *entry_model;
    GtkWidget *label_nr_rej;
    GtkWidget *entry_nr_rej;
    GtkWidget *label_rok_prod;
    GtkWidget *entry_rok_prod;
    GtkWidget *label_kolor;
    GtkWidget *entry_kolor;
    GtkWidget *label_przebieg;
    GtkWidget *entry_przebieg;
    GtkWidget *label_liczba_egzemplarzy;
    GtkWidget *entry_liczba_egzemplarzy;
    GtkWidget *label_liczba_wypozyczonych;
    GtkWidget *entry_liczba_wypozyczonych;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Dodaj samochod", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label_marka = gtk_label_new("Marka:");
    entry_marka = gtk_entry_new();

    label_model = gtk_label_new("Model:");
    entry_model = gtk_entry_new();

    label_nr_rej = gtk_label_new("Numer rejestracyjny:");
    entry_nr_rej = gtk_entry_new();

    label_rok_prod = gtk_label_new("Rok produkcji:");
    entry_rok_prod = gtk_entry_new();

    label_kolor = gtk_label_new("Kolor:");
    entry_kolor = gtk_entry_new();

    label_przebieg = gtk_label_new("Przebieg:");
    entry_przebieg = gtk_entry_new();

    label_liczba_egzemplarzy = gtk_label_new("Liczba egzemplarzy:");
    entry_liczba_egzemplarzy = gtk_entry_new();

    label_liczba_wypozyczonych = gtk_label_new("Liczba wypo¿yczonych:");
    entry_liczba_wypozyczonych = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(content_area), label_marka);
    gtk_container_add(GTK_CONTAINER(content_area), entry_marka);
    gtk_container_add(GTK_CONTAINER(content_area), label_model);
    gtk_container_add(GTK_CONTAINER(content_area), entry_model);
    gtk_container_add(GTK_CONTAINER(content_area), label_nr_rej);
    gtk_container_add(GTK_CONTAINER(content_area), entry_nr_rej);
    gtk_container_add(GTK_CONTAINER(content_area), label_rok_prod);
    gtk_container_add(GTK_CONTAINER(content_area), entry_rok_prod);
    gtk_container_add(GTK_CONTAINER(content_area), label_kolor);
    gtk_container_add(GTK_CONTAINER(content_area), entry_kolor);
    gtk_container_add(GTK_CONTAINER(content_area), label_przebieg);
    gtk_container_add(GTK_CONTAINER(content_area), entry_przebieg);
    gtk_container_add(GTK_CONTAINER(content_area), label_liczba_egzemplarzy);
    gtk_container_add(GTK_CONTAINER(content_area), entry_liczba_egzemplarzy);
    gtk_container_add(GTK_CONTAINER(content_area), label_liczba_wypozyczonych);
    gtk_container_add(GTK_CONTAINER(content_area), entry_liczba_wypozyczonych);

    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        strncpy(nowy_samochod.marka, gtk_entry_get_text(GTK_ENTRY(entry_marka)), sizeof(nowy_samochod.marka) - 1);
        strncpy(nowy_samochod.model, gtk_entry_get_text(GTK_ENTRY(entry_model)), sizeof(nowy_samochod.model) - 1);
        strncpy(nowy_samochod.nr_rej, gtk_entry_get_text(GTK_ENTRY(entry_nr_rej)), sizeof(nowy_samochod.nr_rej) - 1);
        nowy_samochod.rok_prod = atoi(gtk_entry_get_text(GTK_ENTRY(entry_rok_prod)));
        strncpy(nowy_samochod.kolor, gtk_entry_get_text(GTK_ENTRY(entry_kolor)), sizeof(nowy_samochod.kolor) - 1);
        nowy_samochod.przebieg = atoi(gtk_entry_get_text(GTK_ENTRY(entry_przebieg)));
        nowy_samochod.liczba_egzemplarzy = atoi(gtk_entry_get_text(GTK_ENTRY(entry_liczba_egzemplarzy)));
        nowy_samochod.liczba_wypozyczonych = atoi(gtk_entry_get_text(GTK_ENTRY(entry_liczba_wypozyczonych)));

        FILE *file = fopen("cars.txt", "a");
        if (file != NULL)
        {
            fprintf(file, "Marka: %s\n", nowy_samochod.marka);
            fprintf(file, "Model: %s\n", nowy_samochod.model);
            fprintf(file, "Numer rejestracyjny: %s\n", nowy_samochod.nr_rej);
            fprintf(file, "Rok produkcji: %d\n", nowy_samochod.rok_prod);
            fprintf(file, "Kolor: %s\n", nowy_samochod.kolor);
            fprintf(file, "Przebieg: %d\n", nowy_samochod.przebieg);
            fprintf(file, "Liczba egzemplarzy: %d\n", nowy_samochod.liczba_egzemplarzy);
            fprintf(file, "Liczba wypozyczonych: %d\n\n", nowy_samochod.liczba_wypozyczonych);

            fclose(file);

            dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                            GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
                                            "Samochod zostal dodany do pliku cars.txt.");
            gtk_dialog_run(GTK_DIALOG(dialog));
            gtk_widget_destroy(dialog);
        }
        else
        {
            dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                            GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
                                            "Wystapil b³ad podczas otwierania pliku cars.txt.");
            gtk_dialog_run(GTK_DIALOG(dialog));
            gtk_widget_destroy(dialog);
        }
    }

    gtk_widget_destroy(dialog);
}


void add_person(GtkWidget *widget, gpointer data)
{
    struct person new_client;
    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label_imie;
    GtkWidget *entry_imie;
    GtkWidget *label_nazwisko;
    GtkWidget *entry_nazwisko;
    GtkWidget *label_numer_karty;
    GtkWidget *entry_numer_karty;
    GtkWidget *label_adres;
    GtkWidget *entry_adres;
    GtkWidget *label_nr_tel;
    GtkWidget *entry_nr_tel;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Dodaj klienta", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label_imie = gtk_label_new("Imie:");
    entry_imie = gtk_entry_new();

    label_nazwisko = gtk_label_new("Nazwisko:");
    entry_nazwisko = gtk_entry_new();

    label_numer_karty = gtk_label_new("Numer karty:");
    entry_numer_karty = gtk_entry_new();

    label_adres = gtk_label_new("Adres:");
    entry_adres = gtk_entry_new();

    label_nr_tel = gtk_label_new("Numer telefonu:");
    entry_nr_tel = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(content_area), label_imie);
    gtk_container_add(GTK_CONTAINER(content_area), entry_imie);
    gtk_container_add(GTK_CONTAINER(content_area), label_nazwisko);
    gtk_container_add(GTK_CONTAINER(content_area), entry_nazwisko);
    gtk_container_add(GTK_CONTAINER(content_area), label_numer_karty);
    gtk_container_add(GTK_CONTAINER(content_area), entry_numer_karty);
    gtk_container_add(GTK_CONTAINER(content_area), label_adres);
    gtk_container_add(GTK_CONTAINER(content_area), entry_adres);
    gtk_container_add(GTK_CONTAINER(content_area), label_nr_tel);
    gtk_container_add(GTK_CONTAINER(content_area), entry_nr_tel);


    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        strncpy(new_client.imie, gtk_entry_get_text(GTK_ENTRY(entry_imie)), sizeof(new_client.imie) - 1);
        strncpy(new_client.nazwisko, gtk_entry_get_text(GTK_ENTRY(entry_nazwisko)), sizeof(new_client.nazwisko) - 1);
        strncpy(new_client.numer_karty, gtk_entry_get_text(GTK_ENTRY(entry_numer_karty)), sizeof(new_client.numer_karty) - 1);
        strncpy(new_client.adres, gtk_entry_get_text(GTK_ENTRY(entry_adres)), sizeof(new_client.adres) - 1);
        strncpy(new_client.nr_tel, gtk_entry_get_text(GTK_ENTRY(entry_nr_tel)), sizeof(new_client.nr_tel) - 1);

        FILE *file = fopen("clients.txt", "a");
        if (file != NULL)
        {
            fprintf(file, "Imie: %s\n", new_client.imie);
            fprintf(file, "Nazwisko: %s\n", new_client.nazwisko);
            fprintf(file, "Numer karty platniczej: %s\n", new_client.numer_karty);
            fprintf(file, "Adres: %s\n", new_client.adres);
            fprintf(file, "Numer telefonu: %s\n", new_client.nr_tel);

            fclose(file);

            dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                            GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
                                            "Klient zostal dodany do pliku clients.txt.");
            gtk_dialog_run(GTK_DIALOG(dialog));
            gtk_widget_destroy(dialog);
        }
        else
        {
            dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                            GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
                                            "Wystapil blad podczas otwierania pliku clients.txt.");
            gtk_dialog_run(GTK_DIALOG(dialog));
            gtk_widget_destroy(dialog);
        }
    }

    gtk_widget_destroy(dialog);
}

void delete_car(GtkWidget *widget, gpointer data)
{
    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label;
    GtkWidget *entry;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Usun samochod", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label = gtk_label_new("Podaj numer rejestracyjny samochodu:");
    entry = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(content_area), label);
    gtk_container_add(GTK_CONTAINER(content_area), entry);

    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        const gchar *nr_rej = gtk_entry_get_text(GTK_ENTRY(entry));
        gchar *temp_file = "temp_cars.txt";

        FILE *file = fopen("cars.txt", "r");
        FILE *temp = fopen(temp_file, "w");

        if (file != NULL && temp != NULL)
        {
            struct car current_car;
            int found = 0;

            while (fscanf(file, "Marka: %s\n", current_car.marka) != EOF)
            {
                fscanf(file, "Model: %s\n", current_car.model);
                fscanf(file, "Numer rejestracyjny: %s\n", current_car.nr_rej);
                fscanf(file, "Rok produkcji: %d\n", &current_car.rok_prod);
                fscanf(file, "Kolor: %s\n", current_car.kolor);
                fscanf(file, "Przebieg: %d\n", &current_car.przebieg);
                fscanf(file, "Liczba egzemplarzy: %d\n", &current_car.liczba_egzemplarzy);
                fscanf(file, "Liczba wypozyczonych: %d\n\n", &current_car.liczba_wypozyczonych);

                if (strcmp(current_car.nr_rej, nr_rej) == 0)
                {
                    found = 1;
                    continue;
                }

                fprintf(temp, "Marka: %s\n", current_car.marka);
                fprintf(temp, "Model: %s\n", current_car.model);
                fprintf(temp, "Numer rejestracyjny: %s\n", current_car.nr_rej);
                fprintf(temp, "Rok produkcji: %d\n", current_car.rok_prod);
                fprintf(temp, "Kolor: %s\n", current_car.kolor);
                fprintf(temp, "Przebieg: %d\n", current_car.przebieg);
                fprintf(temp, "Liczba egzemplarzy: %d\n", current_car.liczba_egzemplarzy);
                fprintf(temp, "Liczba wypozyczonych: %d\n\n", current_car.liczba_wypozyczonych);
            }

            fclose(file);
            fclose(temp);

            remove("cars.txt");
            rename(temp_file, "cars.txt");

            if (found)
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                                GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
                                                "Samochod zostal usuniety z pliku cars.txt.");
            }
            else
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
                                "Samochód o podanym numerze rejestracyjnym nie zosta³ znaleziony.");
        }

        gtk_dialog_run(GTK_DIALOG(dialog));
        gtk_widget_destroy(dialog);
    }

    gtk_widget_destroy(dialog);
}
}


void delete_person(GtkWidget *widget, gpointer data)
{
    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label_nr_karty;
    GtkWidget *entry_nr_karty;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Usun dane klienta", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label_nr_karty = gtk_label_new("Podaj numer karty klienta:");
    entry_nr_karty = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(content_area), label_nr_karty);
    gtk_container_add(GTK_CONTAINER(content_area), entry_nr_karty);

    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        const gchar *numer_karty = gtk_entry_get_text(GTK_ENTRY(entry_nr_karty));
        gchar *temp_file = "temp_clients.txt";

        FILE *file = fopen("clients.txt", "r");
        FILE *temp = fopen(temp_file, "w");

        if (file != NULL && temp != NULL)
        {
            struct person current_person;
            int found = 0;

            while (fscanf(file, "Imie: %s\n", current_person.imie) != EOF)
            {
                fscanf(file, "Imie: %s\n", current_person.imie);
                fscanf(file, "Nazwisko: %s\n", current_person.nazwisko);
                fscanf(file, "Numer karty platniczej: %s\n", current_person.numer_karty);
                fscanf(file, "Adres: %s\n", current_person.adres);
                fscanf(file, "Numer telefonu: %s\n", current_person.nr_tel);

                if (strcmp(current_person.numer_karty, numer_karty) == 0)
                {
                    found = 1;
                    continue;
                }

                fprintf(temp, "Imie: %s\n", current_person.imie);
                fprintf(temp, "Nazwisko: %s\n", current_person.nazwisko);
                fprintf(temp, "Numer karty platniczej: %s\n", current_person.numer_karty);
                fprintf(temp, "Adres: %s\n", current_person.adres);
                fprintf(temp, "Numer telefonu: %s\n", current_person.nr_tel);
            }

            fclose(file);
            fclose(temp);

            remove("clients.txt");
            rename(temp_file, "clients.txt");

            if (found)
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                                GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
                                                "Klient zostal usuniety z pliku clients.txt.");
            }
            else
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
                                "Klient o podanym numerze karty platniczej nie zostal znaleziony.");
        }

        gtk_dialog_run(GTK_DIALOG(dialog));
        gtk_widget_destroy(dialog);
    }

    gtk_widget_destroy(dialog);
}
}

void show_message_dialog(const char *message)
{
    GtkWidget *dialog;
    GtkWidget *label;
    GtkWidget *content_area;
    GtkWidget *button;

    dialog = gtk_dialog_new_with_buttons("Message", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label = gtk_label_new(message);
    gtk_container_add(GTK_CONTAINER(content_area), label);

    gtk_widget_show_all(dialog);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        gtk_widget_destroy(dialog);
    }
}


void editMarka(GtkWidget *widget, gpointer data)
{
    struct car *current_car = (struct car *)data;

    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label;
    GtkWidget *entry;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Edytuj marke", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label = gtk_label_new("Nowa marka:");
    entry = gtk_entry_new();
    gtk_entry_set_text(GTK_ENTRY(entry), current_car->marka);

    gtk_container_add(GTK_CONTAINER(content_area), label);
    gtk_container_add(GTK_CONTAINER(content_area), entry);

    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        const gchar *new_marka = gtk_entry_get_text(GTK_ENTRY(entry));
        strcpy(current_car->marka, new_marka);
        show_message_dialog("Marka samochodu zostala zaktualizowana.");
    }

    gtk_widget_destroy(dialog);
}

void edit_car(GtkWidget *widget, gpointer data)
{
    GtkWidget *dialog;
    GtkWidget *content_area;
    GtkWidget *label;
    GtkWidget *entry;
    GtkWidget *button_ok;
    GtkWidget *button_cancel;

    dialog = gtk_dialog_new_with_buttons("Edytuj samochód", GTK_WINDOW(window), GTK_DIALOG_MODAL,
                                         "OK", GTK_RESPONSE_OK,
                                         "Anuluj", GTK_RESPONSE_CANCEL,
                                         NULL);
    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));

    label = gtk_label_new("Podaj numer rejestracyjny samochodu:");
    entry = gtk_entry_new();

    gtk_container_add(GTK_CONTAINER(content_area), label);
    gtk_container_add(GTK_CONTAINER(content_area), entry);

    gtk_widget_show_all(content_area);

    gint result = gtk_dialog_run(GTK_DIALOG(dialog));

    if (result == GTK_RESPONSE_OK)
    {
        const gchar *nr_rej = gtk_entry_get_text(GTK_ENTRY(entry));
        gchar *temp_file = "temp_cars.txt";

        FILE *file = fopen("cars.txt", "r");
        FILE *temp = fopen(temp_file, "w");

        if (file != NULL && temp != NULL)
        {
            struct car current_car;
            int found = 0;

            while (fscanf(file, "Marka: %s\n", current_car.marka) != EOF)
            {
                fscanf(file, "Model: %s\n", current_car.model);
                fscanf(file, "Numer rejestracyjny: %s\n", current_car.nr_rej);
                fscanf(file, "Rok produkcji: %d\n", &current_car.rok_prod);
                fscanf(file, "Kolor: %s\n", current_car.kolor);
                fscanf(file, "Przebieg: %d\n", &current_car.przebieg);
                fscanf(file, "Liczba egzemplarzy: %d\n", &current_car.liczba_egzemplarzy);
                fscanf(file, "Liczba wypozyczonych: %d\n\n", &current_car.liczba_wypozyczonych);

                if (strcmp(current_car.nr_rej, nr_rej) == 0)
                {
                    found = 1;

                    // Wyświetlenie przycisków edycji parametrów samochodu
                    GtkWidget *editMarkaButton;
                    GtkWidget *editModelButton;
                    GtkWidget *editRokProdButton;
                    GtkWidget *editKolorButton;
                    GtkWidget *editPrzebiegButton;
                    GtkWidget *editEgzemplarzeButton;
                    GtkWidget *editWypozyczoneButton;

                    editMarkaButton = gtk_button_new_with_label("Edytuj markę");
                    editModelButton = gtk_button_new_with_label("Edytuj model");
                    editRokProdButton = gtk_button_new_with_label("Edytuj rok produkcji");
                    editKolorButton = gtk_button_new_with_label("Edytuj kolor");
                    editPrzebiegButton = gtk_button_new_with_label("Edytuj przebieg");
                    editEgzemplarzeButton = gtk_button_new_with_label("Edytuj liczbę egzemplarzy");
                    editWypozyczoneButton = gtk_button_new_with_label("Edytuj liczbę wypożyczonych");

                    GtkWidget *editButtonsBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
                    gtk_container_add(GTK_CONTAINER(content_area), editButtonsBox);

                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editMarkaButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editModelButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editRokProdButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editKolorButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editPrzebiegButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editEgzemplarzeButton, TRUE, TRUE, 0);
                    gtk_box_pack_start(GTK_BOX(editButtonsBox), editWypozyczoneButton, TRUE, TRUE, 0);

                    gtk_widget_show_all(editButtonsBox);

                    g_signal_connect(editMarkaButton, "clicked", G_CALLBACK(editMarka), &current_car);
                    //g_signal_connect(editModelButton, "clicked", G_CALLBACK(editModel), &current_car);
                    //g_signal_connect(editRokProdButton, "clicked", G_CALLBACK(editRokProd), &current_car);
                    //g_signal_connect(editKolorButton, "clicked", G_CALLBACK(editKolor), &current_car);
                    //g_signal_connect(editPrzebiegButton, "clicked", G_CALLBACK(editPrzebieg), &current_car);
                    //g_signal_connect(editEgzemplarzeButton, "clicked", G_CALLBACK(editEgzemplarze), &current_car);
                    //g_signal_connect(editWypozyczoneButton, "clicked", G_CALLBACK(editWypozyczone), &current_car);
                }

                fprintf(temp, "Marka: %s\n", current_car.marka);
                fprintf(temp, "Model: %s\n", current_car.model);
                fprintf(temp, "Numer rejestracyjny: %s\n", current_car.nr_rej);
                fprintf(temp, "Rok produkcji: %d\n", current_car.rok_prod);
                fprintf(temp, "Kolor: %s\n", current_car.kolor);
                fprintf(temp, "Przebieg: %d\n", current_car.przebieg);
                fprintf(temp, "Liczba egzemplarzy: %d\n", current_car.liczba_egzemplarzy);
                fprintf(temp, "Liczba wypozyczonych: %d\n\n", current_car.liczba_wypozyczonych);
            }

            fclose(file);
            fclose(temp);

            remove("cars.txt");
            rename(temp_file, "cars.txt");

            if (found)
                show_message_dialog("Samochód został pomyślnie zaktualizowany.");
            else
                show_message_dialog("Nie znaleziono samochodu o podanym numerze rejestracyjnym.");

            gtk_widget_destroy(window);
        }
    }
}


void edit_person(GtkWidget *widget, gpointer data)
{
    // Implementacja funkcji edit_person()
    // ...
}

void rent_car(GtkWidget *widget, gpointer data)
{
    // Implementacja funkcji rent_car()
    // ...
}

void return_car(GtkWidget *widget, gpointer data)
{
    // Implementacja funkcji return_car()
    // ...
}

void activate(GtkApplication *app, gpointer user_data)
{
    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "Wypozyczalnia Samochodow");
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 800);

    addCarButton = gtk_button_new_with_label("Dodaj samochod do bazy");
    addPersonButton = gtk_button_new_with_label("Dodaj klienta do bazy");
    deleteCarButton = gtk_button_new_with_label("Usun samochod z bazy");
    deletePersonButton = gtk_button_new_with_label("Usun klienta z bazy");
    editCarButton = gtk_button_new_with_label("Edytuj dane samochodu");
    editPersonButton = gtk_button_new_with_label("Edytuj dane klienta");
    rentCarButton = gtk_button_new_with_label("Wypozycz samochod");
    returnCarButton = gtk_button_new_with_label("Oddaj samochod");

    g_signal_connect(addCarButton, "clicked", G_CALLBACK(add_car), NULL);
    g_signal_connect(addPersonButton, "clicked", G_CALLBACK(add_person), NULL);
    g_signal_connect(deleteCarButton, "clicked", G_CALLBACK(delete_car), NULL);
    g_signal_connect(deletePersonButton, "clicked", G_CALLBACK(delete_person), NULL);
    g_signal_connect(editCarButton, "clicked", G_CALLBACK(edit_car), NULL);
    g_signal_connect(editPersonButton, "clicked", G_CALLBACK(edit_person), NULL);
    g_signal_connect(rentCarButton, "clicked", G_CALLBACK(rent_car), NULL);
    g_signal_connect(returnCarButton, "clicked", G_CALLBACK(return_car), NULL);

    GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
    gtk_box_pack_start(GTK_BOX(box), addCarButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), addPersonButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), deleteCarButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), deletePersonButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), editCarButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), editPersonButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), rentCarButton, TRUE, TRUE, 0);
    gtk_box_pack_start(GTK_BOX(box), returnCarButton, TRUE, TRUE, 0);

    gtk_container_add(GTK_CONTAINER(window), box);

    gtk_widget_show_all(window);
}
int main(int argc, char **argv)
{
    GtkApplication *app;
    int status;

    app = gtk_application_new("com.example.wypozyczalnia", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return status;
}
1

Pominę logikę tego programu, bo nie jestem w stanie jej zrozumieć. Próbowałeś może wypisać sobie dane i sprawdzić czy kod w ogóle w if wszedł, a jeśli nie to dlaczego? Najlepiej by było użyć debuggera, ale print też powinien dać radę.

0

Właśnie przez to ze to wszystko odbywa się w interfejsie a nie w konsoli to średnio wiem jak to zrobić. W konsoli nie byłoby problemu.

0

Ok, znalazłem inny błąd. Numer rejestracyjny jest szukany, jednak po wpisaniu numeru wyskakują przyciski do edycji danych i od razu pojawia się informacja, że dane zostały zaktualizowane i program się zamyka.
screenshot-20230525195757.png

0

Możesz zrobić printy i odpalić program po kompilacji z wysokości konsoli, wtedy logi pojawią się na konsoli. Idealne by było dodać logi (zapisywane do pliku, albo na STDOUT) do programu. Druga rzecz to to, że może lepiej użyć bazy SQLite, bo pliki tekstowe to raczej słaby pomysł

0

Z bazą męczyłem się kilka tygodni i się poddałem. Nie chciało się coś łączyć, ciągle wyskakiwały błędy. Na razie musi być zapis do plików.

0

Ok, zadałem sobie ten trud i skompilowałem twój kod. Jeśli chodzi o błąd ze screena, pojawia się bo w żaden sposó nie zatrzymujesz flow programu. Tzn.

void edit_car(GtkWidget *widget, gpointer data)
{
  ...
    if (result == GTK_RESPONSE_OK)
    {
        ...
        if (file != NULL && temp != NULL)
        {
            ...
            while (fscanf(file, "Marka: %s\n", current_car.marka) != EOF)
            {
                ...
                if (strcmp(current_car.nr_rej, nr_rej) == 0)
                {
                    ...
                }
                // @Dregorio
                // Kod renderuje widget i wychodzi z pętli. W ogóle jak będziesz miał 1000 samochodów w pliku, to ta pętla obróci się 1000 razy
            }

            ...
            // @Dregorio
            // ustawione na found na true, więc wyświetli od razu Samochód został pomyślnie zaktualizowany.
            if (found)
                show_message_dialog("Samochód został pomyślnie zaktualizowany.");
            else
                show_message_dialog("Nie znaleziono samochodu o podanym numerze rejestracyjnym.");
            // @Dregorio
            // To co tygrysy lubią najbardziej, zmienne globalne i zastanawianie się WTF. `window` to twoje całe okno, więc ubijasz wszystko. Chcesz raczej ubić `dialog`
            gtk_widget_destroy(window);
        }
    }
}

Po co robisz ten projekt? Studia/hobby/sam sie uczysz/praca? Osobiście przemyślałbym jeszcze raz co chciałbym zrobić, przeczytałbym dokumentacje/tutorial i zabrał się od początku. Ale jak dalej chcesz to ciągnąc to pytaj. Postaram się pomóc

1 użytkowników online, w tym zalogowanych: 0, gości: 1