ChameL1oN

Катя_Индивидуальная

Apr 20th, 2015
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.51 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <locale>
  4. #include <Windows.h>
  5.  
  6.  
  7. using namespace std;
  8.  
  9. struct kv{
  10. int Count; // Кол-во комнат
  11. int level; // Этаж
  12. int size; // Площадь
  13. string adr; // Адрес в виде <название>_<номер дома>
  14. };
  15.  
  16. struct point{
  17. kv data; //Информационное поле в виде структуры
  18. point* next; // Указатель на следующий эл-т
  19. };
  20.  
  21. ifstream f("input.txt", ios::in);
  22.  
  23.  
  24. point* make_list(int n)
  25. {
  26. string s, s2; // Вспомогательные (для проверки входных данных)
  27. int a;
  28. double a2;
  29. point*beg;//указатель на первый элемент
  30. point*p, *r;//вспомогательные указатели
  31. string adress;
  32. beg = new(point);//выделяем память под первый элемент
  33. f >> s; // Считываем строку
  34. a = atoi(s.c_str()); // Переводим в int
  35. s2 = to_string(a); // Переводим int в строку
  36. if (s == s2){ // Если в изначальной строке были только цифры - строки будут равны
  37. beg->data.Count = a;
  38. }
  39. else{
  40. cout << "Ошибка ввода кол-ва комнат" << endl;
  41. exit(0);
  42. }
  43. f >> s;
  44. a = atoi(s.c_str());
  45. s2 = to_string(a);
  46. if (s == s2){
  47. beg->data.level = a;
  48. }
  49. else{
  50. cout << "Ошибка ввода этажа" << endl;
  51. exit(0);
  52. }
  53. f >> s;
  54. a = atoi(s.c_str());
  55. s2 = to_string(a);
  56. if (s == s2){
  57. beg->data.size = a;
  58. }
  59. else{
  60. cout << "Ошибка ввода площади" << endl;
  61. exit(0);
  62. }
  63. f >> adress;
  64. beg->data.adr = adress;
  65. beg->next = 0;//обнуляем адресное поле
  66. //ставим на этот элемент указатель p (последний элемент)
  67. p = beg;
  68. for (int i = 0; i < n - 1; i++)
  69. {
  70. r = new(point);//создаем новый элемент
  71. f >> s;
  72. a = atoi(s.c_str());
  73. s2 = to_string(a);
  74. if (s == s2){
  75. r->data.Count = a;
  76. }
  77. else{
  78. cout << "Ошибка ввода кол-ва комнат" << endl;
  79. exit(0);
  80. }
  81. f >> s;
  82. a = atoi(s.c_str());
  83. s2 = to_string(a);
  84. if (s == s2){
  85. r->data.level = a;
  86. }
  87. else{
  88. cout << "Ошибка ввода этажа" << endl;
  89. exit(0);
  90. }
  91. f >> s;
  92. a = atoi(s.c_str());
  93. s2 = to_string(a);
  94. if (s == s2){
  95. r->data.size = a;
  96. }
  97. else{
  98. cout << "Ошибка ввода площади" << endl;
  99. exit(0);
  100. }
  101. f >> r->data.adr;
  102. r->next = 0;
  103. p->next = r;//связываем p и r
  104. //ставим на r указатель p (последний элемент)
  105. p = r;
  106. }
  107. return beg;//возвращаем beg как результат функции
  108. }
  109.  
  110. void print(point* beg){
  111. point* p;
  112. p = beg;
  113. while (p != NULL){
  114. cout << p->data.adr << " Кол-во комнат : " << p->data.Count << " Этаж : " << p->data.level << " Общая площадь : " << p->data.size << endl;
  115. p = p->next;
  116. }
  117. }
  118.  
  119. point* add(point* beg,kv a){
  120. point* p = beg;
  121. point* r = new(point);
  122. while (p->next != NULL){ // Доходим до конца
  123. p = p->next;
  124. }
  125. r->data = a;
  126. r->next = NULL;
  127. p->next = r;
  128. return beg;
  129. }
  130.  
  131. point* del(point* beg, int k){
  132. int i =0;
  133. point* p = beg;
  134. point* r;
  135. while (i < k-1){ // Доходим до к-1 элемента
  136. p = p->next;
  137. i++;
  138. }
  139. r = p->next; // Ставим указатель на k-ый элемент (удаляемый)
  140. p->next = r->next; // Связываем (k-1) и (k+1) эл-ты
  141. delete r;
  142. return beg;
  143. }
  144.  
  145. void main(){
  146. setlocale(LC_ALL, "rus");
  147. point* beg; // Начало списка
  148. point* p; // Служебный указатель
  149. int n;
  150. char chkend; // n - кол-во изначальных записей в файле и списке , chkend - для проверки конца добавлений
  151. bool end = false, end2 = false,find=false; // end - конец всей программы , end2 - конец добавлений , find - найдена ли подходящая запись
  152. kv a; // Служебная структура
  153. f >> n;
  154. beg = make_list(n); // создаём начальный список из данных в файле
  155. cout << "\n ПЕРВОНАЧАЛЬНЫЙ СПИСОК : \n" << endl;
  156. print(beg);
  157. cout << endl;
  158. do{
  159. cout << endl;
  160. cout << endl;
  161. cout << endl;
  162. cout << "Выберите операцию" << endl;
  163. cout << "1 - Ввод заявки на обмен" << endl;
  164. cout << "2 - Вывод всех заявок" << endl;
  165. cout << "3 - Выход" << endl;
  166.  
  167. char switc; //Переменная для switch
  168. cin >> switc;
  169. switch (switc){
  170. case('1') :
  171. do{
  172. find = false;
  173. cout << "ОФОРМЛЕНИЕ ЗАЯВКИ : " << endl;
  174. cout << "Введите кол-во комнат " << endl;
  175. cin >> a.Count;
  176. cout << "Введите этаж " << endl;
  177. cin >> a.level;
  178. cout << "Введите общую площадь " << endl;
  179. cin >> a.size;
  180. cout << "Введите адрес " << endl;
  181. SetConsoleCP(1251);
  182. cin >> a.adr;
  183. SetConsoleCP(866);
  184. p = beg;
  185. for (int i = 0; p != NULL && !find; i++){
  186. if (a.Count == p->data.Count && a.level == p->data.level && (a.size<(p->data.size + p->data.size*0.1) && a.size>(p->data.size - p->data.size*0.1))){
  187. cout << "\n Найдено подходящее предложение! \n" << endl;
  188. cout << p->data.adr << " Кол-во комнат : " << p->data.Count << " Этаж : " << p->data.level << " Общая площадь : " << p->data.size << endl;
  189. cout << "\n Запись удалена из списка \n" << endl;
  190. del(beg, i);
  191. find = true;
  192. }
  193. p = p->next; //Переходим к следующей записи
  194. }
  195. if (find == false){
  196. cout << "Подходящей заявки на обмен не найдено, запись добавлена в общий список" << endl;
  197. add(beg, a);
  198. }
  199. cout << "Закончили ? 1 = yes , 2 = no" << endl;
  200. cin >> chkend;
  201. if (chkend == 'y') end2 = true;
  202. else if(chkend == 'n') end2 = false;
  203. else { cout << "Ошибка ввода" << endl; end2 = true; }
  204. } while (!end2);
  205. break;
  206. case('2') : cout << endl; print(beg); cout << endl; break;
  207. case('3') : end = true; break;
  208. default: cout << "\n Ошибка ввода \n" << endl; break;
  209. }
  210. } while (!end);
  211.  
  212. cout << endl;
  213. }
Advertisement
Add Comment
Please, Sign In to add comment