- •Программирование на языке высокого уровня Рабочая программа Задания на контрольные работы
- •552800 - Информатика и вычислительная техника
- •Предисловие
- •1. Содержание дисциплины
- •1.1. Содержание дисциплины по гос
- •Рабочая программа (объем дисциплины 270 часов)
- •Связанные типы динамических данных
- •Тематический план лекций для студентов очно-заочной формы обучения ( 24 часа)
- •Библиографический список
- •3. Задания на контрольные работы и методические указания к их выполнению
- •3.1. Контрольная работа 1
- •3.1.1. Задание на контрольную работу 1
- •Задача 1
- •Задача 2
- •3.1.2. Методические указания к выполнению контрольной работы 1
- •Задача 1
- •Задача 2
- •Задача 2 Использование функций в языке си, получающих и возвpащающих pазличное количество аpгументов
- •3.2.2. Методические указания к выполнению контрольной работы 2
- •Задача 1
- •Задача 2
- •3.3. Контрольная работа 3
- •3.3.1. Задание на контрольную работу 3
- •3.3.2. Методические указания к выполнению контрольной работы 3
- •3.4. Контрольная работа 4
- •3.4.1. Задание на контрольную работу 4
- •3.4.2. Методические указания к выполнению контрольной работы 4
- •4. Задание на курсовой проект
- •4.1. Задание на типовой курсовой проект
- •4.2. Основные разделы пояснительной записки к курсовому проекту
- •5. Тестовые задания
- •Содержание
- •191186, Санкт-Петербург, ул. Миллионная, 5
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";
}