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.