Лабораторная Работа № 32-46




Тема: Программирование задач с использованием структур в функциях, работа с файлами и структурами.

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

Теоретические сведения:

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

· Переменные, которые объединены структурой, называются членами, элементами или полями структуры.

· Объявление структуры является оператором, и поэтому в конце должна стоять точка с запятой:

 

struct student{

char name[30];

int kurs;

char grup[3];

int stip;

}; // пока никакая структурная переменная не объявлена

 

· Для того, чтобы объявить конкретные переменные типа struct student, можно записать struct student st1,st2; При такой записи компилятор автоматически выделит место в памяти компьютера. Причем, задание шаблона структуры и объявление переменных может производиться и в одном операторе.

· Доступ к конкретному элементу структуры осуществляется с помощью оператора «точка». Например, strcpy(st1.name, “Иванов М.С.”);

· Структуры, как и переменные другого типа, могут объединяться в массивы структур. Чтобы объявить массив структур, надо сначала задать шаблон структуры, а затем объявить массив: struct student studkurs[200];

· Для доступа к полю i-го элемента массива используем studkyrs[i].kurs;

· Если объявлены две переменные с одним шаблоном, то возможно присваивание st1=st2; при этом произойдет побитовое копирование каждого поля одной переменной в соответствующее поле другой структуры.

· Переменная типа структуры может быть глобальной, локальной переменной и формальным параметром.

· Можно использовать всю структуру или её элемент как любую другую переменную в качестве параметра функции:

·

#includе<stdio.h>

// Пример использования структуры в качестве параметра функции

struct st{

int x;

char y;

};

 

void f(struct st param); // прототип

 

void main()

{

struct st arg;

arg.x=1;

arg.y=’2’;

f(arg);

return 0;

}

 

void f(struct st param)

{printf(“%d %d\n”, param.x,param.y);

}

· В программе, которая выполняет операции чтения из файла или запись в файл, должна быть объявлена переменная-указатель на тип FILE:

 

FILE *file_pointer;

 

· Для того чтобы файл был доступен, его надо открыть, указав, для выполнения какого действия открывается файл: чтения, записи или обновления данных, а также тип (двоичный или текстовый):

Возможные режимы открытия файлов перечислены ниже (смотри таблицу 2):

 

Таблица 2.

 

Режим Действие
  “r” “w” “a” “rb” “wb” “ab” “r+” “w+” “a+” “r+b” “w+b” “a+b”     Открыть для чтения Создать для записи Открыть для добавления в существующий файл Открыть двоичный файл для чтения Открыть двоичный файл для записи Открыть двоичный файл для добавления Открыть файл для чтения и записи Создать файл для чтения и записи Открыть для добавления или создать для чтения и записи Открыть двоичный файл для чтения и записи Создать двоичный файл для чтения и записи Открыть двоичный файл для добавления или создать для чтения и записи

 

· При работе с файлами возможны ошибки, поэтому рекомендуется при помощи функции ferror проверять результат выполнения потенциально опасных, с точки зрения возникновения ошибок, операций с файлами (fopen).

· Чтение данных из текстового файла можно выполнить при помощи функции fscanf, запись – fprintf.

· По завершению работы с файлом нужно его обязательно закрыть (функция fclose).

 

В файле stdio.h определены следующие функции (смотри таблицу 1):

Таблица 1.

 

Функции Действие функции
fopen() fclose() fseek() fprintf() fscanf() feof() ferror() fread() fwrite() rewind() remow()   Открыть файл Закрыть файл Изменить указатель позиции файла на указанное место Форматная запись в файл Форматное чтение из файла Возвращает значение «истинно», если достигнут конец файла Возвращает значение «ложно», если обнаружена ошибка Читает блок данных (структуру) из потока Пишет блок данных (структуру) в поток Устанавливает указатель позиции файла на начало Уничтожает файл

 

· Связь между программой и файлом устанавливается при помощи функции fopen() следующим образом:

 

pointer=fopen(“FILENAME”,”mode”);

 

где pointer – указатель на файл;

fopen – имя функции;

FILENAME – имя файла на диске;

mode – режим доступа к файлу.

 

Пример: Написать программу создающую фонотеку любителя (данные хранятся в файле) с использованием функции пользователя.

 

#includе<stdio.h>

#includе<conio.h>

#include<iostream.h>

 

void vvod(void);

void prosmotr(void);

 

struct cd

{

char name[10];

char opis[20];

char category[10];

float cost;

int number;

} disc;

 

FILE *f;

 

 

void main(void)

{ int n;

while(n!=3)

{

clrscr();

puts(“1. Ввод данных”);

puts(“2. Вывод данных”);

puts(“3. Выход из программы”);

puts(“ Ваш выбор: ”);

scanf(“%d”,&n);

fflush(stdin);

switch(n)

{

case1:vvod();break;

case2: prosmotr(); break;

case3:exit(1);

}

}//while

}//main

 

// Ввод

 

void vvod(void)

{

char k;

if((f=fopen(“baz.dat”,”w”))==NULL)

{

puts(“Невозможно открыть файл”);

exit(1);

}

k=’y’;

puts(“Введите сведения о диске\n\n”);

while(k==’y’)

{

printf(“Введите название: ”);

gets(disc.name);

printf(“Введите описание: ”,);

gets(disc.opis);

printf(“Введите категорию: ”);

gets(disc.category);

printf(“Введите цену: ”);

scanf(“%f”,&disc.cost);

printf(“Введите номер ячейки ”);

scanf(“%d”,&disc.number);

fwrite(&disc,sizeof(disc),1,f);

puts(“Продолжить работу?[y\n]”);

k=getche();

}

fclose(f);

}//vvod

 

// Вывод данных из файла на экран (просмотр)

 

void prosmotr(void)

{

if((f=fopen(“baz.dat”,”r”))==NULL)

{

puts(“Невозможно открыть файл”);

exit(1);

}

puts(“┌──────────────────────────────────┐”);

puts(“│ Название │ Описание │Категория│Цена │Номер│”);

puts(“├──────┼──────────┼───────┼───┼────┤”);

while(fread(&disc,sizeof(disc),1,f)==1)

 

printf(“│%10s│%20s│%10s│%5d│%5d│\n”,disc.name,disc.opis,disc.category,disc.cost,

disc.number);

puts(“└──────────────────────────────────┘”);

getch();

fclose(f);

}//prosmotr

 

 

putdisc(disc) // функция, принимающая структуру в качестве параметра

struct cd disk; //disk – отдельная структурная переменная, которая содержит передаваемые //члены структуры disc

{puts(“Введена следующая информация о диске:\n\n);

printf(“Название: %s\n”,disc.name);

printf(“Описание: %s\n”,disc.opis);

printf(“Категория: %s\n”,disc.category);

printf(“Цена: %6.2f\n”,disc.cost);

printf(“Номер п\п: %d\n”,disc.number);

}

Методические рекомендации для выполнения данной лабораторной работы выдаются отдельным файлом: лабораторный практикум по выполнению лабораторной работы на тему: «Файловые структуры данных»

 

Задание общего вида:

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

Варианты заданий:

Вариант Задание
    Создать файл, содержащий сведения о месячной заработной плате рабочих завода. Каждая запись содержит поля – фамилия рабочего, наименование цеха, размер заработной платы за месяц. Вычислить общую сумму выплат за месяц по цеху Х, а также среднемесячный заработок рабочего этого цеха. Напечатать для бухгалтерии ведомость для начисления заработной платы рабочим этого цеха.
  Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая запись содержит поля: фамилия сборщика, количество изделий, собранных им ежедневно в течении шестидневной недели, т.е. раздельно – в понедельник, вторник и т.д. Написать программу, выдающую на печать следующую информацию: фамилию сборщика и общее количество деталей, собранное им за неделю; фамилию сборщика, собравшего наибольшее число изделий, и день, когда он достиг наивысшей производительности труда.
  Создать файл, содержащий сведения о количестве изделий категорий А, В, С, собранных рабочим за месяц. Структура записи имеет поля: фамилия сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц. Считая заданным значения расценок Са, Св, Сс за выполненную работу по сборке единицы изделия категорий А, Б, С соответственно, выдать на печать следующую информацию: - общее количество изделий категорий А, В, С, собранных рабочим цеха Х; - ведомость заработной платы рабочих цеха Х; - средний размер заработной платы работников этого цеха.
  Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например 2-5, т.е. от 2 до 5 лет. Написать программу, в результате выполнения которой выдаются следующие сведения: - названия игрушек, которые подходят детям от 1 до 3 лет; - стоимость самой дорогой игрушки и её наименование; - название игрушки, которая по стоимости не превышает х руб. и подходит ребенку в возрасте от а до в лет. Значения х, а, в ввести с терминала.
  Создать файл, содержащий сведения о сдаче студентами первого курса сессии. Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам, признак участия в общественной работе. Написать программу зачисления студентов группы Х на стипендию. Студент, получивший все оценки «отлично» и активно участвующий в общественной работе, зачисляется на повышенную стипендию (доплата 50 %), не активно участвующий – доплата 25%. Студенты, получившие «хорошо» и «отлично», зачисляются на обычную стипендию. Студент, получивший одну оценку «удовлетворительно», но активно занимающийся общественной работой, также зачисляется на стипендию, в противном случае зачисление не производится. Индекс группы вводится с терминала.
  Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: индекс группы, фамилия студента, оценки по двум экзаменам и пяти зачетам. Написать программу, выдающую следующую информацию: - фамилии неуспевающих студентов с указанием индексов групп и количества задолженностей; - средний балл, полученный каждым студентом группы Х, и всей группы в целом.
  Создать файл, содержащий сведения о личной коллекции книголюба. Структура записи: шифр книги, автор, название, год издания, местоположение (номер стеллажа и т.п.). Написать программу, выдающую следующую информацию: - местонахождение книги автора Х названия Y. Значения Х, Y ввести с терминала; - список автора X, находящихся в коллекции; - число книг издания ХХ года, имеющиеся в библиотеке.
  Создать файл, содержащий сведения об ассортименте обуви в магазине фирмы. Структура записи: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д для дамской обуви, М для мужской, П для детской. Написать программу, выдающую следующую информацию: - наличие и стоимость обуви артикула Х; - ассортиментный список дамской обуви с указанием наименования и наличии числа пар каждой модели.
  Создать файл, содержащий сведения о десяти нападающих хоккейных команд «Зенит» и «Локомотив» соответственно: имена нападающих, число заброшенных ими мячей, сделанных голевых передач, заработанное штрафное время. Написать программу, которая по данным, извлеченным из этих файлов, создает новый третий файл, содержащий имя, команду, сумму очков (голы + передачи) для шести лучших игроков обеих команд. Имена и показатели результативности футболистов вывести на экран.
  Создать файл, содержащий сведения об учете материальных ценностей заведения. Структура записи: наименование, заводской номер изделия, дата постановки на учет, номер накладной по закупке, стоимость изделия, инвентарный номер, номер аудитории, где установлено изделие, дата списания изделия. Написать программу, которая по данным, извлеченным из основного файла, создает файл изделий, списанных на текущую дату; файл изделий, остающихся на балансе заведения на текущую дату. Также программа должна выдавать перечень изделий находящихся в аудитории, номер которой введен с терминала.
  Создать файл, содержащий сведения о личной коллекции меломана. Структура записи: шифр диска, автор, название, год издания, звукозаписывающая компания, местоположение (номер стеллажа и т.п.). Написать программу, выдающую следующую информацию: - местонахождение диска автора Х названия У. Значения Х, У ввести с терминала; - список автора А, находящихся в коллекции; - список дисков звукозаписывающей компании К.
  Составить список учебной группы. Сведения о каждом студенте заданы в виде следующего текста: фамилия, номер группы, оценка 1, оценка 2, оценка 3, причем первая оценка – за экзамен по мат. Анализу, вторая – по алгебре, третья по программированию. Составить программу, которая: - Печатает фамилии студентов, имеющих задолженности хотя бы по одному предмету; - печатает «качество» успеваемости группы, то есть процент студентов, сдавших экзамены на 4 и 5; - печатает название предмета, который был сдан лучше всего.
  Составить телефонный справочник, содержащий сведения о телефонах абонентов, включающий следующие сведения: фамилия абонента, номер телефона, год установки телефона. Составить программу, выдающую следующую информацию: - По вводимому номеру телефона - данные абонента; - определяется количество телефонов, установленных с Х1 до Х2 года и выдаются данные о их владельцах(Х1 и Х2 вводятся с терминала).
  Составить накладную ассортимента трикотажных изделий в магазине фирмы, содержащую следующую информацию о каждом изделии: - Артикул изделия; - наименование; - количество; - стоимость одного изделия. Написать программу, выдающую следующую информацию: - Наличие и стоимость изделия артикула Х)Х ввести с терминала); - ассортиментный список детского трикотажа с указанием наименования, если известно, что артикул начинается с буквы Д для дамского трикотажа, М – для мужского, П – для детского.
  Составить список, содержащий информацию о владельцах акций акционерного общества «Терминал», включающий следующие сведения о каждом акционере: - Фамилия, имя, отчество; - домашний адрес; - контактный телефон; - количество акций, которыми владеет данный член АО. Составить программу, выдающую следующую информацию: - Список акционеров, владеющих более, чем 150 акциями; - Ведомость начисления дивидендов за истекший год, если известно, что процент начисления дивидендов составляет 46% годовых. (Стоимость одной акции – 1000 рублей).
  Составить расписание движения автобусов по междугородним маршрутам из Санкт-Петербурга. Информация о каждом рейсе: номер рейса, пункт назначения, время в пути, стоимость билета, наличие билетов. Составить программу, которая позволяет получить следующую справочную информацию: - Общее количество свободных мест в пункт Х; - время отправления автобусов в город Y во временном интервале от А до В часа. (Y, Х, А, В ввести с терминала).
  Составить ваучер туров по странам Европы из Санкт-Петербурга, включающий следующую информацию о каждом туре: название страны, вид перевозки, стоимость, вид отеля для проживания, длительность тура в днях, цель поездки. Составить программу, выдающую следующую справочную информацию: - Список туров по названию введенной страны; - Список туров, имеющих отель для проживания категории три звезды.    
  Составить таблицу курса валют на сегодняшний день в банках Санкт-Петербурга со следующей информацией: - Наименование банка; - курс покупки и продажи USD; - курс покупки и продажи DM; - курс покупки и продажи Fm; - комиссия(стоимость услуг при покупке и продаже валюты). Составить программу, выдающую следующую информацию: - список банков, не взимающих комиссионный сбор за услуги; - название банков, имеющих минимальные курсы покупки и продажи USD; - среднегородской курс продажи USD.  
  Составить ценовую таблицу на оптовые партии кондитерских изделий на кондитерской фабрике со следующими данными: - Название изделия; - вес одной упаковки; - цена одной упаковки; - размер минимальной партии (количество упаковок); - цена минимальной партии (рассчитать в программе); Составить программу, выдающую список названий изделий, имеющих вес одной упаковки до 10 кг.; сведения об изделиях, имеющих размер минимальной партии в пределах, заданного с терминала, от А до В штук.  
  Составить список пациентов глазного диагностического центра, включающий следующие сведения о каждом пациенте: фамилия, имя, отчество, пол, возраст, адрес проживания, диагноз. Составить программу, выдающую следующую информацию: - Количество пациентов, проживающих по определенному микрорайону; - список пациентов пенсионного возраста с диагнозом Х (Х вводится с терминала).  
  Подготовить данные об абитуриентах, поступающих на факультет СПО. Информация о каждом студенте содержит следующие данные: - Фамилия, имя, отчество; - домашний адрес; - год рождения; - пол; - год окончания школы; - оценки в аттестате; - оценки вступительных экзаменов. Составить программу, выдающую следующую информацию: - Список абитуриентов, имеющих в аттестате только оценки 5 и 4; - список абитуриентов, имеющих средний балл выше 4.5; - количество абитуриентов мужского и женского пола.    
    Составить список сотрудников факультета СПО, содержащий следующие сведения: - Фамилия, имя, отчество сотрудника; - дата рождения; - пол; - стаж работы; - должность; - оклад; Составить программу, позволяющую получить следующую информацию: - средний стаж работы на факультете; - список сотрудников пенсионного возраста с указанием стажа работы; - список молодых специалистов (стаж работы менее 3-х лет).  
    Составить таблицу, содержащую сведения о наличии билетов рейсов Аэрофлота со следующими данными: - Номер рейса; - пункт назначения; - время вылета; - время прибытия; - количество свободных мест. Составить программу, выдающую следующую информацию: - наличие свободных мест на рейс А; - количество рейсов в пункт назначения В; - наличие свободных мест на рейс С в город Т (А, В, С, Т вводятся с терминала). -
    Предприятие имеет местную телефонную станцию на 20 номеров. Телефонный справочник данного предприятия для каждого номера телефона содержит номер помещения и список служащих, сидящих в данном помещении. Составить программу, выдающую следующую информацию: - по номеру телефона выдает номер помещения и список сидящих в нем сотрудников; - по номеру помещения выдает номер телефона; - по фамилии выдает номер телефона и номер помещения.  
    В гостинице имеется 15 номеров, из них 5 одноместных и 10 двухместных. Составить программу, которая заполняет и/или корректирует данные о жильцах и по фамилии определяет номер проживания жильца. Программа запрашивает фамилию жильца: - если жильца с такой фамилией нет, то об этом выдается сообщение; - если жилец с такой фамилией в гостинице единственный, программа выдает номер проживания; - если в гостинице проживает два и более жильцов с такой фамилией, то программа дополнительно запрашивает инициалы.
  Расписание электричек хранится в текстовом файле на диске. Каждая запись содержит название пункта назначения, пометки типа «СВ», «ПВ», «КСВ» и время отправления. Составить программу, выдающую следующую информацию: - вывод на экран информации о поездах, отходящих после введенного времени; - вывод на экран информации о поездах по конкретному направлению и дате.
  Описать запись, содержащую следующие поля: - расчетный счет плательщика; - расчетный счет получателя; - перечисляемая сумма в рублях. Составить программу, выполняющую следующие действия: - ввод данных с клавиатуры в массив, состоящий из n элементов, указанного типа, с упорядочиванием записей в алфавитном порядке по расчетным счетам плательщиков; - вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры, а если такого расчетного счета нет – вывод на экран соответствующего сообщения; - запись массива в файл под заданным с клавиатуры именем.
  Список студенческой группы записан на диске как текстовый файл. Каждая строка списка содержит фамилию студента и три экзаменационные оценки, причем список никак не упорядочен. Составить программу, которая корректирует список и сортирует его либо по среднему баллу, либо по алфавиту, либо по оценкам по заданному предмету. Список записывается в файл либо под старым, либо под новым именем.

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

  1. Что такое файл, какие виды файлов существуют?
  2. Чем отличается файл от массива?
  3. Как используется файловая структура?
  4. Как вы будете выводить числовые данные?
  5. В чем заключается различие между функциями fprintf() и fwrite()?
  6. Как осуществляется чтение и запись файла?
  7. Назовите режимы работы с файлами.

Содержание отчета:

Расписано поэтапно в документе: лабораторный практикум по выполнению лабораторной работы на тему: «Файловые структуры данных»

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: