Kentoo

A#2

Nov 27th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.04 KB | None | 0 0
  1. // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <fstream>
  7. #include "stdio.h"
  8. #include <Windows.h>
  9. #include "time.h"
  10.  
  11. using namespace std;
  12.  
  13. const unsigned short int strsize = 30;
  14.  
  15. struct worker {
  16.     int tabnom;
  17.     char fio[strsize];
  18.     char dol[strsize];
  19.     int zp;
  20.     int stazh;
  21.     char birthdate[strsize];
  22.     void out() {
  23.         cout.setf(ios::left);
  24.         cout.width(strsize);
  25.         cout << tabnom;
  26.         cout.setf(ios::left);
  27.         cout.width(strsize);
  28.         cout << fio;
  29.         cout.setf(ios::left);
  30.         cout.width(strsize);
  31.         cout << dol;
  32.         cout.setf(ios::left);
  33.         cout.width(strsize);
  34.         cout << zp;
  35.         cout.setf(ios::left);
  36.         cout.width(strsize);
  37.         cout << stazh;
  38.         cout.setf(ios::left);
  39.         cout.width(strsize);
  40.         cout << birthdate << endl;
  41.     }
  42. };
  43.  
  44. bool isstructequal(worker w1, worker w2) {
  45.     return (w1.tabnom == w2.tabnom) && (!strcmp(w1.fio, w2.fio)) && (!strcmp(w1.dol, w2.dol)) && (w1.zp == w2.zp) && (w1.stazh == w2.stazh);
  46. }
  47.  
  48. void main()
  49. {
  50.     SetConsoleCP(1251);
  51.     SetConsoleOutputCP(1251);
  52.     worker w1, w2;
  53.     char code;
  54.     int n = 0;
  55.     ofstream fout("data.txt", ios::binary | ios::out | ios::trunc);
  56.     cout << "Ввести сотрудника? y - да, любой другой символ - нет" << endl;
  57.     cin >> code;
  58.     while (code == 'y' || code == 'у') {
  59.         n++;
  60.         cout << "Введите данные " << n << " сотрудника" << endl;
  61.         cout << "Введите табельный номер сотрудника" << endl;
  62.         cin >> w1.tabnom;
  63.         cout << "Введите фамилию сотрудника" << endl;
  64.         cin >> w1.fio;
  65.         cout << "Введите должность сотрудника" << endl;
  66.         cin >> w1.dol;
  67.         cout << "Введите зарплату сотрудника" << endl;
  68.         cin >> w1.zp;
  69.         cout << "Введите стаж сотрудника" << endl;
  70.         cin >> w1.stazh;
  71.         cout << "Введите дату рождения сотрудника" << endl;
  72.         cin >> w1.birthdate;
  73.         fout.write((char*)&w1, sizeof w1);
  74.         //cout << endl;
  75.         cout << "Ввести сотрудника? y - да, любой другой символ - нет" << endl;
  76.         cin >> code;
  77.     }
  78.     w2 = w1;
  79.     fout.close();
  80.     ofstream fout2("data2.txt", ios::binary | ios::out);
  81.     int max, prevmax = INT32_MAX;
  82.     for (int i = 0; i < n; i++) {
  83.         ifstream fin2("data.txt", ios::binary | ios::in);
  84.         max = 0;
  85.         while (fin2.read((char*)&w1, sizeof w1)) {
  86.             if (w1.stazh > max && w1.stazh < prevmax) {
  87.                 max = w1.stazh;
  88.             }
  89.         }
  90.         fin2.close();
  91.         prevmax = max;
  92.         ifstream fin3("data.txt", ios::binary | ios::in);
  93.         while (fin3.read((char*)&w1, sizeof w1)) {
  94.             if (w1.stazh == max) {
  95.                 fout2.write((char*)&w1, sizeof w1);
  96.             }
  97.         }
  98.         fin3.close();
  99.     }
  100.     fout2.close();
  101.     remove("data.txt");
  102.     rename("data2.txt", "data.txt");
  103.     cout << endl;
  104.     cout << "Выводим отсортированный по стажу файл сотрудников" << endl;
  105.     ifstream fin4("data.txt", ios::binary | ios::in);
  106.     cout.setf(ios::left);
  107.     cout.width(strsize);
  108.     cout << "Табельный №";
  109.     cout.setf(ios::left);
  110.     cout.width(strsize);
  111.     cout << "Фамилия сотрудника";
  112.     cout.setf(ios::left);
  113.     cout.width(strsize);
  114.     cout << "Должность";
  115.     cout.setf(ios::left);
  116.     cout.width(strsize);
  117.     cout << "Оклад";
  118.     cout.setf(ios::left);
  119.     cout.width(strsize);
  120.     cout << "Стаж работы";
  121.     cout.setf(ios::left);
  122.     cout.width(strsize);
  123.     cout << "Дата рождения" << endl;
  124.     while (fin4.read((char*)&w1, sizeof w1)) {
  125.         w1.out();
  126.     }
  127.     cout << endl;
  128.     fin4.close();
  129.     int day = 28, month = 11, year = 2017;
  130.     char f[2], g[4];
  131.     ifstream fin5("data.txt", ios::binary | ios::in);
  132.     int stazh;
  133.     cout << "Введите нужную границу стажа работы" << endl;
  134.     cin >> stazh;
  135.     cout << endl;
  136.     cout << "Выводим список сотрудников пенсионного возраста с стажем работы не менее " << stazh << endl;
  137.     cout.setf(ios::left);
  138.     cout.width(strsize);
  139.     cout << "Табельный №";
  140.     cout.setf(ios::left);
  141.     cout.width(strsize);
  142.     cout << "Фамилия сотрудника";
  143.     cout.setf(ios::left);
  144.     cout.width(strsize);
  145.     cout << "Должность";
  146.     cout.setf(ios::left);
  147.     cout.width(strsize);
  148.     cout << "Оклад";
  149.     cout.setf(ios::left);
  150.     cout.width(strsize);
  151.     cout << "Стаж работы";
  152.     cout.setf(ios::left);
  153.     cout.width(strsize);
  154.     cout << "Дата рождения" << endl;
  155.     int q;
  156.     while (fin5.read((char*)&w1, sizeof w1)) {
  157.         if (w1.stazh >= stazh) {
  158.             g[0] = w1.birthdate[6];
  159.             g[1] = w1.birthdate[7];
  160.             g[2] = w1.birthdate[8];
  161.             g[3] = w1.birthdate[9];
  162.             q = atoi(g);
  163.             if (year - q > 64) {
  164.                 if (q == 65) {
  165.                     f[0] = w1.birthdate[3];
  166.                     f[1] = w1.birthdate[4];
  167.                     q = atoi(f);
  168.                     if (q - month > 0) {
  169.                         w1.out();
  170.                     }
  171.                     else {
  172.                         if (q == 0) {
  173.                             f[0] = w1.birthdate[0];
  174.                             f[1] = w1.birthdate[1];
  175.                             q = atoi(f);
  176.                             if (q - day >= 0) {
  177.                                 w1.out();
  178.                             }
  179.                         }
  180.                     }
  181.                 }
  182.                 else {
  183.                     w1.out();
  184.                 }
  185.             }
  186.         }
  187.     }
  188.     fin5.close();
  189.     int oklad;
  190.     cout << endl;
  191.     cout << "Введите нужную границу оклада" << endl;
  192.     cin >> oklad;
  193.     cout << endl;
  194.     cout << "Выводим список сотрудников, оклад которых превышает указанную величину" << endl;
  195.     ifstream fin6("data.txt", ios::binary | ios::in);
  196.     cout.setf(ios::left);
  197.     cout.width(strsize);
  198.     cout << "Фамилия сотрудника";
  199.     cout.setf(ios::left);
  200.     cout.width(strsize);
  201.     cout << "Должность";
  202.     cout.setf(ios::left);
  203.     cout.width(strsize);
  204.     cout << "Оклад" << endl;
  205.     while (fin6.read((char*)&w1, sizeof w1)) {
  206.         if (w1.zp > oklad) {
  207.             cout.setf(ios::left);
  208.             cout.width(strsize);
  209.             cout << w1.fio;
  210.             cout.setf(ios::left);
  211.             cout.width(strsize);
  212.             cout << w1.dol;
  213.             cout.setf(ios::left);
  214.             cout.width(strsize);
  215.             cout << w1.zp << endl;
  216.         }
  217.     }
  218.     system("pause");
  219. }
Add Comment
Please, Sign In to add comment