https://pastein.ru/t/HW

  скопируйте уникальную ссылку для отправки


#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <clocale>
using namespace std;
// ��������� 
struct patients
{
	char fam[25];
	char sex[10];
	int years;
	char city[25];
	char diag[25];
	
};
// ������� ������ �� ����� ����������� �����
void outfile(fstream& f, int n)
{
	patients a;
	f.seekg(0);/*���������� ��������� ����� �� ������*/
	cout << setw(26) << "�������|" << setw(9) << "���|"
		<< setw(15) << "�������|" << setw(20) << "�����|"<< setw(20) << "�������|" << endl;
	cout << setw(90) <<
		"__________________________________________________________________________" << endl;
	for (int i = 0; i < n; i++)
	{
		// ������ �� �����
		f.read((char*)& a, sizeof a);
		cout << setw(25) << a.fam << setw(9) << a.sex
			<< setw(15) << a.years << setw(20) << a.city << setw(20) << a.diag << endl;
		cout << endl;
	}
}

void outfile_f(fstream& f, int n)
{
	patients a;
	f.seekg(0);/*���������� ��������� ����� �� ������*/
	cout << "�����������" << endl;
	cout << setw(26) << "�������|" << setw(9) << "���|"
		<< setw(15) << "�������|" << setw(20) << "�����|" << setw(20) << "�������|" << endl;
	cout << setw(90) <<
		"__________________________________________________________________________" << endl;
	for (int i = 0; i < n; i++)
	{
		// ������ �� �����
		f.read((char*)& a, sizeof a);
		if (strcmp(a.city,"������")!=0) {
			cout << setw(25) << a.fam << setw(9) << a.sex
				<< setw(15) << a.years << setw(20) << a.city << setw(20) << a.diag << endl;
			cout << endl;
		}
	}
}
/* ������� ������ ������ �� ���������� ����� � ������
������ � �������� ���� */
int read_f(fstream& f, fstream& out)
{
	int i = 0; patients a;
	while (!f.eof())// ���� �� ����� �����
	{
		f >> a.fam >> a.sex; f >> a.years; f >> a.city; f >> a.diag;
		out.write((char*)& a, sizeof a);
		i++;
	}
	return i;
}
/* ������� ���������� ����������� ��������� ����� �
���������� ������� */
void sort(fstream& f, int n)
{
		patients min, a;
	int n_min;
	for (int i = 0; i < n; i++)
	{
		f.seekg(i * (sizeof a));
		f.read((char*)& min, sizeof min);
		n_min = i;
		for (int j = i + 1; j < n; j++)
		{
			f.read((char*)& a, sizeof a);
			if (strcmp(a.fam, min.fam) < 0)
			{
				min = a;
				n_min = j;
			}
		}
		f.seekg(i * (sizeof a));
		f.read((char*)& a, sizeof a);
		f.seekp(i * (sizeof a));
		f.write((char*)& min, sizeof min);
		f.seekp(n_min * (sizeof a));
		f.write((char*)& a, sizeof a);
	}
}

int main()
{
	setlocale(LC_CTYPE, "Russian");
	fstream in("data.txt", ios::in);
	if (!in)
	{
		cout << "�� ������ data.txt" << endl;
		return 1;
	}
	fstream out("data.dat", ios::out | ios::binary);
	if (!out)
	{
		cout << "�� ������ data.dat" << endl;
		return 1;
	}
	int size_f = read_f(in, out);
	in.close(); out.close();
	fstream out_f("data.dat", ios::in | ios::out |
		ios::binary);
	if (!out_f)
	{
		cout << "�� ������ data.dat" << endl;
		return 1;
	}
	sort(out_f, size_f);
	outfile(out_f, size_f);
	outfile_f(out_f, size_f);
	return 0;
}