Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.05.2023
Сообщений: 5
.NET 6

Создать файл, содержащий сведения о телефонах абонентов

23.05.2023, 21:05. Показов 2692. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать файл, содержащий сведения о телефонах абонентов.
Формат: Номер телефона | ФИО | Дата регистрации
Кол-во записей: 30

1) Вывести список абонентов, зарегистрированных с XXXX года. Год вводится пользователем.
2) Вывести дату регистрации при вводе номера телефона. Номер вводится пользователем

все это в созданном окне, с кнопками - открыть, сохранить файл и формой в виде таблицы, куда выводится инфа из загруженного файла - №тел | ФИО | регистрация
с возможностью заносить и сохранять данные, сверх существующих в файле

vs17 community
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2023, 21:05
Ответы с готовыми решениями:

Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонентов, год
Помогите записать в файл, вывести информацию using System; using System.Collections.Generic; using System.Linq; using...

Создать файл содержащий сведения об аттракционах парка C#
Создать файл, содержащий сведения об аттракционах парка. Каждая запись содержит поля: ­- название аттракциона, ­- стоимость билета, ...

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

41
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
14.06.2023, 09:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
Осталось запилить Поиск покрасившее и все.
wizard41, не спеши - слово надо сдержать!
Цитата Сообщение от wizard41 Посмотреть сообщение
К концу года доделаю
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
14.06.2023, 09:46
Цитата Сообщение от Uswer Посмотреть сообщение
слово надо сдержать!
Окей, перерыв до декабря.
1
3271 / 3366 / 559
Регистрация: 17.02.2019
Сообщений: 5,281
14.06.2023, 10:05
Цитата Сообщение от wizard41 Посмотреть сообщение
перерыв до декабря.
подождем
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
14.06.2023, 10:08
Цитата Сообщение от January29 Посмотреть сообщение
подождем
А если ТС сессию завалит?

Добавлено через 16 секунд
Кто будет виноват? )
1
3271 / 3366 / 559
Регистрация: 17.02.2019
Сообщений: 5,281
14.06.2023, 10:10
Цитата Сообщение от wizard41 Посмотреть сообщение
Кто будет виноват? )
печалька будет
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
15.06.2023, 13:26
Поиск записей
Поиск записей производится по любому полю класса Phone, будь то ФИО, номер телефона или дата регистрации.
Окно не модальное, т.е. можно продолжать работу с главной формой не закрывая окна поиска.
Окно поиска

Принцип поиска следующий:
Сперва пытаемся определить, что именно вводит пользователь в поле поисковика. Для этого в класс Validator добавим необходимые шаблоны:
Validator add
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    [GeneratedRegex(@"^[а-яА-Я]+ ?[а-яА-Я]?.? ?[а-яА-Я]?.?$")]
    private static partial Regex InputName();
 
    [GeneratedRegex(@"^(\+7|8)\d\d")]
    private static partial Regex InputTelNumber();
 
    [GeneratedRegex(@"^\d{1,2}[.,/-]")]
    private static partial Regex InputDate();
 
    public static bool IsNameEnter(string text)
    {
        return InputName().IsMatch(text);
    }
 
    public static bool IsTelEnter(string text)
    {
        return InputTelNumber().IsMatch(text);
    }
 
    public static bool IsDateEnter(string text)
    {
        return InputDate().IsMatch(text);
    }

Поиск по ФИО происходит сразу, после ввода любого символа русского алфавита.
Поиск по номеру телефона - после ввода третьей цифры (нет смысла выводить записи по +7 или 8, т.к. они есть у всех абонентов).
Поиск по дате - после ввода одной или двух цифр и последующего за ними символа-разделителя.

Механизм поиска реализован в событии textBox1_TextChanged:
TextChanged
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        FindRecords.Clear();
 
        if (Validator.IsNameEnter(textBox1.Text))
        {
            Phone[] find = mainForm.PhoneList.Where(o => o.FIO.StartsWith(textBox1.Text, StringComparison.OrdinalIgnoreCase)).ToArray();
            if (find.Length > 0)
                foreach (Phone phone in find)
                    FindRecords.Add(phone);
        }
 
        if (Validator.IsTelEnter(textBox1.Text))
        {
            Phone[] find = mainForm.PhoneList.Where(o => o.TelNumber.StartsWith(textBox1.Text)).ToArray();
            if (find.Length > 0)
                foreach (Phone phone in find)
                    FindRecords.Add(phone);
        }
 
        if (Validator.IsDateEnter(textBox1.Text))
        {
            // По просьбе трудящихся форумчан...
            // Это оставим на декабрь :))
        }
 
        listBox1.ClearSelected();
    }

Поиск по дате еще не сделан.

Поиск записей решил сделать без передачи текущего списка в окно поиска, а вытягивая его из публичного свойства главной формы:
C#
1
2
3
4
    public List<Phone> PhoneList
    {
        get => DgvSource.ToList();
    }
Это дает возможность искать вновь добавленные записи, без закрытия окна поиска.
Миниатюры
Создать файл, содержащий сведения о телефонах абонентов  
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
15.06.2023, 13:38
Да, забыл добавить, что открытие окна "Поиск" сопряжено с проверкой его существования. Т.е. открыть два и более таких окон не получится.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
15.06.2023, 13:40
InputTelNumber надо подправить чтобы поиск осуществлялся по всему номеру, т.е., допустим, при вводе 640 находился Иванов И.И.

Не по теме:

P.S. Я в регулярках не очень от слова совсем.

0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
15.06.2023, 13:52
Цитата Сообщение от Uswer Посмотреть сообщение
при вводе 640 находился Иванов И.И.
Была идея сделать полнотекстовый поиск, но, думаю, овчинка выделки не стоит...
Цитата Сообщение от Uswer Посмотреть сообщение
Я в регулярках не очень
Так я тоже не особо силен. Просто не приходилось ими пользоваться много.

Добавлено через 2 минуты
Хотя, если заменить StartsWith на Contains, то должно сработать поиск и внутри строки.

Добавлено через 5 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
на Contains
подправив при этом регулярку.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
15.06.2023, 23:53
Цитата Сообщение от Uswer Посмотреть сообщение
InputTelNumber надо подправить чтобы поиск осуществлялся по всему номеру, т.е., допустим, при вводе 640 находился Иванов И.И.
Ну кто тебя за язык тянул? Сделано:

Регекс: "^((\+7|8)\d\d)|\d{3,}"
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
16.06.2023, 00:32
Цитата Сообщение от wizard41 Посмотреть сообщение
Регекс: "^((\+7|8)\d\d)|\d{3,}"
в этом случае становится таким: "^\+?\d{3,}"
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
16.06.2023, 00:35
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
16.06.2023, 00:39
Но все равно мне кажется, что это не правильно - искать последовательности чисел среди номеров телефонов.
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
16.06.2023, 08:47
Цитата Сообщение от wizard41 Посмотреть сообщение
мне кажется, что это не правильно
Правильно-правильно, не переживай ибо поиск на то и поиск, чтобы находить нужное даже по фрагменту информации.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
16.06.2023, 13:26
Цитата Сообщение от Uswer Посмотреть сообщение
поиск на то и поиск
Окей.
Тогда поиск по дате:
Обнаружение ввода даты: @"^(\d{1,2}[.,/-])|([.,/-]\d+){1,2}[.,/-]?"
Событие TextChanged:
C#
1
2
3
4
5
6
7
8
9
10
    if (Validator.IsDateEnter(textBox1.Text))
    {
        Phone[] find = mainForm.PhoneList.Where(o => o.RegDate.ToString().Contains(textBox1.Text
            .Replace(',', '.')
            .Replace('-', '.')
            .Replace('/', '.'))).ToArray();
        if (find.Length > 0)
            foreach (Phone phone in find)
                FindRecords.Add(phone);
    }

1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
16.06.2023, 18:44
Цитата Сообщение от Nomadium Посмотреть сообщение
1) Вывести список абонентов, зарегистрированных с XXXX года. Год вводится пользователем.
2) Вывести дату регистрации при вводе номера телефона. Номер вводится пользователем
Регулярка для проверки ввода года из диапазона 2000-2023: @"^20(?:[0-1][0-9]|2[0-3])$"
Обработчики кнопок
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    private void button1_Click(object sender, EventArgs e)
    {
        if(!Validator.IsYearValid(textBox1.Text)) 
        {
            MessageBox.Show("Неверный год!\nВвод должен быть в диапазоне 2000 - 2023.",
                "Ошибка ввода!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
 
        int y = int.Parse(textBox1.Text);
        string[] find = mainForm.PhoneList.Where(x => x.RegDate.Year >= y).Select(s => s.FIO).ToArray();
 
        MessageBox.Show(find.Length > 0 ? string.Join("\n", find) : "Таких абонентов не найдено!",
            "Найденые абоненты", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
 
    private void button2_Click(object sender, EventArgs e)
    {
        if (!Validator.CheckTelNumber(textBox2.Text))
        {
            MessageBox.Show("Неверный номер!",
                "Ошибка ввода!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
 
        string number = textBox2.Text.Trim(new char[] { '+', '7', '8' });
        string? find = mainForm.PhoneList.Where(x => x.TelNumber.Contains(number)).Select(s => s.RegDate.ToString()).FirstOrDefault();
 
        MessageBox.Show(find ?? "Такого номера нет в списке!",
            "Дата регистрации номера " + number, MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

1
0 / 0 / 0
Регистрация: 23.05.2023
Сообщений: 5
27.11.2023, 12:32  [ТС]
не завалил

зато есть другое задание
но уже на с++
0
0 / 0 / 0
Регистрация: 23.05.2023
Сообщений: 5
28.11.2023, 12:52  [ТС]
уважаемый wizard41,
можно попросить поделиться исходниками этого проекта C#?
0
3271 / 3366 / 559
Регистрация: 17.02.2019
Сообщений: 5,281
28.11.2023, 18:19
Уважаемый wizard41, и со мной тоже.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
29.11.2023, 20:09
Цитата Сообщение от Nomadium Посмотреть сообщение
можно попросить поделиться исходниками этого проекта C#?
Нууу... это когда было то... Если этот проект не удалил, то он на другом компе. Если найду, скину.
Цитата Сообщение от January29 Посмотреть сообщение
Уважаемый wizard41, и со мной тоже.
Бе-бе-бе
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2023, 20:09

Создать файл, содержащий сведения о телефонах абонентов
Создать файл, содержащий сведения о телефонах абонентов. Каждая записаь имеет поля -- фамилия абонента, года установки телефона, номер...

Создать файл, содержащий сведения о телефонах абонентов
Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля - фамилия абонента, год установки телефона, номер...

Создать файл, содержащий сведения о телефонах абонентов
Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилию абонента, адрес абонента год установки телефона,...

Создать файл, содержащий сведения о телефонах абонентов
А. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонента, год установки телефона, номер...

Создать файл, содержащий сведения о телефонах абонентов
1. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись содержит поля: фамилия абонента, год установки телефона, номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru