50182

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

Лабораторная работа

Информатика, кибернетика и программирование

Приобрести практические навыки в проектировании структуры файла а также закрепить навыки по вводу данных в файл и их обработке с помощью подпрограмм пользователя.y; } В программе которая выполняет операции чтения из файла или запись в файл должна быть объявлена переменнаяуказатель на тип FILE: FILE file_pointer; Для того чтобы файл был доступен его надо открыть указав для выполнения какого действия открывается файл: чтения записи или обновления данных а также тип двоичный или текстовый: Возможные режимы открытия файлов...

Русский

2014-01-17

63 KB

3 чел.

Лабораторная Работа № 16, 17

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

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

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

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

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>

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();

}}//main

//  Ввод

void vvod(void)

{

char k;

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

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

  exit();

}

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();

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);

}

Задание: 

Используя предметную область, определенную для вас на практике «Разработка приложений с использованием инструментальных средств», написать программу, выполняющую на базе вашей предметной области следующие действия: создание файла, просмотр содержимого файла, добавление данных в файл, редактирование данных файла.

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

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

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

  1.  Краткие теоретические сведения.
  2.  Схемы алгоритмов.
  3.  Тексты составленных программ.
  4.  Протоколы к составленным программам.
  5.  Вывод о проделанной работе.


 

А также другие работы, которые могут Вас заинтересовать

39617. Разработка основных принципов по совершенствованию работы пункта коммерческого осмотра 333 KB
  Высокий уровень грузовой и коммерческой работы зависит прежде всего от ее организации в основной линейной производственно-хозяйственной единице железнодорожного транспорта – на станции где выполняется основная часть операций связанных с обеспечением плана перевозок грузов а именно2: прием к перевозке погрузка выгрузка выдача и хранение грузов с обеспечением полной их сохранности; подготовка вагонов к погрузке; взвешивание грузов; сортировка мелких отправок; оформление перевозочных документов; подача вагонов на примыкающие к станции...
39618. Междисциплинарный курсовой проект 406 KB
  65 Автоматизированные системы обработки информации и управления Волгоград 2011 ББК УДК Рецензент Издается по решению редакционноиздательского совета Волгоградского государственного технического университета Междисциплинарный курсовой проект: метод.65 Автоматизированные системы обработки информации и управления всех форм обучения. Выполнение междисциплинарного проекта основано на материале ранее изученных дисциплин: Информационные технологии Сети ЭВМ и телекоммуникации Маркетинг и менеджмент программных систем Технология...
39619. СТРУКТУРА И ОРГАНИЗАЦИЯ РАБОТЫ АКУШЕРСКОГО СТАЦИОНАРА САНИТАРНО - ПРОТИВОЭПИДЕМИЧЕСКИЙ РЕЖИМ В АКУШЕРСКОМ СТАЦИОНАРЕ 64.5 KB
  АС имеет следующие основные подразделения: приемнопропускной блок; физиологическое I акушерское отделение 5055 от общего числа акушерских коек; отделение палаты патологии беременности 2530; отделение палаты новорожденных в I и II акушерских отделениях; обсервационное II акушерское отделение 2025; гинекологическое отделение 2530. ПЕРВОЕ ФИЗИОЛОГИЧЕСКОЕ АКУШЕРСКОЕ ОТДЕЛЕНИЕ Первое физиологическое акушерское отделение включает в себя приемнопропускной блок родовой блок послеродовые палаты отделение...
39620. Модернизация локальной вычислительной сети административного здания ЗАО «ПромСвязь-Инвест» 2.11 MB
  1 Техническое задание Полное наименование проекта Модернизация локальной вычислительной сети административного здания ЗАО ПромСвязьИнвест. Цель создания системы Модернизация локальной вычислительной сети и создание базы данных принятия заявлений от абонентов на подключение или устранение неисправностей. Назначение системы ЛВС обеспечивает связь компьютеров для обмена информацией совместного использования сетевого оборудования информационных ресурсов устройств хранения информации и обеспечения контроля доступа на предприятии обеспечивает...
39621. Основные направления совершенствования налоговой политики государства 1.87 MB
  Cоциальноэкономическая сущность налогов и налоговой политики.3 Зарубежный опыт организации налоговой политики. Методологические принципы налоговой политики.1 Тенденции современной налоговой политики РФ: элементы состав и эволюция в условиях рыночных отношений.
39622. Приемы измерения социальной установки 141.5 KB
  Это наиболее простой вид шкалы измерения установки. При конструировании шкалы самооценки в форме €œтрадиционного€ вопроса её позиции обязательно располагаются симметрично и состоят из равного числа положительных и отрицательных оценок разделённых €œнейтральной€ позицией. Наиболее простой приём измерения установок по правилам такой шкалы – ранжирование респондентами тех объектов отношение к которым с их стороны интересует исследователя. Более сложный вариант измерения установок при помощи ранговой шкалы – метод парных сравнений.
39623. Разработка типового проекта «дублирующего» родильного дома 748.5 KB
  В рамках своего дипломного проекта я рассматриваю актуальные проблемы существующей системы учреждений родовспоможения в г. Цель – 1 создать условия при которых здоровые беременные женщины и роженицы могли гарантировано получать медицинскую помощь в учреждениях родовспоможения обслуживающих район их места жительства; 2 улучшить условия получения медицинской помощи беременными женщинами и роженицами с патологиями. Таким образом деятельность перинатального центра не разгружает основной поток рожениц приходящийся на учреждения родовспоможения...
39624. Социальная установка. Определение и классификация 65.5 KB
  Исследования понятия и динамики социальных установок Понятие которое в определенной степени объясняет выбор мотива побуждающего личность к деятельности есть понятие социальной установки. Традиция изучения социальных установок сложилась в западной социальной психологии и социологии. Для обозначения социальных установок используется термин аттитюд. Особенности формирования социальных установок связаны с тем что они обладают некоторой устойчивостью и несут в себе функции облегчения алгоритмизации познания а также инструментальную функцию...
39625. Социальные сети как инструмент развития: виды и возможности 45 KB
  Могут ли сети упростить работу тренингменеджера Какие возможности они открывают для получения сотрудниками необходимых им знаний Trainings. Социальные сети в интернете зародились в 90х годах причем как профессиональное музыкальное сообщество а термин появился только в 2004. Стандартные социальные сети позволяют пользователю присоединять людей к своей сети выходить на других пользователей через своих знакомых посылать сообщения размещать фотографии тексты и любой другой контент.