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

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

23.05.2023, 21:05. Показов 2687. Ответов 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 / 3355 / 559
Регистрация: 17.02.2019
Сообщений: 5,258
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 / 3355 / 559
Регистрация: 17.02.2019
Сообщений: 5,258
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 / 3355 / 559
Регистрация: 17.02.2019
Сообщений: 5,258
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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru