ChameL1oN

Лаба3_Ильяс

Jun 22nd, 2015
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<fstream>
  4. #include<locale>
  5. #include <Windows.h>
  6. #include <string>
  7. #include <iomanip>
  8.  
  9. using namespace std;
  10.  
  11. ifstream f;
  12. FILE* D;
  13. ofstream g;
  14.  
  15. struct sp
  16. {
  17. string* Name = new string[3];
  18. string Number;
  19. int tel;
  20. int tech;
  21.  
  22. };
  23. struct Point
  24. {
  25. sp data;
  26. Point *left;
  27. Point *right;
  28. };
  29. Point* first(sp d)//формирование первого элемента дерева
  30. {
  31. Point* p = new Point;
  32. string a;
  33. p->data = d;
  34. p->left = 0;
  35. p->right = 0;
  36. return p;
  37. }
  38. //добавление элемента d в дерево поиска
  39. Point* Add(Point*root, sp d)
  40. {
  41. Point*p = root;//корень дерева
  42. Point*r = new(Point);//флаг для проверки существования элемента d
  43. //в дереве
  44. bool ok = false;
  45. while (p&&!ok)
  46. {
  47. r = p;
  48. if (d.Name == p->data.Name)ok = true; //элемент уже существует
  49. else
  50. if (d.Name<p->data.Name)p = p->left;
  51. //пойти в левое поддерево
  52. else p = p->right;//пойти в правое поддерево
  53. }
  54. if (ok) return p; //найдено, не добавляем
  55. //создаем узел
  56. Point* New_point = new Point();//выделили память
  57. New_point->data = d;
  58. New_point->left = 0;
  59. New_point->right = 0;
  60. // если d<r->key, то добавляем его в левое поддерево
  61. if (d.Name<r->data.Name)r->left = New_point;
  62. // если d>r->key, то добавляем его в правое поддерево
  63. else r->right = New_point;
  64. return New_point;
  65. }
  66.  
  67. void print_Tree(Point* p, int level){
  68. if (p){
  69. print_Tree(p->left, level + 1);
  70. for (int i = 0; i < level; i++)cout << " ";
  71. cout << p->data.Name << endl;
  72. print_Tree(p->right, level + 1);
  73. }
  74. }
  75.  
  76. void del(Point* &r, Point* &q)
  77. {
  78. if (r->right != NULL) del(r->right, q);
  79. else
  80. {
  81. q->data = r->data;
  82. q = r;
  83. r = r->left;
  84. }
  85. }
  86. void Delete(Point* &Tree)
  87. // удаление узла
  88. {
  89.  
  90. Point* q;
  91. q = Tree;
  92. if (q->right == NULL) Tree = q->left;
  93. else if (q->left == NULL) Tree = q->right;
  94. else del(q->left, q);
  95. delete(q);
  96. }
  97. void delete_node(Point* &Tree, string t)
  98. // удаление узла с заданной продолжительностью
  99. {
  100. Point* p = Tree;
  101. if (Tree)
  102. {
  103. delete_node(Tree->right, t);
  104. delete_node(Tree->left, t);
  105. if (!strcmp(Tree->data.Number.c_str(),t.c_str())) Delete(Tree);
  106. }
  107. }
  108. void print_Alf(Point *p){
  109.  
  110. if (p)
  111. {
  112. print_Alf(p->left);
  113. cout << left << setw(10) << p->data.Name[0] << " " << setw(12) << p->data.Name[1] << " " << setw(12) << p->data.Name[2] << " " << setw(12) << p->data.Number << " " << setw(10) << p->data.tel << setw(10) << p->data.tech << endl;
  114. print_Alf(p->right);
  115. }
  116. }
  117.  
  118. void Fuf(Point *p){
  119. if (p){
  120. Fuf(p->left);
  121. SetConsoleCP(1251);
  122. fwrite(&p->data, sizeof(p->data), 1, D);
  123. Fuf(p->right);
  124. }
  125. }
  126.  
  127. void main()
  128. {
  129. setlocale(LC_ALL, "rus");
  130. int n, i, j;
  131. g.open("output.txt");
  132. f.open("input.txt", ios::in);
  133. f >> n;
  134. Point* t;/*
  135. t = first();
  136. print_Tree(t, 0);*/
  137. FILE* H;
  138. H = fopen("inpat.dat", "wb");
  139. for (int i = 0; i < n; i++)
  140. {
  141. sp a;
  142. f >> a.Name[0];
  143. f >> a.Name[1];
  144. f >> a.Name[2];
  145. f >> a.Number;
  146. f >> a.tel;
  147. f >> a.tech;
  148. fwrite(&a, sizeof(a), 1, H);
  149. }
  150. fclose(H);
  151.  
  152. sp a;
  153. H = fopen("inpat.dat", "rb");
  154. fread(&a, sizeof(a), 1, H);
  155. t = first(a);
  156. for (int i = 0; i < n; i++){
  157.  
  158. fread(&a, sizeof(a), 1, H);
  159. Add(t, a);
  160. }
  161. cout << endl;
  162. cout << "Исходный список : " << endl;
  163. cout << endl;
  164. cout << setw(20) << " ФИО " << setw(28) << " Номер авто " << setw(8) << " Телефон " << setw(10) << "Тех.паспорт" << endl;
  165. print_Alf(t);
  166. cout << endl;
  167. string o;
  168. cout << "Введите номер автомобиля для удаления" << endl;
  169. SetConsoleCP(1251);
  170. cin >> o;
  171. SetConsoleCP(866);
  172. D = fopen("output.dat", "wb");
  173. delete_node(t, o);
  174. cout << endl;
  175. cout << "Список после удаления : " << endl;
  176. cout << endl;
  177. cout << setw(20) << " ФИО " << setw(28) << " Номер авто " << setw(8) << " Телефон " << setw(10) << "Тех.паспорт" << endl;
  178. print_Alf(t);
  179. Fuf(t);
  180. fclose(D);
  181. D = fopen("output.dat", "rb");
  182. while (!feof(D)){
  183. fread(&a, sizeof(a), 1, D);
  184.  
  185. g << a.Name[0]; g << " ";
  186. g << a.Name[1]; g << " ";
  187. g << a.Name[2]; g << " ";
  188. g << a.Number; g << " ";
  189. g << a.tel; g << " ";
  190. g << a.tech; g << " ";
  191. g << endl;
  192. }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment