Пример программы работы с файлом структур
Создать файл, содержащий сведения о студентах: фамилия, три оценки, средний бал. Организовать возможность просмотра содержимого файла и добавления новых данных в конец файла.
#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().