Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281

Адресная книга в консоли - как улучшить приложенный код

07.01.2012, 00:56. Показов 6828. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот задание:

Во всех вариантах предусматривается вначале создание какого-то алгоритма обработки заданной сущности (например, разбор строки с сущностью и, наоборот, формирование строкового представления сущности и другие, в зависимости от варианта), затем создание функций, модулей и конкретного класса. Рекомендуется привести исходный процедурный вариант реализации алгортима, а затем - вариант с классом.
Адреса (страна, город, улица и пр.)
Можно использовать правила формирования алресов согласно классификатору КЛАДР (хотя бы примерно). Для каждого элемента адреса используются свои сокращения (р-н, ул, кв и прочее). Основные алгоритмы - разбор строки с выделением и проверкой адреса, вывод адреса в строку, с разной степенью подробности (пустые части адреса не выводить либо - выводить все и пр.).

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

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
32
33
34
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Zapis tmp = new Zapis();
            Console.WriteLine("введите адрес: улица, дом, квартира, фамилия");
            tmp = razbor.razbienie(Console.ReadLine());
            List<Zapis> records = new List<Zapis>();
            records.Add(tmp);
 
            Console.WriteLine("Please input first name for search\n");
            string searchName = Console.ReadLine();
 
            for (int i = 0; i < records.Count; i++)
            {
                if (records[i].firstName == searchName)
                {
                    Console.WriteLine("Фамилия:" + records[i].firstName);
                    Console.WriteLine("Улица: " + records[i].street);
                    Console.WriteLine("Дом: " + records[i].numberOfHome.ToString());
                    Console.WriteLine("Квартира: " + records[i].numberOfRoom.ToString());
 
                    Console.ReadKey();
                }
            }           
        }
    }
}
класс запись
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    public class Zapis
    {
        public string street;
        public int numberOfHome;
        public int numberOfRoom;
        public string firstName;
    }
}
}
разбор строки

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    static class  razbor
    {
        public static Zapis razbienie(string vvedennayaStroka)
        {
            char [] X = { ',', ' ' };
            string[] segments;
            segments = vvedennayaStroka.Split(X);
            Zapis z = new Zapis();
            z.street = segments[0];
            z.numberOfHome = Convert.ToInt32(segments[1]);
            z.numberOfRoom = Convert.ToInt32(segments[2]);
            z.firstName = segments[3];
            return z;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2012, 00:56
Ответы с готовыми решениями:

Outlook 2010. Адресная книга. Как поставить фамилии на первое место ?
В адресной книге Outlook вечная путаница имен и фамилий. Некоторые контакты предтставлены Фамилия - Имя, а некоторые Имя-...

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

Адресная книга
Доброе утро. Итак, сначала ситуация, в кратце: Есть Webshere Portal 6.0.1 и Domino Server 7.0.1. Портал настроен на аутентификацию...

62
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
09.01.2012, 00:27
Студворк — интернет-сервис помощи студентам
1. ок
2, 4. ну да. так же как вместо глупых вопросов и ответов на оскорбления можно было книги почитать и интернет пошерстить да и какой из меня мастер кодирования? так, начинающий. просто с желанием.
3. уважение к мастерам и энтузиастам = попытка понять и научиться. этого нет.
5. надо, но надоело

2модераторы: больше оффтопить в теме не буду.
0
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 281
09.01.2012, 14:13  [ТС]
Ваше мнение тоже имеет право на существование. И все же - Вы не знаете ситуации.

Добавлено через 13 часов 41 минуту
Цитата Сообщение от KarmaMaker Посмотреть сообщение
Он уже организован. все что тебе осталось заменить "Пупкин" на Console.ReadLine().

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

Вот измененный код:
C#
1
2
3
4
5
6
7
8
9
10
11
Console.WriteLine("Введити фамилию");
            Console.WriteLine();
            List<AddressBookRecord> foundRecords = GetRecordsByLastName(Console.ReadLine(), records);
 
            foreach (AddressBookRecord record in foundRecords)
            {
                Console.WriteLine(record);
            }
 
            Console.ReadLine();    
        }
0
 Аватар для KarmaMaker
91 / 90 / 11
Регистрация: 09.12.2011
Сообщений: 233
10.01.2012, 00:26
Привет снова. я подумал немного и решил написать реализацию как я себе ее представляю и выложить что называется "as is" если это то, чо нужно - хорошо, если нет, ты волен ее изменять по своему усмотрению. Если возникнут какие либо вопросы, - пиши, если они не будут глупыми, я постараюсь на них ответить

Итак код:

Главный класс:

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
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace justForFun
{
    class MainClass
    {
        private static AddressBook addressBook;
        public static void Main()
        {
            addressBook = new AddressBook();
            TextReader textReader = new StreamReader("AddressBook.xml");
            addressBook.Load(textReader);
            textReader.Close();
            
            Console.WriteLine("Введите команду ( Для получения списка команда введите Help )");
            while (true)
            {
                string command = Console.ReadLine().ToLower();
                Console.WriteLine("------------------------------------");
                switch (command)
                {
                    case "help": ShowHelp(); break;
                    case "showall": ShowAllRecords(); break;
                    case "add": AddRecord();  break;
                    case "remove": RemoveRecord();  break;
                    case "findrecords": FindRecords();  break;    
                    case "quit": Quit(); return;
                    default: YouDoItWrong(command); break; 
                }
                Console.WriteLine("------------------------------------\n");
            }
 
        }
 
        private static void ShowHelp()
        {
            Console.WriteLine("Программа поддерживает следующие команды:");
            Console.WriteLine("------------------------------------");
            Console.WriteLine("{0,-10} -- вывод информации о командах", "Help");
            Console.WriteLine("{0,-10} -- вывод на консоль всех записей в адресной книге", "ShowAll");
            Console.WriteLine("{0,-10} -- добавление записи в адресную книгу", "Add");
            Console.WriteLine("{0,-10} -- поиск по всем адресам, вывод его результатов на консоль", "FindRecord");
            Console.WriteLine("{0,-10} -- завершение работы программы", "Quit");
        }
 
        public static void AddRecord()
        {
            Console.WriteLine("Введите название улицы");
            string street = Console.ReadLine();
            Console.WriteLine("Введите номер дома");
            int house;
            while (!Int32.TryParse(Console.ReadLine(), out house))
            {
                Console.WriteLine("Попробуйте еще раз");
            }
            Console.WriteLine("Введите номер квартиры");
            int apartment;
            while (!Int32.TryParse(Console.ReadLine(), out apartment))
            {
                Console.WriteLine("Попробуйте еще раз");
            }
            Console.WriteLine("Введите фамилию владельца");
            string lastName = Console.ReadLine();
 
            addressBook.Add(new AddressBookRecord(street, house, apartment, lastName));
        }
 
        public static void RemoveRecord()
        {
            Console.WriteLine("Реализация пока не написана, ибо не знаю, как лучше поступить.");
        }
 
        private static void ShowAllRecords()
        {
            Console.WriteLine("Все записи адресной книги");
            foreach (AddressBookRecord record in addressBook.GetAllRecords())
            {
                Console.WriteLine(record);
            }
        }
 
        private static void FindRecords()
        {
            Console.WriteLine("Введите фамилию владельца");
            string lastName = Console.ReadLine();
 
            foreach (AddressBookRecord record in addressBook.FindRecords(lastName))
            {
                Console.WriteLine(record);
            }
        }
 
        private static void Quit()
        {
            TextWriter textWriter = new StreamWriter("AddressBook.xml");
            addressBook.Save(textWriter);
            textWriter.Close();
            Console.WriteLine("Данные адресной книги сохранены в файле AddressBook.xml");
            Console.WriteLine("Нажмите Enter, чтобы завершить выполнение программы");
            Console.ReadLine();
        }
 
        private static void YouDoItWrong( string command ) 
        {
            Console.WriteLine("Введена недопустимая команда \"{0}\"", command );
            Console.WriteLine("Введите Help, для получения списка поддерживаемых команд");
        }
    }
}
Класс Адресная книга:

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
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
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Xml.Serialization;
 
namespace justForFun
{
    class AddressBook
    {
        public AddressBook()
        {
            Records = new List<AddressBookRecord>();
        }
 
        private List<AddressBookRecord> Records;
 
        public void Add(AddressBookRecord record)
        {
            Records.Add(record);
        }
 
        public void Add(List<AddressBookRecord> records)
        {
            Records.AddRange(records);
        }
 
        public void Remove(AddressBookRecord record)
        {
            Records.Remove(record);
        }
 
        public List<AddressBookRecord> FindRecords(string lastName)
        {
            List<AddressBookRecord> result = new List<AddressBookRecord>();
            foreach (AddressBookRecord record in Records)
            {     
                if ( record.LastName == lastName )
                {
                    result.Add(record);
                }
            }
            return result;
        }
 
        public List<AddressBookRecord> GetAllRecords()
        {
            return Records;
        }
 
        public void Save( TextWriter textWriter )
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<AddressBookRecord>));
            serializer.Serialize(textWriter, Records);
        }
 
        public void Load( TextReader textReader )
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<AddressBookRecord>));
            Records = (List<AddressBookRecord>)serializer.Deserialize(textReader);
        }
    }
}
Класс запись:
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
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace justForFun
{
    [Serializable]
    public class AddressBookRecord// Название класса наверное следует заменить
    {
        public string Street { get; set; }
        public int House { get; set; }
        public int Apartment { get; set; }
        public string LastName { get; set; }
        public AddressBookRecord(string street, int house, int apartment, string lastName)
        {
            Street = street;
            House = house;
            Apartment = apartment;
            LastName = lastName;
        }
        
        public AddressBookRecord()
        {
 
        }
 
        override public string ToString()
        {
            string PersonInfo = "Фамилия \t" + LastName + "\n"
                     + "Улица \t\t" + Street + "\n" // Выведи все параметры
                     + "Номер дома \t" + House + "\n"
                     + "Номер квартиры \t" + Apartment + "\n";
            return PersonInfo;
        }
    }
}
Добавлено через 2 минуты
Рядом с exe файлом должен лежать AddressBook.xml с содержанием следующего вида:

XML
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
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAddressBookRecord xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AddressBookRecord>
    <Street>Смоленская</Street>
    <House>16</House>
    <Apartment>12</Apartment>
    <LastName>Пупкин</LastName>
  </AddressBookRecord>
  <AddressBookRecord>
    <Street>Пушкина</Street>
    <House>5</House>
    <Apartment>95</Apartment>
    <LastName>Селедкин</LastName>
  </AddressBookRecord>
  <AddressBookRecord>
    <Street>Володарского</Street>
    <House>33</House>
    <Apartment>63</Apartment>
    <LastName>Краснов</LastName>
  </AddressBookRecord>
  <AddressBookRecord>
    <Street>Краевая</Street>
    <House>8</House>
    <Apartment>92</Apartment>
    <LastName>Стрелецкий</LastName>
  </AddressBookRecord>
  <AddressBookRecord>
    <Street>Бехтерева</Street>
    <House>14</House>
    <Apartment>11</Apartment>
    <LastName>Пупкин</LastName>
  </AddressBookRecord>
</ArrayOfAddressBookRecord>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2012, 00:26

Адресная книга
AlphaSkin, RichView.

адресная книга на C#
Подскажите, пожалуйста. Нужно написать записную книжку, на подобие стандартной адресной книги windows. С одной стороны treeview, в котором...

Адресная книга
В Виндах у почтовых программ, адрессная книга должна храниться в каком-то файле (наверное). Не подскажете в каком именно. Плиззз. ...

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

Адресная книга
Дали задание создать класс с добавлением, удалением и выводом знчаений на экран...и это все в динамическом массиве да и еще ассоциативно. ...


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

Или воспользуйтесь поиском по форуму:
63
Ответ Создать тему
Новые блоги и статьи
Скрипты 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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru