Пример программы работы с файлом структур

Создать файл, содержащий сведения о студентах: фамилия, три оценки, средний бал. Организовать возможность просмотра содержимого файла и добавления новых данных в конец файла.

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

 

struct Sved {

char Fam[20];

int mark[3];

float S_Bal;

} zap;

char Spis[]="d:\\work\\Sp.dat";

FILE *F_zap;

 

void main ()

{ int i,kodR,size=sizeof(Sved);

float s;

clrscr();

while(1)

{

puts(" Создание - 1");

puts(" Просмотр - 2");

puts(" Добавление - 3");

puts(" Выход - 0");

scanf(“%d”, &kodR);

switch(kodR)

{

case 1:

case 3: if(kodR==1) F_zap=fopen(Spis,"w+b");

else F_zap=fopen(Spis,"a+b");

while(2) {

puts(" Фамилия (Завершение ввода - 0)");

scanf(“%s”, zap.Fam);

if((zap.Fam[0])=='0') break;

puts(" Marks (3) ");

for(s=0,i=0;i<3;i++)

{

scanf(“%d”, &zap.mark[i]);

s+=zap.mark[i];

}

zap.S_Bal=s/3.;

fwrite(&zap,size,1,F_zap);

}

fclose(F_zap);

break;

case 2: F_zap=fopen(Spis,"r+b");

while(2)

{

if(size!=fread(&zap,1,size,F_zap)) break;

/* Функция fread() возвращает количество прочитанных блоков,

поэтому в данном случае 2-ой и 3-ий параметры функции

переставлены местами */

printf(" %20s %2d %2d %2d %5.2f\n",

zap.Fam,zap.mark[0],zap.mark[1],zap.mark[2],zap.S_Bal);

}

fclose(F_zap);

break;

case 0: return;

} // Конец Switch

} // Конец While(1)

} // Конец программы

 

 

Варианты индивидуальных заданий

Написать программу обработки файла типа запись, содержащую следующие пункты меню:

- Создание,

- Просмотр,

- Коррекция – добавление новых данных или исправление старых.

 

1. Список товаров, имеющихся на складе, включает:

- наименование товара;

- количество единиц товара;

- цену единицы товара;

- дату поступления товара на склад.

Вывести в алфавитном порядке список товаров, хранящихся более месяца, стоимость которых превышает 1000 рублей.

2. Для получения места в общежитии формируется список студентов, который включает:

- Ф.И.О. студента;

- номер группы (буква и четыре цифры);

- средний балл;

- доход на одного члена семьи.

Общежитие в первую очередь предоставляется тем студентам, чьи доходы на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла.

Вывести список очередности предоставления места в общежитии.

3. В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны:

- номер рейса;

- тип автобуса;

- пункт назначения;

- время отправления;

- время прибытия на конечный пункт.

Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.

4. На междугородной АТС информация о разговорах содержит:

- дату разговора;

- код и название города;

- время разговора;

- тариф;

- номер телефона в этом городе;

- номер телефона абонента.

Вывести по каждому городу общее время разговора с ним и сумму.

5. Информация о сотрудниках фирмы включает:

- Ф.И.О. сотрудников;

- табельный номер;

- количество проработанных часов за месяц;

- почасовой тариф.

Рабочее время свыше 144 ч считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработной платы.

6. Информация об участниках соревнований содержит:

- Ф.И.О. игрока;

- игровой номер;

- возраст;

- рост;

- вес.

Вывести информацию о самой молодой, рослой и легкой команде.

7. Для книг, хранящихся в библиотеке, задаются:

- регистрационный номер книги;

- автор;

- название;

- год издания;

- издательство;

- количество страниц.

Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.

8. Различные цеха завода выпускают продукцию нескольких наиме­нований. Сведения о выпущенной продукции включают:

- наименование;

- количество;

- номер цеха.

Для заданного цеха необходимо вывести количество выпущенных изделий по каждому наименованию в порядке убывания количества.

9. Информация о сотрудниках предприятия содержит:

- Ф.И.О.;

- номер отдела;

- должность;

- дату начала работы.

Вывести список сотрудников по отделам в порядке убывания стажа.

10. Создать файл, содержащий сведения о месячной заработной плате сотрудников отдела. Каждая запись содержит поля: фамилия сотрудника, наименование отдела, размер заработной платы за месяц.

Вычислить общую сумму выплат за месяц по отделу А, а также среднемесячный заработок сотрудникам этого отдела.

Напечатать для бухгалтерии ведомость для сотрудников этого отдела, у которых зарплата ниже введенной с клавиатуры.

11. Создать файл, содержащий сведения о количестве изделий категории А, В, С, собранных рабочими за месяц. Структура записи имеет поля: фамилия сборщика, наименование цеха, количество изделий по категории, собранных рабочими за месяц.

Считая данными (вводятся с клавиатуры) значения расценок Sa, Sв, Sc за выполненную работу по сборке единицы изделия категорий А, В, С, выдать на печать следующую информацию:

- общее количество изделий категории А, В, С, собранных рабочими цеха X;

- ведомость заработной платы рабочих цеха X;

- средний размер заработной платы работников этого цеха.

12. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонентов, год установки телефона, номер телефона. На печать вывести информацию:

- по вводимой с клавиатуры фамилии абонента выдается номер телефона;

- определяется количество установленных телефонов с XXXX года (год вводится с клавиатуры).

13. Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например, от 2 до 5 лет. Вывести на печать:

- название игрушек, которые подходят детям от 1 до 3 лет;

- стоимость самой дорогой игрушки и ее наименование;

- название игрушки, которая по стоимости не превышает «х» р. Значение «х» вводится с клавиатуры.

14. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: номер группы, фамилия студента, оценки по пяти экзаменам и пяти зачетам (зачет – незачет). На печать вывести:

- фамилии неуспевающих студентов с указанием номера группы и количества задолженностей;

- средний балл, полученный каждым студентом группы Х (вводится с клавиатуры), и всей группой в целом.

15. Создать файл, содержащий сведения об ассортименте обуви в магазине. Структура записи: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д для женской обуви, М -для мужской, П - для детской. На печать вывести информацию:

- о наличии и стоимости обуви артикула Х (вводится с клавиатуры);

- ассортиментный список женской обуви с указанием наименования и имеющего в наличии числа пар каждой модели.

16. Для участия в конкурсе исполнителей необходимо заполнить анкету с данными:

- Ф.И.О;

- год рождения;

- название страны;

- класс музыкального инструмента (гитара, фортепиано, скрипка).

Вывести список самых молодых лауреатов конкурса по классам инструментов в порядке занятых мест.

 

Контрольные вопросы

 

1. Укажите правила открытия, закрытия файла в языке С.

2. Какие режимы доступа к файлам вы знаете?

3. Опишите работу функций fprintf() и fscanf().

4. Опишите работу функций fwrite() и fread().