Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <locale>
- #include <Windows.h>
- using namespace std;
- struct kv{
- int Count; // Кол-во комнат
- int level; // Этаж
- int size; // Площадь
- string adr; // Адрес в виде <название>_<номер дома>
- };
- struct point{
- kv data; //Информационное поле в виде структуры
- point* next; // Указатель на следующий эл-т
- };
- ifstream f("input.txt", ios::in);
- point* make_list(int n)
- {
- string s, s2; // Вспомогательные (для проверки входных данных)
- int a;
- double a2;
- point*beg;//указатель на первый элемент
- point*p, *r;//вспомогательные указатели
- string adress;
- beg = new(point);//выделяем память под первый элемент
- f >> s; // Считываем строку
- a = atoi(s.c_str()); // Переводим в int
- s2 = to_string(a); // Переводим int в строку
- if (s == s2){ // Если в изначальной строке были только цифры - строки будут равны
- beg->data.Count = a;
- }
- else{
- cout << "Ошибка ввода кол-ва комнат" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- beg->data.level = a;
- }
- else{
- cout << "Ошибка ввода этажа" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- beg->data.size = a;
- }
- else{
- cout << "Ошибка ввода площади" << endl;
- exit(0);
- }
- f >> adress;
- beg->data.adr = adress;
- beg->next = 0;//обнуляем адресное поле
- //ставим на этот элемент указатель p (последний элемент)
- p = beg;
- for (int i = 0; i < n - 1; i++)
- {
- r = new(point);//создаем новый элемент
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- r->data.Count = a;
- }
- else{
- cout << "Ошибка ввода кол-ва комнат" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- r->data.level = a;
- }
- else{
- cout << "Ошибка ввода этажа" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- r->data.size = a;
- }
- else{
- cout << "Ошибка ввода площади" << endl;
- exit(0);
- }
- f >> r->data.adr;
- r->next = 0;
- p->next = r;//связываем p и r
- //ставим на r указатель p (последний элемент)
- p = r;
- }
- return beg;//возвращаем beg как результат функции
- }
- void print(point* beg){
- point* p;
- p = beg;
- while (p != NULL){
- cout << p->data.adr << " Кол-во комнат : " << p->data.Count << " Этаж : " << p->data.level << " Общая площадь : " << p->data.size << endl;
- p = p->next;
- }
- }
- point* add(point* beg,kv a){
- point* p = beg;
- point* r = new(point);
- while (p->next != NULL){ // Доходим до конца
- p = p->next;
- }
- r->data = a;
- r->next = NULL;
- p->next = r;
- return beg;
- }
- point* del(point* beg, int k){
- int i =0;
- point* p = beg;
- point* r;
- while (i < k-1){ // Доходим до к-1 элемента
- p = p->next;
- i++;
- }
- r = p->next; // Ставим указатель на k-ый элемент (удаляемый)
- p->next = r->next; // Связываем (k-1) и (k+1) эл-ты
- delete r;
- return beg;
- }
- void main(){
- setlocale(LC_ALL, "rus");
- point* beg; // Начало списка
- point* p; // Служебный указатель
- int n;
- char chkend; // n - кол-во изначальных записей в файле и списке , chkend - для проверки конца добавлений
- bool end = false, end2 = false,find=false; // end - конец всей программы , end2 - конец добавлений , find - найдена ли подходящая запись
- kv a; // Служебная структура
- f >> n;
- beg = make_list(n); // создаём начальный список из данных в файле
- cout << "\n ПЕРВОНАЧАЛЬНЫЙ СПИСОК : \n" << endl;
- print(beg);
- cout << endl;
- do{
- cout << endl;
- cout << endl;
- cout << endl;
- cout << "Выберите операцию" << endl;
- cout << "1 - Ввод заявки на обмен" << endl;
- cout << "2 - Вывод всех заявок" << endl;
- cout << "3 - Выход" << endl;
- char switc; //Переменная для switch
- cin >> switc;
- switch (switc){
- case('1') :
- do{
- find = false;
- cout << "ОФОРМЛЕНИЕ ЗАЯВКИ : " << endl;
- cout << "Введите кол-во комнат " << endl;
- cin >> a.Count;
- cout << "Введите этаж " << endl;
- cin >> a.level;
- cout << "Введите общую площадь " << endl;
- cin >> a.size;
- cout << "Введите адрес " << endl;
- SetConsoleCP(1251);
- cin >> a.adr;
- SetConsoleCP(866);
- p = beg;
- for (int i = 0; p != NULL && !find; i++){
- 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))){
- cout << "\n Найдено подходящее предложение! \n" << endl;
- cout << p->data.adr << " Кол-во комнат : " << p->data.Count << " Этаж : " << p->data.level << " Общая площадь : " << p->data.size << endl;
- cout << "\n Запись удалена из списка \n" << endl;
- del(beg, i);
- find = true;
- }
- p = p->next; //Переходим к следующей записи
- }
- if (find == false){
- cout << "Подходящей заявки на обмен не найдено, запись добавлена в общий список" << endl;
- add(beg, a);
- }
- cout << "Закончили ? 1 = yes , 2 = no" << endl;
- cin >> chkend;
- if (chkend == 'y') end2 = true;
- else if(chkend == 'n') end2 = false;
- else { cout << "Ошибка ввода" << endl; end2 = true; }
- } while (!end2);
- break;
- case('2') : cout << endl; print(beg); cout << endl; break;
- case('3') : end = true; break;
- default: cout << "\n Ошибка ввода \n" << endl; break;
- }
- } while (!end);
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment