Как реализовать Таблицу Менделеева?

Имеется база данных в которой хранятся пути к текстовым и видео файлам. В текстовых файлах хранится немного информации о химических элементах, на видео сняты эксперименты с ними. То есть, например в файле H.txt такой текст:

Нydrogene (от греч. ύδρω – вода и γεννάω – рождаю), что означает «рождающий воду»
Водород широко распространён в природе, его содержание в земной коре (литосфера и гидросфера) составляет по массе 1%, а по числу атомов 16%.


От меня требуется создать приложение на C#, в качестве IDE буду использовать Visual Studio.

Суть приложения: при открытии программы выводить таблицу Менделеева. Если пользователь нажимает на какой-либо элемент — в новом окне выводить информацию о нём из соответствующего текстового файла

Как это качественней реализовать? Предполагаю что нужен некий алгоритм, который при запуске будет расставлять виджеты элементов по форме и привяжет к ним значения из БД. Не вручную же их все ставить.
  • Вопрос задан
  • 660 просмотров
Решения вопроса 2
@LiS-31
Как уже писали выше, вывести алгоритм формирования Таблицы Менделеева будет весьма проблемно. Расположение зависит от свойств самих элементов (количество незаполненных электронов на внешнем слое, валентности и заряда ядра). Выбирать все эти данные для формирования таблицы, просто не эффективно.
Гораздо логичнее сделать таблицу в которой будут №строки,№столбца и название файла с описанием. По сути та же самая таблица Менделеева в электронном варианте, позволит выбирать элементы по строкам, столбцам или точному расположению.
Ответ написан
Комментировать
lexxpavlov
@lexxpavlov
Программист, преподаватель
Предполагаю, что делается WPF-проект.

1. Сделать класс-вьюмодель элемента с нужными свойствами для описания элемента.

2. В программе создать список таких вьюмоделей (загружать данные можно и через файлы, не принципиально). Возможно, нужен список не элементов, а список ячеек.

3. Создание таблицы элементов. Также нужна возможность сделать пустые ячейки (например, между водородом и гелием). Список ячеек показывать через ItemsControl с нужным вариантом панели: WrapPanel или Grid. Для показа разных типов ячеек (элемент, пустая ячейка, ячейка с текстом) можно использовать различные шаблоны (указав DataTemplate c типом или через ItemTemplateSelector).

а) (самый простой вариант) панель WrapPanel с нужной шириной таблицы и с нужной шириной/высотой элемента. Неиспользуемые ячейки просто показывать пустоту (или что-нибудь показать внутри этой ячейки). Каждая пустая ячейка должна быть в списке ячеек отдельным элементом. WrapPanel сама покажет все переданные ячейки в виде таблицы.

б) (возможность написать что-то в строке между H и He) панель WrapPanel с нужной шириной. Во вьюмодели сделать свойство int Span для тех ячеек, которые будут заниматься несколько ячеек. По умолчанию значение 1 (одна ячейка). В контрол привязывать ширину контрола ячейки с свойством Span (с помощью конвертера, я бы назвал MultiplyConverter)

в) (более сложно, но больше возможностей - объединение ячеек по горизонтали и вертикали) панель Grid с 8 колонками и сколько-то там строками (или какой вариант таблицы вы хотите использовать). Во вьюмодели сделать свойства Row и Col, а также RowSpan и ColSpan, привязывать их в одноимённые свойства в контроле (attached properties Grid.Row и т.п.).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@TarzanPasha
Чтобы придумать алгоритм, нужно сначала понять по какому принципу создана таблица Менделеева. Вряд ли тут есть химики. Но я думаю что проще будет вручную все расставить, потому что алгоритм получится довольно сложный, учитывая все возможные правила и исключения из правил которые есть в таблице Менделеева. Советую не запариваться с этим, меньше времени потратишь.
Ответ написан
@Elzik
В итоге не совсем понятно, нужно сделать как тут с визуальной частью и интерактивностью или просто таблицу с элементами и их химическами свойствами?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы