Язык программирования си! проверить можно на онлайн компиляторах типа "репл ит" нужна только вторая лаборатория 5 состоит из двух частей: • программирование текстового доступа к файлу; • программирование работы с бинарным доступом к файлу. для обеих программ необходимо подготовить исходные файлы: • для текстового файла — не менее 10 строк; • для двоичного файла — не менее 10 структур, которые соответствуют определенной опции. для работы с файлами должно быть разработано меню, элементы, которые реализуются только с функций. пункты меню должны быть следующими: создать новый файл; • открыть файл; • просмотр файла (листать вперед, назад, в конце файла, в начале файла); • коррекция файлов — долог, исправление, удаление данных; • сохранение файла; • сохранить файл • закройте файл. меню может быть дополнено дополнительными предметами, в зависимости от варианта. имена файлов должны водиться по запросу с клавиатуры. установка второй в дополнение к вышеперечисленным требованиям программа должна удовлетворять следующим условиям: 1. для записи структуры в файл и считывания структуры файла необходимо использовать функции fread () и fwrite 2. чтобы удалить и добавить элементы в файл, необходимо использовать arro вторичный файл. 3. запись не должны быть удалены из файла немедленно, но только помечены как удаленные. в окне просмотра необходимо отображать или активно записи или помечены как удаленные, но не оба типа записей в то же время. поле структуры — это статус записи — он может содержать 0 (активный знак записи) или 1 (удаленный знак записи). при создании файла в этом поле необходимо записать 0, а при удалении записи из файла 1. 4. там должна быть возможность восстановить удаленные записи из списка удаленных, но только до сжатого файла (см. ниже). 5. вы должны выполнить хранение файла данных в двух режимах —со сжатием и без сжатия. в первом случае, записи, помеченные как удаленные, выбрасываются, во втором случае файл записывает все записи, сохраняя их состояние. 6. файл данных должен быть реализован в двоичном режиме, т.е. записи должны храниться как образы в базовой памяти компьютера. 1 работа с текстовыми файлами (строка ввода-вывода) 1. скопируйте файл f2 строки из f1, которые не имеют те же слова. 2. определите количество гласных в первой строке файла f2. 2 работа с бинарными файлами (блочный ввод-вывод) 1. "владелец автомобиля": • фамилия, имя, отчество; • номер автомобиля; * телефон • номер телефона; • статус записи. 2. удалите предмет с заданным техническим номером паспорта. 3. добавьте два элемента после пункта с заданной фамилией.
#include
#include
#include
#include
#include
#include
typedef struct
{
char imya[40];
char familiya[40];
char otchestvo[40];
int telefon;
int texpasport;
float pages ;
}gor;
void form(char mass[10], char *imya, char *familiya, char *otchestvo, int telefon, int texpasport)
{
file *f;
gor y;
int i;
if ((f=fopen(mass,"w"))==null) exit(1);
for (i=1; i< =3; i++)
{
cout< < "vvedite imya: ";
cin> > imya;
cout< < "vvedite familiya: ";
cin> > familiya;
cout< < "vvedite otchestvo: ";
cin> > otchestvo;
cout< < "vvedite telefon: ";
cin> > telefon;
cout< < "vvedite texpasport: ";
cin> > texpasport;
fwrite(& y,sizeof(gor),1,f);
if(ferror(f)! =null)
exit(2);
}
fclose(f);
}
void vivod(char mass[50])
{
file *f;
gor z;
if ((f=fopen(mass, "r"))==null) exit(3);
cout< < "fail: "<
while (! feof(f)) {
fread (& z,sizeof(gor),1,f);
if (! feof(f))
{
cout< < "imya: "<
cout< < "familiya: "<
cout< < "otchestvo: "<
cout< < "telefon: "<
cout< < "texpasport: "<
}
fclose(f);
}
}
void del(char fo[10], char fi[10])
{
file *f1,*f2;
gor d;
//char temp[40];
if ((f1=fopen(fi,"r"))==null) exit(4);
if ((f2=fopen(fo,"w"))==null) exit(5);
//cout < < "vvedite nazvanie na ydalenie - ";
//cin > > temp;
for (int i=0; i< 3; i++)
{
fread(& d,sizeof(gor),1,f1);
if (feof(f1)) break;
if (i> 2)
fwrite (& d,sizeof(gor),1,f2);
}
fclose(f2);
fclose(f1);
}
void dobav(char fi[10], char fo[10],char *imya, char *familiya, char *otchestvo, int telefon, int texpasport)
{
int q;
int i;
gor d;
file *f1,*f2;
char temp[40];
if ((f1=fopen(fi, "r"))==null) exit(4);
if ((f2=fopen(fo,"r+"))==null) exit(5);
cout < < "vvedite familiu, pered kotorym nuzno dobavit element: ";
cin > > temp;
for (i=0; i< 10; i++)
{
fread(& d,sizeof(gor),1,f2);
if (feof(f2)) break;
if (strcmp(d.familiya, temp)) break;
q=i;
}
for (i=0; i< 10; i++)
{
if (feof(f2)) break;
fwrite (& d,sizeof(gor),1,f2);
if (i==q-1)
{
cout< < "vvedite imya: ";
cin> > imya;
cout< < "vvedite familiya: ";
cin> > familiya;
cout< < "vvedite otchestvo: ";
cin> > otchestvo;
cout< < "vvedite telefon: ";
cin> > telefon;
cout< < "vvedite texpasport: ";
cin> > texpasport;
cout <
}
}
fclose(f2);
fclose(f1);
}
void main()
{
int n=10;
//cout < < "vvedite kol-vo zapisey: - ";
//cin> > n;
//cout <
form("f1.txt",n);
vivod("f1.txt");
del("f1.txt","f2.txt");
cout < < "posle udalenia: \n";
vivod("f2.txt");
getch();
n=1;
system("cls");
dobav ("f2.txt","f2.txt");
cout < < "posle dobavlenia: \n";
vivod ("f2.txt");
getch();
}