Чернов 1967 1345600

Требуется на экран, на принтер или в текстовый файл вывести список в форме таблицы. Например:

СПИСОК СОТРУДНИКОВ ФИРМЫ

Фамилия Год рожд. Оклад
Иванов И.П.    
Авчинникова    
Васильков    
Чернов    

/* Поиск в массиве структур, читаемых из текстового файла */

#include <stdio.h> // с записью рез-тов в новый текстовый файл

#include <string.h>

#include <stdlib.h>

// #include <windows.h>

main()

{

const int lfio=15, //длина поля фио,

lpay=5, // длина поля г.рожд

lo=10, //длина поля оклада

l=lfio+lpay+lo; //длина записи в файле

struct Man

{ char fio[lfio]; // фио

int year; // год рожд.

float pay; // оклад

};

Man db;

char s[l]; //строка для записи файла

FILE *fin, // Исх. файл

*fo,*f1; // Вых. файлы

if ((fin=fopen("dbase.txt", "r"))==NULL)

{puts("Ошибка открытия файла\n");

fflush(stdin); getchar(); return 1;}

puts("Файл открыт");

fo=fopen("dbout.txt","w");

f1=fopen("dbout1.txt","w");

while (!feof(fin))

{ fgets(s,l,fin); puts(s);

strncpy(db.fio,s,lfio-1);

db.fio[lfio-1]='\0';

db.year=atoi(&s[15]);

db.pay=atof(&s[20]);

/*if(db.year>2000)*/

fprintf(fo,"%-15s% %10.1f\n", db.fio, db.pay);

fputs(s,f1);

}

fclose(fin); fclose(fo); fclose(f1);

fflush(stdin); getchar();

return 0;

}


1.6. Пример обработки текстового и бинарного файла

/* Построчное считывание данных из текстового файла " dbase.txt " в буферную переменную s, формирование из них структуры db и запись ее в двоичном режиме в выходной файл " dbout.dat ".

Считывание из двоичного файла записи с номером i и вывод ее на экран.

Считывание из двоичного файла записей и вывод на экран только тех записей, для которых фамилия есть " ivanoff ". */

Таблица соответствия

Идентификатор Тип Комментарий
  lfio const int Длина поля фио
  lpay const int Длина поля г. рожд.
  lo const int Длина поля оклада
  l const int Длина записи
  db Запись Запись
  s строка Строка с содерж. записи
  fin Текстовый файл Исходный текстовый файл
  fo Двоичный файл Двоичный файл, получ. из fin
  kol int Кол-во записей файла fin
  i int Номер записи файла fin


#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <iostream.h>

main()

{

const int lfio=15,lpay=5,lo=10,//длины полей: фио, г.рожд., оклада в т. файле

l=lfio+lpay+lo; //длина записи в т. файле

struct Man

{ char fio[lfio]; // фио

int year; // год рожд.

float pay; // оклад

};

Man db;

char s[l]; //строка для записм файла

FILE *fin, // Исх. файл

*fo; // Вых. файлы

if ((fin=fopen("dbase.txt", "r"))==NULL)

{puts("Ошибка открытия файла\n");

fflush(stdin); getchar(); return 1;}

puts("Файл открыт");

fo=fopen("dbout.dat","w+b");

int kol=0;

while (!feof(fin))

{ fgets(s,l,fin); puts(s);

strncpy(db.fio,s,lfio-1);

db.fio[lfio-1]='\0';

db.year=atoi(&s[15]);

db.pay=atof(&s[20]);

fwrite(&db,sizeof db,1,fo);

kol++;

}

fclose(fin);

int i; printf("Введите номер записи (0-%d)",kol-1);

cin>>i;

if(i>=kol) { cout<<"Запись не существует"; return 1;}

fseek(fo,(sizeof db)*i,SEEK_SET);

fread(&db,sizeof db,1,fo);

cout << db.fio << " "<< db.year<<" " << db.pay;

fseek(fo,0,SEEK_SET);

i=0;

while (i<kol)

{ printf("\n");

fread(&db,sizeof db,1,fo);

if(!strcmp(db.fio," ivanoff ")) cout<<"Есть "<<db.fio;

i++;

}

fclose(fo);

fflush(stdin); getchar();

return 0;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: