Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2018, 11:45
Аспирант
Отправить личное сообщение для artem55555p Посмотреть профиль Найти все сообщения от artem55555p
 
Регистрация: 16.04.2016
Сообщений: 74

Линейный список в js
Преподаватель дал задание написать программу которая работает как картотека в бюро обмена квартир и ее нужно сделать в виде линейного списка.
Сведения о каждой квартире включают:
количество комнат;
этаж;
площадь;
адрес.
Написать программу, которая обеспечивает:
начальное формирование картотеки;
ввод заявки на обмен;
поиск в картотеке подходящего варианта: при равенстве количества комнат и этажа и различии площадей в пределах 10% соответствующая картотека выводится и удаляется из списка, в противном случае поступившая заявка включается в список;
вывод всего списка.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

Хочу сделать за js.
Подскажите, как сделать список в данной задачи? т.е. я сделал форму добавления данных, валидирую ее... потом попал в тупик. Данные думаю записывать в txt файл. Вопрос, где мне делать линейный список? при добавлении данных формировать их в линейный список и потом этот список писать в файл? посоветуйте.
Вот заготовки:
<form id="add">
<input type="number" id="komnat" placeholder="Количество комнат" requared>
<input type="number" id="etag" placeholder="Этаж">
<input type="text" id="ploshad" placeholder="Площадь">
<input type="number" id="adress" placeholder="Адрес">
<button onclick='takeData()'>Добавить карточку</button>
</form>

function takeData(){
			var arrayData = [];
			var flag = 1;
			arrayData[0] = document.forms["add"].elements["komnat"].value;	
			arrayData[1] = document.forms["add"].elements["etag"].value;	
			arrayData[2] = document.forms["add"].elements["ploshad"].value;	
			arrayData[3] = document.forms["add"].elements["adress"].value;
			if(arrayData[0] == ''){
				alert("Заполните количество комнат");
				flag = 0;
			}
			if(arrayData[1] == ''){
				alert("Заполните этаж");
				flag = 0;
			}
			if(arrayData[2] == ''){
				alert("Заполните площадь");
				flag = 0;
			}
			if(arrayData[3] == ''){
				alert("Заполните адресс");
				flag = 0;
			}

			if(flag == 1){
				Lists(arrayData);
			}
			
		}

		function Lists(arrayData){
			var list = {
				value: arrayData,
				next: {}
			}

			alert(list);
		}

		function readfile()
		{
			var fso,filehandle,contents;
			fso = new ActiveXObject("Scripting.FileSystemObject");
			filehandle = fso.OpenTextFile("text.txt",1);/* Открывает файл*/
			contents = filehandle.ReadAll(); /* Читает из файла и переменная contents и есть весь текст, который он считал*/
			if (contents) document.all("filecontents").value = contents; /* Вставляет в текстбокс filecontents текст contents*/
			filehandle.close();/* Закрывает файл*/
		}

		function WriteToFile()
		{
			var fso = new ActiveXObject('Scripting.FileSystemObject');
			var s = fso.CreateTextFile("text.txt", true); /* перезаписывает файл, открывает для редактирования*/
			var second = document.getElementById("filecontents").value; /* Читает из текстбокса filecontents и переменная second и есть весь текст, который он считал*/
			s.WriteLine (second); /* записывает весь текст из переменной second, имитирует Enter*/
			s.Close(); /*закрывает файл*/
		}
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2018, 12:10
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,705

Если у вас все данные на клиенте будут храниться, то, наверное, лучше воспользоваться indexedDB.
Еще можно поизвращаться с localStorage.
Я бы хранил данные на сервере, так работать с ними удобнее будет.

Получилось у вас создать файл на ПК пользователя из окна браузера?
Вероятно нет.
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2018, 12:52
Аспирант
Отправить личное сообщение для artem55555p Посмотреть профиль Найти все сообщения от artem55555p
 
Регистрация: 16.04.2016
Сообщений: 74

Сообщение от Nexus Посмотреть сообщение
Если у вас все данные на клиенте будут храниться, то, наверное, лучше воспользоваться indexedDB.
Еще можно поизвращаться с localStorage.
Я бы хранил данные на сервере, так работать с ними удобнее будет.

Получилось у вас создать файл на ПК пользователя из окна браузера?
Вероятно нет.
я и сам не знаю где мне точно хранить данные... indexedDB - это нельзя использовать.
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2018, 02:51
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от artem55555p
я и сам не знаю где мне точно хранить данные... indexedDB - это нельзя использовать.
Так а что можно использовать, если сам не знаю, то откуда знаю что нельзя?
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2018, 11:15
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Линейный двусвязный список. Вдохновлен, как говорят на гитхабе, статьей https://medium.com/p/3beb48ff49cd.
// class DoublyLinkedList constructor
function DoublyLinkedList() {
    this.size = 0;
    this.head = null;
    this.tail = null;
}
// class DoublyLinkedList.Node constructor
DoublyLinkedList.Node = function (data) {
    this.data = data;
    this.next = null;
    this.prev = null;
};
// class DoublyLinkedList methods
DoublyLinkedList.prototype.insert = function (data, reverse) {
    var node = new DoublyLinkedList.Node(data);
    if (reverse) {
        if (this.head !== null) {
            node.next = this.head;
            this.head.prev = node;
        }
        this.head = node;
        if (this.tail === null) {
            this.tail = node;
        }
    } else {
        if (this.tail !== null) {
            node.prev = this.tail;
            this.tail.next = node;
        }
        this.tail = node;
        if (this.head === null) {
            this.head = node;
        }
    }
    this.size++;
    return node;
};
DoublyLinkedList.prototype.delete = function (data) {
    var node = this.head;
    while (node !== null) {
        if (node.data === data) {
            var prev = node.prev, next = node.next;
            if (prev !== null) {
                prev.next = next;
            } else {
                this.head = next;
            }
            if (next !== null) {
                next.prev = prev;
            } else {
                this.tail = prev;
            }
            this.size--;
            break;
        }
        node = node.next;
    }
    return node;
};
DoublyLinkedList.prototype.forEach = function (callback, reverse) {
    if (reverse) {
        var node = this.tail;
        while (node !== null) {
            callback.call(this, node.data);
            node = node.prev;
        }
    } else {
        var node = this.head;
        while (node !== null) {
            callback.call(this, node.data);
            node = node.next;
        }
    }
    return this;
};
DoublyLinkedList.prototype.toArray = function (stringify) {
    var node = this.head, array = [];
    while (node !== null) {
        array.push(node.data);
        node = node.next;
    }
    return stringify ? JSON.stringify(array) : array;
};
DoublyLinkedList.prototype.toDocument = function (parent) {
    var node = this.head, ol = document.createElement('ol');
    while (node !== null) {
        node.data.toDocument(ol);
        node = node.next;
    }
    return parent.appendChild(ol);
};


// class Apartment constructor
function Apartment(prop1, prop2, prop3, prop4) {
    this.prop1 = prop1;
    this.prop2 = prop2;
    this.prop3 = prop3;
    this.prop4 = prop4;
}
// class Apartment methods
Apartment.prototype.compare = function (apartment) {
    var prop3 = this.prop3 / apartment.prop3;
    return (this.prop1 == apartment.prop1) &&
           (this.prop2 == apartment.prop2) &&
           (0.9 < prop3 && prop3 < 1.1);
};
Apartment.prototype.toDocument = function (parent) {
    var li = document.createElement('li');
    li.textContent = JSON.stringify(this);
    return parent.appendChild(li);
};


// Usage

var apartmentList = new DoublyLinkedList();
var apartmentListNode = new DoublyLinkedList.Node();
var apartment1 = new Apartment(1, 1, 1, '1');
var apartment2 = new Apartment(2, 2, 2, '2');
var apartment3 = new Apartment(3, 3, 3, '3');

var tailinsertedNode1 = apartmentList.insert(apartment1);
var tailinsertedNode2 = apartmentList.insert(apartment2);
var headinsertedNode3 = apartmentList.insert(apartment3, true);

var deletedNode = apartmentList.delete(apartment2);

var thisList = apartmentList.forEach(function (apartment) {
    if (apartment2.compare(apartment)) this.remove(apartment);
});

var nodeDataArray = apartmentList.toArray();
var stringifiedArray = apartmentList.toArray(true);

var olElement = apartmentList.toDocument(document.body);
var liElement = apartmentList.insert(apartment2).data.toDocument(olElement);

Последний раз редактировалось Rise, 29.05.2018 в 11:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
PHP и JS формат JSON Хан AJAX и COMET 17 29.07.2016 00:23
js стиль render для react.js vflash Ваши сайты и скрипты 5 01.04.2016 22:57
Подгрузка JS + ajax... afr0 AJAX и COMET 8 10.04.2013 14:38
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28