Форум Рубцовска

Форум Рубцовска (http://rub.altai.su/index.php)
-   Программирование (http://rub.altai.su/forumdisplay.php?f=11)
-   -   моя практика в программировании (http://rub.altai.su/showthread.php?t=94098)

Чужой 12.08.2022 09:25

Говоришь обратная связь приветствуется? Ну держись...

Можно при желании посмотреть какой уже есть софт на эту тему и двигаться в ту же сторону. Например тот же Friendly Pinger, обычный Excel. Подумать над пользой от конечного продукта.



Ну и предложения, возможно заинтересует:

- У меня в вайне по-прежнему существующие строки не выбираются. Пачку можно выделить, а по одному - нет.

- Когда программу просто открыл и закрыл, она спросит "Сохранить изменения?" - но их не было, изменений. Диалог с вопросом системный или самодельный?

- Фильтр (меню поиск). Во-первых, когда он задан - надо это в интерфейсе где то показать (Чтобы понятно было, что сейчас не просто половины объёктов нет, а это фильтр такой задан). Меню "перечитать БД" для меня не было понятно, что это сброс фильтра. Нужно или обозвать "Сброс фильтра" или "Назад, к полному списку" или ка кто ещё подумать. Во-вторых, если ни одной строки не подходит под условие, показывает прошлый список (а должен очистить).

- Убрать функционал "Читать" в редакторе, сразу при открытии редактора прочитать выбранную строку

- Развесить хоткеи (Ловить нажатия Del, Ins, Ctrl+C/V, Ctrl+O, F2...)

- Буттоны в окнах по-умолчанию, которые на Enter должны иметь соответствующий стиль - чёрный бордер. В делфи это достигалось установкой свойства Default. В окне "Править" Enter срабатывает, в фильтре - нет, в других не проверял. Esc тоже надо на отмену. но при этом когда открыт список типов - Enter и Esc должны с ним работать, сейчас вот Enter вместо подтверждения выбранного в списке пункта закрывает окно.

- При открытии файла или создании нового надо ругаться, что текущий список не сохранён

- В списке типов в окне создания/редактирования добавлять список уже добавленных пользователем
- Помещения сделать списком, как типы

- Поле комментариев сделать многострочным

- Прикрутить открывание файла из командной строки, чтобы дабл-кликом по файлу программа открывала свои файлы

- Возможно пригодиться окно настроек, например там можно добавить галочку "Автосохранение"

- Как так, нету пункта Справка с диалогом эбаут и весёлой картинкой ;)





Ну и такое уже, пофантазировать:

- Программа вроде не содержит манифест и не рендерит кнопочки с использованием красивой темы виндовс

- При удалении скрывать, а не удалять (помещать в "корзину")

- Научить программу копировать строку в буфер, и в другое окно программы вставлять

- Добавить перемещение стрелочками с клавиатуры, в том числе по ячейкам, то есть строка подсвечивается синим как выбранная, а ячейка в фокусе пунктиром обводится

- Добавить Ctrl+Z (Отмену действий, еслиф честно до сих пор удивляюсь, как это реализовано)

- Добавить к строкам или ячейкам иконки - например значки типов

- Добавить на главное окно поисковую строку, типа местный яндекс, которая ищет по всем полям

- Добавить фото к объекту

- Сортировка по выбранному столбцу

- Добавить отчеты, начать с количества объектов по типам - сколько системников, сколько мониторов. Вообще подумать - если прога для инвентаризации - то люди ходят с планшетом или распечаткой и отмечают наличие, а по итогу принимают какие то решения - что списать, кого наказать за отсутствие. Как программа может в этом помочь? Печать списка минимум нужна.

- Набор столбцов позволить юзеру редактировать, добавлять свои, как минимум могут пригодиться поля IP/hostname, но тех же IP может быть несколько. Может столбец с флажками или комбо-боксами типа "В порядке"/"Сломано", "В наличии"/"Проёбано". Даты нужны обязательно - дата создания, редактирования, прошлая инвентаризация, следующая инвентаризация, дата приобретения, дата списания. Поле под автора (кто внёс, кто изменил). История событий (ну типа запись с одним ID будет за собой иметь список скрытых строк из прошлого). Тут на самом деле прям отдельная наука, посидеть, самому себе ТЗ составить на структуру базы.

- Если кто упарывается по учёту процов/памяти и т.п., то может пригодиться связывание объектов между собой - как будто один "системник" становится помещением для другого "процессора". Так ты получишь вместо списка дерево. В сурьёзных прогах сейчас этим вручную никто не занимается, инфа о составе железа собирается по сети и журналируются события изменения. Но для начала можно реализовать вручную.

- Привязать системную команду (предположу что для начала к типу объекта привязка будет), ну что-то вроде "ping %IP" для всех системников. Скорее всего для этого понадобится добавить вкладку "Свойства типа" на страницу редактирования, или в настройки программы, или добавить окно настроек базы (это если команда будет храниться в базе, а не будет общей для всех баз)

- Импорт данных из чужого файла/из буфера обмена, вообще подумать - допустим у чела есть в экзеле строк 600 инвентарников - ему что, вручную в твою прогу переносить?

- Смена режима отображения главного списка - как в проводнике: таблица, значки, эскизы. Тут может потребоваться меню "Вид" или ползунок с лупой - крупнее/мельче делать.

Neil 04.09.2022 10:36

ух ты! много написал. почитаю.
а пока так, с базой, для наглядности :)
Вложение 92076

p.s.: разработка чуть-чуть затормозилась -
перевели на другую работу и график. надо попривыкнуть ;)
зато з.плата подрастёт :)

Neil 04.09.2022 11:37

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... строки не выбираются...

будет. НО потом

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... программу просто открыл и закрыл, она спросит "Сохранить изменения?" - но их не было, изменений. Диалог с вопросом системный или самодельный?...

... При открытии файла или создании нового надо ругаться, что текущий список не сохранён...

самодельный. исправлю

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Фильтр (меню поиск). Во-первых, когда он задан - надо это в интерфейсе где то показать (Чтобы понятно было, что сейчас не просто половины объёктов нет, а это фильтр такой задан). Меню "перечитать БД" для меня не было понятно, что это сброс фильтра. Нужно или обозвать "Сброс фильтра" или "Назад, к полному списку" или ка кто ещё подумать. Во-вторых, если ни одной строки не подходит под условие, показывает прошлый список (а должен очистить)...

это круто! сделаю на днях

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Убрать функционал "Читать" в редакторе, сразу при открытии редактора прочитать выбранную строку...

нипанятно чёт :)

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Развесить хоткеи (Ловить нажатия Del, Ins, Ctrl+C/V, Ctrl+O, F2...)

- Буттоны в окнах по-умолчанию, которые на Enter должны иметь соответствующий стиль - чёрный бордер. В делфи это достигалось установкой свойства Default. В окне "Править" Enter срабатывает, в фильтре - нет, в других не проверял. Esc тоже надо на отмену. но при этом когда открыт список типов - Enter и Esc должны с ним работать, сейчас вот Enter вместо подтверждения выбранного в списке пункта закрывает окно...

будет скоро сделано. запрос не только от тебя :)

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Поле комментариев сделать многострочным...

сделаю

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Прикрутить открывание файла из командной строки, чтобы дабл-кликом по файлу программа открывала свои файлы...

думал об этом. надо ещё подумать... :)

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Как так, нету пункта Справка с диалогом эбаут и весёлой картинкой ;)

ну разве что для прикола, когда ПО будет готово хотя бы на 90% от пожеланий юзверей :)

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Программа вроде не содержит манифест и не рендерит кнопочки с использованием красивой темы виндовс...

красявостей не обещаю :dnt:

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... При удалении скрывать, а не удалять (помещать в "корзину")...

хмм... тогда создам ещё один список как основную БД и добавлю кнопку "Удалённое"

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Научить программу копировать строку в буфер, и в другое окно программы вставлять...

будет, после горячих клавиш и возможности выбирать строки

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Добавить Ctrl+Z (Отмену действий, еслиф честно до сих пор удивляюсь, как это реализовано)...

попробую. будет кнопка - История действий

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Добавить на главное окно поисковую строку, типа местный яндекс, которая ищет по всем полям...

интересное пожелание :) вынести значит поиск, кхм... ну посмотрим :)

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Добавить фото к объекту...

занятно... а нафига? :D
добавлю функционал в самом конце.
почему то мне кажется не обязательным :dnt:

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Сортировка по выбранному столбцу...

делаю сейчас. в C# как то не очень удобно реализована работа с сортировкой массивов :dnt:

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Добавить отчеты, начать с количества объектов по типам - сколько системников, сколько мониторов. Вообще подумать - если прога для инвентаризации - то люди ходят с планшетом или распечаткой и отмечают наличие, а по итогу принимают какие то решения - что списать, кого наказать за отсутствие. Как программа может в этом помочь? Печать списка минимум нужна...

СДЕЛАЮ ОБЯЗАТЕЛЬНО!
это очень круто! :vo:

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Набор столбцов позволить юзеру редактировать, добавлять свои, как минимум могут пригодиться поля IP/hostname, но тех же IP может быть несколько. Может столбец с флажками или комбо-боксами типа "В порядке"/"Сломано", "В наличии"/"Проёбано". Даты нужны обязательно - дата создания, редактирования, прошлая инвентаризация, следующая инвентаризация, дата приобретения, дата списания. Поле под автора (кто внёс, кто изменил). История событий (ну типа запись с одним ID будет за собой иметь список скрытых строк из прошлого). Тут на самом деле прям отдельная наука, посидеть, самому себе ТЗ составить на структуру базы...

про столбы не обещаю. там лопатить не перелопатить.
добавить какие то?... подумаю.

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Если кто упарывается по учёту процов/памяти и т.п., то может пригодиться связывание объектов между собой - как будто один "системник" становится помещением для другого "процессора". Так ты получишь вместо списка дерево. В сурьёзных прогах сейчас этим вручную никто не занимается, инфа о составе железа собирается по сети и журналируются события изменения. Но для начала можно реализовать вручную...

возможно

Цитата:

Сообщение от Чужой (Сообщение 1317489)
... Импорт данных из чужого файла/из буфера обмена, вообще подумать - допустим у чела есть в экзеле строк 600 инвентарников - ему что, вручную в твою прогу переносить?...

хорошая мысль *SCRATCH* отмечу!

Чужой 06.09.2022 15:01

Актунг! На 2003-ей винде не запускается. Какие-то рунтаймы нужны?

Neil 06.09.2022 22:00

Цитата:

Сообщение от Чужой (Сообщение 1317560)
Актунг! На 2003-ей винде не запускается. Какие-то рунтаймы нужны?

может ОСь обновить, спустя 19 лет то? :)

p.s.: чё пишет? :)

Чужой 07.09.2022 13:53

Цитата:

Сообщение от Neil (Сообщение 1317563)
может ОСь обновить, спустя 19 лет то? :)

p.s.: чё пишет? :)

Это именно тестовая машина, смысл которой именно в её старости, для тестов и запуска устаревших всяких штук.

Пишет "... не является приложением Win32", при этом в хэдере файла написано, что это Win32 (i386 compatible) экзешник.

Midday 07.09.2022 14:35

Цитата:

Сообщение от Чужой (Сообщение 1317566)
Это именно тестовая машина, смысл которой именно в её старости, для тестов и запуска устаревших всяких штук.

Пишет "... не является приложением Win32", при этом в хэдере файла написано, что это Win32 (i386 compatible) экзешник.

Случайно апдейт пак от simplix не ставил на неё?

Ghost 11.09.2022 01:18

System.ObjectDisposedException: Cannot access a disposed object.
System.IO.DirectoryNotFoundException: Could not find a part of the path...

Код:

          try
            {
                ListViewHitTestInfo stroka_v_tablice = listView_Tablica_Vivoda_Bazi.HitTest(e.X, e.Y);

                if (stroka_v_tablice != null)
                {
                    nomer_najatoi_stroki = stroka_v_tablice.Item.Index;

                    nomer_najatoi_stroki++;
                }
            }
            catch (Exception)
            {
                //  где обработка исключений?
            }

Код:

                        if (Directory.Exists("БД") == false) // зачем тут лишняя проверка?
                        {
                            Directory.CreateDirectory("БД");
                        }

Зачем в конструкторе главного окна создавать диалоги и читать какие то файлы?
Что это за файлы? Что если в них миллион строк? Я главное окно через полчаса увижу? Завтра вместо файлов нужна будет база данных будешь всё приложение переписывать? Слишком много логики в одном классе, инкапсулируй её. Где тесты?

---------- Добавлено 11.09.2022 в 03:09 ----------

Код:

                foreach (string stroka in Poisk.stroka)
                {
                    if (stroka != "")
                    {
                        chislo_parametrov_dlia_sravnenia++;
                    }
                }

Что это за цикл? Ты считаешь длину массива без пустых строк? Не ложи их туда, сделай массив динамическим. Poisk.stroka.Length? И почему там статика?
Код:

            string[] stolbci = new string[]
            {
                listView_Tablica_Vivoda_Bazi.Columns[0].Text,        // ID
                listView_Tablica_Vivoda_Bazi.Columns[1].Text,        // Дата приобретения
                listView_Tablica_Vivoda_Bazi.Columns[2].Text,        // Инв. №
                listView_Tablica_Vivoda_Bazi.Columns[3].Text,        // Помещение
                listView_Tablica_Vivoda_Bazi.Columns[4].Text,        // Закреплено за ФИО
                listView_Tablica_Vivoda_Bazi.Columns[5].Text,        // Наименование
                listView_Tablica_Vivoda_Bazi.Columns[6].Text,        // Тип
                listView_Tablica_Vivoda_Bazi.Columns[7].Text,        // Состояние
                listView_Tablica_Vivoda_Bazi.Columns[8].Text,        // Инвентаризация
                listView_Tablica_Vivoda_Bazi.Columns[9].Text,        // Комментарий
                listView_Tablica_Vivoda_Bazi.Columns[10].Text,        // Hostname
                listView_Tablica_Vivoda_Bazi.Columns[11].Text,        // IP
                listView_Tablica_Vivoda_Bazi.Columns[12].Text,        // Изменил ФИО
            };

Хорошо что их не сто, правда?
Код:

        private void ToolStripMenuItem_Sohranit_Kak_Click(object sender, EventArgs e)
        {
            SaveFileDialog put_k_failu = new SaveFileDialog() { Filter = "*.CSV|*.csv" };

            if (put_k_failu.ShowDialog() == DialogResult.OK)
            {
                File.WriteAllLines(put_k_failu.FileName, spisok_stolbcov.Select(x => string.Join(",", x)));

                File.AppendAllLines(put_k_failu.FileName, baza.Select(x => string.Join(",", x)));

                put_do_BD = put_k_failu.FileName;

            }
        }
        private void ToolStripMenuItem_Sohranit_Click(object sender, EventArgs e)
        {
            try
            {
                File.WriteAllLines(put_do_BD, spisok_stolbcov.Select(x => string.Join(",", x)));

                File.AppendAllLines(put_do_BD, baza.Select(x => string.Join(",", x)));

            }
            catch (Exception)
            {
              ???????????????
            }
        }

Дублирование кода детект.
Сделай нормальный рефакторинг. Придерживайся одного codestyle. Ну и название методов, свойств, полей и переменных пиши на английском.

---------- Добавлено 11.09.2022 в 03:30 ----------

Код:

        public static string put_do_BD = "";                          // Путь к файлу с базой
        public static string put_do_spiska_pomeschenii = "";          // Путь к списку помещений
        public static string put_do_spiska_sotrudnikov = "";          // Путь к списку сотрудников
        public static string put_do_spiska_tipov_oborudovania = "";  // Путь к списку типов оборудования
       
        public static List<string[]> baza = new List<string[]>();    // БД в виде списка для удобной работы

        public static int index = 0;                                  // Индекс элемента в БД. При добавлении +, при удалении -

        public static bool kopirovanie;                              // Флаг копирования при операции "Копирование"
        public static bool peremeschenie;                            // Флаг перемещения при операции "Перемещение"

        public static int nomer_najatoi_stroki;                      // При клике мышкой запоминает номер строки в таблице на главном окне
        public static bool izmeneniia_s_otkritiia = false;            // Отслеживает были ли изменения с открытия программы.
        public static string[] pomescheniia;

        public static string[] sotrudniki;

        public static string[] tipi;

        public static string[] stroka = new string[13];

        public static bool otmenit = true;
        public static string[] pomescheniia;

        public static string[] sotrudniki;

        public static string[] tipi;
        public static string[] pomescheniia;

        public static string[] sotrudniki;

        public static string[] tipi;

        public static string[] stroka = new string[13];

        public static bool otmenit = true;

это не ООР. У тебя все в статике, всё нужно переписать и тогда твой проект станет в два раза меньше, гораздо понятнее и масштабируемым.

Neil 18.09.2022 15:54

Вложение 92090
https://github.com/Intern-box/DevList


Цитата:

+ выделение строк

+ если НЕ было изменений, НЕ спрашивать "сохранить или нет"

+ при открытии другой БД, если БЫЛИ изменения, спрашивать "сохранить или нет"

+ если просто в БД, то "кнопка фильтра" НЕ активна, если ищем, то красная

+ если строки фильтра пустые, то чистим список вывода

+ после нажатия отмены в поиске поиск отрабатывает

+ горячие клавиши

+ строка поиска по всем ячейкам в БД на главном окне

+ нужны колонки IP, hostname, комбобокс "рабочее/в ремонте/сломано/в наличие/утеряно", дата приобретения, последняя инвентаризация, изменил ФИО
сделал (вроде) проверяйте :)
просьба проверить запуск "голого" DevList.exe в пустой папке (Спасибо! ;))

Цитата:

? поле комментариев сделать многострочным
комменты читайте по кнопке править в столбце

Цитата:

- БД для удалённых МЦ + кнопка "Удалённые"

- "История" действий и возврат по строкам истории по Ctrl+Z + колонка "дата списания"

- нужна сортировка по колонкам

- отчёт по кол-ву МЦ в типе оборудования, общее кол-во всего, где сколько должно по помещениям. печать отчёта

- если системник собирался по комплектующим (у них разные инв.№'а) то подумать над выводом списка комплектующих

- импорт из другого *.csv
занимаюсь...

p.s.: Чужой, запуск под старую ОСь попробую поправить позже.

Ghost, крутые замечания :vo: НО попозже. Спасибо! ;)

Ghost 19.09.2022 01:20

Вложений: 2
Цитата:

Сообщение от Neil (Сообщение 1317610)
Ghost, крутые замечания :vo: НО попозже. Спасибо! ;)

Да не за что)
Позже нужно будет больше переписывать.
И ещё, GUI и логика должны быть в разных потоках, особенно тяжелые операции как файловый ввод\вывод, иначе твой интерфейс будет виснуть. Form_Load как раз можешь использовать для сигнализации потоку, что форма загружена и готова к приёму данных.

Чужой 19.09.2022 08:44

Я тут был в барне на IT форуме, чел из компании Postgres PRO очень сильно хотел нанять каких-нибудь разработчиков на C. Ну так, если кто хотит.

MaSteRk 19.09.2022 12:19

а я чет не поехал. опять :)

Arnold 19.09.2022 12:21

Цитата:

Сообщение от Чужой (Сообщение 1317612)
Я тут был в барне на IT форуме, чел из компании Postgres PRO очень сильно хотел нанять каких-нибудь разработчиков на C. Ну так, если кто хотит.

Так то все хотят нанять разработчиков. Только не каких-нибудь, а альфа-самцов.

Capsaicin 19.09.2022 13:15

Цитата:

Сообщение от Чужой (Сообщение 1317612)
Я тут был в барне на IT форуме, чел из компании Postgres PRO очень сильно хотел нанять каких-нибудь разработчиков на C. Ну так, если кто хотит.

Так то C, а тут C#. Какая з/п вилка?

Копатель 19.09.2022 17:39

Цитата:

Сообщение от Capsaicin (Сообщение 1317616)
Так то C, а тут C#. Какая з/п вилка?

Очевидно 200-350к.

Capsaicin 20.09.2022 11:44

Цитата:

Сообщение от Копатель (Сообщение 1317617)
Очевидно 200-350к.

Ой не, там работать похоже надо. Спасибо.

Arnold 20.09.2022 12:43

Современные СУБД, это не хухры-мухры.
Даже страшно подумать, что там надо уметь.
Тут не могу решить задачку по информатике с олимпиады за 8-11класс.

Копатель 20.09.2022 14:25

Я как-то раз был на выступлении Бартунова. Он рассказывал как раз, как он работал над реализацией JSON в Postgres. Там вообще неслабый бэкграунд нужен. В нашей деревне вряд ли найдутся такие дарования.

Arnold 20.09.2022 15:17

Цитата:

Сообщение от Копатель (Сообщение 1317620)
Я как-то раз был на выступлении Бартунова. Он рассказывал как раз, как он работал над реализацией JSON в Postgres. Там вообще неслабый бэкграунд нужен. В нашей деревне вряд ли найдутся такие дарования.

ручной тестировщик получает 60руб,
автотестер - уже 80
Хороший автотестер - до 150.
Не столица же, в Рубцовке с такой зп можно чувствовать себя олегархом.

Neil 25.12.2022 03:44

работа не заброшена.
пришлось отложить...

Вложение 92136
Вложение 92137


https://github.com/Intern-box/DevList

...
переписал код. вроде в ООП :)
на днях постараюсь добавить "Базу с историей удалений"
печать "Отчётов" пока не планирую. там сами разберётесь :)
про базы к комплектующим пока не думал...

жду обратную связь*HI*

p.s.: просьба копипастить коды ошибок полностью:ok:


Часовой пояс GMT +7, время: 07:19.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot