Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- const int N = 50; // размер строк
- struct Person
- {
- char name[N];
- char surname[N];
- char secondName[N];
- int birthYear;
- char gender;
- char birthPlace[N];
- char workPlace[N];
- char job[N];
- Person* next; // указывает на следующего человека
- };
- Person *top; // указывает на первого человека
- // функции главного меню
- void mainMenu(); // выводит главное меню
- int willContinue(); // спрашивает продолжить ли
- // функции работы по списком
- void Push(); // добавляет человека в список
- void Add(); // функция добавления человека в записную книжку
- void Delete(); // удаляет по имени и фамилии
- void Show(Person* Person);//отображает отдельный элемент
- void ShowAll(); // отображает записную книгу в виде таблицы
- //функции поиска по каталогу
- void SearchYoungest(); // ищет самого молодого человека в записной книге
- void SearchByJob(); // ищет по профессии
- void SearchByBirthPlace(); // ищет по месту рождения
- void SearchByWorkPlace(); // ищет по месту работы
- //функции работы с каталогом
- void CountByWorkPlace(); // считает ко-во работников по месту работы
- void SortByYear(); // выводит отсортированый по году рождения список
- //функции работы с файлом
- void SaveToFile(); // сохраняет стек в файл
- void LoadFromFile(); // загружает стек из файла
- void main()
- {
- setlocale(LC_ALL, "Russian");
- int program = 1; // переменная , отвечающая за выход из цикла
- int vibor;
- while (program)
- {
- mainMenu();
- cout << "Введите ваш выбор: ";
- cin >> vibor;
- switch (vibor)
- {
- case 1:
- Add();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 2:
- ShowAll();
- if (willContinue()) // возвращает 1 или 0
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 3:
- SearchYoungest();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 4:
- Delete();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 5:
- SearchByJob();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 6:
- SearchByBirthPlace();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 7:
- SearchByWorkPlace();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 8:
- SortByYear();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 9:
- CountByWorkPlace();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 10:
- SaveToFile();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 11:
- LoadFromFile();
- if (willContinue())
- {
- program = 1;
- }
- else
- {
- program = 0;
- }
- break;
- case 0: // программа выключается
- program = 0;
- break;
- default:
- cout << endl << "Вы ввели неверный код. Попробуйте ещё раз." << endl;
- system("pause");
- break;
- }
- }
- }
- void mainMenu()
- {
- system("cls");
- cout << "\tКурсовая работа\t|\tАИ-152\t|\t Величко А.Г." << endl;
- cout << "-------------------------------------------------------------" << endl << endl;
- cout << "Программа для работы с записной книгой " << endl;
- cout << "Управление реализуется с помощью клавиатуры." << endl << "Введите код действия и нажмите ENTER." << endl;
- cout << "-------------------------------------------------------------" << endl << endl;
- 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;
- cout << "9. Вычисление количества людей, работающих в заданном предприятии. " << endl;
- cout << "10. Сохранение записной книжки в файл. " << endl;
- cout << "11. Загрузка записной книжки из файла. " << endl;
- cout << "0. Выйти из программы." << endl;
- cout << endl;
- }
- int willContinue()
- {
- int answer;
- cout << endl << "Продолжить работу?" << endl;
- cout << "1. Да" << endl;
- cout << "2. Нет (выйти из программы)" << endl;
- while (true)
- {
- cout << endl;
- cout << "Введите ваш выбор: ";
- cin >> answer;
- if (answer == 1)
- {
- return 1;
- }
- else if (answer == 2)
- {
- return 0;
- }
- else
- {
- cout << endl << "Вы ввели неверный код. Попробуйте ещё раз." << endl;
- system("pause");
- }
- }
- }
- void Push()
- {
- Person *temp;
- temp = (Person*)malloc(sizeof(Person));
- cout << "Введите имя: " << endl;
- scanf("%s", temp->name);
- cout << "Введите фамилию :" << endl;
- scanf("%s", temp->surname);
- cout << "Введите отчество :" << endl;
- scanf("%s", temp->secondName);
- cout << "Введите год рождения :" << endl;
- cin >> temp->birthYear;
- cout << "Введите пол (F если женщина, M если мужчина)" << endl;
- cin >> temp->gender;
- cout << "Введите место рождения:" << endl;
- scanf("%s", temp->birthPlace);
- cout << "Введите место работы:" << endl;
- scanf("%s", temp->workPlace);
- cout << "Введите должность:" << endl;
- scanf("%s", temp->job);
- temp->next = top;
- top = temp;
- }
- void Add()
- {
- Push();
- }
- void Delete() //Данная функция воспринимает нашу очередь как список,
- //поскольку в очереди доступ есть только к верхнему элементу
- //а для поиска нам придется пройти по всей очереди
- {
- cout << "Введите имя человека для удаления" << endl;
- char name1[50];
- scanf("%s", name1);
- cout << "Введите фамилию человека для удаления" << endl;
- char surname1[50];
- scanf("%s", surname1);
- int udalen = 0;
- Person *temp1 = top;
- Person *temp2;
- if (temp1 == NULL) // голова пустая, списка нет
- {
- cout << "Список пуст!" << endl;
- return;
- }
- if (strcmp(temp1->name, name1) == 0)
- {
- if (strcmp(temp1->surname, surname1) == 0)
- {
- top = top->next;
- free(temp1);
- udalen = 1;
- }
- }
- else
- {
- while (temp1->next != NULL)
- {
- temp2 = temp1->next;
- if (strcmp(temp2->name, name1) == 0)
- {
- if (strcmp(temp2->surname, surname1) == 0)
- {
- temp1->next = temp2->next;
- free(temp2);
- udalen = 1;
- break;
- }
- }
- temp1 = temp1->next;
- }
- }
- if (udalen == 1)
- {
- cout << "Объект удален" << endl;
- }
- else
- {
- cout << "Объект не найден в списке" << endl;
- }
- }
- void Show(Person* Person)
- {
- cout << setw(10) << Person->name << " | " << setw(15) << Person->surname << " | " << setw(15) << Person->secondName << " | " << setw(13) << Person->birthYear << " | ";
- if (Person->gender == 'F')
- {
- cout << "Женский";
- } else
- {
- cout << "Мужской";
- }
- cout << " | " << setw(18) << Person->birthPlace << " | " << setw(20) << Person->workPlace << " | " << setw(15) << Person->job << "" << endl;
- }
- void ShowAll()
- {
- Person *temp = top;
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- while (temp!=NULL)
- {
- Show(temp);
- temp = temp->next;
- }
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- }
- void SearchYoungest()
- {
- cout << "Список самых молодых людей (рожденных в ";
- int min = top->birthYear; // вдруг минимальный это самый верхний человек
- Person *temp = top; // начинаем проход с вершины
- while (temp != NULL) // пока элемент не пустой
- {
- if (temp->birthYear>min) // если год рождения человека больше чем миимальный
- {
- min = temp->birthYear; // минимум равен году рождения текущего узла
- }
- temp = temp->next;
- }
- temp = top; //возвращаемся в начало списка
- cout << min << " году):" << endl;
- while (temp != NULL)
- {
- if (temp->birthYear==min)
- {
- cout << temp->name << " " << temp->surname << endl;
- }
- temp = temp->next;
- }
- }
- void SearchByJob()
- {
- int found = 0;
- Person *temp = top;
- cout << "Введите искомую профессию: " << endl;
- char* tempJob = new char[50];
- scanf("%s", tempJob);
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- while (temp != NULL)
- {
- if (strcmp(temp->job, tempJob) == 0)
- {
- Show(temp);
- found = 1;
- }
- temp = temp->next;
- }
- if (found==0)
- {
- cout << "Элементы с заданной профессией не найдены!" << endl;
- }
- }
- void SearchByBirthPlace()
- {
- int found = 0;
- Person *temp = top;
- cout << "Введите место рождения: " << endl;
- char* tempPlace = new char[50];
- scanf("%s", tempPlace);
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- while (temp != NULL)
- {
- if (strcmp(temp->birthPlace, tempPlace) == 0)
- {
- Show(temp);
- found = 1;
- }
- temp = temp->next;
- }
- if (found == 0)
- {
- cout << "Элементы с заданным местом рождения не найдены!" << endl;
- }
- }
- void SearchByWorkPlace()
- {
- Person *temp = top;
- int found = 0;
- cout << "Введите искомое место работы: " << endl;
- char* place = new char[50];
- scanf("%s", place);
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
- cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
- while (temp != NULL)
- {
- if (strcmp(temp->workPlace, place) == 0)
- {
- Show(temp);
- found = 1;
- }
- temp = temp->next;
- }
- if (found == 0)
- {
- cout << "Элементы с заданным местом работы не найдены!" << endl;
- }
- }
- void CountByWorkPlace()
- {
- Person *temp = top;
- int count = 0;
- cout << "Введите искомое место работы: " << endl;
- char* place = new char[50];
- scanf("%s", place);
- while (temp != NULL)
- {
- if (strcmp(temp->workPlace, place) == 0)
- {
- count++;
- }
- temp = temp->next;
- }
- cout << "Количество работников в организации \"" << place << "\" = " << count << endl;
- }
- void SortByYear()
- {
- Person *a = NULL;
- Person *b = NULL;
- Person *c = NULL;
- Person *e = NULL;
- Person *tmp = NULL;
- while (e != top->next)
- {
- c = a = top;
- b = a->next;
- while (a != e)
- {
- if (a->birthYear > b->birthYear)
- {
- if (a == top)
- {
- tmp = b->next;
- b->next = a;
- a->next = tmp;
- top = b;
- c = b;
- }
- else
- {
- tmp = b->next;
- b->next = a;
- a->next = tmp;
- c->next = b;
- c = b;
- }
- }
- else
- {
- c = a;
- a = a->next;
- }
- b = a->next;
- if (b == e)
- e = a;
- }
- }
- }
- void SaveToFile()
- {
- FILE *f;
- f = fopen("D:\\Записная книжка\\data.txt", "w+");
- if (f == NULL)
- {
- printf("Невозможно открыть файл!\n");
- return;
- }
- Person* temp = top;
- while (temp != NULL)
- {
- fprintf(f, "%s ", temp->name);
- fprintf(f, "%s ", temp->surname);
- fprintf(f, "%s ", temp->secondName);
- fprintf(f, "%s ", temp->job);
- fprintf(f, "%c ", temp->gender);
- fprintf(f, "%d ", temp->birthYear);
- fprintf(f, "%s ", temp->birthPlace);
- fprintf(f, "%s", temp->workPlace);
- fprintf(f, "\n");
- temp = temp->next;
- }
- fclose(f);
- }
- void LoadFromFile()
- {
- FILE *f;
- f = fopen("D:\\Записная книжка\\data.txt", "r+");
- if (f == NULL)
- {
- printf("Невозможно открыть файл!\n");
- return;
- }
- Person* temp = NULL;
- while (!feof(f))
- {
- temp = (Person*)malloc(sizeof(Person));
- cout << "zaebis" << endl;
- fscanf(f, "%s", temp->name);
- cout << "zaebis!!" << endl;
- fscanf(f, "%s", temp->surname);
- fscanf(f, "%s", temp->secondName);
- fscanf(f, "%s", temp->job);
- fscanf(f, "%c", &temp->gender);
- fscanf(f, "%d", &temp->birthYear);
- fscanf(f, "%s", temp->birthPlace);
- fscanf(f, "%s", temp->workPlace);
- temp->next = top;
- top = temp;
- }
- fclose(f);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement