Advertisement
Neon_Falcon

Стек с подобием меню

Jun 12th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. // СТЕК
  2. using namespace std;
  3. #include <iostream>
  4. #include <iomanip>
  5. #include <string>
  6. #include <Windows.h>
  7. int const width = 100; // ширина
  8. int const N = 3;
  9. int const countOfStolb = 4; //кол-во столбов
  10.  
  11. struct Comp { // создаем структуру
  12. string avtor;
  13. string nazvanie;
  14. int year;
  15. int price;
  16. Comp* next; // ссылка на пред.элемент
  17. Comp* head; //ссылка на голову
  18. };
  19.  
  20. void Add(Comp* steck) { // метод добавления в стек
  21. Comp* tmp = new Comp; // ссылка на структуру и выделение память на нее
  22. cout << "Введите автора: ";
  23. cin >> tmp->avtor;
  24. cout << "Введите название картины: ";
  25. cin >> tmp->nazvanie;
  26. cout << "Введите год написания: ";
  27. cin >> tmp->year;
  28. cout << "Введите сумму страховки: ";
  29. cin >> tmp->price;
  30. tmp->next = steck->head;
  31. steck->head = tmp;
  32. }
  33.  
  34. Comp ReturnHead(Comp* steck) { // возвращение головного элемента стека
  35. return *steck->head;
  36. }
  37.  
  38. void Show(Comp* steck) { // показ по правилу LIFO
  39. Comp* tmp = steck->head;
  40. while (tmp != NULL) {
  41. cout << "|" << setw(width / countOfStolb) << tmp->avtor << "|" << setw(width / countOfStolb) << tmp->nazvanie << "|" << setw(width / countOfStolb) << tmp->year << "|"
  42. << setw(width / countOfStolb) << tmp->price << "|\n";
  43. for (int j = 0; j < width; j++) {
  44. cout << "-";
  45. }
  46. cout << "\n";
  47. tmp = tmp->next; // переход на предыдущего
  48. }
  49. }
  50.  
  51. void PrintHead(Comp* steck) { // вывод головы
  52. Comp* tmp = steck->head;
  53. cout << "|" << setw(width / countOfStolb) << tmp->avtor << "|" << setw(width / countOfStolb) << tmp->nazvanie << "|" << setw(width / countOfStolb) << tmp->year << "|"
  54. << setw(width / countOfStolb) << tmp->price << "|\n";
  55. for (int j = 0; j < width; j++)
  56. cout << "-";
  57. cout << "\n";
  58. }
  59.  
  60. void PrintTable() { // вывод границ таблицы
  61. cout << "|" << setw(width / 2) << "Картинная галерея" << setw(width / 2) << "|\n";
  62. for (int i = 0; i < width; i++) {
  63. cout << "-";
  64. }
  65. cout << "\n";
  66. cout << "|" << setw(width / countOfStolb) << "Автор |" << setw(width / countOfStolb) << "Название картины |" << setw(width / countOfStolb) << "Год написания|" << setw(width / countOfStolb)
  67. << "Сумма страховки, руб |\n";
  68. for (int j = 0; j < width; j++) {
  69. cout << "-";
  70. }
  71. }
  72.  
  73. void DeleteHead(Comp * steck) { // удаление головы
  74. Comp* tmp = steck->head->next;
  75. delete steck->head;
  76. steck->head = tmp;
  77. }
  78.  
  79. void ClearSteck(Comp * steck) { // чистка стека
  80. while (steck->head != NULL) {
  81. Comp* tmp = steck->head->next;
  82. delete steck->head;
  83. steck->head = tmp;
  84. }
  85. }
  86.  
  87.  
  88. int main() {
  89. SetConsoleCP(1251);
  90. SetConsoleOutputCP(1251);
  91. Comp* steck = new Comp; // выделяется память
  92. steck->head = NULL; // голова пуста
  93. // добавление стека
  94. for (int i = 0; i < N; i++) {
  95. Add(steck);
  96. }
  97. // показ стека
  98. PrintTable();
  99. cout << "\n";
  100. Show(steck);
  101. // удаление головы и показ новой
  102. DeleteHead(steck);
  103. cout << "\nСтек после метода удаления головы:\n";
  104. PrintTable();
  105. Show(steck);
  106. cout << "\nПечать новой головы стека:\n";
  107. // печать новой головы
  108. PrintHead(steck);
  109.  
  110. // добавление новой головы
  111. cout << "Метод добавления новой головы и последующий показ стека:\n";
  112. Add(steck);
  113. PrintTable();
  114. Show(steck);
  115. // удаление стека
  116. ClearSteck(steck);
  117. delete steck->head; // удаление указателя на голову
  118. delete steck; // удаление указателя на стек
  119. system("pause");
  120. return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement