Jestem w trakcie tworzenia prostej bazy danych w języku C, która ma umożliwiać tworzenie i przeglądanie pliku bazy, dopisywanie, usuwanie i modyfikowanie rekordu oraz sortowanie listy rekordów. Gdy większość z tych rzeczy nie sprawia problemów, tak mam problem z aspektem modyfikowania rekordu. Moglibyście rzucić okiem na poniższy kod źródłowy i podpowiedzieć jak stworzyć funkcję modyfikowania rekordu? Z góry wielkie dzięki, bo to dla mnie bardzo ważne a jestem pewien, że dla Was to nie są trudne rzeczy.
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
#define INPUT 10 // Maksymalna dlugosc wprowadzanego indeksu
#define MAX 150 //maksymalna ilosc rekordow
typedef short int BOOL; // Definicja relacji
typedef struct {
char marka[20];
char model[30];
char nadwozie[20];
char typ_silnika[20];
char pojemnosc[10];
char moc[10];
char ilosc_miejsc[10];
} rec; // Definicja struktury rec
void potwierdzenie(void); //Wyswietla komunikat koncowy
int wszystkie_wpisy(void); // Listuje wszystkie wpisy w bazie
int dane_osoby(void); // Prezentuje dany wpis
int szukaj_wpisu(void); // Przeszukuje baze
int dodaj_wpis(void); // Dodaje nowy wpis
int usun_wpis(void); // Usuwa wpis
int zachowaj_baze(void); // Zapisuje baze danych do pliku
int wczytaj_baze(void); // Laduje baze z pliku do pamieci
void sortuj_baze(void); // Sortuje baze wg pola personalia
void edytuj_wpis(void); //edytuje wybrany rekord bazy
void etykieta(void); // Wyswietla informacje o programie
void mini_menu(void);
rec baza[MAX]; // Zmienna strukturalna baza
int numer = 0; // Licznik wszystkich wpisow
//program glowny
int main(int argc, char *argv[])
{
dodaj_wpis();
system("PAUSE");
return 0;
}
//funkcje programu
//--------------------potwierdzenie-----------------
void /*inline*/ potwierdzenie(void)
{
#ifdef DOS
printf("\n ");
system("pause");
#else
printf("\n Nacisnij ENTER, aby kontynuowac...");
while (getchar() != '\n');
#endif
}
int wszystkie_wpisy(void)//---------------------------------------wszystkie wpisy
{
int i; // Zmienna pomocnicza - indeks petli
system("cls");
printf("\n WYKAZ WSZYSTKICH WPISOW \n");
if (numer == 0) // Nie ma zadnego wpisu!
{
printf("\n Baza danych jest pusta"
" lub nie zostala zaladowana z pliku! \n");
potwierdzenie();
return EXIT_FAILURE;
}
// Wyswietl wszystkie rekordy
for (i = 0; i < numer; i++)
{
printf("\n%d. %s", i+1,baza[i].marka);
printf(" %s",baza[i].model);
printf(" %s",baza[i].nadwozie);
printf(" %s",baza[i].typ_silnika);
printf(" %s",baza[i].pojemnosc);
printf(" %s",baza[i].moc);
printf(" %s",baza[i].ilosc_miejsc);//w razie bledow*** printf(" %d %s", i+1, baza[i].ilosc_miejsc);***
}
printf("\n Koniec danych \n");
potwierdzenie();
return EXIT_SUCCESS;
}//---------------------------------------------------------------------------------koniec funkcji wyswietl----------
//------------------dodaj_wpis-----------------------
int dodaj_wpis(void)
{
printf("\n DODAWANIE WPISU DO BAZY DANYCH \n");
if (numer >= MAX) // Baza danych jest pelna!
{
printf("\n Baza danych jest pelna! \n");
potwierdzenie();
return EXIT_FAILURE;
}
// Pobierz od uzytkownika wszystkie informacje o osobie
// Sprawdz czy wpisy nie sa za dlugie
do {//----------------------------------------------------zanjdz latwiejszy sposob na te petle
do {
printf("\n Marka : ");
gets(baza[numer].marka);
if (strlen(baza[numer].marka) <1)
printf("\n nie podano nazwy! \n podaj nazwe jeszcze raz!");
} while (strlen(baza[numer].marka) <1);
if (strlen(baza[numer].marka) > 20)
printf("\n Mozna wpisac maksymalnie 20 znakow! \n");
} while (strlen(baza[numer].marka) > 20);
do
{
printf(" Model : ");
gets(baza[numer].model);
if (strlen(baza[numer].model) > 30)//Funkcja strlen oblicza długość łańcucha str nie wliczając znaku '\0'.
printf("\n Mozna wpisac maksymalnie 30 znakow! \n");
} while (strlen(baza[numer].model) > 30);
do
{
printf(" Typ nadwozia : ");
gets(baza[numer].nadwozie);
if (strlen(baza[numer].nadwozie) > 20)
printf("\n Mozna wpisac maksymalnie 20 znakow! \n");
} while (strlen(baza[numer].nadwozie) > 20);
do
{
printf(" Typ_silnika : ");
gets(baza[numer].typ_silnika);
if (strlen(baza[numer].typ_silnika) > 20)
printf("\n Mozna wpisac maksymalnie 20 znakow! \n");
} while (strlen(baza[numer].typ_silnika) > 20);
do
{
printf(" pojemnosc : ");
gets(baza[numer].pojemnosc);
if (strlen(baza[numer].pojemnosc) > 10)
printf("\n Mozna wpisac maksymalnie 10 znakow! \n");
} while (strlen(baza[numer].pojemnosc) > 10);
do
{
printf(" moc : ");
gets(baza[numer].moc);
if (strlen(baza[numer].moc) > 10)
printf("\n Mozna wpisac maksymalnie 10 znakow! \n");
} while (strlen(baza[numer].moc) > 10);
do
{
printf(" ilosc miejsc : ");
gets(baza[numer].ilosc_miejsc);
if (strlen(baza[numer].ilosc_miejsc) > 10)
printf("\n Mozna wpisac maksymalnie 10 znakow! \n");
} while (strlen(baza[numer].ilosc_miejsc) > 10);
//Nic nie wpisano w polu marka i model
if ((strlen(baza[numer].marka) == 0)
|| (strlen(baza[numer].model) == 0))
{
printf("\n Wpis nie zostal dodany do bazy danych!"
"\n Musi zostac podane marka i model samochodu! \n");
potwierdzenie();
return EXIT_FAILURE;
}
// Do kazdego pola dodaj znacznik konca lini
strcat(baza[numer].marka, "\n");//-------------------------------*strcat**odpowiada za sklejanie lancucha do nazwy marki doda /0 i przejdzie do nastepnej lini??? **------
strcat(baza[numer].model, "\n");
strcat(baza[numer].nadwozie, "\n");
strcat(baza[numer].typ_silnika, "\n");
strcat(baza[numer].pojemnosc, "\n");
strcat(baza[numer].moc, "\n");
strcat(baza[numer].ilosc_miejsc, "\n");
numer++; // Zwieksz liczbe wpisow o jeden
printf("\n Wpis zostal dodany do bazy danych! \n");
potwierdzenie();
return EXIT_SUCCESS;
}//-----------------------------------------------------------------------------koniec funkcji dodaj---------------------------
//---------------------------------------------------------------------------------------usun wpis----------------------------------------------
int usun_wpis(void)
{
char wpis[INPUT]; // Tekst wpisany przez uzytkownika //
int kasuj_nr; //Wpis do usuniecia
//
printf("\n USUWANIE WPISU Z BAZY \n");
printf("\n Podaj indeks wpisu do usuniecia: ");
kasuj_nr = atoi(gets(wpis)); //Konwersja typu danych -------------------------------------------------co to jest atoi
// Nie ma takiego wpisu!
if ((kasuj_nr < 1) || (kasuj_nr > numer))
{
printf("\n Nie ma w bazie wpisu o takim indeksie! \n");
potwierdzenie();
return EXIT_FAILURE;
}
// Usuwanie - przeindeksowanie bazy
while ((kasuj_nr - 1) < numer)
{
baza[kasuj_nr - 1] = baza[kasuj_nr];
kasuj_nr++;
}
numer--;
printf("\n Wpis zostal usuniety \n");
potwierdzenie();
return EXIT_SUCCESS;
}//-------------------------------------------koniec funkcji usun wpis-----------------------------