Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 1.) Составить программу, которая содержит текущую информацию о работниках организации.
- Сведения о работнике включают:
- • фамилия и инициалы работника;
- • название занимаемой должности;
- • год поступления на работу;
- 2.) Программа должна обеспечивать:
- • хранение сведений обо всех работниках в виде односвязного списка (очередь);
- • добавление новых работников в список;
- • удаление работников из списка, фамилия которого введена с клавиатуры;
- • вывод сведений обо всех работниках;
- • по запросу выводятся сведения о работниках, чей стаж работы в организации превышает значение, введенное с клавиатуры.
- 3.) Программа должна обеспечивать диалог с помощью меню.
- */
- #include <stdio.h>
- #include <dos.h>
- #include "conio.h"
- #include <cstdlib>
- #include <string>
- #include <limits>
- #include <iostream>
- #include <clocale>
- #include "locale.h"
- #include "ctype.h"
- #include <windows.h>
- using namespace std;
- void Cleaning() {
- cin.clear();
- while (cin.get() != '\n');
- }
- struct WORKER {
- int number;
- string fio;
- string position;
- int year;
- struct WORKER* next;
- };
- WORKER* input(WORKER*);
- void output(WORKER**);
- int search(WORKER**);
- WORKER* insert(WORKER**);
- void help();
- void info();
- int menu();
- WORKER* remove(WORKER** worker, string _nameWorkerRemoval, int* numberOfRecords);
- string _driver, _nameWorkerRemoval;
- int numberOfRecords = 0;
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- bool flag_out = false;
- bool flag_1 = false;
- static WORKER* worker = NULL;
- do {
- switch (menu()) {
- system("cls"); //операция выбора пункта меню
- case 1:
- worker = input(worker);
- flag_1 = true;
- break;
- case 2:
- if (flag_1 == true) {
- system("cls");
- insert(&worker);
- cout << "\n\n Для перехода в меню нажмите любую клавишу...";
- }
- else { cout << "Информация о работниках еще не заполнена, нажмите любую клавишу для продолжения..."; }
- _getwch();
- break;
- case 3:
- if (flag_1 == true) {
- system("cls");
- remove(&worker, _nameWorkerRemoval, &numberOfRecords);
- cout << "\n\n Для перехода в меню нажмите любую клавишу...";
- _getch();
- }
- else { cout << "Информация о работниках еще не заполнена, нажмите любую клавишу для продолжения..."; }
- _getwch();
- break;
- case 4:
- if (flag_1 == true) {
- output(&worker);
- }
- else { cout << "Информация о работниках еще не заполнена, нажмите любую клавишу для продолжения..."; }
- _getwch();
- break;
- case 5:
- if (flag_1 == true) {
- search(&worker);
- }
- else { cout << "Информация о работниках еще не заполнена, нажмите любую клавишу для продолжения..."; }
- _getwch();
- break;
- case 6:
- help();
- break;
- case 7:
- info();
- break;
- case 8: flag_out = true;// функция выхода из программы
- }
- } while (flag_out == false);
- return 0;
- }
- int menu() {
- int nomber_menu_int = 0;
- bool flag = false;
- char nomber_menu_char[2];//масив для считывания номера
- do {
- system("cls");
- cout << "Меню" << endl;
- cout << "1. Создать информацию о работниках организации" << endl;
- cout << "2. Добавить информацию о работнике " << endl;
- cout << "3. Удалить информацию о работнике " << endl;
- cout << "4. Вывод информации о работниках организации " << endl;
- cout << "5. Поиск работников по стажу " << endl;
- cout << "6. Помощь " << endl;
- cout << "7. О программе" << endl;
- cout << "8. Выход" << endl;
- nomber_menu_char[0] = _getwch();// cчитывание пункта масива
- nomber_menu_int = atoi(nomber_menu_char);// преоброзование символа в номер
- if ((nomber_menu_int > 0) && (nomber_menu_int < 9)) { flag = true; };
- } while (flag == false);
- return nomber_menu_int;
- }
- WORKER* insert(WORKER** worker) {
- struct WORKER* current = *worker;
- struct WORKER* previous = NULL;
- struct WORKER* new_node;
- while (current) {
- previous = current;
- current = current->next;
- }
- new_node = new WORKER;
- new_node->number = 0;
- cout << " Работник № " << new_node->number << endl;
- getline(cin, new_node->fio);
- cout << " Введите фамилию и инициалы работника (через пробел) -> ";
- getline(cin, new_node->fio);
- cout << " Название должности -> ";
- getline(cin, new_node->position);
- cout << " Год устройства на работу -> ";
- cin >> new_node->year;
- cout << endl << endl;
- if (previous) {
- new_node->next = NULL;
- previous->next = new_node;
- }
- else {
- *worker = new_node;
- (*worker)->next = NULL;
- }
- return (*worker);
- }
- WORKER* input(WORKER* worker) {
- //WORKER* mas;
- system("cls");
- //запрос количества элементов
- bool flag = false;
- int dln;
- //маленькая защита
- do {
- char string_size[10];
- cout << "Введите количество работников (не более 10) -> ";
- cin >> string_size;
- dln = atoi(string_size);
- if ((dln > 0) && (dln < 10)) { flag = true; };
- } while (flag == false);
- //выделение памяти
- // цикл ввода данных
- for (int i(0); i < dln; i++) {
- insert(&worker);
- };
- cout << "\n\n Для перехода в меню нажмите любую клавишу...";
- _getwch();
- return worker;
- }
- WORKER* remove(WORKER** worker, string _nameWorkerRemoval, int* numberOfRecords)
- {
- WORKER* current = *worker;
- WORKER* previous = nullptr;
- char proof;
- int numberOfMatches = 0, bookNumber;
- getline(cin, _nameWorkerRemoval);
- cout << " Введите название книги, которую нужно удалить: ";
- getline(cin, _nameWorkerRemoval);
- while (current) {
- if (current->position == _nameWorkerRemoval) {
- cout << "|--------------------------|---------------------------|" << endl;
- cout << "| Работник № | " << numberOfMatches << endl;
- cout << "| ФИО: | " << current->fio << endl;
- cout << "| Название книги: | " << current->position << endl;;
- cout << "| Год издания: | " << current->year << endl;
- cout << "|--------------------------|---------------------------|" << endl;
- cout << endl;
- numberOfMatches++;
- }
- previous = current;
- current = current->next;
- }
- current = *worker;
- previous = nullptr;
- if (numberOfMatches > 0) {
- if (numberOfMatches > 1) {
- cout << endl << " Найденные книги." << endl << endl
- << " Введите номер книги, которую вы хотите удалить -> ";
- while (!(cin >> bookNumber) || (cin.peek() != '\n') || (bookNumber <= 0) || (bookNumber > numberOfMatches)) {
- Cleaning();
- cout << " Ошибка! Выберите книгу с номером от 1 до " << numberOfMatches << ": ";
- }
- Cleaning();
- for (int i = 0; i < bookNumber; i++) {
- while (current->position != _nameWorkerRemoval) {
- previous = current;
- current = current->next;
- }
- if (i != (bookNumber - 1)) {
- previous = current;
- current = current->next;
- }
- }
- }
- else {
- while (current->position != _nameWorkerRemoval) {
- previous = current;
- current = current->next;
- }
- }
- cout << endl << " Вы уверены, что хотите удалить эту книгу? (Y/N)" << endl;
- cin >> proof;
- Cleaning();
- if (proof == 'y' || proof == 'Y') {
- if (!previous) { //Первый элемент
- *worker = (*worker)->next;
- free(current);
- }
- else {
- if (!(current->next)) { //Конец
- previous->next = current->next;
- free(current);
- }
- else { //Середина
- previous->next = current->next;
- free(current);
- }
- }
- *numberOfRecords--;
- system("cls");
- cout << endl << " Удаление завершено успешно!" << endl << endl;
- }
- else {
- system("cls");
- cout << endl << " Удаление отменено!" << endl << endl;
- }
- }
- else {
- system("cls");
- cout << endl << " Удаление отменено, так как подходящих работников не найдено!" << endl << endl;
- }
- return (*worker);
- }
- void output(WORKER** worker) {
- system("cls");
- int i = 1;
- bool f = false;
- if (!(worker == NULL)) {
- struct WORKER* temp = *worker;
- while (temp) {
- cout << "|--------------------------|---------------------------|" << endl;
- cout << "| Работник № | " << temp->number << endl;
- cout << "| Фамилия и инициалы: | " << temp->fio << endl;
- cout << "| Название книги: | " << temp->position << endl;;
- cout << "| Год издания: | " << temp->year << endl;
- cout << "|--------------------------|---------------------------|" << endl;
- cout << endl;
- temp = temp->next;
- i++;
- f = true;
- }
- }
- if (f == false) {
- cout << "\nВ библиотеке пусто" << endl;
- }
- system("pause");
- _getwch();
- }
- int search(WORKER** worker) {
- system("cls");
- int god;
- int i = 0;
- bool flag = false;
- WORKER* current = *worker;
- WORKER* previous = 0;
- cout << "Введите год -> ";
- cin >> god;
- struct WORKER* temp = *worker;
- while (temp) {
- if (temp->year >= god) {
- cout << "|--------------------------|---------------------------|" << endl;
- cout << "| Работник № | " << temp->number << endl;
- cout << "| Фамилия и инициалы: | " << temp->fio << endl;
- cout << "| Название книги: | " << temp->position << endl;;
- cout << "| Год издания: | " << temp->year << endl;
- cout << "|--------------------------|---------------------------|" << endl;
- cout << endl;
- flag++;
- temp = temp->next;
- i++;
- flag = true;
- }
- else {
- previous = temp;
- temp = temp->next;
- i++;
- }
- }
- if (flag == false) {
- cout << "\n Работники с данным стажем не найдены!" << endl;
- }
- system("pause");
- return 0;
- }
- void help() {
- system("cls");
- cout << "\n1.) Составить программу, которая содержит текущую информацию о работниках организации." << endl;
- cout << "\tСведения о работнике включают: " << endl;
- cout << "\t• фамилия и инициалы работника;" << endl;
- cout << "\t• название занимаемой должности;" << endl;
- cout << "\t• год поступления на работу;" << endl;
- cout << "\n2.) Программа должна обеспечивать: " << endl;
- cout << "\t• хранение сведений обо всех работниках в виде односвязного списка (очередь);" << endl;
- cout << "\t• добавление новых работников в список;" << endl;
- cout << "\t• удаление работников из списка, фамилия которого введена с клавиатуры;" << endl;
- cout << "\t• вывод сведений обо всех работниках;" << endl;
- cout << "\t• по запросу выводятся сведения о работниках, чей стаж работы в организации превышает значение, введенное с клавиатуры." << endl;
- cout << "\n3.) Программа должна обеспечивать диалог с помощью меню." << endl;
- system("pause");
- }
- void info() {
- system("cls");
- cout << "Программа для 6 варианта, Динамические структуры данных." << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement