Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
- #include <string.h>
- #include <iomanip>
- #include <conio.h>
- using namespace std;
- struct student
- {
- char fio[15];
- int ball[3];
- };
- struct node
- {
- student data;
- node* left;
- node* right;
- };
- student input()
- {
- student inf;
- cout << endl << "Фамилия: ", cin >> inf.fio;
- cout << "Физика: ", cin >> inf.ball[0];
- cout << "История: ", cin >> inf.ball[1];
- cout << "Математика: ", cin >> inf.ball[2];
- return inf;
- }
- node* add(node* top, const student& newnode)
- {
- if (!top)
- {
- top = new node;
- top->data = newnode;
- top->left = NULL;
- top->right = NULL;
- }
- else
- if (strcmp(top->data.fio, newnode.fio) > 0)
- top->left = add(top->left, newnode);
- else
- top->right = add(top->right, newnode);
- return top;
- }
- void viewtable(node* top)
- {
- if (top)
- {
- cout << setw(15) << top->data.fio << setw(8) << top->data.ball[0] << setw(9) << top->data.ball[1] << setw(12) << top->data.ball[2] << endl;
- viewtable(top->left);
- viewtable(top->right);
- }
- }
- void viewtree(node* top, int space)
- {
- if (top)
- {
- space += 3;
- viewtree(top->right, space);
- cout << setw(space) << top->data.fio << endl;
- viewtree(top->left, space);
- }
- }
- void save(ofstream& fout, node* top)
- {
- if (top)
- {
- fout.write((char*)top, sizeof(node));
- save(fout, top->left);
- save(fout, top->right);
- }
- }
- void load(char* filename, node*& top)
- {
- ifstream fin(filename, ios::in);
- node z;
- top = NULL;
- while (fin.read((char*)& z, sizeof(node)))
- top = add(top, z.data);
- cout << "Данные загружены" << endl;
- }
- node* del(node* top)
- {
- if (top)
- {
- if (top->left)
- del(top->left);
- if (top->right)
- del(top->right);
- top = NULL;
- }
- return top;
- }
- void exit(node* top)
- {
- if (top)
- {
- exit(top->left);
- exit(top->right);
- delete(top);
- }
- }
- int node_count(node* top, int& n)
- {
- if (top)
- {
- if ((top->right == NULL) && (top->left != NULL))
- {
- n++;
- node_count(top->left, n);
- }
- else
- {
- node_count(top->left, n);
- node_count(top->right, n);
- }
- }
- return n;
- }
- int main()
- {
- setlocale(LC_ALL, "rus");
- node* top = 0;
- char key, c;
- char fbin[] = "P6(5).txt";
- int a, num;
- a = 0;
- while (1)
- {
- num = 1;
- while (1)
- {
- while (a != 13) {
- if ((a == 72) && (num != 1))
- num--;
- if ((a == 80) && (num != 9))
- num++;
- if (num == 1)
- {
- system("cls");
- cout << "=>Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 2)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << "=>Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 3)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << "=>Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 4)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << "=>Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 5)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << "=>Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 6)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << "=>Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 7)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << "=>Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 8)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << "=>Подсчитать вершины с единственным потомком" << endl
- << " Выход" << endl;
- }
- if (num == 9)
- {
- system("cls");
- cout << " Создать дерево" << endl
- << " Вывести таблицу" << endl
- << " Вывести дерево" << endl
- << " Добавить элемент" << endl
- << " Сохранить в файл" << endl
- << " Загрузить из файла" << endl
- << " Удалить данные" << endl
- << " Подсчитать вершины с единственным потомком" << endl
- << "=>Выход" << endl;
- }
- int enter = _getch();
- if (enter == 13)
- a = enter;
- else
- a = _getch();
- }
- switch (num)
- {
- case 1:
- while (1)
- {
- cout << endl << "Для продолжения нажмите Enter, для выхода введите '*'" << endl;
- _getch();
- c = _getch();
- if (c != '*')
- top = add(top, input());
- else
- break;
- }
- break;
- case 2:
- cout << setw(15) << "Фамилия" << setw(8) << "Физика" << setw(9) << "История" << setw(12) << "Математика" << endl;
- viewtable(top);
- system("pause");
- break;
- case 3:
- viewtree(top, 3);
- system("pause");
- break;
- case 4: top = add(top, input()); break;
- case 5:
- {
- ofstream fout(fbin);
- save(fout, top);
- cout << "Данные сохранены" << endl;
- system("pause");
- break;
- }
- case 6:
- load(fbin, top);
- system("pause");
- break;
- case 7:
- top = del(top);
- cout << "Данные удалены" << endl;
- system("pause");
- break;
- case 8:
- {
- int n = 0;
- node_count(top, n);
- cout << "Вершин с единственным потомком: " << n << endl;
- system("pause");
- break;
- }
- case 9: exit(top); return 0;
- default: cout << "Неверный ввод"; break;
- }
- a = 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement