лб 5
.docxФГБОУ ВО
Уфимский государственный авиационный технический университет
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 5
по дисциплине «Программирование»
Вариант № 18
Выполнил: студент гр. ИВТ-114
Балыбердин Н. А.
Проверил: доцент каф. ТК
Федорова Н. И.
Уфа 2017
Тема работы: Файловые потоки.
Цель работы: Навыки работы с файловыми потоками в С++.
Задачи работы:
написание программы на языке С++ с использованием файловых потоков;
тестирование работоспособности программы для различных исходных данных.
Вариант № 18
Задание:
Дан массив записей, содержащий сведения о студентах: фамилия, инициалы группа, дата рождения. Упорядочить, вывести на экран список студентов и найти самого молодого студента из списка.
Текст программы:
#include <iostream>
#include <cstring>
#include <conio.h>
#include <windows.h>
#include <iomanip>
#include <locale.h>
#include <clocale>
#include <fstream>
using namespace std;
const int L = 31, M = 11, N = 100, Q = 5;
struct date
{
int d;
int m;
int y;
};
struct student
{
char name[L];
char inic[Q];
char group[M];
date dr;
};
void inputMasStudFile(student *x, int &n)
{
ifstream fin;
char file[N];
cout << "Имя входного файла: ";
cin >> file;
int nn = 0;
fin.open(file);
if (fin.fail())
{
cout << " Файл: " << file << " не открыт.";
return;
}
while (1)
{
fin >> x[n].name >> x[n].inic >> x[n].group >> x[n].dr.d >> x[n].dr.m >> x[n].dr.y;
if (fin.fail())
break;
n++;
}
cout << "Файл введен";
getch();
fin.close();
}
void outputMasStudfile(student *x, int &m)
{
ofstream fout;
int i;
char file[N];
cout << "\nИмя выходного файла: ";
cin >> file;
fout.open(file);
if (fout.fail())
{
cout << "Файл не создан.";
_getch();
return;
}
fout << endl;
fout << " ___________________________________________________________\n | Фамилия и инициалы | Группа | Дата рождения |\n |______________________________|____________|_______________|" << endl;
for (int i = 0; i<m; i++)
{
strcat(x[i].name, " ");
strcat(x[i].name, x[i].inic);
fout << left << " | " << setw(29) << x[i].name << "|" << setw(12) << x[i].group << "| " << right << setfill('0') << setw(2) << x[i].dr.d << "." << setw(2) << x[i].dr.m << "." << left << setw(8) << setfill(' ') << x[i].dr.y << "|\n";
}
fout << " |______________________________|____________|_______________|" << endl;
cout << "Данные записаны в файл.";
fout.close();
getch();
}
void outputMasStud(student *x, int m)
{
int i;
cout << endl;
cout << " ___________________________________________________________\n | Фамилия и инициалы | Группа | Дата рождения |\n |______________________________|____________|_______________|" << endl;
for (i = 0; i<m; i++)
{
strcat(x[i].name, " ");
strcat(x[i].name, x[i].inic);
cout << left << " | " << setw(29) << x[i].name << "|" << setw(12) << x[i].group << "| " << right << setfill('0') << setw(2) << x[i].dr.d << "." << setw(2) << x[i].dr.m << "." << left << setw(8) << setfill(' ') << x[i].dr.y << "|\n";
}
cout << " |______________________________|____________|_______________|" << endl;
getch();
}
void sortMasStud(student *x, student *y, int &m)
{
int i, g, *sort;
for (i = 0; i < m - 1; i++)
{
for (g = i + 1; g < m; g++)
{
if (x[i].dr.y<x[g].dr.y ||
x[i].dr.y == x[g].dr.y &&
x[i].dr.m<x[g].dr.m ||
x[i].dr.y == x[g].dr.y &&
x[i].dr.m == x[g].dr.m &&
x[i].dr.d<x[g].dr.d)
{
y[1] = x[i];
x[i] = x[g];
x[g] = y[1];
}
}
}
}
void main()
{
setlocale(LC_ALL, "Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout << "Сортировка массива студентов в порядке увеличения возраста." << endl;
student a[N], b[N], sort[N];
int i, h;
cout << endl;
cout << "Ввод исходного массива студентов:\n";
inputMasStudFile(a, h);
cout << endl << "\nИсходный массив студентов: " << endl;
outputMasStud(a, h);
sortMasStud(a, sort, h);
int f = 0;
while (2)
{
system("cls");
cout << "\nЖелаете вывести результат на экран или записать в файл?";
cout << "\n1. Вывести отсортированный массив студентов на экран";
cout << "\n2. Записать отсортированный массив студентов в файл";
cout << "\nВаш выбор: ";
cin >> f;
switch(f)
{
case 1: outputMasStud(a, h); break;
case 2: outputMasStudfile(a, h); break;
}
}
getch();
}
Схема алгоритма работы программы:
Пример работы программы:
Вывод: В ходе выполнения работы получены навыки работы с файловыми потоками в С++.