Cześć. Tworzę amatorski program dla wypożyczalni samochodów jako projekt na studia. Mam problem z funkcją wypożyczającą samochód. Mam trzy pliki tekstowe "cars.txt" z bazą samochodów, "clients.txt" z bazą klientów oraz "rents.txt" w której mają się znajdować dane samochodu wypożyczonego oraz dane klienta. W pliku "cars.txt" liczba samochodów dostępnych powinna się zmienić, natomiast nie zmienia się a jest dopisywana nowa linijka z danymi samochodu ze zmienioną liczbą dostępnych egzemplarzy. Do pliku rents.txt nic nie jest zapisywane. Proszę o pomoc, ponieważ nie mogę sobie z tym poradzić. Dziękuje. Program operuje na dwóch strukturach.
void rent_car()
{
char nr_rej[100];
printf("Podaj numer rejestracyjny samochodu: ");
scanf("%s", nr_rej);
FILE *a = fopen("cars.txt", "r+");
FILE *k = fopen("rents.txt", "a");
if (a == NULL)
{
printf("Nie udalo sie otworzyc pliku cars.txt\n");
return;
}
struct car samochod;
int znaleziony = 0;
while (fscanf(a, "%s %s %s %d %s %d %d %d", samochod.marka, samochod.model, samochod.nr_rej, samochod.rok_prod, samochod.kolor, samochod.przebieg, samochod.liczba_egzemplarzy, samochod.liczba_wypozyczonych) != EOF)
{
if (strcmp(nr_rej, samochod.nr_rej) == 0)
{
znaleziony = 1;
if (samochod.liczba_wypozyczonych >= samochod.liczba_egzemplarzy)
{
printf("Brak dostepnych egzemplarzy samochodu o podanym numerze rejestracyjnym\n");
break;
}
else
{
samochod.liczba_wypozyczonych += 1;
samochod.liczba_egzemplarzy -= 1;
fseek(a, -(long)sizeof(struct car), SEEK_CUR);
fprintf(a, "%s %s %s %d %s %d %d %d\n", samochod.marka, samochod.model, samochod.nr_rej, samochod.rok_prod, samochod.kolor, samochod.przebieg, samochod.liczba_egzemplarzy, samochod.liczba_wypozyczonych);
break;
}
}
}
if(!znaleziony)
{
printf("Nie znaleziono samochodu o podanym numerze rejestracyjnym.\n");
}
FILE *b = fopen("clients.txt", "r");
if (b == NULL)
{
printf("Nie udalo sie otworzyc pliku clients.txt\n");
return;
}
char numer_karty[20];
struct person klient;
int znaleziona_osoba = 0;
printf("Podaj numer karty osoby wypozyczajacej samochod: ");
scanf("%s", numer_karty);
while (fscanf(b, "%s %s %s %s %s", klient.imie, klient.nazwisko, klient.numer_karty, klient.adres, klient.nr_tel) != EOF)
{
if (strcmp(numer_karty, klient.numer_karty) == 0)
{
znaleziona_osoba = 1;
fprintf(k, "%s %s %s %d %s %d %d %d ", samochod.marka, samochod.model, samochod.nr_rej, samochod.rok_prod, samochod.kolor, samochod.przebieg, samochod.liczba_egzemplarzy, samochod.liczba_wypozyczonych);
fprintf(k, "%s %s %s %s %s\n", klient.imie, klient.nazwisko, klient.numer_karty, klient.adres, klient.nr_tel);
break;
}
}
if (!znaleziona_osoba)
{
printf("Nie znaleziono osoby o podanym numerze karty\n");
return;
}
fclose(a);
fclose(b);
fclose(k);
}