Advertisement
punidota

Untitled

Jun 6th, 2016
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.99 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "stdafx.h"
  3. #include <iostream>
  4. #include <process.h>
  5. #include <iomanip>
  6. #include<fstream>
  7.  
  8. using namespace std;
  9.  
  10. struct list
  11. {
  12.     int id;
  13.     char* item;
  14.     char* type;
  15.     int count;
  16.     int weight;
  17.     list* next;
  18. };
  19. struct inventory
  20. {
  21.     char key;
  22.     list* first;
  23.     inventory* prev;
  24. };
  25. inventory* add_kat(inventory* head, char c)
  26. {
  27.     inventory* temp = new inventory;
  28.     if (!temp)
  29.     {
  30.         cout << "Ошибка памяти!";
  31.         exit(1);
  32.     }
  33.     temp->key = c;
  34.     temp->first = NULL;
  35.     temp->prev = head;
  36.     return temp;
  37. }
  38.  
  39. list* add_list(int id, char* item, char* type, int count, int weight, list* first)
  40. {
  41.     list *temp;
  42.     if (!first)
  43.     {
  44.         first = new list;
  45.         temp = first;
  46.     }
  47.     else
  48.     {
  49.         list* new_list = new list;
  50.         temp = first;
  51.         while (temp->next) temp = temp->next;
  52.         temp->next = new_list;
  53.         temp = new_list;
  54.     }
  55.     temp->next = NULL;
  56.     temp->id = id;
  57.     temp->item = new char[strlen(item) + 1];
  58.     strcpy(temp->item, item);
  59.     temp->type = new char[strlen(type) + 1];
  60.     strcpy(temp->type, type);
  61.     temp->count = count;
  62.     temp->weight = weight;
  63.     return first;
  64. }
  65. inventory* add_element(inventory *head)
  66. {
  67.     inventory *kat_ptr;
  68.     list* ptr;
  69.     int id;
  70.     char item[255], type[255];
  71.     int count, t,weight;
  72.  
  73.     cout << "\nВведите id детали: \t";
  74.     cin >> id;
  75.     cin.ignore(1);
  76.     cout << "\nВведите название детали: \t";
  77.     cin.getline(item, 200);
  78.     cout << "\nВведите тип детали: \t";
  79.     cin.getline(type, 200);
  80.     cout << "\nВведите количество: \t";
  81.     cin >> count;
  82.     cout << "\nВведите вес детали:  \t";
  83.     cin >> weight;
  84.     kat_ptr = head; ptr = NULL;
  85.     while (kat_ptr)
  86.     {
  87.         if (kat_ptr->key == item[0]) { ptr = kat_ptr->first; break; }
  88.         kat_ptr = kat_ptr->prev;
  89.     }
  90.     if (ptr) add_list(id, item, type, count, weight, ptr);
  91.     else
  92.     {
  93.         head = add_kat(head, item[0]);
  94.         head->first = add_list(id, item, type, count, weight, NULL);
  95.     }
  96.     cout << endl;
  97.     return head;
  98. }
  99. inventory* delete_element(inventory *head, int id)
  100. {
  101.     list *next, *prev = 0, *r;
  102.     r = head->first;
  103.  
  104.     while (r)
  105.     {
  106.         next = r->next;
  107.         if (r->id == id)
  108.         {
  109.             if (prev) prev->next = next;
  110.             delete r;
  111.         }
  112.         else
  113.         {
  114.             prev = r;
  115.         }
  116.         r = next;
  117.     }
  118.     cout << "Элемент удалён" << endl;
  119.     return head;
  120. }
  121. void show_all(inventory* head)
  122. {
  123.     inventory* temp = head;
  124.     list* ptr;
  125.     ofstream out("lst.txt");
  126.     cout << endl << setw(2) << "ID\t" << setw(10) << "Название" << setw(10) << "\t" << "Тип" << setw(10) << "\t" << "Кол-во" << setw(10) << "\t" << "Вес" << endl;
  127.     out << endl << setw(2) << "ID\t" << setw(10) << "Название" << setw(10) << "\t" << "Тип" << setw(10) << "\t" << "Кол-во" << setw(10) << "\t" << "Вес" << endl;
  128.  
  129.     while (temp)
  130.     {
  131.         ptr = temp->first;
  132.         while (ptr)
  133.         {
  134.             out << endl << setw(2) << ptr->id << setw(10) << "\t" << ptr->item << setw(10) << "\t" << ptr->type << setw(10) << "\t" << ptr->count << setw(10) << "\t" << ptr->weight << endl;
  135.             cout << endl << setw(2) << ptr->id << setw(10) << "\t" << ptr->item << setw(10) << "\t" << ptr->type << setw(10) << "\t" << ptr->count << setw(10) << "\t" << ptr->weight << endl;
  136.             ptr = ptr->next;
  137.         }
  138.         temp = temp->prev;
  139.     }
  140. }
  141. inventory* search(inventory *head)
  142. {
  143.     char ans;
  144.     int  _id;
  145.     inventory *kat_ptr = head;
  146.     cout << "\nВведите id товара: ";
  147.     cin >> _id;
  148.     cout << endl << setw(2) << "ID\t" << setw(10) << "Название" << setw(10) << "\t" << "Тип" << setw(3) << "\t" << "Кол-во" << setw(2) << "\t" << "Вес" << endl;
  149.     if (head->first->id == _id)
  150.     {
  151.         cout << endl << setw(2) << head->first->id << setw(10) << "\t" << head->first->item << setw(10) << "\t" << head->first->type << setw(3) << "\t" << head->first->count << setw(2) << "\t" << head->first->weight << endl;
  152.     }
  153.     return head;
  154. }
  155. inventory* _delete(inventory *head)
  156. {
  157.     int id,ans;
  158.     inventory *kat_ptr = head;
  159.     cout << "\nВведите id товара: ";
  160.     cin >> id;
  161.     cout << "\ny\\n: ";
  162.     cin >> ans;
  163.     if (ans == 'y' || ans == '1')
  164.         return head = delete_element(head, id);
  165.     else
  166.         return head;
  167. }
  168. void main()
  169. {
  170.     setlocale(LC_ALL, "rus");
  171.     inventory *head = NULL;
  172.     int input;
  173. start:
  174.     cout << "1. Добавить элемент" << endl;
  175.     cout << "2. Показать все элементы" << endl;
  176.     cout << "3. Найти элемент" << endl;
  177.     cout << "4. Удалить элемент" << endl;
  178.     cout << "5. Очистить экран" << endl;
  179.     cout << "6. Выход" << endl;
  180.     cin >> input;
  181.     switch (input)
  182.     {
  183.     case 1:
  184.         head = add_element(head);
  185.         goto start;
  186.         break;
  187.     case 2:
  188.         show_all(head);
  189.         goto start;
  190.         break;
  191.     case 3:
  192.         search(head);
  193.         goto start;
  194.         break;
  195.     case 4:
  196.         _delete(head);
  197.         goto start;
  198.         break;
  199.     case 5:
  200.         system("Cls");
  201.         cout << "Экран очищен!\n";
  202.         goto start;
  203.         break;
  204.     case 6:
  205.         cout << "Закрытие программы!\n";
  206.         break;
  207.     default:
  208.         cout << "Ошибка ввода! Закрытие программы!\n";
  209.         break;
  210.     }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement