Witam ponownie.
Mam nadzieję, że nikogo nie zanudzę na śmierć.

Otóż mam napisać program, który zajmuje się plikami. Przechowuje w pliku binarnym nazwisko, wiek oraz wzrost.
Posiada 7 funkcji:

  1. Tworzy plik o n elemetach. (Napisałem)
  2. Wypisuje dane w pięknej tabeli. (Napisałem)
  3. Szuka i wypisuje rekordy o podanych danych. (Napisałem)
  4. Wstawia element x na pozycję p (używając plik pomocniczy).
  5. Usuwa podany element (używając plik pomocniczy).
  6. Przepisuje elementy z pliku f do pliku g sortując je wg. danego 'klucza'. (Napisałem)
  7. Konczy program. (Napisałem)

Problem pozostał z funkcjami 4 i 5. Mam wykorzystać do obydwu plik pomocniczy - i teraz co mam w tym pliku pomocniczym zawrzeć? Przekopiować późniejsze elementy od tego, który chcę usunąć/przesunąć? Ogólna koncepcja jak to zrobić pomogłaby mi.

Oto kod (jeśli ktoś by sprawdził, to bym podziękował):

#include <stdio.h>
#include <iostream>

struct Osoba
{
	char nazwisko[20];
	float wzrost;
	int wiek;
};

void Create(f, int i);
void Print(f);
void Search(f, char nazwisko[20], int wiek, float wzrost1, float wzrost2);
void Insert(f, int x, int p);
void Delete(f, int p);
void Sort(f, g, string klucz);

int ile=0;

int main()
{
	printf("1. Stworz plik o podanej liczbie rekordow.\n");
	printf("2. Wypisz wszystkie rekordy w pliku w tabeli.\n");
	printf("3. Znajdz i wypisz rekordy, które maja podane nazwisko, wiek i wzrost.\n");
	printf("4. Wstaw rekord x na pozycje p.\n");
	printf("5. Usun rekord z danej pozycji p.\n");
	printf("6. Przepisz rekordy z pliku f do pliku g sortujac je wg. klucza.\n");
	printf("7. Zakoncz program.\n");
	
	int w, i, wiek, x, p;
	float wzrost, wzrost1, wzrost2;
	char nazwisko[20];
	string f, g, klucz;
	
	
	while (1)
	{
		switch (w):
		case 1: printf("Podaj nazwe nowego pliku\n"); scanf("%s", f); printf("Podaj ilosc rekordow:\n"); scanf("%d", &i); Create(f, i);
		case 2: printf("Podaj nazwe pliku, ktory chcesz wyswietlic:\n"); scanf("%s", f); Print(f);
		case 3: printf("Podaj nazwe pliku, z ktorego chcesz wypisac rekordy:\n"); scanf("%s", f);  printf("Podaj nazwisko:\n"); scanf("%s", nazwisko); printf("Podaj wiek:\n");
		scanf("%d", wiek); printf("Podaj przedzial wzrost1, wzrost2:\n"); scanf("%f %f", wzrost1, wzrost2); Search(f, nazwisko, wiek, wzrost1, wzrost2);
		case 4: printf("Podaj nazwe pliku, w ktorym chcesz przestawic rekord:\n"); scanf("%s", f); printf("Podaj numer rekordu, który chcesz przenieść:\n");
		scanf("%d", &x); printf("Podaj numer, na ktory chcesz przeniesc rekord:\n"); scanf("%d", p); Insert(f, x, p);
		case 5: printf("Podaj nazwe pliku, z ktorego chcesz usunac:\n"); scanf("%s", f); printf("Ktory rekord chcesz usunac:\n"); scanf("%d", p); Delete(f, p);
		case 6: printf("Podaj nazwe pliku, z ktorego chcesz przepisac:\n"); scanf("%s", f); printf("Podaj nazwe pliku, do ktorego chcesz przepisac:\n");
		scanf("%s", g); printf("Podaj klucza sortowania:\n"); scanf("%s", klucz); Sort(f, g, klucz);
		case 7: return 0;
	}
	
	return 0;
}

void Create(string f, int i)
{
	Osoba tab[i];
	ile = i;
	for(int j=0, j<i, j++)
	{
		printf("Podaj nazwisko, wiek i wzrost:\n");
		scanf("%s %d %f", &tab[j].nazwisko, &tab[j].wiek, &tab[j].wzrost);
	}
	
	FILE* file=fopen(f,"wb");
	fwrite(&tab, sizeof(Osoba), i, f);
	
	fclose(f);
}

void Print(string f)
{
	Osoba tab[ile];
	FILE* file=fopen(f, "ab");
	fread(&tab, sizeof(Osoba), ile, f);
	
	
	for(int j=0;j<ile;j++)
	{
		cout.width(5);
		cout << left << "|" << internal << j+1 << "." << right << "|";
		cout.width(22);
		cout << internal << nazwisko << right << "|";
		cout.width(5);
		cout << internal << wiek << right << "|";
		cout.width(8);
		cout << internal << wzrost << right << "|" << endl;
	}
	
	fclose(f);
}
		
void Search(string f, char nazwisko[20], int wiek, float wzrost1, float wzrost2)
{
	Osoba tab[ile];
	FILE* file=fopen(f, "ab");
	
	fread(&tab, sizeof(Osoba), ile, f);
	fclose(f);
	for(int j=0;j<ile;j++)
	{
		if(nazwisko != 0 && wiek != 0)
		{
			if(tab.nazwisko == nazwisko && tab.wiek == wiek && tab.wzrost >= wzrost1 && tab.wzrost <= wzrost2)
			{
				printf("%s %f %i", &tab[j].nazwisko, &tab[j].wzrost, &tab[j].wiek);
			}
		} else if(nazwisko == 0 && wiek != 0) {
			if(tab.wiek == wiek && tab.wzrost >= wzrost1 && tab.wzrost <= wzrost2)
			{
				printf("%s %f %i", &tab[j].nazwisko, &tab[j].wzrost, &tab[j].wiek);
			}
		}else if(nazwisko != 0 && wiek == 0) {
			if(tab.nazwisko == nazwisko && tab.wzrost >= wzrost1 && tab.wzrost <= wzrost2)
			{
				printf("%s %f %i", &tab[j].nazwisko, &tab[j].wzrost, &tab[j].wiek);
			}
		} else if(nazwisko == 0 && wiek == 0) {
			if(tab.wzrost >= wzrost1 && tab.wzrost <= wzrost2)
			{
				printf("%s %f %i", &tab[j].nazwisko, &tab[j].wzrost, &tab[j].wiek);
			}
		}
	}
}
			
	
void Insert(string f, int x, int p)
{
	
void Delete(string f, int p)
void Sort(string f, string g, string klucz)
{
	Osoba tab[ile];
	FILE* file=fopen(f, "ab");
	
	fread(&tab, sizeof(Osoba), ile, f);
	fclose(f);
	
	int zamiana;
	Osoba tmp;
	
	if(klucz == 'nazwisko')
	{
		for(int j=0;j<ile;j++)
		{
			zamiana = 0;
			for(int i=0;i<ile-j;i++)
			{
				if(tab[j+1].nazwisko < tab[j].nazwisko)
				{
					tmp = tab[j];
					tab[j] = tab[j+1];
					tab[j+1] = tmp;
					zamiana = 1;
				}
			} if(!change) break;
		}
	} else if(klucz == 'wzrost') {
		for(int j=0;j<ile;j++)
		{
			zamiana = 0;
			for(int i=0;i<ile-j;i++)
			{
				if(tab[j+1].wzrost < tab[j].wzrost)
				{
					tmp = tab[j];
					tab[j] = tab[j+1];
					tab[j+1] = tmp;
					zamiana = 1;
				}
			} if(!change) break;
		}
	} else if(klucz == 'wiek') {
		for(int j=0;j<ile;j++)
		{
			zamiana = 0;
			for(int i=0;i<ile-j;i++)
			{
				if(tab[j+1].wiek < tab[j].wiek)
				{
					tmp = tab[j];
					tab[j] = tab[j+1];
					tab[j+1] = tmp;
					zamiana = 1;
				}
			} if(!change) break;
		}
	}
	
	FILE* file=fopen(g, "wb");
	fwrite(&tab, sizeof(Osoba), ile, g);
	fclose(g);
}

Dzięki za sugestie i sprawdzenie.