Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include "iostream"
- #include "stdio.h"
- #include "conio.h"
- #include "iomanip"
- #include "fstream"
- #include "string"
- #include "windows.h"
- using namespace std;
- string ver = "0.9.9 RC 3";
- struct our_data {
- int tab_num;
- char fio[30];
- int god_rozhdeniya;
- int pol;
- char professiya[10];
- int staj_raboty;
- int razryad;
- int nomer_zeha;
- int nomer_uchastka;
- int summa_zp;
- };
- struct worker {
- our_data d;
- worker *next;
- };
- worker *st = 0, *en = 0;
- int zcount = 0;
- char file[30] = "workers.bin";
- char filetxt[30] = "workers.txt";
- char filereport[30] = "report.txt";
- void input_clear()
- {
- cin.clear();
- fflush(stdin);
- }
- void msg(string s, int arg = 0, int delay = 1500)
- //вывод сообщения
- {
- system("color B0");
- if (arg == 1)
- {
- system("cls");
- cout << endl << endl;
- cout << " +---------------------------------------------------+" << endl;
- }
- cout << " | " << s << setw(46 - s.length()) << " |" << endl;
- cout << " +---------------------------------------------------+" << endl;
- if (delay >= 0) Sleep(delay);
- else cin.get();
- system("color F0");
- return;
- }
- void print(int k = 0, worker *tmp = NULL, int i = 1)
- // вывод элемента
- // key: 0 - шапка
- // 1 - 1 элемент
- // 2 - элемент
- // 3 - разделитель
- // 4 - разделитель и пауза
- // 5 - продолжение
- // 6 - конец списка
- {
- if ((k == 0) || (k == 1))
- {
- system("cls");
- cout << "+-----------------------------------------------------------------------------------------------------------------+\n";
- cout << "| № | Таб. № | ФИО | Год р.| Пол | Профессия | Стаж | Разряд | цех № | № уч.| Сумма З.П.|\n";
- cout << "+-----------------------------------------------------------------------------------------------------------------+\n";
- }
- if ((k == 1) || (k == 2))
- if (tmp) printf("|%2d | %-6d | %-29s | %-5d |%4d |%10s |%5d |%7d |%6d |%5d |%10d |\n", i, tmp->d.tab_num, tmp->d.fio, tmp->d.god_rozhdeniya, tmp->d.pol, tmp->d.professiya, tmp->d.staj_raboty, tmp->d.razryad, tmp->d.nomer_zeha, tmp->d.nomer_uchastka, tmp->d.summa_zp);
- else cout << "Выход за пределы допустимой области памяти" << endl;
- if (k == 3)
- cout << "+-----------------------------------------------------------------------------------------------------------------+" << endl;
- if ((k == 1) || (k == 4)) {
- cout << "+-----------------------------------------------------------------------------------------------------------------+" << endl;
- system("pause");
- }
- if (k == 5)
- cout << "| * | ---== ............ ==--- * |" << endl;
- if (k == 6)
- cout << "| * | ---== Конец списка ==--- * |" << endl;
- }
- void view()
- // просмотр 2
- {
- system("TITLE Просмотр списка");//заголовок консоли
- worker *tmp = st;
- int vnum = 4;
- int ibeg = 1, iend = vnum;
- int stop = 0;
- int a;
- if (!st)
- {
- msg("Список пуст", 1, -1);
- return;
- }
- while (1)
- {
- tmp = st;
- for (int count = 1; count < ibeg; count++)
- {
- tmp = tmp->next;
- if (count >= zcount) { stop = 1; break; }
- }
- print(0); //шапка
- if (stop != 1)
- for (int count = ibeg; count <= iend; count++)
- {
- print(2, tmp, count); //печать элемента
- if (count >= zcount)
- {
- print(6);
- print(3);
- stop = 1;
- break;
- }
- tmp = tmp->next;
- }
- if (stop != 1)
- {
- print(5);
- print(3);
- }
- cout << "Навигация: <вверх>, <вниз>, Enter или ESC для выхода" << endl;
- do a = _getch();
- while (a == 224);
- switch ((int)a) {
- case 80: //down
- if (zcount > vnum)
- {
- if (stop == 1)
- {
- ibeg = 1;
- iend = vnum;
- }
- else
- {
- ibeg++;
- iend++;
- }
- }
- if (stop == 1)
- stop = 0;
- break;
- case 72: //up
- if (zcount > vnum)
- {
- if (ibeg == 1)
- {
- iend = zcount;
- ibeg = iend - vnum + 1;
- }
- else
- {
- iend--;
- ibeg--;
- }
- }
- if (stop == 1)
- stop = 0;
- break;
- case 13: case 27: return; // esc / enter
- }
- }
- }
- worker scan(int k = 0) {
- // ввод полей записи
- worker el;
- el.next = NULL;
- cout << "ФИО: "; cin >> el.d.fio;
- if (el.d.fio[0] == '*') return el;
- while (!cin) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.fio;
- }
- input_clear();
- if (k == 1) return el;
- cout << "Табельный номер: "; cin >> el.d.tab_num;
- while ((!cin) || (el.d.tab_num <= 0) || (el.d.tab_num > 999999)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.tab_num;
- }
- input_clear();
- cout << "Год рождения: "; cin >> el.d.god_rozhdeniya;
- while ((!cin) || (el.d.god_rozhdeniya < 0) || (el.d.god_rozhdeniya > 2015)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.god_rozhdeniya;
- }
- input_clear();
- cout << "Пол(1/0): "; cin >> el.d.pol;
- while ((!cin) || (el.d.pol < 0) || (el.d.pol > 1)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.pol;
- }
- input_clear();
- cout << "Профессия: "; cin >> el.d.professiya;
- while (!cin) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.professiya;
- }
- input_clear();
- cout << "Стаж: "; cin >> el.d.staj_raboty;
- while ((!cin) || (el.d.staj_raboty < 0) || (el.d.staj_raboty > 100)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.staj_raboty;
- }
- input_clear();
- cout << "Разряд: "; cin >> el.d.razryad;
- while ((!cin) || (el.d.razryad < 0) || (el.d.razryad > 20)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.razryad;
- }
- input_clear();
- cout << "№ цеха: "; cin >> el.d.nomer_zeha;
- while ((!cin) || (el.d.nomer_zeha < 0) || (el.d.nomer_zeha > 100)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.nomer_zeha;
- }
- input_clear();
- cout << "№ участка: "; cin >> el.d.nomer_uchastka;
- while ((!cin) || (el.d.nomer_uchastka < 0) || (el.d.nomer_uchastka > 100)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.nomer_uchastka;
- }
- input_clear();
- cout << "Сумма З.П.: "; cin >> el.d.summa_zp;
- while ((!cin) || (el.d.summa_zp < 0) || (el.d.summa_zp > 1000000)) {
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin.ignore();
- cin >> el.d.summa_zp;
- }
- input_clear();
- return el;
- }
- void sort(int s = 0) {
- //сортировка списка
- if (s == 0) {
- msg("Сортировка списка (по ФИО)", 1, 200);
- system("TITLE Сортировка списка (по ФИО)");//заголовок консоли
- }
- worker *ptr = st, *tmp = NULL, *prev = NULL;
- bool flag = false;
- if (st)
- {
- do
- {
- flag = false;
- ptr = st;
- while (ptr->next)
- {
- if (strcmp(ptr->d.fio, ptr->next->d.fio) > 0)
- {
- if (ptr == st)
- {
- tmp = ptr;
- ptr = tmp->next;
- tmp->next = ptr->next;
- ptr->next = tmp;
- st = ptr;
- flag = true;
- }
- else
- {
- tmp = ptr;
- ptr = tmp->next;
- tmp->next = ptr->next;
- ptr->next = tmp;
- prev->next = ptr;
- flag = true;
- }
- }
- prev = ptr;
- ptr = ptr->next;
- en = ptr;
- }
- } while (flag);
- if (s == 0) msg("Список отсортирован.", 0, 1000);
- }
- else
- if (s == 0) msg("Список пуст. Сортировать нечего", 1, 1500);
- }
- void addnew(worker el, int ns = 0)
- //добавление элемента
- {
- if (el.d.fio[0] == '*') return;
- if (!st) {
- st = new worker;
- *st = el;
- st->next = NULL;
- en = st;
- }
- else
- {
- worker *tmp;
- tmp = new worker;
- *tmp = el;
- en->next = tmp;
- en = tmp;
- en->next = NULL;
- }
- if (ns == 0) sort(1);
- zcount++;
- }
- void create() {
- //Организация списка
- system("TITLE Организация списка");//заголовок консоли
- system("cls");
- worker el;
- while (1)
- {
- el = scan();
- if (el.d.fio[0] != '*') addnew(el);
- else break;
- }
- sort(1);
- return;
- }
- int delall() {
- //Очистка списка final
- system("TITLE Очистка списка");//заголовок консоли
- char mark[2];
- for (int f = 0; f <= 1; f++) mark[f] = ' ';
- int choise = 0;
- while (true)
- {
- system("cls");
- mark[choise] = '>';
- cout << "+-----------------------+" << endl;
- cout << "! Удаление всего списка !" << endl;
- cout << "+-----------------------+" << endl;
- cout << "! Хотите продолжить? !" << endl;
- cout << "+-----------------------+" << endl;
- cout << mark[0] << " Да" << endl;
- cout << mark[1] << " Нет" << endl;
- cout << "+-----------------------+" << endl;
- int a;
- do a = _getch();
- while (a == 224);
- switch ((int)a) {
- case 80: {
- mark[choise] = ' ';
- if (choise < 1) choise++;
- else choise = 0;
- break;
- }
- case 72: {
- mark[choise] = ' ';
- if (choise > 0) choise--;
- else choise = 1;
- break;
- }
- case 13: case 27: {
- switch (choise) {
- case 0:
- {
- worker *temp;
- if (st == NULL) return 0;
- while (1)
- {
- temp = st;
- st = st->next;
- delete temp;
- if (st == NULL) break;
- };
- en = NULL;
- zcount = 0;
- msg("Список очищен", 1, 1000);
- return 1;
- }
- case 1:return 0;
- }
- break;
- }
- }
- }
- }
- void delzap(int n = 0, int s = 0) {
- //удаление записи final
- // n номер для удаления
- // s флаг тихого режима
- worker *tmp = st, *tmp2;
- int a;
- if (s == 0)
- {
- if (n == 0)
- {
- system("cls");
- system("TITLE Удаление");//заголовок консоли
- cout << "Введите номер удаляемого элемента (0 для отмены)" << endl;
- cin >> n;
- while ((!cin) || (n < 0) || (n > zcount)) {
- cin.ignore();
- cin.clear();
- fflush(stdin);
- cout << "[ОШИБКА ВВОДА или запись по данному номеру отсутствует]" << endl;
- cin >> n;
- }
- }
- }
- if (n == 0) return;
- if (n == 1) //удаление первого
- {
- while (true)
- {
- if (s == 0)
- {
- cout << "Будет удален элемент" << endl;
- print(0);
- print(2, st, n);
- print(3);
- cout << "Нажмите Enter для продолжения или ESC для отмены" << endl;
- a = _getch();
- }
- else a = 13;
- switch ((int)a)
- {
- case 27: return; //esc
- case 13: {
- st = tmp->next;
- delete tmp;
- if (s == 0)
- {
- cout << "Элемент удален" << endl;
- system("pause");
- }
- zcount--;
- return;
- }
- default: cout << "Неправильный ввод" << endl;
- }
- }
- }
- else // удаление не первого
- {
- for (int i = 2; i < n; i++) tmp = tmp->next;
- tmp2 = tmp->next;
- while (true)
- {
- if (s == 0)
- {
- cout << "Будет удален элемент" << endl;
- print(0);
- print(2, tmp2, n);
- print(3);
- cout << "Нажмите Enter для продолжения или ESC для отмены" << endl;
- a = _getch();
- }
- else a = 13;
- switch ((int)a)
- {
- case 27: return; //esc
- case 13: {
- if (tmp2->next)
- tmp->next = tmp->next->next;
- else
- {
- tmp->next = NULL;
- en = tmp;
- }
- delete tmp2;
- if (s == 0)
- {
- cout << "Элемент удален" << endl;
- system("pause");
- }
- zcount--;
- return;
- }
- default: cout << "Неправильный ввод" << endl;
- }
- }
- }
- }
- int read() { //чтение из бинарного файла
- int i = 0;
- worker el;
- ifstream fin(file, ios::binary | ios::in);
- if (!fin) {
- msg("Не могу откыть файл", 1, 0);
- msg("или файл не существует", 0, 1000);
- return -1;
- }
- else {
- fin.seekg(0, ios::beg);
- while (fin.read((char*)&(el.d), sizeof our_data))
- {
- el.next = NULL;
- addnew(el, 1);
- i++;
- }
- }
- zcount = i;
- fin.close();
- sort(1);
- return i;
- }
- void correct(int i = 0)
- //редактирование записи
- {
- system("cls");
- system("TITLE Редактирование записи");//заголовок консоли
- if (i == 0) {
- cout << "Введите номер записи (0 для отмены): ";
- cin >> i;
- }
- if (i == 0) return;
- if (i > zcount) {
- msg("Такого элемента нет в списке или список пуст", 1, 1500);
- return;
- }
- worker *tmp = st, *tmp2;
- if (i != 1)
- for (int ii = 1; ii < i; ii++) {
- tmp2 = tmp;
- tmp = tmp->next;
- }
- worker tempzap = *tmp;
- tempzap.next = NULL;
- char mark[12];
- for (int f = 0; f <= 11; f++) mark[f] = ' ';
- int choise = 0;
- while (true)
- {
- system("cls");
- print(0);
- print(2, tmp, i);
- print(3);
- mark[choise] = '>';
- cout << "+-----------------------------------+" << endl;
- cout << "Редактирование записи № " << i << endl;
- cout << "+-----------------------------------+" << endl;
- cout << mark[0] << " Таб. номер: " << tempzap.d.tab_num << endl;
- cout << mark[1] << " ФИО: " << tempzap.d.fio << endl;
- cout << mark[2] << " Год рождения: " << tempzap.d.god_rozhdeniya << endl;
- cout << mark[3] << " Пол:" << tempzap.d.pol << endl;
- cout << mark[4] << " Профессия: " << tempzap.d.professiya << endl;
- cout << mark[5] << " Стаж: " << tempzap.d.staj_raboty << endl;
- cout << mark[6] << " Разряд: " << tempzap.d.razryad << endl;
- cout << mark[7] << " № цеха: " << tempzap.d.nomer_zeha << endl;
- cout << mark[8] << " № участка: " << tempzap.d.nomer_uchastka << endl;
- cout << mark[9] << " Сумма З.П.: " << tempzap.d.summa_zp << endl << endl;
- cout << "+-----------------------------------+" << endl;
- cout << mark[10] << " *Сохранить и выйти* " << endl;
- cout << mark[11] << " *Отмена (Esc)* " << endl;
- cout << "+-----------------------------------+" << endl;
- int a;
- do a = _getch();
- while (a == 224);
- switch ((int)a) {
- case 80: { //down
- mark[choise] = ' ';
- if (choise < 11) choise++;
- else choise = 0;
- break;
- }
- case 72: { //up
- mark[choise] = ' ';
- if (choise > 0) choise--;
- else choise = 11;
- break;
- }
- case 13: { //enter
- cout << "Введите новое значение поля: " << endl;
- switch (choise) {
- case 0:
- cin >> tempzap.d.tab_num;
- while ((!cin) || (tempzap.d.tab_num <= 0) || (tempzap.d.tab_num > 999999)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.tab_num;
- }
- input_clear();
- break;
- case 1:
- cin >> tempzap.d.fio;
- while (!cin) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.fio;
- }
- input_clear();
- break;
- case 2:
- cin >> tempzap.d.god_rozhdeniya;
- while ((!cin) || (tempzap.d.god_rozhdeniya < 0) || (tempzap.d.god_rozhdeniya > 2015)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.god_rozhdeniya;
- }
- input_clear();
- break;
- case 3:
- cin >> tempzap.d.pol;
- while ((!cin) || (tempzap.d.pol < 0) || (tempzap.d.pol > 1)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.pol;
- }
- input_clear();
- break;
- case 4:
- cin >> tempzap.d.professiya;
- while (!cin) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.professiya;
- }
- input_clear();
- break;
- case 5:
- cin >> tempzap.d.staj_raboty;
- while ((!cin) || (tempzap.d.staj_raboty < 0) || (tempzap.d.staj_raboty > 100)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.staj_raboty;
- }
- input_clear();
- break;
- case 6:
- cin >> tempzap.d.razryad;
- while ((!cin) || (tempzap.d.razryad < 0) || (tempzap.d.razryad > 20)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.razryad;
- }
- input_clear();
- break;
- case 7:
- cin >> tempzap.d.nomer_zeha;
- while ((!cin) || (tempzap.d.nomer_zeha < 0) || (tempzap.d.nomer_zeha > 100)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.nomer_zeha;
- }
- input_clear();
- break;
- case 8:
- cin >> tempzap.d.nomer_uchastka;
- while ((!cin) || (tempzap.d.nomer_uchastka < 0) || (tempzap.d.nomer_uchastka > 100)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.nomer_uchastka;
- }
- input_clear();
- break;
- case 9:
- cin >> tempzap.d.summa_zp;
- while ((!cin) || (tempzap.d.summa_zp < 0) || (tempzap.d.summa_zp > 1000000)) {
- cin.ignore();
- input_clear();
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> tempzap.d.summa_zp;
- }
- input_clear();
- break;
- case 10:
- delzap(i, 1);
- addnew(tempzap);
- return;
- break;
- case 11: return;
- default: msg("error", 1, 500);
- }
- break;
- }
- case 27: return; //esc
- }
- }
- }
- void save(string file, int s = 0) {
- if (s == 0) {
- msg("Сохранение базы данных...", 1, 0);
- msg(file, 0, 500);
- }
- worker *tmp = st;
- ofstream fout(file, ios::binary | ios::out);
- if (!fout)
- {
- if (s == 0) msg("Не могу открыть файл для записи", -1, 1000);
- return;
- }
- else
- {
- while (tmp)
- {
- fout.write((char*)&tmp->d, sizeof our_data);
- tmp = tmp->next;
- }
- fout.close();
- if (s == 0) msg("Успешное сохранение", 0, 1500);
- }
- return;
- }
- void save_txt(char filetxt[30])
- {
- msg("Сохранение базы данных", 1, 0);
- msg("В текстовый файл", 0, 0);
- msg(filetxt, 0, 1000);
- if (!st)
- {
- msg("Список пустой, записывать нечего!", 1, 1000);
- _getch();
- }
- else
- {
- FILE *f;
- fopen_s(&f, filetxt, "w");
- rewind(f);
- char buf[30];
- int count = 1;
- worker *tmp = st;
- fprintf(f, "+-----------------------------------------------------------------------------------------------------------------+\n");
- fprintf(f, "| № | Таб. № | ФИО | Год р.| Пол | Профессия | Стаж | Разряд | цех № | № уч.| Сумма З.П.|\n");
- fprintf(f, "+-----------------------------------------------------------------------------------------------------------------+\n");
- while (1)
- {
- fprintf(f, "|%2d | %-6d | %-29s | %-5d |%4d |%10s |%5d |%7d |%6d |%5d |%10d |\n", count, tmp->d.tab_num, tmp->d.fio, tmp->d.god_rozhdeniya, tmp->d.pol, tmp->d.professiya, tmp->d.staj_raboty, tmp->d.razryad, tmp->d.nomer_zeha, tmp->d.nomer_uchastka, tmp->d.summa_zp);
- if (tmp == en)
- {
- fprintf(f, "+-----------------------------------------------------------------------------------------------------------------+\n");
- break;
- }
- count++;
- tmp = tmp->next;
- }
- fclose(f);
- }
- }
- void save_exit(int ss) {
- if (ss == 0)
- {
- msg("Выход", 1, 1000);
- return;
- }
- else if (ss == 1)
- {
- msg("Список был изменен", 1, 500);
- save(file);
- return;
- }
- else if (ss == 2)
- {
- msg("Список был очищен", 1, 500);
- return;
- }
- }
- void process(char filereport[30], int k = 0) {
- system("TITLE Отчет");//заголовок консоли
- system("cls");
- system("color B0");
- FILE *f;
- fopen_s(&f, filereport, "w");
- rewind(f);
- worker* tmp = st;
- char strtmp[87];
- char buf[30];
- int r1 = 0, r2 = 0, r3 = 0, t = 0, sti = 0, fini = 0;
- float mp = 0, wp = 0;
- cout << "Сохранить отчет в файл? (1/0): ";
- cin >> k;
- while ((!cin) || (k < 0) || (k > 1)) {
- cin.ignore();
- cin.clear();
- fflush(stdin);
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> k;
- }
- system("cls");
- if (k == 1)
- {
- fputs("+---------+--------------------------------+-------+\n", f);
- fputs("| | Количество рабочих по разрядам | |\n", f);
- fputs("| Стаж |----------+----------+----------| Всего |\n", f);
- fputs("| | 1 | 2 | 3 | |\n", f);
- fputs("+---------+----------+----------+----------+-------+\n", f);
- }
- cout << "+---------+--------------------------------+-------+\n";
- cout << "| | Количество рабочих по разрядам | |\n";
- cout << "| Стаж |----------+----------+----------| Всего |\n";
- cout << "| | 1 | 2 | 3 | |\n";
- cout << "+---------+----------+----------+----------+-------+\n";
- for (int s = 0; s <= 25; s += 5)
- {
- sti = s + 1;
- if (s == 0)
- sti = 0;
- fini = s + 6;
- if (s == 25)
- fini = 100;
- tmp = st;
- while (tmp != NULL)
- {
- if ((tmp->d.staj_raboty >= sti) && (tmp->d.staj_raboty <= fini))
- {
- if (tmp->d.razryad == 1) r1++;
- if (tmp->d.razryad == 2) r2++;
- if (tmp->d.razryad == 3) r3++;
- }
- tmp = tmp->next;
- }
- t = r1 + r2 + r3;
- if (t > 0)
- {
- printf("| %2d - %2d | %8d | %8d | %8d | %5d |\n", sti, fini, r1, r2, r3, t);
- cout << "+---------+----------+----------+----------+-------+\n";
- if (k == 1)
- {
- fprintf(f, "| %2d - %2d | %8d | %8d | %8d | %5d |\n", sti, fini, r1, r2, r3, t);
- fprintf(f, "+---------+----------+----------+----------+-------+\n");
- }
- }
- r1 = 0; r2 = 0; r3 = 0; t = 0;
- }
- if (k == 1)
- fclose(f);
- system("pause");
- return;
- }
- void backup()
- {
- save("backup.bin", 1);
- msg("Backup создан", 1, 0);
- msg("Файл: backup.bin", 0, 500);
- }
- int search()
- {
- system("TITLE Поиск элементов ");//заголовок консоли
- worker* tmp = st;
- int count = 0;
- int ret = 0;
- cout << "Поиск" << endl;
- worker in = scan(1);
- print(0);
- while (tmp != NULL)
- {
- count++;
- if (strcmp(tmp->d.fio, in.d.fio) == 0)
- {
- ret = count;
- print(2, tmp, count);
- }
- tmp = tmp->next;
- }
- if (ret == 0)
- cout << "| * | ---== элементов не найдено ==--- * |" << endl;
- print(4);
- return ret;
- // 0 - было найдено более 1й записи с заданными параметрами
- }
- void changefile()
- {
- int key = 0;
- system("cls");
- cout << "+-----------------------------------+" << endl;
- cout << "| 1 - File: " << file << endl;
- cout << "| 2 - FileTXT: " << filetxt << endl;
- cout << "| 3 - FileReport: " << filereport << endl;
- cout << "+-----------------------------------+" << endl;
- cout << "Введите номер файла для изменения (0 для отмены):";
- cin >> key;
- switch (key)
- {
- case 1:
- cout << "Введите новое имя File: ";
- cin >> file;
- while (!cin) {
- cin.ignore();
- cin.clear();
- fflush(stdin);
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> file;
- cout << endl;
- }
- key = 0;
- break;
- case 2:
- cout << "Введите новое имя FileTXT: ";
- cin >> filetxt;
- while (!cin) {
- cin.ignore();
- cin.clear();
- fflush(stdin);
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> filetxt;
- cout << endl;
- }
- break;
- case 3:
- cout << "Введите новое имя FileReport: ";
- cin >> filereport;
- while (!cin) {
- cin.ignore();
- cin.clear();
- fflush(stdin);
- cout << "[ОШИБКА, повторите ввод]" << endl;
- cin >> filereport;
- cout << endl;
- }
- break;
- case 0: return;
- }
- if (key == 0)
- {
- system("cls");
- cout << "+------------------------------------------+" << endl;
- cout << "| Очистить список и считать данные заново? |" << endl;
- cout << "| Enter для продолжения или ESC для отмены |" << endl;
- cout << "+------------------------------------------+" << endl;
- key = _getch();
- if (key == 13)
- {
- worker *temp;
- if (st != NULL)
- while (1)
- {
- temp = st;
- st = st->next;
- delete temp;
- if (st == NULL) break;
- };
- en = NULL;
- cout << "Список очищен." << endl;
- cout << "+-----------------------------------+" << endl;
- read();
- cout << "Файл считан." << endl;
- cout << "+-----------------------------------+" << endl;
- Sleep(1000);
- }
- else return;
- }
- system("pause");
- }
- int main_menu()
- {
- system("TITLE Главное меню: КП АиП © Лина Соколова 2018");//заголовок консоли
- system("color F0");
- int c = 1;
- string mark[12];
- for (int f = 0; f <= 11; f++) mark[f] = " ";
- while (1) {
- system("cls");
- mark[c] = "[>";
- cout << "+-+-----------------------------------+" << endl;
- cout << "| | В списке записей: " << setw(7) << zcount << " |" << endl;
- cout << "+-+-----------------------------------+" << endl;
- cout << "| | Меню |" << endl;
- cout << "+-+-----------------------------------+" << endl;
- cout << mark[1] << "| 1-Начаьное создание списка |" << endl;
- cout << mark[2] << "| 2-Просмотр записей |" << endl;
- cout << mark[3] << "| 3-Добавление записи |" << endl;
- cout << mark[4] << "| 4-Удаление записи |" << endl;
- cout << mark[5] << "| 5-Редактирование записи |" << endl;
- cout << mark[6] << "| 6-Поиск элементов |" << endl;
- cout << mark[7] << "| 7-Сохранение |" << endl;
- cout << mark[8] << "| 8-Сохранение в текстовый файл |" << endl;
- cout << mark[9] << "| 9-Обработка таблицы (отчет) |" << endl;
- cout << mark[10] << "| 10-Очистка списка |" << endl;
- cout << mark[11] << "| 0-Выход (Esc) |" << endl;
- cout << "+-+-----------------------------------+\n";
- cout << "| Tab - Изменить файлы ввода/вывода |" << endl;
- cout << "+-------------------------------------+\n";
- int a;
- do a = _getch();
- while (a == 224);
- switch ((int)a) {
- case 80: {
- mark[c] = " ";
- if (c < 11) c++;
- else c = 1;
- break;
- }
- case 72: {
- mark[c] = " ";
- if (c > 1) c--;
- else c = 11;
- break;
- }
- case 13: {
- return c;
- break;
- }
- case 115: return 115; //s
- case 9: return 88; break; //tab
- case 27: return 99; break; //esc
- default: cout << "main got symbol: " << a << endl; Sleep(1000);
- }
- }
- }
- int main()
- {
- system("mode con lines=30 cols=120");
- system("color F0");
- setlocale(LC_ALL, "rus");
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- read();
- backup();
- int mod = 0; //флаг изменения списка
- while (1)
- {
- switch (main_menu())
- {
- case 0: return 0;
- case 1: create(); mod = 1; break;
- case 2: view(); break;
- case 3: addnew(scan()); mod = 1; break;
- case 4: delzap(); mod = 1; break;
- case 5: correct(); mod = 1; break;
- case 6: search(); break;
- case 7: save(file); mod = 0; break;
- case 8: save_txt(filetxt); break;
- case 9: process(filereport); break;
- case 10: if (delall() == 1) mod = 2; break;
- case 11: save_exit(mod); return 0; break;
- case 115: sort(); mod = 1; break;
- case 88: changefile(); break;
- case 99: save_exit(mod); return 0;
- default: {cout << "main получил неизвестный символ " << endl; Sleep(1000); }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement