#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;
}