Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143

Телефонный справочник запись полей через (Structure) структуры в файл и вывод в (ListBox)

31.10.2011, 20:19. Показов 2429. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть структура, два текстовых поля и кнопка записи в файл после нажатия кнопки должна быть выполнена проверка на совпадение с уже имеющимися данными (телефонный-справочник "ListBox") и если они имеются в (ListBox) то выводится сообщение(ошибка и т.п), а если нет то они записываются в файл и обнавляется в (ListBox)

VB.NET
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
32
33
34
35
36
37
38
39
Structure MyText
Public stroka1 As String
Public stroka2 As String
End Structure
 
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
Dim struct As MyText
struct.stroka1 = TextBox1.Text
struct.stroka2 = TextBox2.Text
 
Dim aa As String
 
If TextBox1.Text <> "" Or TextBox2.Text <> "" Then
aa = struct.stroka1 & "--" & struct.stroka2 '-----а это через структуру
 
'Затем выполняется проверка на совподение элементов перед записью 
 
 
'For Each item As String In aa
' If Not ListBox1.Items.Contains(item) Then
 
' End If
'Next
 
Dim a As StreamWriter = New IO.StreamWriter("D:\TestFile.txt", True) 'а здесь добавляются
aa = TextBox1.Text & "--" & TextBox2.Text
'a.WriteLine(aa & vbNewLine) 'здесь выводится еще пустая строка
a.WriteLine(aa) 'а здесь в каждой строке
a.Close()
TextBox1.Text = ""
TextBox2.Text = ""
ListBox1.Items.Clear()
Button6.Enabled = True
'End If
Else
MessageBox.Show("Введенные данные уже имеются!!!", aa, MessageBoxButtons.OK)
Exit Sub
End If
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2011, 20:19
Ответы с готовыми решениями:

Запись в файл и вывод структуры через под программы
Помогите пожалуйста создал структуру которая содержит название игрушек,страну производителя, цену, возростные рамки и количество. записал в...

Структуры, телефонный справочник
Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения. Организовать ввод структурных...

Телефонный справочник и текстовый файл
Как создать телефонный справочник с помощью текстового файла,подскажите с чего начать и как что подключать.

15
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.10.2011, 20:50
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    Dim fName As String = "Phones.txt"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            Dim Out As String = TextBox1.Text & " -- " & TextBox2.Text
            If ListBox1.Items.Contains(Out) Then
                MsgBox("Запись уже имеется", MsgBoxStyle.Exclamation)
                Exit Sub
            Else
                ListBox1.Items.Add(Out)
                My.Computer.FileSystem.WriteAllText(fName, Out & vbCrLf, True)
                TextBox1.Clear() : TextBox2.Clear()
            End If
        End If
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IO.File.Exists(fName) Then
            ListBox1.Items.AddRange(IO.File.ReadAllLines(fName, System.Text.Encoding.Default))
        End If
    End Sub
Это принцип, структуры прикрутить будет несложно, если их требует задача.
0
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143
31.10.2011, 21:13  [ТС]
почемуто в файл если там уже есть эта запись то добавляется вторая токаяже

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        Dim struct As MyText
        struct.stroka1 = TextBox1.Text
        struct.stroka2 = TextBox2.Text
 
        Dim aa As String
 
               Dim fName As String = "D:\TestFile.txt"
        
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            Dim Out As String = TextBox1.Text & " -- " & TextBox2.Text
            If ListBox1.Items.Contains(Out) Then
                MsgBox("Запись уже имеется", MsgBoxStyle.Exclamation)
                Exit Sub
            Else
                Dim a As StreamWriter = New IO.StreamWriter("D:\TestFile.txt", True)  'а здесь добавляются
                aa = TextBox1.Text & "--" & TextBox2.Text
                               ListBox1.Items.Add(Out)
                My.Computer.FileSystem.WriteAllText(fName, Out & vbCrLf, True)
                TextBox1.Clear() : TextBox2.Clear()
            End If
        End If
        
     End Sub
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.10.2011, 21:23
А теги у кода где?

Цитата Сообщение от Moerte Посмотреть сообщение
New IO.StreamWriter
Ну я тебе совсем по-другому советовал.
От стрим райтеров я отказался с первого дня и подсказать по ним не получится

Добавлено через 2 минуты
Ой-ёй ты там чего накарулесил
2
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143
31.10.2011, 21:28  [ТС]
что за стрим райтеры

Добавлено через 3 минуты
спасибо за помощь ваш код обмазгую с приподователем и доведем до нужного
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
31.10.2011, 21:34
Moerte, вот со стуктурами то же самое, дорабатывать вроде не нужно, в стуктуре перегрузка
VB.NET
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
32
33
34
35
36
37
Public Class Form1
    Structure MyText
        Public stroka1 As String
        Public stroka2 As String
        Public Overrides Function ToString() As String
            Return stroka1 & " -- " & stroka2
        End Function
    End Structure
    Dim struct As MyText
    Dim fName As String = "Phones.txt"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            With struct
                .stroka1 = TextBox1.Text
                .stroka2 = TextBox2.Text
            End With
            If ListBox1.Items.Contains(struct.ToString) Then
                MsgBox("Запись уже имеется", MsgBoxStyle.Exclamation)
                Exit Sub
            Else
                ListBox1.Items.Add(struct.ToString)
                My.Computer.FileSystem.WriteAllText(fName, struct.ToString & vbCrLf, True)
                TextBox1.Clear() : TextBox2.Clear()
            End If
        End If
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IO.File.Exists(fName) Then
            ListBox1.Items.AddRange(IO.File.ReadAllLines(fName, System.Text.Encoding.Default))
        End If
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Close()
    End Sub
End Class
Добавлено через 40 секунд
Никаких Стрём райдеров не добавляй, код полностью готов
2
 Аватар для KingManiya
203 / 203 / 13
Регистрация: 14.10.2011
Сообщений: 227
01.11.2011, 10:36
VB.NET
1
2
3
4
5
6
7
8
Structure MyText
        Public stroka1 As String
        Public stroka2 As String
        Public Overrides Function ToString() As String
            Return stroka1 & " -- " & stroka2
        End Function
    End Structure
    Dim struct As MyText
Не знал, что можно функции в структуры вставлять... Только из за этого пришлось вникать в классы
0
01.11.2011, 11:25

Не по теме:

KingManiya, Как то Евгений22 показывал пример, что там и события и чисто все, почти как в классах)

1
01.11.2011, 11:35

Не по теме:

KingManiya, смотри тут

1
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143
01.11.2011, 22:25  [ТС]
памирыч все работает ----записывает в файл но не работает проверка на повторяющиеся элементы, я в книге видел такой блок для этих целей но он почемуто не работал

VB.NET
1
2
3
4
5
6
7
'Затем выполняется проверка на совподение элементов перед записью
For Each item As String In aa
          If Not ListBox1.Items.Contains(item) Then
               MessageBox.Show("Введенные данные уже имеются!!!", aa, MessageBoxButtons.OK)
                Exit Sub
          End If
 Next
может с этим чтото надо сделать
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
01.11.2011, 22:35
Moerte, Я кажись начинаю догонять, о чем ты.
Видишь ли, у меня в коде идет проверка полного совпадения - номер и имя.

То есть на один номер могут быть зарегены разные абоненты.
И с другой стороны, у одного абонента (или тезок-однофамильцев) могут быть разные номера.

Если так, то поддерживаю, я сглупил относительно элементарной логики.
Но в любом случае, щас помочь уже не смогу, может, кто-то подкорректирует это дело, а я буду только завтра в 6 утра по Москве.
1
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143
01.11.2011, 22:37  [ТС]
большой рахмет
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
02.11.2011, 07:58
По - хорошему, организовать бы коллекцию структур. Но обойдемся еще двумя коллекциями, хранящими номера и абонентов.
Чтобы сократить код, пришлось писать на фреймворке 3,5, из-за отсутствия во втором функции Contains. Класс немного изменился. Критично совпадение номеров (программа не станет сохранять такие записи) и некритично совпадение фамилий (все те же тезки-однофамильцы)
VB.NET
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Public Class Form1
    Structure MyText
        Public stroka1 As String
        Public stroka2 As String
        Public Overrides Function ToString() As String
            Return stroka1 & " -- " & stroka2
        End Function
    End Structure
    Dim NumberCol, NameCol As New List(Of String)
    Dim struct As MyText
    Dim fName As String = "Phones.txt"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            With struct
                .stroka1 = TextBox1.Text
                .stroka2 = TextBox2.Text
            End With
            If NumberCol.Contains(struct.stroka1) Then
                MsgBox("Номер " & struct.stroka1 & " уже есть в справочнике", MsgBoxStyle.Exclamation)
                Exit Sub
            End If
            If NameCol.Contains(struct.stroka2) Then
                If MsgBox("Абонент " & struct.stroka2 & " уже есть в справочнике. Все равно добавить запись?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.No Then
                    Exit Sub
                End If
            End If
            ListBox1.Items.Add(struct.ToString)
            My.Computer.FileSystem.WriteAllText(fName, struct.ToString & vbCrLf, True)
            NumberCol.Add(struct.stroka1) : NameCol.Add(struct.stroka2)
            TextBox1.Clear() : TextBox2.Clear()
        End If
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IO.File.Exists(fName) Then
            ListBox1.Items.AddRange(IO.File.ReadAllLines(fName, System.Text.Encoding.Default))
            Dim Spl() As String = {" -- "}
            Dim Lines() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
            For Each Line As String In Lines
                NumberCol.Add(Line.Split(Spl, StringSplitOptions.None)(0))
                NameCol.Add(Line.Split(Spl, StringSplitOptions.None)(1))
            Next
        End If
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Close()
    End Sub
End Class
Добавлено через 57 минут
Альтернатива, мне больше нравится. Сериализацию юзать не стал, чтоб в файле было все понятно:
VB.NET
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Public Class Form1
    Structure MyText
        Public stroka1 As String
        Public stroka2 As String
        Public Overrides Function ToString() As String
            Return stroka1 & " -- " & stroka2
        End Function
    End Structure
    Dim Ind As Integer
    Dim MyCol As New List(Of MyText)
    Dim struct As MyText
    Dim fName As String = "Phones.txt"
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text <> "" And TextBox2.Text <> "" Then
            If ContData(TextBox1.Text, TextBox2.Text) = 1 Then MsgBox("Номер " & MyCol(Ind).stroka1 & " уже зарегистрирован на абонента " & MyCol(Ind).stroka2, MsgBoxStyle.Exclamation) : Exit Sub
            If ContData(TextBox1.Text, TextBox2.Text) = 2 Then
                If MsgBox("Абонент " & MyCol(Ind).stroka2 & " уже является владельцем номера " & MyCol(Ind).stroka1 & vbCrLf & "Это разные люди?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub
            End If
            AddNewData(TextBox1.Text, TextBox2.Text)
            ListBox1.Items.Add(struct.ToString)
            My.Computer.FileSystem.WriteAllText(fName, struct.ToString & vbCrLf, True)
            TextBox1.Clear() : TextBox2.Clear()
        End If
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IO.File.Exists(fName) Then
            ListBox1.Items.AddRange(IO.File.ReadAllLines(fName, System.Text.Encoding.Default))
            Dim Spl() As String = {" -- "}
            Dim Lines() As String = IO.File.ReadAllLines(fName, System.Text.Encoding.Default)
            For Each Line As String In Lines
                AddNewData(Line.Split(Spl, StringSplitOptions.None)(0), Line.Split(Spl, StringSplitOptions.None)(1))
            Next
        End If
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Close()
    End Sub
 
    Function ContData(ByVal InpData1 As String, ByVal InpData2 As String) As Integer
        For I As Integer = 0 To MyCol.Count - 1
            If MyCol(I).stroka1 = InpData1 Then Ind = I : Return 1
            If MyCol(I).stroka2 = InpData2 Then Ind = I : Return 2
        Next
        Return 0
    End Function
 
    Sub AddNewData(ByVal str1 As String, ByVal Str2 As String)
        struct = New MyText
        With struct
            .stroka1 = str1
            .stroka2 = Str2
        End With
        MyCol.Add(struct)
    End Sub
End Class
Выбирай любой.

Не по теме:

Сильно не тестил

0
 Аватар для Moerte
2 / 2 / 0
Регистрация: 20.06.2011
Сообщений: 143
06.11.2011, 19:52  [ТС]
памирыч ваш код посмотрел мой преподователь и скозал что должно все работать а почему не работает не понятно потом за место

VB.NET
1
2
3
4
           With struct
                .stroka1 = TextBox1.Text
                .stroka2 = TextBox2.Text
            End With
записал это -(хотя это сказал тоже самое) и все стало работать, может зависит от версии языка
у меня 2008 Express Edition

VB.NET
1
2
            struct.stroka1 = TextBox1.Text
            struct.stroka2 = TextBox2.Text
1
 Аватар для KingManiya
203 / 203 / 13
Регистрация: 14.10.2011
Сообщений: 227
07.11.2011, 06:19
VB.NET
1
2
3
4
With struct
 .stroka1 = TextBox1.Text
 .stroka2 = TextBox2.Text
 End With
записал это -(хотя это сказал тоже самое) и все стало работать, может зависит от версии языка
у меня 2008 Express Edition

VB.NET
1
2
 struct.stroka1 = TextBox1.Text
 struct.stroka2 = TextBox2.Text
Это конструкция vb, так что действительно странно, что не работает. Язык от студии тоже не меняется. Меняется кое-что только от года студии и номера фрамворка.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
07.11.2011, 06:25
Moerte, у меня тоже 2008, только не экспресс.
Да и как сказал KingManiya, это конструкция VB, более того, пришедшая из ранних версий Basic'а.

Если кроме этого в коде больше ничего не менялось, то это не то что странно, а, я б сказал, неприятно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2011, 06:25
Помогаю со студенческими работами здесь

Создать файл «Телефонный справочник».
Создать файл «Телефонный справочник». Структура записи: ФИО Адрес (улица, номер дома, квартира) Номер телефона. Записи упорядочены...

Телефонный справочник - вывод на экран в виде таблицы
Подскажите,пожалуйста,как сделать такой вид вывода информации в БД? Как написать эту процедуру? Подскажите,кто знает или дайте ссылки,где...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru