Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
rabprog.doc
Скачиваний:
2
Добавлен:
26.11.2019
Размер:
264.7 Кб
Скачать

3.4. Контрольная работа 4

3.4.1. Задание на контрольную работу 4

Задача по обработке файлов.

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

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

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

Вариант задания выбирается по последней цифре шифра студента.

Вариант 0

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

Вариант 1

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

Вариант 2

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

Вариант 3

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

Вариант 4

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

Вариант 5

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

Вариант 6

Напечатать, сколько книг было издано в заданном году объемом свыше заданного. Год издания и количество страниц в книге вводится с клавиатуры.

Вариант 7

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

Вариант 8

Напечатать названия книг и издательств, издающих литературу по дисциплине, значение которой введено с клавиатуры.

Вариант 9

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

3.4.2. Методические указания к выполнению контрольной работы 4

Пример выполнения контрольной работы.

Условие задачи

1. Описать класс (структуру) со следующими полями:

  • фамилия, имя, отчество сотрудника;

  • должность;

  • отдел.

2. Написать программу, выполняющую следующие действия:

  • ввод инфомации в файл;

  • вывод всей информации на экран;

  • вывод на экран информации о сотруднике, фамилия которого введена с клавиатуры.

Пусть

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

размерностью 25

dol - имя поля с названием должности - символьный массив

размерностью 15

otdel - имя поля с номером отдела - целое число

Тогда описание структуры (класса) будет таким:

struct SOTRUDNIK

{

char fio[25];

char dol[15];

int otdel;

};

Текст программы

#include <fstream.h>

#include <string.h>

#include <conio.h>

#include <iomanip.h>

#include <stdlib.h>

#define FIO 20

#define DOL 15

struct SOTRUDNIK

{

char fio[FIO];

char dol[DOL];

int otdel;

} ;

// прототипы функций

void sozdanie();

void prosmotr();

void vibor();

void tabl();

// Опеpация-функция ввода с клавиатуpы

istream &operator >> (istream &in, SOTRUDNIK &x)

{

cout<<"\nФамилия:";

in.seekg(0,ios::end);

in.get(x.fio,FIO-1,'\n');

cout<<"\nДолжность:";

in.seekg(0,ios::end);

in.get(x.dol,DOL-1,'\n');

cout<<"\nОтдел:";

in.seekg(0,ios::end);

in >> x.otdel;

return in;

}

// Опеpация-функция вывода на дисплей

ostream &operator << (ostream &out, SOTRUDNIK x)

{

out.setf (ios::left); // установка флага равнения по левому краю

out << "|" << setw(20) << x.fio << "|" << setw(20) << x.dol

<< "|";

out.setf (ios::right); // установка флага равнения по правому краю

out << setw(10) << x.otdel <<"|\n";

return out;

}

// Опеpация-функция чтения из файла

ifstream &operator >> (ifstream &in, SOTRUDNIK &x)

{

in.getline(x.fio,FIO,'\n');

in.getline(x.dol,DOL,'\n');

in >> x.otdel;

in.seekg (2L, ios::cur);

return in;

}

// Опеpация-функция записи в файл

ofstream &operator << (ofstream &out, SOTRUDNIK &x)

{

out << x.fio << endl

<< x.dol << endl

<< x.otdel << endl;

return out;

}

void main(void)

{

char c;

while (1)

{

cout << endl << "1. Создание файла";

cout << endl << "2. Просмотр содержимого";

cout << endl << "3. Вывод информации о сотруднике";

cout << endl << "4. Выход";

cout << endl << "Ваш выбор -> ";

cin.seekg(0,ios::end);

c = cin.get();

switch(c)

{

case '1':

sozdanie();

break;

case '2':

prosmotr();

break;

case '3':

vibor();

break;

case '4':

return;

default:

cout << "Вводите только цифры от 1 до 4" << endl;

}

}

}

// определение функции вывода на экран шапки таблицы

void tabl()

{

cout << "------------------------------------------------------\n";

cout << "| Ф.И.О. | Должность | Отдел |\n";

cout << "|--------------------|--------------------|----------|\n";

}

// определение функции создания файла

void sozdanie()

{

char c;

ofstream ff; // создание потока ff для записи в файл

SOTRUDNIK s;

ff.open( "kadry.txt" );

// открытие файла kadry.txt и связывание его

// c потоком ff

if ( !ff) // проверка открытия файла

{

cerr << "Ошибка открытия файла kadry.txt для записи\n";

exit(1); // аварийный выход

}

// Цикл записи элементов в файл

do

{

cin >> s; // обращение к операции-функции ввода с клавиатуpы

ff << s; // обращение к операции-функции записи в файл

cout<<"\nПpодолжить ввод?(Y/N или Д/H)";

cin.seekg(0L, ios::end);

c = cin.get();

}

while ( c == 'y' || c == 'Y' || c == 'д' || c == 'Д');

ff.close(); // закpытие файла

}

// определение функции вывода всей информации на экран

void prosmotr()

{

ifstream finp; // создание потока finp для чтения из файла

SOTRUDNIK s;

finp.open( "kadry.txt", ios::in );

// открытие файла kadry.txt и связывание его

// с потоком finp

if ( !finp ) // проверка открытия файла

{

cerr << "Ошибка открытия файла kadry.txt для чтения\n";

exit(1); // аварийный выход

}

cout << "\nСписок элементов из файла\n";

tabl(); // вывод на экран шапки таблицы

while ( finp )

{

finp >> s ; // обращение к операции-функции чтения из файла

if ( strlen ( s.fio) <= 0 )

// длина первого поля в записи меньше либо равна нулю

break; // выход из цикла

cout << s; // обращение к операции-функции вывода на экран

}

finp.close(); // закpытие файла

cout << "|--------------------|--------------------|----------|\n";

}

// определение функции вывода на экран информации,

// отвечеющей условию поиска

void vibor()

{

char fio[FIO]; // для ввода условия поиска

ifstream fi; // создание потока fi для чтения из файла

SOTRUDNIK b;

fi.open("kadry.txt", ios::in);

// открытие файла kadry.txt и связывание его

// с потоком fi

if ( !fi ) // проверка открытия файла

{

cerr << "Ошибка открытия файла kadry.txt для чтения\n";

exit(1); // аварийный выход

}

cout << "Введите ФИО сотрудника:";

cin.seekg(0,ios::end);

cin.get(fio,FIO-1,'\n');

cout << "Информация о сотруднике\n";

tabl(); // вывод на экран шапки таблицы

while (!fi.eof())

{

fi >> b; // обращение к операции-функции чтения из файла

if (strcmp(b.fio,fio)==0)

// фамилии совпали

cout << b; // обращение к операции-функции вывода на экран

}

fi.close();

cout << "|--------------------|--------------------|----------|\n";

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]