Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <cstdio>
- #include <iomanip>
- #include <windows.h>
- using namespace std;
- struct comp {
- char name[20];
- char surname[20];
- char year[5];
- comp* next;
- };
- struct dyn_list {
- comp* head = NULL;
- comp* tail{};
- };
- short menu() {
- short v;
- cout << "\n МЕНЮ" << endl;
- cout << " [1] Добавить сведения об ученике\n";
- cout << " [2] Показать информацию об учениках\n";
- cout << " [3] Удалить данные по фамилии\n";
- cout << " [4] Сортировка\n";
- cout << " [5] Вывод однофамильцев\n";
- cout << " [0] Выйти\n";
- cout << " Выберите вариант: ";
- cin >> v;
- return v;
- }
- // Создание пустого списка
- void constr_list(dyn_list& l) {
- l.head = NULL;
- }
- // Проверка списка на пустоту
- bool chk_empty(dyn_list l) {
- return (l.head == NULL);
- }
- // Включение в список нового компонента
- void comp_in(dyn_list& l, char* na, char* sur, char* ye) {
- comp* c = new comp();
- strcpy_s(c->name, 20, na);
- strcpy_s(c->surname, 20, sur);
- strcpy_s(c->year, 5, ye);
- c->next = NULL;
- if (chk_empty(l))
- l.head = c;
- else
- l.tail->next = c;
- l.tail = c;
- }
- //ФУНКЦИЯ НОВЫЕ ЗАПИСИ
- void news(dyn_list& vars1) {
- cout << "Введите имя: ";
- char buf_name[20];
- cin >> buf_name;
- cout << "Введите фамилию: ";
- char buf_surname[20];
- cin >> buf_surname;
- cout << "Введите год обучения: ";
- char buf_year[5];
- cin >> buf_year;
- cout << "\nСведения об ученике добавлены\n";
- comp_in(vars1, buf_name, buf_surname, buf_year);
- }
- void print(dyn_list l) {
- while (l.head != NULL) {
- cout << "Фамилия: " << l.head->surname << endl;
- cout << "Имя: " << l.head->name << endl;
- cout << "Год обучения: " << l.head->year << endl << endl;
- l.head = l.head->next;
- }
- }
- comp* searchSurname(dyn_list l, char* buf) {
- while (l.head != NULL)
- {
- if (!strcmp(l.head->surname, buf))
- return l.head;
- l.head = l.head->next;
- }
- return l.head;
- }
- void comp_del(dyn_list& l, comp* c) {
- if (c == l.head) {
- l.head = c->next;
- delete c;
- return;
- }
- comp* temp = l.head;
- while (temp->next != c)
- temp = temp->next;
- temp->next = c->next;
- delete c;
- }
- void del(dyn_list& vars1) {
- cout << "Введите фамилию, по которой надо удалить запись: ";
- char buf[20];
- cin >> buf;
- comp* p = new comp();
- p = searchSurname(vars1, buf);
- if (p) {
- comp_del(vars1, p);
- cout << "Сведения об ученике были удалены." << endl;
- }
- else
- cout << "Ученика с такой фамилией нет!" << endl;
- }
- void namesake(dyn_list vars1) {
- comp* i = vars1.head;
- int n = 0;
- while (i != NULL) {
- i = i->next;
- n++;
- }
- bool* ans = new bool [n];
- for (int i = 0; i < n; i++) {
- ans[i] = true;
- }
- i = vars1.head;
- int ind_i = 0;
- while (i != NULL) {
- comp* j = i->next;
- int ind_j = ind_i + 1;
- while (j != NULL) {
- if (strcmp(i->surname, j->surname) == 0 && ans[ind_j]) {
- if (ans[ind_i]) {
- cout << '\n' << i->name << '\n' << i->surname << '\n' << i->year << '\n';
- ans[ind_i] = false;
- }
- cout << j->name << '\n' << j->surname << '\n' << j->year << '\n';
- ans[ind_j] = false;
- }
- j = j->next;
- ind_j++;
- }
- i = i->next;
- ind_i++;
- }
- delete[] ans;
- }
- void sortlist(dyn_list &begin) {
- comp* i = begin.head;
- while (i != NULL) {
- comp* j = i->next;
- while (j != NULL) {
- if (strcmp(i->surname, j->surname) > 0) {
- swap(i->name, j->name);
- swap(i->surname, j->surname);
- swap(i->year, j->year);
- }
- j = j->next;
- }
- i = i->next;
- }
- }
- void deletelist(comp* vars1) {
- if (vars1 != NULL) {
- deletelist(vars1->next);
- delete vars1;
- }
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "ru");
- dyn_list vars; // Динамический список
- short choise;
- do {
- system("cls");
- choise = menu();
- switch (choise) {
- case 1:
- system("cls");
- news(vars);
- //system("pause");
- system("cls");
- break;
- case 2:
- system("cls");
- print(vars);
- system("pause");
- system("cls");
- break;
- case 3:
- system("cls");
- del(vars);
- system("pause");
- system("cls");
- break;
- case 4:
- system("cls");
- sortlist(vars);
- system("pause");
- system("cls");
- break;
- case 5:
- system("cls");
- namesake(vars);
- system("pause");
- system("cls");
- break;
- case 0:
- cout << "До свидания!!!" << endl;
- deletelist(vars.head);
- system("pause");
- break;
- default:
- cout << "Неверный выбор!!!" << endl;
- cout << "\n\nPress Enter..." << endl;
- system("pause");
- system("cls");
- break;
- }
- } while (choise);
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement