[C] Problem z prostą bazą danych

0

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-----------------------------
0

Pytasz o takie dziwne rzeczy jak byś to nie ty pisał ten kod - tyle już zrobiłeś a zatrzymałeś się na modyfikacji rekordu ? (ale ja tego nie powiedziałem :))

Dobra, a po co ci #include <dos.h>
oraz #ifdef DOS itd ...
chciało ci się bawić coś takiego żeby obsługiwać system którego się już nie używa ? Używasz tego w kilku miejscach a ograniczasz się w ten sposób do tak starego systemu operacyjnego, jak dla mnie dziwne

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