лаба5 2й семестр
.docxСт. Новичонок М.С. Гр. ІНФ-15-1
Лабораторная работа №5
Тема: «Потоковые классы язика С++»
Вариант 6
Описать структуру с именем WORKER, содержащую следующие поля:
- фамилия и инициалы работника;
- название занимаемой должности;
- год поступления на работу.
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; записи должны быть размещены по алфавиту;
- вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;
- если таких работников нет, вывести на дисплей соответствующее сообщение.
main.cpp
#include "Wor.h"
#include <fstream>
#include <iostream>
#include<iomanip>
using namespace std;
void print(Workers *t, int time);
void main()
{Workers *t = new Workers[3];
int i = 0;
char path[100]; //путь к файлу
std::cout << "Input path: ";
std::cin >> path;
//char k[5];
std::ifstream fin;
fin.open(path); //открываем файл для чтения
if (!fin.is_open()) //проверка открылся ли файл
std::cout << "Path is not correct!\n";
else
{
while (!fin.eof()) //считываем пока не конец
{
fin >> t[i].name; //считываем в временные переменные
fin >> t[i].profession;
fin >> t[i].year;
i++;}
fin.close();
print(t, 5);}}
void print(Workers *t, int time)
{
ofstream fout("res.txt", std::ios::binary); //открываем файл для записи
bool find = false;
for (int i = 0; i < 3; i++)
if (2016- t[i].year > time)
{
cout<<setiosflags(ios::left); // то же что и cout.setf(ios::left);
cout<<setfill('.'); //то же что и cout.fill('.');
cout<<setw(15); // то же что и cout.width(15);
cout<<setiosflags(ios::fixed); //то же что и cout.setf(ios::fixed);
cout<<setiosflags(ios::scientific);// cout.setf(ios::scientific);
cout<<resetiosflags(ios::fixed);// cout.unsetf(ios::scientific);
cout<<setprecision(3);
fout.write(t[i].name.c_str(), sizeof(t[i].name));
fout.write(t[i].profession.c_str(), sizeof(t[i].profession));
fout.write((char*)&t[i].year, sizeof(t[i].year));
find = true;
cout << t[i].name << '\t' << t[i].profession << '\t' << t[i].year << std::endl;
}
else
if ( t[i].year > 2016)
{
cout <<"Wrong!!!!!!!" << '\t' << t[i].name << '\t' << t[i].profession << '\t' <<t[i].year<<" is bigger than 2016" <<endl;
char *c = "Wrong!!!!!";
fout.write((char*)c, sizeof(c));
}
if (!find)
{
char *c = "Worker is not found";
fout.write((char*)c, sizeof(c));
}
fout.close();}
Wor.h
#ifndef _Wor
#define _Wor
#include <time.h>
#include <string>
struct Workers
{
int year;
std::string name;
std::string profession;};
#endif